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

Parallelisierung von Simulink Modellen

 

Nascar

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2024, 17:59     Titel: Parallelisierung von Simulink Modellen
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem beim parallelisieren von Simulink modellen.
Vorweg, ohne parallelisierung funktioniert es top.

Ich orientiere mich an diesem skript.
https://de.mathworks.com/help/simul.....nction-within-parfor.html

Ich habe mir eine eigenes modell gemacht und jeder variierbarer parameter ist im struct Modell gespeichert.
dh beispielweise Modell.f_g enthält einen wert, der in irgendeinem Block benötigt wird.
also.
sweepmodell enthällt alle modelle, welche durchgesweept werden sollen.
dh
sweepmodell(1) -> Modell.f_g = 50
sweepmodell(2) -> Modell.f_g = 60

Im punkt 3 werden mit set_param modellparameter eines Blocks übergeben, dass habe ich mit meiner struckt gelößt, weil es viele werte im Modell sind. Daher nutze ich nicht set_param sondern "assignin", um es in den lokalen workspace von simulink zu schreiben. Den weg hatte ich von einem freund empfohlen bekommen und auch im forum gelesen, dass das mit parfor funktioniert.

Ich kann auch (wenn ich es nicht parallelisiere) mit
getVariable(mdlWks,'Modell') die übergebene daten kontrollieren.
Aber sobald ich parallelisiere, findet Simulink die Variablen nicht mehr im Workspace

habt ihr da einen hinweiß, woran das liegen könnte?

%%Start skript
Modell = 'modellname';
mdlName = Modell
spmd
% Setup tempdir and cd into it
currDir = pwd;
addpath(currDir);
tmpDir = tempname([pwd,'/Temp']);
mkdir(tmpDir);
cd(tmpDir);
% Load the model on the worker
load_system(mdlName);
end

parfor idx=1:length(sweepmodell) %wenn parallel ausgeführt werden soll
%for idx=1:length(sweepmodell) % wenn nacheinander ausgeführt werden soll
Modell = sweepmodell(idx).Modell;
load_system(model);
%% hier steht normalerweise set_param %%
mdlWks = get_param(model,'ModelWorkspace');
assignin(mdlWks,'Modell', Modell);


res_simout(idx).out = sim(model, 'SimulationMode', 'normal');
save_system(model);
close_system(model);
end

%%% ende skript



Kleiner Hinweiß: interressanter weise sind die auch ohne
"assignin(mdlWks,'Modell', Modell);" noch alte daten gespeichert.

Vielen dank schonmal für eure hilfe! Smile


Harald
Forum-Meister

Forum-Meister


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

im Link wird ja von parfor/sim abgeraten, und stattdessen zur Verwendung von parsim. Wie wäre es also mit parsim?
Manch einer würde sagen, dass assignin keine Probleme löst, sondern erst recht welche verursacht. ;)

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
 
Nascar

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2024, 12:55     Titel: Problem gelößt
  Antworten mit Zitat      
Hallo,

danke für den Tipp,

ich habe den Fehler gefunden, ich nutze nicht nur Simulink sondern auch Plecs und Plecs kann nicht auf den lokalen Workspace zugreifen, auf den er bei einer nicht parallelen Simulation zugreifen kann. (Parsim o.Ä. ist auch offiziell nicht supportet von Plecs)

Lösung des Problems ist mit den Befehl plecs('set',...) die Variable einzeln zu übergeben.

Ist mühsam aber es funktioniert. Falls es wer nachmachen will, ich habe mich nach der vorlage gerichtet.

https://forum.plexim.com/2942/chang.....ed-inside-matlab-function

LG Chris
 
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 - 2024 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.