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

Auf externes Programm warten... machmal.

 

DeepFritz
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 31.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2015, 13:15     Titel: Auf externes Programm warten... machmal.
  Antworten mit Zitat      
Hallo zusammen,

mein Problem ist eigentlich zwar simpel, es erklärt sich aber ein bisschen umständlich. Ich versuche es mal.

Folgendes Ziel:

ich möchte aus Matlab heraus mehrere parallel rechnende Instanzen einer Simulationssoftware starten. Nach Ablauf der Simulationen sollen die Ergebnisse in einem Postprocessor (ebenfalls ein externes Profgramm) aufbereitet werden. Auch diese Aufbereitung in den Postprocessoren soll parallelisiert erfolgen. Die Postprocessoren sollen ebenfalls von Matlab gestartet werden.

Mein Problem ist nun folgendes:
Starte ich die Simulation (mit "system") ohne ein angehängtes "&", wartet Matlab bis die Simulation durchgelaufen ist, bevor es die nächste Instanz startet. Die Parallelisierung der Rechnungen funktioniert so also nicht.

Starte ich die Simulationen mit angehängtem "&", kann ich zwar mehrere Simulationsinstanzen unmittelbar nacheinander starten, die Parallelisierung der Simulationen funktioniert also.
Aber: wie sorge ich dafür, dass die Postprozessoren dann erst starten, wenn die jeweiligen Simulationen durchgelaufen sind?
Die Dauer der Simulation ist leider nicht vorhersehbar und die verschiedenen Simulationsinstanzen können auch stark unterschiedliche Laufzeiten haben.


Was ich erreichen muss ist also, dass Matlab eine Simulationsinstanz startet und währenddessen normal weiter läuft, dass aber andererseits der Postprocessor erst gestartet wird, wenn die Simulationsinstanz beendet wurde.

Könnt ihr mir da evtl helfen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.08.2015, 13:30     Titel:
  Antworten mit Zitat      
Hallo,

falls die Ergebnisse beispielsweise in einer Datei abgespeichert werden sollen, könnte man abfragen, ob die Datei bereits existiert.

Code:
while ~exist('results.txt', 'file')
pause(1)
end


Ansonsten müsstest du uns sagen, woran man dann erkennen kann, ob die Simulation beendet ist.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 31.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2015, 11:16     Titel:
  Antworten mit Zitat      
Vielen Dank erstmal!

Prinzipiell funktioniert das so weit. Allerdings habe ich jetzt das Problem, dass die Erzeugung der Datei, in der die Ergebnisse gespeichert werden, sehr lange dauert. Die Dauer ist leider auch nicht einheitlich. Bei manchen Rechnungen dauert es nur zwei, drei Sekunden, bei anderen geht schonmal eine halbe Minute oder mehr in's Land.
Gibt es evtl noch eine Möglichkeit zu prüfen, ob eine Datei gerade von einem anderen Programm geöffnet ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.08.2015, 11:30     Titel:
  Antworten mit Zitat      
Hallo,

da kann man höchstens sowas versuchen:

Code:
while ~exist('results.txt', 'file')
pause(1)
end

while 1
f = fopen('results.txt', 'a');
if f > 0 % Datei kann zum Schreiben geöffnet werden
close(f);
break
end
pause(1)
end


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 31.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2015, 18:08     Titel:
  Antworten mit Zitat      
Das hat leider nicht funktioniert. Sad
Anscheinend kann Matlab die Datei auch öffnen/schreiben, wenn sie noch gar nicht fertiggestellt ist.

Ich habe den Aufruf des Post-Prozessors jetzt in den Solver der Simulationssoftware ausgelagert. Prinzipiell habe ich das Problem damit aber nur verschoben, da ich die Ergebnisse aus dem Post-Prozessor ja nach Matlab importieren muss und auch das erst tun kann, nachdem der PostProzessor sie (vollständig) in ein File geschrieben hat.

Das Problem ist dort weniger gravierend, weil das Ergebnis-File des Postprozessors wesentlich schneller geschrieben wird als das des Solvers. Da reicht es, wenn ich ein
pause(1)
einbaue.

Sehr sympathisch ist mir diese Lösung aber nicht. Schließlich reicht dann schon eine kurze Störung (z.B. weil die Festplatte gerade unplanmäßig mit was Anderem beschäftigt ist), um den kompletten Programmablauf zu gefährden.

Wenn Du also noch weitere Ideen hast, immer her damit. Smile
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.