Simulink.sdi.enablePCTSupport

Управляйте, когда импортировать данные из параллельных симуляций в Данные моделирования Inspector

Описание

пример

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

Примеры

свернуть все

Сконфигурируйте параллельную рабочую поддержку Данные Моделирования Inspector, чтобы автоматически импортировать выходы как от локальных, так и от удаленных работников.

Simulink.sdi.enablePCTSupport('all')

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

Simulink.sdi.enablePCTSupport('manual')

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

Setup

Этот пример запускает несколько симуляций vdp модель, изменяющая значение усиления, Mu. Чтобы настроить для параллельной симуляции, задайте вектор Mu Значения и настройте Данные моделирования Inspector для ручной поддержки Parallel Computing Toolbox.

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

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

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

Использование parpool (Parallel Computing Toolbox), чтобы создать пул из четырех параллельных рабочих. Этот пример вызывает parpool внутри оператора if, так что вы создаете параллельный пул, только если у вас его еще нет. Можно использовать spmd (Parallel Computing Toolbox), чтобы запустить код инициализации, общий для всех работников. Для примера загрузите vdp моделируйте и выбирайте сигналы для регистрации в запусках, которые мы можем отправить в Данные Моделирования Inspector на клиентском 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

Чтобы передать данные от параллельных рабочих процессов в Данные Моделирования Inspector, необходимо запустить параллельные симуляции с помощью parfor (Parallel Computing Toolbox). Каждый рабочий запускает 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

Программный интерфейс Данные Моделирования 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

Закройте временные Директории и просмотрите Запуски в Данные моделирования Inspector

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

spmd

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

end

Simulink.sdi.view

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

Входные параметры

свернуть все

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

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

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

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

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

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

Можно изменить режим поддержки параллельных вычислений в Данных моделирования Inspector, выбрав Preferences > Parallel.

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

расширить все

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

Поведение изменено в R2020a

Поведение изменено в R2018a

Введенный в R2017b