WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Prolem mit parfor Schleife

 

Daniel663

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2014, 12:37     Titel: Prolem mit parfor Schleife
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine MATLAB Funktion mit einer verschachtelten FOR schleife geschrieben. Die Funktion sieht grob so aus:

Code:
for Z=1:X
 for S=1:Y
  for t=1:z
    Unterfunktionsaufruf 1
    Unterfunktionsaufruf 2
    Unterfunktionsaufruf 3
    Schreiben der Ergebnisse in Zielarray
   end
  end
end


Dazu ist zu sagen, dass die Unterfunktion 1 in der inneren Schleife einen Output generiert, welcher einen Input für den Unterfunktionsaufruf 2 darstellt.

Da die Berechnung relativ lange dauert, würde ich den Ablauf gerne parallelisieren. Dazu weiß ich jetzt jedoch nicht so recht wo ich ansetzen soll. Macht man das bei der äußersten Schleife oder bei der innersten?

Probeweise habe ich mal in der inneren Schleife das for durch parfor ersetzt. Daraufhin bekomme ich die Fehlermeldung, dass bei einer Variable (Struct Array) nicht klar ist, ob es sich um eine Variable oder eine Funktion handelt. Der Aufruf der Variable erfolgt über
struct.variable.

Könnt ihr mir diesbezüglich ein paar Tips geben?

Viele Grüße
Damiel


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.09.2014, 12:55     Titel:
  Antworten mit Zitat      
Hallo,

typischerweise würde ich versuchen, parfor auf der äußersten Ebene anzuwenden. Das minimiert die Kommunikation zwischen den Prozessen. Oft ist dies jedoch nicht möglich, z.B. da die Iterationen nicht voneinander unabhängig sind.

Schau dir doch mal die Tutorials hier an, eines (Deeper Insights into Using Parfor) ist speziell zu diesem Thema
http://www.mathworks.de/products/pa.....-computing/tutorials.html

Wenn dir das nicht weiterhilft, bitte ein reproduzierbares Beispiel zur Verfügung stellen.

Eine andere Überlegung wäre übrigens, ob man nicht zumindest eine oder zwei dieser for-Schleifen durch Vektorisierung vermeiden könnte. Aber auch dazu müsste man den Code sehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel663

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2014, 13:35     Titel:
  Antworten mit Zitat      
Ich habe mal den vollständigen Quellcode der Schleife angehängt.
Die Funktion des Codes lässt sich wie folgt beschreiben:

Für jedes Element des Arrays U1 sollen die Funktionen wie in der innersten Schleife durchgeführt werden. Ich bin nicht sicher ob an dieser Stelle eine Vektorisierung möglich ist, da eine mehrere Funktionen aufgerufen und ausgeführt werden. Wenn dies funktionieren sollte bin ich über Tips sehr dankbar.

Code:
for Z=state_parameter(1,1):state_parameter(1,3):state_parameter(1,2) % Für alle Z
    for V=state_parameter(2,1):state_parameter(2,3):state_parameter(2,2) % Für alle V
        for t=state_parameter(3,1):state_parameter(3,3):(state_parameter(3,2)-state_parameter(3,3))
            state = [Z V t]';            
            [ P, S1, Z1 ] = trm( state,state_parameter,aktion,mdp );
            i = matchU(state, state_parameter);
            [ Rs, Us ] = rwd( preis,U,S1,aktion,state_parameter,i,Z1,mdp );
            [U1(i(1),i(2),i(3)), a(i(1),i(2),i(3))] =  max(Rs + mdp.gamma*(Us'*P)');            
        end
    end
end
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.09.2014, 14:02     Titel:
  Antworten mit Zitat      
Hallo,

hast du die Vorschläge aus dem Video versucht?

Die Weise, in der U1 und a hier beschrieben werden, dürfte problematisch sein.

Was sind trm, matchU und i?
Was ist state_parameter?

Bei meiner Bitte um Code lag die Betonung auf reproduzierbar, d.h. ich möchte den Code bei mir testen können.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.