Simulink.sdi. Класс WorkerRun

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

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

Указатель. Чтобы изучить, как классы Handle влияют на операции копии, смотрите Копирование Объектов (MATLAB).

Примеры

свернуть все

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