Управляйте, когда импортировать данные из параллельных симуляций в Данные моделирования 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.