Execute run phase of Simulink model in parallel

1 view (last 30 days)
I want to get the output using the function model(t,x,u,'outputs'). I have a large set of inputs, which I normally pass to the model in a for loop. I have already compiled the model before the loop using model([],[],[],'compile'). When I replaced the for with a parfor loop, it does not see the model as 'compiled'. I get the error: Error, 'model' must be compiled before it can be accessed programmatically.
I don't want to compile the model inside the loop as it would make it very slow and destroy the whole purpose of using parallelization. How can I solve this?

Answers (1)

Edric Ellis
Edric Ellis on 3 Oct 2016
You can use parfevalOnAll to run the 'compile' and 'term' phases, like so:
parfevalOnAll(@vdp, 0, [], [], [], 'compile');
parfor t = 1:10
out{t} = vdp(t, [0; 0], [], 'outputs');
end
parfevalOnAll(@vdp, 0, [], [], [], 'term');
  3 Comments
Edric Ellis
Edric Ellis on 5 Oct 2016
Strange. Did it fail the second time in a MATLAB session, or when you restarted MATLAB?
Osama Maqbool
Osama Maqbool on 6 Oct 2016
In the same session. I can't seem to find a pattern on what gives the error. Many a times, I have made it work by deleting the contents of a folder generated automatically, called 'slprj', specifically the subfolder '_jitprj'.

Sign in to comment.

Categories

Find more on Model Compatibility in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!