Send run created on parallel workers to the Simulation Data Inspector
Simulink.sdi.sendWorkerRunToClient sends the run most
recently generated by the worker to the client MATLAB® and imports the run to the Simulation Data Inspector.
sends the run corresponding to
run to the client MATLAB and imports the run to the Simulation Data Inspector.
Manually Send Runs from Parallel Workers to the Simulation Data Inspector
This example shows how to use
Simulink.sdi.sendWorkerRunToClient to send runs created using parallel workers manually to the Simulation Data Inspector.
This example runs several simulations of the
vdp model, varying the value of the Gain block,
Mu. To set up for the parallel simulation, define a vector of
Mu values and configure the Simulation Data Inspector for manual Parallel Computing Toolbox support.
MuVals = [0.1 0.2 0.3 0.4]; Simulink.sdi.enablePCTSupport("manual");
Initialize Parallel Workers
parpool (Parallel Computing Toolbox) to start a pool of four parallel workers. This example calls
parpool inside an if statement so you only create a parallel pool if you do not already have one.
p = gcp("nocreate"); if isempty(p) parpool(4); end
You can use
spmd (Parallel Computing Toolbox) to run initialization code common to all workers. For example, load the
vdp model and
Simulink.sdi.markSignalForStreaming function to select signals to log to the Simulation Data Inspector. To avoid data concurrency issues when simulating with
parfor, create a temporary directory on each worker.
spmd load_system("vdp") Simulink.sdi.markSignalForStreaming("vdp/x1",1,"on") Simulink.sdi.markSignalForStreaming("vdp/x2",1,"on") workDir = pwd; addpath(workDir) tempDir = tempname; mkdir(tempDir) cd(tempDir) end
Run Parallel Simulations with
To stream data from parallel workers to the Simulation Data Inspector, run parallel simulations using
parfor (Parallel Computing Toolbox). Each worker runs a
vdp simulation with a different value of
Mu. The software cannot access the contents of the
parfor loop, so the variable
MuVal is defined in the worker's workspace, where the
vdp model can see it, using
parfor (index = 1:4) assignin("base","MuVal",MuVals(index)); set_param("vdp/Mu","Gain","MuVal") sim("vdp");
Access Data and Send Run to Client MATLAB
You can use the Simulation Data Inspector programmatic interface on the worker the same way you would in the client MATLAB. This example creates a
Simulink.sdi.Run object and attaches the value of
Mu used in the simulation with the
IDs = Simulink.sdi.getAllRunIDs; lastIndex = length(IDs); runID = Simulink.sdi.getRunIDByIndex(lastIndex); parRun = Simulink.sdi.getRun(runID); parRun.Tag = strcat("Mu = ",num2str(MuVals(index))); Simulink.sdi.sendWorkerRunToClient end
Close Temporary Directories and View Runs in the Simulation Data Inspector
spmd section to delete the temporary directories created on the workers once the simulations complete.
spmd cd(workDir) rmdir(tempDir,"s") rmpath(workDir) end
In each simulation, the
Simulink.sdi.sendWorkerRunToClient function imported runs from all the workers into the Simulation Data Inspector. You can view the data and check the run properties to see the value of
Mu used during simulation.
run — Run ID or
Run ID or
Simulink.sdi.Run object corresponding to the
run you want to import into the Simulation Data Inspector.
Introduced in R2018a