Main Content


Create local run from worker run



runObj = getLocalRun(workerRun) creates the local Simulink.sdi.Run object runObj for the Simulink.sdi.WorkerRun object workerRun. Use the getLocalRun function to access data in workerRun object.


collapse all

Execute parallel simulations of the model slexAircraftExample with different input filter time constants and access the data in different ways using the Simulation Data Inspector programmatic interface.


Check that the Simulation Data Inspector is empty and that Parallel Computing Toolbox support is configured to import runs created on local workers automatically. Then, create a vector of filter parameter values to use in each simulation.


Ts_vals = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; 

Initialize Parallel Workers

Use the gcp function to create a pool of local workers to run parallel simulations if you don't already have one. In an spmd code block, load the slexAircraftExample model and select signals to log. To avoid data concurrency issues using sim in parfor, create a temporary directory for each worker to use during simulations.

p = gcp;
Starting parallel pool (parpool) using the 'Processes' profile ...
02-Nov-2023 16:05:17: Job Queued. Waiting for parallel pool job with ID 1 to start ...
02-Nov-2023 16:06:18: Job Queued. Waiting for parallel pool job with ID 1 to start ...
Connected to parallel pool with 6 workers.
    % Load system and select signals to log
    Simulink.sdi.markSignalForStreaming("slexAircraftExample/Pilot", 1, "on")
    Simulink.sdi.markSignalForStreaming("slexAircraftExample/Aircraft Dynamics Model", 4, "on")
    % Create temporary directory on each worker
    workDir = pwd;
    tempDir = tempname;

Run Parallel Simulations

Use parfor to run the seven simulations in parallel. Select the value for Ts for each simulation, and modify the value of Ts in the model workspace. Then, run the simulation and build an array of Simulink.sdi.WorkerRun objects to access the data with the Simulation Data Inspector. After the parfor loop, use another spmd segment to remove the temporary directories from the workers.

parfor index = 1:7
    % Select value for Ts
    Ts_val = Ts_vals(index);
    % Change the filter time constant and simulate
    modelWorkspace = get_param("slexAircraftExample","modelworkspace");
    % Create a worker run for each simulation
    workerRun(index) = Simulink.sdi.WorkerRun.getLatest

    % Remove temporary directories
    rmdir(tempDir, "s")

Get Dataset Objects from Parallel Simulation Output

The getDataset function puts the data from a WorkerRun object into a Dataset object so you can easily post-process.

ds(7) = Simulink.SimulationData.Dataset;

for a = 1:7
    ds(a) = getDataset(workerRun(a));
ans = 
Simulink.SimulationData.Dataset '' with 12 elements

                         Name        BlockPath                                
                         __________  ________________________________________ 
    1  [1x1 State ]      ''          slexAircraftExample/Actuator Model      
    2  [1x1 Signal]      alpha, rad  ...rcraftExample/Aircraft Dynamics Model
    3  [1x1 State ]      ''          ...cs Model/Pitch Channel/Integrate qdot
    4  [1x1 State ]      ''          ...mics Model/Vertical Channel/Integrate
    5  [1x1 State ]      ''          ...ntroller/Alpha-sensor Low-pass Filter
    6  [1x1 State ]      ''          ...ller/Integrator/Continuous/Integrator
    7  [1x1 State ]      ''          ...ple/Controller/Pitch Rate Lead Filter
    8  [1x1 State ]      ''          ...aftExample/Controller/Stick Prefilter
    9  [1x1 State ]      ''          .../Dryden Wind Gust Models/Q-gust model
   10  [1x1 State ]      ''          .../Dryden Wind Gust Models/W-gust model
   11  [1x1 Signal]      Stick       slexAircraftExample/Pilot               
   12  [1x1 Signal]      alpha, rad  slexAircraftExample/alpha, rad          

  - Use braces { } to access, modify, or add elements using index.

Get DatasetRef Objects from Parallel Simulation Output

For big data workflows, use the getDatasetRef function to reference the data associated with the WorkerRun.

for b = 1:7
    datasetRef(b) = getDatasetRef(workerRun(b));
ans = 
  DatasetRef with properties:

           Name: 'Run <run_index>: <model_name>'
            Run: [1×1 Simulink.sdi.Run]
    numElements: 12

Process Parallel Simulation Data in the Simulation Data Inspector

You can also create local Simulink.sdi.Run objects to analyze and visualize your data using the Simulation Data Inspector programmatic interface. This example shows a tag indicating the filter time constant value for each run.

for c = 1:7
    Runs(c) = getLocalRun(workerRun(c));
    Ts_val_str = num2str(Ts_vals(c));
    desc = strcat("Ts = ", Ts_val_str);
    Runs(c).Description = desc;
    Runs(c).Name = strcat("slexAircraftExample run Ts=", Ts_val_str);    

Clean Up Worker Repositories

Clean up the files used by the workers to free up disk space for other simulations you want to run on your worker pool.


Input Arguments

collapse all

Worker run, specified as a Simulink.sdi.WorkerRun object.

Output Arguments

collapse all

Local run, specified as a Simulink.sdi.Run object.

Version History

Introduced in R2017b