Управление импортом данных из параллельных моделирований в инспектор данных моделирования
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
mode - Режим параллельного импорта рабочих данных'manual' (по умолчанию) | 'local' | 'all'Режим импорта данных Simulation Data Inspector для данных, зарегистрированных параллельными работниками, указан как один из следующих параметров:
'manual' - Не импортировать автоматически прогоны, созданные на параллельных рабочих. Можно вручную импортировать прогоны, созданные на параллельных рабочих, с помощью Simulink.sdi.sendWorkerRunToClient функция.
'local' - автоматически импортировать прогоны, созданные на локальных рабочих.
'all' - автоматический импорт запусков, созданных на локальных и удаленных рабочих.
Типы данных: char | string
Режим поддержки параллельных вычислений можно изменить в Инспекторе данных моделирования, выбрав Настройки > Параллельные.

'none' вход больше не поддерживаетсяОшибки, начинающиеся с R2020a
Начиная с R2020a, Simulink.sdi.enablePCTSupport функция больше не поддерживает 'none' опция ввода. Чтобы отключить автоматический импорт данных, зарегистрированных параллельными работниками, в инспектор данных моделирования, используйте 'manual' вариант.
В R2020a изменилось поведение
Начиная с R2020a, Simulink.sdi.enablePCTSupport функция игнорирует логические входы. В сценариях, указывающих логический вход для Simulink.sdi.enablePCTSupport функция, замените 0 или false входные данные с помощью 'manual' опцию ввода и 1 или true входные данные с помощью 'all' возможность достижения эквивалентного поведения.
В R2018a изменилось поведение
Начиная с R2018a, Simulink.sdi.enablePCTSupport входные значения изменены на:
'local'
'none'
'all'
'manual'
В R2017b, Simulink.sdi.enablePCTSupport функция приняла логический ввод, чтобы включить или отключить поддержку Simulation Data Inspector для данных, зарегистрированных в параллельном моделировании.
true или 1 позволяет автоматически импортировать данные всех параллельных работников в инспектор данных моделирования.
В R2018a используйте 'all' для того же поведения. Вы также можете использовать новый 'local' при необходимости автоматического импорта данных только от локальных работников.
false или 0 отключает всю поддержку импорта данных, зарегистрированных параллельными работниками.
В R2018a используйте 'none' для того же поведения. Вы также можете использовать новый 'manual' при необходимости анализа данных о работнике для определения необходимости импорта отдельных прогонов в инспектор данных моделирования из параллельного работника.
Simulink.sdi.isPCTSupportEnabled | Simulink.sdi.sendWorkerRunToClient | Simulink.sdi.WorkerRun
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.