Simulink.sdi.cleanupWorkerResources

Очистка рабочих репозиториев

Описание

пример

Simulink.sdi.cleanupWorkerResources удаляет избыточные данные из каждого файла параллельного рабочего репозитория, используемого Данные Моделирования Inspector. Вызовите эту функцию во время работы рабочих пулов. Инспектор Данных моделирования автоматически очищает файлы репозитория, когда вы закрываете пул рабочих.

Примеры

свернуть все

Этот пример выполняет параллельные симуляции модели 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
Введенный в R2017b
Для просмотра документации необходимо авторизоваться на сайте