Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

MATLAB & Tools für die Simulation dynamischer Systeme

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Optimierung parallel mit Unterfunktionen parallel

 

AlexPB124

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2020, 14:53     Titel: Optimierung parallel mit Unterfunktionen parallel
  Antworten mit Zitat      
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.

Code:
function error = zielfunktion(a,b,c)

skript1(a,b); % Vorbereiten des Simulationsskripts für den Lastfall 1
[status, cmdout] = system(cmd1);
c1 = getData(a,b);

skript2(a,b); % Vorbereiten des Simulationsskripts für den Lastfall 2
[status, cmdout] = system(cmd2);
c2 = getData(a,b);

skript3a,b); % Vorbereiten des Simulationsskripts für den Lastfall 3
[status, cmdout] = system(cmd3);
c3 = getData(a,b);

error = (c-c1)^2 + (c-c2)^2 + (c-c3)^2;
 


Was ich gerne hätte:
Code:
function error = zielfunktion(a,b,c)

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);

error = (c-c1)^2 + (c-c2)^2 + (c-c3)^2;
 


Harald
Forum-Meister

Forum-Meister


Beiträge: 22.905
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.11.2020, 15:45     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
AlexPB124

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2020, 22:28     Titel:
  Antworten mit Zitat      
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.

Viele Grüße,
Alex
 
Harald
Forum-Meister

Forum-Meister


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

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
AlexPB124

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2020, 13:33     Titel:
  Antworten mit Zitat      
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:
Code:
[~,~] = system([pfadplink ' ' frontend ' -X -ssh -l ' Benutzer ' -pw ' Passwort ' ' Auftrag ' &']);


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: ---
     Beitrag Verfasst am: 01.12.2020, 13:48     Titel:
  Antworten mit Zitat      
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!
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.