Verfasst am: 28.11.2020, 13:53
Titel: Optimierung parallel mit Unterfunktionen parallel
Hi Leute,
ich hoffe, der Titel machts einigermaßen klar. Worum gehts? Ich benutze die surrogateopt-Funktion mit der Einstellung "use parallel". Das funktioniert soweit super. Um noch schneller zu optimieren, möchte ich Unterfunktionen in der Zielfunktion gleichzeitig abarbeiten lassen, da sie unabhängig von einander sind und recht viel Zeit beanspruchen. Geht das? Die Worker sind ja alle beschäftigt, ist also "spmd" noch sinnvoll?
Ansonsten würde es mir auch reichen, wenn die Befehle über system() gleichzeitig an das System übergeben und gleichzeitig bearbeitet werden könnten. Die Die Übergabe mehrerer Befehle mit "&" werden die Befehle nacheinander abgearbeitet.
Falls ihr mehr Details braucht:
In der Zielfunktion werden Simulationsskripte für ein anderes Programm vorbereitet. Hier werden drei Lastfälle voneinander unterschieden und momentan nacheinander simuliert. Der Auftrag zur Simulation wird über die Funktion system() übergeben und dann gewartet, bis die Ergebnisse da sind. Dann folgt die nächste Simulation. Die Ergebnisse werden zum Schluss mit realen Messwerten abgeglichen und daraus wird der Fehler berechnet. Da die Simulationen recht viel Zeit in Anspruch nehmen (ca. 10 min.), will ich auch das parallelisieren. Die Simulationen laufen extern ab. D.h. der lokale Computer wird durch die Simulationen nicht belastet.
skript1(a,b); % Vorbereiten des Simulationsskripts für den Lastfall 1
skript2(a,b); % Vorbereiten des Simulationsskripts für den Lastfall 2
skript3(a,b); % Vorbereiten des Simulationsskripts für den Lastfall 3
spmd% Alles gleichzeitig abarbeiten - so sinnvoll? switch labindex
[status1, cmdout1]) = system(cmd1);
switch labindex
[status2, cmdout2]) = system(cmd2);
switch labindex
[status3, cmdout3]) = system(cmd3);
end end
% oder
[status, cmdout] = system(cmd1 & cmd2 & cmd3); % Alles gleichzeitig simulieren, geht so aber nicht
c1 = getData(a,b);
c2 = getData(a,b);
c3 = getData(a,b);
Um noch schneller zu optimieren, möchte ich Unterfunktionen in der Zielfunktion gleichzeitig abarbeiten lassen, da sie unabhängig von einander sind und recht viel Zeit beanspruchen. Geht das? Die Worker sind ja alle beschäftigt, ist also "spmd" noch sinnvoll?
Erst mal ist das nicht sinnvoll. Vor allem ist innerhalb MATLAB auch nur eine Ebene der expliziten Parallelisierung möglich.
Wenn du ans Ende des an system übergebenen Befehls & setzt, dann blockiert die Ausführung nicht die weitere Abarbeitung. Das ist also an sich sinnvoll. Wird [status, cmdout] später verwendet? Wenn nicht, dann würde ich es auch nicht zurückgeben.
getData holt vermutlich die Ergebnisse ab? Wichtig wird dann sein sicherzustellen, dass das nicht ausgeführt wird, bevor die Simulation abgeschlossen ist.
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 ;)
AlexPB124
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.11.2020, 21:28
Titel:
Erstmal danke für die Antwort Harald
Harald hat Folgendes geschrieben:
Wenn du ans Ende des an system übergebenen Befehls & setzt, dann blockiert die Ausführung nicht die weitere Abarbeitung. Das ist also an sich sinnvoll.
Ich bin gerade dabei, das umzusetzen, und habe ein Problem. Ich verwende PuTTY (plink), um mich mit einem Rechencluster zu verbinden. Ich logge mich ein und übergebe den Auftrag zu simulieren. Das steckt in der cmd1 etc. drin. Mit dem ' &' am Ende taucht aber das Windows-cmd-Fenster auf und ich muss ein mal Enter drücken, um fortzufahren. Was macht dieses ' &' denn hier genau? Gibt es einen Weg, dass das nicht passiert und einfach wie vorher "stumm" sein Job gemacht wird?
Harald hat Folgendes geschrieben:
getData holt vermutlich die Ergebnisse ab? Wichtig wird dann sein sicherzustellen, dass das nicht ausgeführt wird, bevor die Simulation abgeschlossen ist.
Eine Idee habe ich umgesetzt, habe es aber wegen obigen Problem noch nicht ausprobiert.
das & kenne ich so, dass dadurch die Ausführung sofort fortgesetzt wird. Dass man da erst mal Enter drücken muss, ist dann natürlich kontraproduktiv. Kann das am Befehl liegen?
Es wäre vermutlich deutlich leichter, die gesamte Anwendung auf den Rechencluster zu schieben (also auch MATLAB dort auszufü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 ;)
AlexPB124
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 01.12.2020, 12:33
Titel:
Mag sein, dass es am Befehl liegt. Es ist nur seltsam, dass ich erst mit dem " &" aufgefordert werde, mit Enter zu bestätigen. Es soll aber schon so bleiben und nicht ausschließlich über das Rechencluster laufen.
Falls sich jemand mit PuTTY / plink auskennt, der Code lautet:
Die Variablen sind hoffentlich selbsterklärend. Die Variable "Auftrag" enthält den Auftrag zur Simulation, der dem Rechencluster übergeben wird. Wie gesagt, ohne " &" wird der Auftrag stumm bearbeitet. Mit muss ich die "session" mit Enter bestätigen. Das geschieht direkt nach dem Einloggen.
Falls es noch andere Ideen gibt, bitte her damit.
Viele Grüße,
Alex
AlexPB124
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 01.12.2020, 12:48
Titel:
So ich habs. Mit "-batch" werden alle interaktiven Eingabeaufforderungen deaktiviert. Ich probiers mal aus und melde mich ggf. wieder. Aber danke dir für deine Hilfe!
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
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.