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