Управляйте, как Моделирование Data Inspector работает с Parallel Computing Toolbox
Simulink.sdi.enablePCTSupport(mode)
включает поддержку автоматического импорта данных от параллельных рабочих в Моделирование Data Inspector, согласно режиму, заданному Simulink.sdi.enablePCTSupport(mode)
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
режим
Режим поддержки рабочего Prallel'local'
(значение по умолчанию) | 'none'
| 'all'
| 'manual'
Режим Моделирования поддержка Data Inspector импорта выполнений от параллельных рабочих.
'local'
— Поведение по умолчанию конфигурирует автоматический импорт для выполнений, сгенерированных на локальных рабочих.
'none'
Отключает параллельную поддержку рабочего. Никакие выполнения от локальных или удаленных рабочих не импортируют к Моделированию Data Inspector.
все
Включает автоматический импорт для выполнений, созданных от локальных и удаленных рабочих.
'manual'
— Конфигурирует поддержку ручного импорта выполнений, созданных параллельными рабочими, использующими функцию Simulink.sdi.sendWorkerRunToClient
.
Типы данных: char | string
Simulink.sdi.WorkerRun
| Simulink.sdi.isPCTSupportEnabled
| Simulink.sdi.sendWorkerRunToClient
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.