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