Управляйте, когда импортировать данные из параллельных симуляций в Данные моделирования Inspector
Simulink.sdi.enablePCTSupport(
конфигурирует импорт данных в Данные моделирования Inspector из параллельных рабочих мест в соответствии с режимом, заданным mode
)mode
. Можно настроить Данные моделирования Inspector, чтобы импортировать только данные от локальных работников или данные от локальных и удаленных работников. Можно также задать режим вручную, что позволяет вручную импортировать запуски в Данные моделирования Inspector с помощью Simulink.sdi.sendWorkerRunToClient
функция. По умолчанию Данные моделирования Inspector сконфигурированы для ручного режима импорта.
Сконфигурируйте параллельную рабочую поддержку Данные Моделирования Inspector, чтобы автоматически импортировать выходы как от локальных, так и от удаленных работников.
Simulink.sdi.enablePCTSupport('all')
Чтобы предотвратить автоматический импорт выхода из Parallel Computing Toolbox™ работников в Данные моделирования Inspector, задайте режим ручной поддержки.
Simulink.sdi.enablePCTSupport('manual')
В этом примере показано, как использовать Simulink.sdi.sendWorkerRunToClient
отправлять запуски, созданные с помощью параллельных рабочих процессов, вручную в Данные моделирования Inspector.
Setup
Этот пример запускает несколько симуляций vdp
модель, изменяющая значение усиления, Mu
. Чтобы настроить для параллельной симуляции, задайте вектор Mu
Значения и настройте Данные моделирования Inspector для ручной поддержки 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
моделируйте и выбирайте сигналы для регистрации в запусках, которые мы можем отправить в Данные Моделирования 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
Чтобы передать данные от параллельных рабочих процессов в Данные Моделирования Inspector, необходимо запустить параллельные симуляции с помощью 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
Программный интерфейс Данные Моделирования 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
Закройте временные Директории и просмотрите Запуски в Данные моделирования Inspector
Использование другого spmd
раздел, чтобы удалить временные директории, созданные для рабочих процессов после завершения симуляций. В каждой симуляции Simulink.sdi.sendWorkerRunToClient
импортировал запуски от всех работников в Данные моделирования Inspector. Можно просмотреть данные и проверить свойства run, чтобы увидеть значение Mu
используется во время симуляции.
spmd % Remove temporary directories cd(workDir) rmdir(tempDir, 's') rmpath(workDir) end Simulink.sdi.view
Этот пример выполняет параллельные симуляции модели slexAircraftExample
с различными временными константами входного фильтра и показывает несколько способов доступа к данным с помощью программного интерфейса Данные Моделирования Inspector.
Setup
Начните, убедившись, что Данные Моделирования 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
объекты для доступа к данным с помощью Данных моделирования 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
Получите объекты набора данных из выхода параллельной симуляции
The 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
Обработайте данные параллельного моделирования в Данные моделирования Inspector
Можно также создать локальные Run
объекты для анализа и визуализации данных с помощью Данных моделирования Inspector 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
Можно изменить режим поддержки параллельных вычислений в Данных моделирования Inspector, выбрав Preferences > Parallel.
'none'
вход больше не поддерживаетсяОшибки, начинающиеся в R2020a
Начиная с R2020a, Simulink.sdi.enablePCTSupport
функция больше не поддерживает 'none'
опция входа. Чтобы отключить автоматический импорт данных, зарегистрированных на параллельных рабочих местах, в Данные моделирования Inspector, используйте 'manual'
опция.
Поведение изменено в R2020a
Начиная с R2020a, Simulink.sdi.enablePCTSupport
функция игнорирует логические входы. В скриптах, которые задают логический вход для Simulink.sdi.enablePCTSupport
function, замените 0
или false
вход со 'manual'
вход и 1
или true
вход со 'all'
опция достижения эквивалентного поведения.
Поведение изменено в R2018a
Начиная с R2018a, Simulink.sdi.enablePCTSupport
входные значения изменены на:
'local'
'none'
'all'
'manual'
В R2017b, Simulink.sdi.enablePCTSupport
функция приняла логический вход, чтобы включить или отключить поддержку Данные Моделирования Inspector для данных, регистрируемых в параллельных симуляциях.
true
или 1
включает поддержку автоматического импорта данных от всех параллельных рабочих процессов в Данные моделирования Inspector.
В R2018a используйте 'all'
опция для того же поведения. Можно также использовать новую 'local'
вводить, когда необходимо автоматически импортировать данные только от локальных работников.
false
или 0
отключает всю поддержку для импорта данных, зарегистрированных на параллельных рабочих местах.
В R2018a используйте 'none'
опция для того же поведения. Можно также использовать новую 'manual'
опция, когда необходимо проанализировать данные о работнике, чтобы определить, хотите ли вы импортировать индивидуума запусков в Данные моделирования Inspector от параллельного работника.
Simulink.sdi.isPCTSupportEnabled
| Simulink.sdi.sendWorkerRunToClient
| Simulink.sdi.WorkerRun
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.