exponenta event banner

Simulink.sdi.cleanupWorkerResources

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

Описание

пример

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

Примеры

свернуть все

В этом примере выполняется параллельное моделирование модели. slexAircraftExample с различными временными константами входного фильтра и показывает несколько способов доступа к данным с помощью программного интерфейса Simulation Data Inspector.

Установка

Сначала убедитесь, что инспектор данных моделирования пуст, а поддержка панели инструментов параллельных вычислений настроена на автоматический импорт запусков, созданных на локальных рабочих. Затем создайте вектор значений параметров фильтра для использования в каждом моделировании.

% 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
Представлен в R2017b