Simulink.sdi.WorkerRun class

Пакет: Simulink.sdi

Доступ к данным моделирования от параллельных рабочих

Описание

The Simulink.sdi.WorkerRun класс предоставляет доступ для выполнения данных, сгенерированных на параллельный рабочий Parallel Computing Toolbox™. Создайте Simulink.sdi.WorkerRun объект на рабочем месте, а затем используйте объект для доступа к данным в локальном MATLAB® сеанс.

Конструкция

workerRun = Simulink.sdi.WorkerRun(runID) создает Simulink.sdi.WorkerRun объект с идентификатором запуска, заданным в runID.

workerRun = Simulink.sdi.WorkerRun.getLatest создает Simulink.sdi.WorkerRun объект последнего запуска.

Входные параметры

расширить все

Запустите идентификатор

Методы

getDatasetСоздайте набор данных рабочих запусков
getDatasetRefСоздайте DatasetRef для рабочего запуска
getLatestСоздайте рабочий запуск для последнего запуска
getLocalRunСоздайте локальный запуск из рабочего запуска

Копировать семантику

Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

Этот пример выполняет параллельные симуляции модели 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

Альтернативы

Вы также можете получить доступ, просмотреть и проанализировать данные моделирования от работников Parallel Computing Toolbox с помощью пользовательского интерфейса Simulation Data Inspector.

Введенный в R2017b