|
|
Parallelisierung von Simulink Modellen |
|
Nascar |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.02.2024, 17:59
Titel: Parallelisierung von Simulink Modellen
|
|
|
|
|
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!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 28.02.2024, 08:45
Titel:
|
|
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 ;)
|
|
|
Nascar |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.03.2024, 12:55
Titel: Problem gelößt
|
|
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
|
|
|
|
|
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 - 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.
|
|