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