Simulink.sdi.WorkerRun class

Пакет: Simulink.sdi

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

Описание

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Создайте локальный запуск от запущенного рабочего

Примеры

свернуть все

Этот пример выполняет параллельные симуляции модели slexAircraftExample с различными входными постоянными времени фильтра и показывает несколько способов получить доступ к данным с помощью Инспектора Данных моделирования программируемый интерфейс.

Настройка

Запустите путем гарантирования, что Инспектор Данных моделирования пуст, и поддержка 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 объекты получить доступ к данным с Инспектором Данных моделирования. После 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

Получите объекты набора данных от параллельной симуляции Выход

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

Данные моделирования параллели процесса в инспекторе данных моделирования

Можно также создать локальный Run объекты анализировать и визуализировать ваши данные с помощью Инспектора Данных моделирования 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, использующих Инспектора Данных моделирования пользовательский интерфейс.

Введенный в R2017b