Класс: Simulink.sdi.WorkerRun
Пакет: Simulink.sdi
Создайте набор данных рабочих запусков
dataset = workerRun.getDataset
dataset = workerRun.getDataset(domain)
возвращает dataset
= workerRun.getDatasetSimulink.SimulationData.Dataset
объект данных, соответствующих Simulink.sdi.WorkerRun
объект.
возвращает dataset
= workerRun.getDataset(domain
)Simulink.SimulationData.Dataset
объект данных, соответствующих Simulink.sdi.WorkerRun
объект ограничен возможностями, заданной domain
.
domain
- Спецификатор возможностейАргумент, ограничивающий возможности, который выбирает данные для возврата в Simulink.SimulationData.Dataset
объект.
'signals'
ограничивает данные, возвращенные в Dataset
к сигналам в WorkerRun
.
'outports'
ограничивает данные, возвращенные в Dataset
для вывода данных из WorkerRun
.
dataset
- набор данныхSimulink.SimulationData.Dataset
объект, содержащий данные из Simulink.sdi.WorkerRun
объект.
Этот пример выполняет параллельные симуляции модели slexAircraftExample
с различными временными константами входного фильтра и показывает несколько способов доступа к данным с помощью программного интерфейса Данные Моделирования Inspector.
Setup
Начните, убедившись, что Данные Моделирования Inspector пусты, а поддержка Parallel Computing Toolbox сконфигурирована для автоматического импорта запусков, созданных локальными работниками. Затем создайте вектор значений параметров фильтра для использования в каждой симуляции.
% 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];
Инициализация параллельных рабочих процессов
Используйте gcp, чтобы создать пул локальных рабочих для выполнения параллельных симуляций, если их еще нет. В spmd
кодовый блок, загрузка slexAircraftExample
моделируйте и выбирайте сигналы для регистрации. Чтобы избежать проблем параллелизма данных, используйте sim
в parfor
, создайте временную директорию для каждого работника, который будет использоваться во время симуляций.
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
Выполняйте параллельные симуляции
Использование parfor
чтобы запустить семь параллельные симуляции. Выберите значение для Ts
для каждой симуляции и измените значение Ts
в рабочем пространстве модели. Затем запустите симуляцию и создайте массив Simulink.sdi.WorkerRun
объекты для доступа к данным с помощью Данных моделирования Inspector. После parfor
цикл, используйте другой spmd
сегмент для удаления временных директорий из рабочих процессов.
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
Получите объекты набора данных из выхода параллельной симуляции
The getDataset
метод помещает данные из WorkerRun
в Dataset
объект, так что вы можете легко постпроцессировать.
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.
Получите объекты DatasetRef из выхода параллельной симуляции
Для рабочих процессов с большими данными используйте getDatasetRef
метод для ссылки на данные, связанные с 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
Обработайте данные параллельного моделирования в Данные моделирования Inspector
Можно также создать локальные Run
объекты для анализа и визуализации данных с помощью Данных моделирования Inspector API. В этом примере добавляется тег, указывающий значение постоянной времени фильтра для каждого запуска.
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
Очистка репозиториев рабочих процессов
Очистите файлы, используемые работниками, чтобы освободить пространство на диске для других симуляций, которые необходимо выполнить в рабочем пуле.
Simulink.sdi.cleanupWorkerResources
getDatasetRef
| getLocalRun
| Simulink.sdi.WorkerRun.getLatest
| Simulink.SimulationData.Dataset
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.