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

ungültiger Index in parfor-Schleifen

 

senmeis
Forum-Guru

Forum-Guru


Beiträge: 301
Anmeldedatum: 09.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2015, 15:49     Titel: ungültiger Index in parfor-Schleifen
  Antworten mit Zitat      
Hi,

mit dem folgenden Code möchte ich die parfor-Schleife verwenden.

Code:

P = zeros(1,5);
n = 1;
parfor i = 1:5
   P(1,n) = i;
   n = n + 1;
end
 

Leider meldet sich ein Fehler:
Zitat:
The variable P in a parfor cannot be classified.


Die Frage ist wie kann eine Varialbe, die ausser der Schleife initialisiert wird, als Index eingesetzt werden?

Owen
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

das ist in dieser Form nicht zulässig, da die Iterationen nicht voneinander unabhängig sind. Das Ergebnis hängt von der Ausführungsreihenfolge der Schleifen ab, und das ist nur sehr eingeschränkt zulässig.
Bei dem Code wird ja auch im Editor schon durch rote Markierung angezeigt, dass dies nicht zulässig ist. Folgendes ginge:
Code:
P = zeros(1,5);
parfor i = 1:5
   P(1,i) = i;
end


Tutorials zu Parallel Computing befinden sich hier.
http://de.mathworks.com/videos/seri.....ting-tutorials-97719.html
Insbesondere der 4. Teil ist empfehlenswert, wenn es um Probleme mit parfor geht.

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

Forum-Guru

Forum-Guru


Beiträge: 301
Anmeldedatum: 09.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2015, 15:59     Titel:
  Antworten mit Zitat      
Verstehe.

Man möchte zusätzlich die Ergebnisse in eine Matrix speichern.

Code:

a = zeros(9,1);
parfor i1 = -1:1
   for i2 = -1:1
      n = (i1+1)*3+i2+2;
      a(n,1) = n;
   end
end
 


Das geht leider wieder schief. Soweit ich verstehe sind Iterationen schon unabhängig. Oder? Ist es überhaupt möglich, in parfor auf eine Matrix zuzugreifen?

Owen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du schreibst die Ergebnisse mit diesem Code aber nicht in eine Matrix, sondern einen Vektor, den du mit verhälnismäßig komplex berechneten Indizes ansteuerst.

Folgendes geht z.B.:
Code:
a = zeros(3,3);
parfor i1 = 1:3
   for i2 = 1:3
      n = (i1-2+1)*3+i2-2+2;
      a(i1, i2) = n;
   end
end


Im Zweifelsfall hilft es, den Inhalt der parfor-Schleife in eine Funktion auszulagern - siehe "Useful Techniques (3)" aus Video 4 des Links und die zugehörigen Beispiele ex2_*.m .

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

Forum-Guru

Forum-Guru


Beiträge: 301
Anmeldedatum: 09.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2015, 17:08     Titel:
  Antworten mit Zitat      
Ist es so, dass der Index einer einzelnen Dimension in der Matrix ‚a‘ nur von einer einzigen Loop-Variable (i1 oder i2) abhängen darf?

In meinem Code wird der erste Index ((i1+1)*3+i2+2) aus zwei Loop-Variablen zusammengesetzt und das ist unzulässig in parfor.

Owen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die technischen Details können wohl nur die Entwickler beantworten.

Mit dem hier und in den Tutorials beschriebenen Techniken sollte allerdings alles umsetzbar sein, dass keine Abhängigkeit zwischen den Iterationen enthält. Wenn du z.B. einen Vektor willst, kannst du ja zunächst eine Matrix erstellen und diese dann umwandeln.

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.