exponenta event banner

Simulink.sdi.enablePCTSupport

Управление импортом данных из параллельных моделирований в инспектор данных моделирования

Описание

пример

Simulink.sdi.enablePCTSupport(mode) настраивает импорт данных в инспектор данных моделирования от параллельных работников в соответствии с режимом, указанным в mode. Можно настроить инспектор данных моделирования для импорта только данных от локальных работников или данных от локальных и удаленных работников. Можно также установить режим вручную, который позволяет вручную импортировать прогоны в инспектор данных моделирования с помощью Simulink.sdi.sendWorkerRunToClient функция. По умолчанию инспектор данных моделирования настроен для режима импорта вручную.

Примеры

свернуть все

Настройте поддержку параллельного рабочего инспектора данных моделирования для автоматического импорта выходных данных локальных и удаленных рабочих.

Simulink.sdi.enablePCTSupport('all')

Чтобы предотвратить автоматический импорт выходных данных из Parallel Computing Toolbox™ Worker в Simulation Data Inspector, укажите режим поддержки вручную.

Simulink.sdi.enablePCTSupport('manual')

В этом примере показано, как использовать Simulink.sdi.sendWorkerRunToClient для отправки прогонов, созданных с использованием параллельных рабочих вручную, в инспектор данных моделирования.

Установка

В этом примере выполняется несколько моделирований vdp модель, варьируя значение коэффициента усиления, Mu. Чтобы настроить параллельное моделирование, определите вектор Mu и настройте инспектор данных моделирования для поддержки панели инструментов параллельных вычислений вручную.

% Enable manual Parallel Computing Toolbox support
Simulink.sdi.enablePCTSupport('manual');

% Choose several Mu values
MuVals = [1 2 3 4];

Инициализация параллельных работников

Использовать parpool(Панель инструментов параллельных вычислений) для создания пула из четырех параллельных работников. Этот пример вызывает parpool внутри оператора if, поэтому параллельный пул создается только в том случае, если он еще не существует. Вы можете использовать spmd(Панель инструментов параллельных вычислений) для запуска кода инициализации, общего для всех работников. Например, загрузите vdp и выберите сигналы для регистрации в прогонах, которые мы можем отправить инспектору данных моделирования на клиенте MATLAB. Чтобы избежать проблем параллелизма данных при моделировании с помощью sim в parfor, создайте временный каталог для каждого работника. После завершения моделирования другой блок spmd удаляет временные каталоги.

p = gcp('nocreate');

if isempty(p)
    
    parpool(4);

end
Starting parallel pool (parpool) using the 'local' profile ...
connected to 4 workers.
spmd
    
    % Load system and select signals to log
    load_system('vdp')
    Simulink.sdi.markSignalForStreaming('vdp/x1',1,'on')
    Simulink.sdi.markSignalForStreaming('vdp/x2',1,'on')
    
    % Create temporary directory for simulation on worker
    workDir = pwd;
    addpath(workDir)
    tempDir = tempname;
    mkdir(tempDir)
    cd(tempDir)
    
end

Запустить параллельное моделирование с помощью parfor

Для потоковой передачи данных от параллельных работников в инспектор данных моделирования необходимо выполнить параллельное моделирование с использованием parfor(Панель инструментов параллельных вычислений). Каждый работник запускает vdp моделирование с другим значением Mu. Simulink не может получить доступ к содержимому parfor цикл, поэтому переменная MuVal определяется в рабочей области работника, где vdp модель может видеть его, используя assignin.

parfor (index = 1:4)
     
    % Set value of Mu in the worker's base workspace
    assignin('base','MuVal',MuVals(index));
    
    % Modify the value of Mu in the model and simulate
    set_param('vdp/Mu','Gain','MuVal')
    sim('vdp')
  

Доступ к данным и выполнение отправки клиенту MATLAB

Программный интерфейс Simulation Data Inspector можно использовать в работнике так же, как в клиенте MATLAB. В этом примере создается Simulink.sdi.Run объект и прикрепляет значение Mu используется при моделировании с помощью Tag собственность.

    
    % Attach metadata to the run
    IDs = Simulink.sdi.getAllRunIDs;
    lastIndex = length(IDs);
    runID = Simulink.sdi.getRunIDByIndex(lastIndex);
    parRun = Simulink.sdi.getRun(runID);
    parRun.Tag = strcat('Mu = ',num2str(MuVals(index)));
    
    % Send the run to the Simulation Data Inspector on the client MATLAB
    Simulink.sdi.sendWorkerRunToClient
    
end

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

Использовать другое spmd чтобы удалить временные каталоги, созданные на рабочих после завершения моделирования. В каждом моделировании Simulink.sdi.sendWorkerRunToClient импортированы из всех рабочих в инспектор данных моделирования. Можно просмотреть данные и проверить свойства прогона, чтобы увидеть значение Mu используется во время моделирования.

spmd

    % Remove temporary directories
    cd(workDir)
    rmdir(tempDir, 's')
    rmpath(workDir)

end

Simulink.sdi.view

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

Входные аргументы

свернуть все

Режим импорта данных Simulation Data Inspector для данных, зарегистрированных параллельными работниками, указан как один из следующих параметров:

  • 'manual' - Не импортировать автоматически прогоны, созданные на параллельных рабочих. Можно вручную импортировать прогоны, созданные на параллельных рабочих, с помощью Simulink.sdi.sendWorkerRunToClient функция.

  • 'local' - автоматически импортировать прогоны, созданные на локальных рабочих.

  • 'all' - автоматический импорт запусков, созданных на локальных и удаленных рабочих.

Типы данных: char | string

Альтернативная функциональность

Режим поддержки параллельных вычислений можно изменить в Инспекторе данных моделирования, выбрав Настройки > Параллельные.

Вопросы совместимости

развернуть все

Ошибки, начинающиеся с R2020a

В R2020a изменилось поведение

В R2018a изменилось поведение

Представлен в R2017b