I use parpool and parsim, but only 1 worker 'works' instead of 4.
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Dimosthenis Michaloudis
el 9 de Dic. de 2023
Comentada: Dimosthenis Michaloudis
el 13 de Dic. de 2023
I have this Simulink file that runs for 3.84 s. Each 0.04 s. the data changes. I want to use parsim to make the simulation faster. I wrote the code below, but it seems that it uses only one worker (at least only one simulation appears in the manager). Is there any change I should do, or this is the correct way, because its slower than the simple sim command.
% Create a parallel pool if not already available
if isempty(gcp('nocreate'))
parpool; % Create a parallel pool
end
% Load Model & Simulation Input
model = 'zigzag_example_matlab';
Simulink.BlockDiagram.buildRapidAcceleratorTarget(model);
simIn = Simulink.SimulationInput(model);
%Simulation
tic
simout = parsim(simIn, 'TransferBaseWorkspaceVariables', 'on', 'ShowSimulationManager', 'on');
toc
2 comentarios
Edric Ellis
el 11 de Dic. de 2023
parsim allows you to run multiple simulations in parallel - you should split your data up into pieces, and then run each piece as a separate simulation.
Respuestas (1)
Walter Roberson
el 11 de Dic. de 2023
Movida: Walter Roberson
el 12 de Dic. de 2023
You appear to be building a scalar simIn
You should be constructing an array of simulation input objects
The parsim documentation has the example,
FeedTempSweep = 250:10:300;
for i = length(FeedTempSweep):-1:1
in(i) = Simulink.SimulationInput('CSTR');
in(i) = in(i).setVariable('FeedTemp0',FeedTempSweep(i));
end
out = parsim(in, 'ShowSimulationManager', 'on')
Here, 'CSTR' is the name of the model that is to be run.
Each member of the in array defines one simulation to be run. parsim() runs several of the entries in parallel.
5 comentarios
Edric Ellis
el 13 de Dic. de 2023
It does indeed sound like something isn't quite right there. Are you comparing the parsim time to something like this?
Sweep = 0.00:0.04:3.84;
for i = length(Sweep):-1:1
SampleTime = Sweep(i);
[t, y] = sim(model);
end
Ver también
Categorías
Más información sobre Manual Performance Optimization en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!