Simulink.sdi.enablePCTSupport

Управляйте, как Моделирование Data Inspector работает с Parallel Computing Toolbox

Синтаксис

Simulink.sdi.enablePCTSupport(mode)

Описание

пример

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

Примеры

свернуть все

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

Simulink.sdi.enablePCTSupport('all')

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

Simulink.sdi.enablePCTSupport('none')

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

Настройка

Этот пример запускает несколько моделирований модели vdp, отличаясь значение усиления, Mu. Чтобы настроить для параллельного моделирования, задайте вектор значений Mu и сконфигурируйте Моделирование Data Inspector для ручной поддержки 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 и выберите сигналы регистрировать к выполнениям, что мы можем отправить в Моделирование Data 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

К потоковым данным от параллельных рабочих к Моделированию Data Inspector необходимо идти параллельно моделирования с помощью 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

Можно использовать Моделирование 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

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

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

spmd

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

end

Simulink.sdi.view

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

Настройка

Запустите путем обеспечения Моделирования, Data 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 получить доступ к данным с Моделированием Data 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

Получите объекты набора данных от параллельного моделирования Вывод

Метод 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

Обработайте параллельные данные моделирования в моделировании Data Inspector

Можно также создать локальные объекты Run анализировать и визуализировать данные с помощью Моделирования API Data Inspector. Этот пример добавляет тег, указывающий на значение временной константы фильтра для каждого выполнения.

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

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

свернуть все

Режим Моделирования поддержка Data Inspector импорта выполнений от параллельных рабочих.

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

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

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

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

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

Введенный в R2017b

Была ли эта тема полезной?