Simulink.sdi.enablePCTSupport

Управляйте, как Инспектор Данных моделирования работает с Parallel Computing Toolbox

Синтаксис

Simulink.sdi.enablePCTSupport(mode)

Описание

пример

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

Примеры

свернуть все

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

Simulink.sdi.enablePCTSupport('all')

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

Simulink.sdi.enablePCTSupport('none')

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

Настройка

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

% 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

Можно использовать Инспектора Данных моделирования программируемый интерфейс на рабочем тем же путем, вы были бы в клиенте 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 с различными входными временными константами фильтра и показывает несколько способов получить доступ к данным с помощью Инспектора Данных моделирования программируемый интерфейс.

Настройка

Запустите путем гарантирования, что Инспектор Данных моделирования пуст, и поддержка 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

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

свернуть все

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

  • 'local' — Поведение по умолчанию конфигурирует автоматический импорт для выполнений, сгенерированных на локальных рабочих.

  • 'none' Отключает параллельную поддержку рабочего. Никакие выполнения от локальных или удаленных рабочих не импортируют Инспектору Данных моделирования.

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

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

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

Введенный в R2017b