exponenta event banner

Simulink.sdi.sendWorkerRunToClient

Отправка прогона, созданного на параллельных рабочих, в инспектор данных моделирования

Описание

пример

Simulink.sdi.sendWorkerRunToClient отправляет последний прогон, созданный работником, клиенту MATLAB ® и импортирует прогон в инспектор данных моделирования.

Simulink.sdi.sendWorkerRunToClient(run) отправляет прогон, соответствующий run в мандант MATLAB и импортирует прогон в инспектор данных моделирования.

Примеры

свернуть все

В этом примере показано, как использовать 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

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

свернуть все

Идентификатор запуска или Simulink.sdi.Run объект, соответствующий прогону, который требуется импортировать в инспектор данных моделирования.

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