|
|
Probleme mit parfor und struct |
|
Max Classic |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.05.2019, 14:25
Titel: Probleme mit parfor und struct
|
|
|
|
|
Hallo Leute,
ich möchte in Matlab eine umfangreiche Rechnung durchführen welche als Daten zwei Structures hat. In beiden Structures sind mehrere Werte gespeichert die für die Berechnung benötigt werden. Durch zwei Schleifen sollen beide Structures mit einander verrechnet werden. Sprich struct1(1) mit strucht2(1 bis n), strucht1(2) mit struct2(1 bis n), ..., struct(m) mit struct2(1 bis n).
Da die Berechnung umfangreich wird, wollte ich mit parfor arbeiten um schneller rechnen zu können. Bei der Nutzung von parfor müssen aber mehrere Dinge beachtet werden und ich bin bis jetzt leider noch nicht zu einer Lösung gekommen.
Hier mal ein Code, wie ich mir gewünscht hätte, dass es funktioniert.
Mein zweiter Lösungsansatz funktioniert, ist aber sehr langsam. Die parfor Schleife ist langsamer als eine for Schleife. Das liegt an dem:
ich weiß bloß nicht, wie ich die Daten sonst aus der Schleife bekomme.
Ich bin über sämtliche Anregungen, Tipps, Denkhilfen dankbar.
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 02.05.2019, 15:40
Titel:
|
|
Hallo,
der zweite Ansatz ist sinnvoll. Man kann höchstens die beiden Zeilen in eine kombinieren:
Wie lange ist denn die Gesamtlaufzeit des tatsächlichen Codes?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Max Classic |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.05.2019, 08:03
Titel:
|
|
Danke für deine Antwort. Leider ändert die vereinfachte Schreibweise nichts an der Geschwindigkeit.
Mein eigentliches Programm braucht mit parfor ca. 30 s und als for ca. 12s.
Da dieses Programm aber immer umfangreicher werden soll, muss ich jetzt schon eine vernünftige Basis aufbauen.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 03.05.2019, 09:03
Titel:
|
|
Hallo,
wie viele Kerne hat der Rechner?
Ist bei den 30 Sekunden die Zeit für das Öffnen des Parallel Pool enthalten oder nicht? Falls enthalten, mal vorab den Parallel Pool öffnen (z.B. mit
parpool
) und dann die Zeitmessung durchführen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Max Classic |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.05.2019, 07:56
Titel:
|
|
Hallo Harald,
den Parallel Pool habe ich vorab geöffnet, also nicht in der Zeit enthalten. Der Prozessor hat 4 Kerne.
MfG
Max
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 06.05.2019, 08:06
Titel:
|
|
Hallo,
um das näher zu untersuchen, müsste man das konkrete Beispiel oder ein Beispiel, anhand dessen sich das Verhalten reproduzieren lässt sehen. Alternative: Technischer Support.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 16.05.2019, 13:51
Titel: Re: Probleme mit parfor und struct
|
|
Hallo Max Classic,
Das ist wegen der fehlenden Pre-Allocation extrem nachlässig mit den Resourcen. Besser:
Dass das in einer
parfor
Schleife aufgerufen wird, sieht erst mal sinnfrei aus, weil die Daten in "ausgabe_z" immer wieder überschrieben werden. Hier wäre ein realistisches Beispiel angebrachter.
So kleine Funktionen sind effizienter, wenn sie direkt im Code eingefügt werden. Der Overheader zum Aufruf der Funktion kann so gespart werden.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|