getDatasetRef
Class: Simulink.sdi.WorkerRun
Package: Simulink.sdi
Create DatasetRef for worker run
Syntax
datasetRef = workerRun.getDatasetRef
datasetRef = workerRun.getDatasetRef(domain)
Description
returns a
datasetRef
= workerRun.getDatasetRefSimulink.SimulationData.DatasetRef
object referencing the data in the Simulink.sdi.WorkerRun
object,
workerRun
.
returns a datasetRef
= workerRun.getDatasetRef(domain
)Simulink.SimulationData.DatasetRef
object referencing the data in the Simulink.sdi.WorkerRun
object,
workerRun
, limited to the scope specified by
domain
.
Input Arguments
domain
— Scope limiting input
'signals' | 'outports'
Scope limiting argument that selects the data to reference in the
Simulink.SimulationData.DatasetRef
object.
'signals'
limits the data referenced in theDatasetRef
to signals in theWorkerRun
.'outports'
limits the data referenced in theDatasetRef
to outport data in theWorkerRun
.
Output Arguments
datasetRef
— Simulink.SimulationData.DatasetRef object
Simulink.sdi.DatasetRef object
Simulink.sdi.DatasetRef
object referencing the data in the
Parallel Computing Toolbox™ worker run.
Examples
Access Data from a Parallel Simulation
This example executes parallel simulations of the model slexAircraftExample
with different input filter time constants and shows several ways to access the data using the Simulation Data Inspector programmatic interface.
Setup
Start by ensuring the Simulation Data Inspector is empty and 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.
% Make sure the Simulation Data Inspector is empty, and PCT support is % enabled. Simulink.sdi.clear Simulink.sdi.enablePCTSupport('local') % Define Ts values Ts_vals = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1];
Initialize Parallel Workers
Use gcp 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 'local' profile ... connected to 4 workers.
spmd % Load system and select signals to log load_system('slexAircraftExample') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot', 1, 'on') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model', 4, 'on') % Create temporary directory on each worker workDir = pwd; addpath(workDir) tempDir = tempname; mkdir(tempDir) cd(tempDir) end
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'); modelWorkspace.assignin('Ts',Ts_val) sim('slexAircraftExample') % Create a worker run for each simulation workerRun(index) = Simulink.sdi.WorkerRun.getLatest end spmd % Remove temporary directories cd(workDir) rmdir(tempDir, 's') rmpath(workDir) end
Get Dataset Objects from Parallel Simulation Output
The getDataset
method puts the data from a WorkerRun
into a Dataset
object so you can easily post-process.
ds(7) = Simulink.SimulationData.Dataset; for a = 1:7 ds(a) = workerRun(a).getDataset; end ds(1)
ans = Simulink.SimulationData.Dataset '' with 2 elements Name BlockPath __________ ________________________________________ 1 [1x1 Signal] alpha, rad ...rcraftExample/Aircraft Dynamics Model 2 [1x1 Signal] Stick slexAircraftExample/Pilot - Use braces { } to access, modify, or add elements using index.
Get DatasetRef Objects from Parallel Simulation Output
For big data workflows, use the getDatasetRef
method to reference the data associated with the WorkerRun
.
for b = 1:7 datasetRef(b) = workerRun(b).getDatasetRef; end datasetRef(1)
ans = DatasetRef with properties: Name: 'Run 3: slexAircraftExample' Run: [1×1 Simulink.sdi.Run] numElements: 2
Process Parallel Simulation Data in the Simulation Data Inspector
You can also create local Run
objects to analyze and visualize your data using the Simulation Data Inspector API. This example adds a tag indicating the filter time constant value for each run.
for c = 1:7 Runs(c) = workerRun(c).getLocalRun; 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); end
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.
Simulink.sdi.cleanupWorkerResources
Version History
Introduced in R2017b
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)