Этот пример иллюстрирует, как ускорить оценку частотной характеристики моделей Simulink® с помощью параллельных вычислений. В некоторых сценариях, frestimate
функционируйте оценивает частотную характеристику модели Simulink путем выполнения нескольких симуляций Simulink. Можно распределить эти симуляции пулу работников MATLAB при помощи Parallel Computing Toolbox™.
Этот пример требует Parallel Computing Toolbox. Можно опционально запустить симуляции на компьютерном кластере с помощью MATLAB® Parallel Server™. Этот пример использует локальную функциональность рабочего, доступную в Parallel Computing Toolbox.
frestimate
Когда вы вычисляете частотную характеристику с помощью frestimate
функция, большинство времени вычисления обычно тратится в симуляциях Simulink. Чтобы уменьшать общее время симуляции, вы можете:
Используйте быстрый режим Accelerator. Используйте этот метод когда frestimate
выполняет только одну симуляцию Simulink. Для примера смотрите Валидацию Линеаризации в Частотном диапазоне Используя FRESTIMATE.
Распределите симуляции на рабочих в пуле MATLAB. Используйте этот метод когда frestimate
выполняет несколько симуляций Simulink. frestimate
выполняет больше чем одну симуляцию Simulink, когда вы задаете следующее:
sinestream входной сигнал с SimulationOrder
набор параметра к 'OneAtATime'
. В этом случае каждая частота в сигнале sinestream симулирована отдельно.
Линейный анализ указывает больше чем с одной точкой ввода или нескалярной точкой ввода. В этом случае каждая точка ввода линеаризации или каждый канал в нескалярной точке ввода линеаризации дают к отдельной симуляции Simulink.
Используя frestimate
функция с параллельными вычислениями также поддерживает нормальный, акселератор и быстрые режимы Accelerator.
Чтобы использовать параллельные вычисления, чтобы ускорить оценку частотной характеристики, сконфигурируйте и запустите пул работников MATLAB, прежде чем вы запустите frestimate
функция.
Чтобы проверять, открыт ли пул MATLAB, используйте gcp
функция. Если никакой пул не открыт, откройте тот с помощью parpool
функция.
if isempty(gcp) parpool local end
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
Когда вы используете sinestream входной сигнал с frestimate
команда и вы устанавливаете SimulationOrder
параметр к 'OneAtATime'
, каждая частота в сигнале sinestream симулирует в отдельной симуляции Simulink. Если вы включаете опцию параллельных вычислений, симуляции, соответствующие отдельным частотам, распределяются среди рабочих в пуле MATLAB.
Откройте модель и получите линейные аналитические точки, сохраненные в модели.
mdl = 'scdengine';
open_system(mdl)
io = getlinio(mdl);
Создайте sinestream входной сигнал с 'OneAtATime'
порядок симуляции.
in = frest.Sinestream('Frequency',logspace(-1,1,50),'Amplitude',1e-3,... 'SimulationOrder','OneAtATime');
В этой модели существует одна точка ввода линеаризации и одна выходная точка линеаризации. В сигнале sinestream существует 50 частот. frestimate
команда выполняет 50 отдельных симуляций Simulink потому что SimulationOrder
параметр устанавливается на 'OneAtATime'
.
Чтобы распределить эти симуляции среди рабочих, включите параллельные вычисления для frestimate
. Создайте объект опций оценки частотной характеристики использование команды frestimateOptions
, и набор UseParallel
параметр к 'on'
. Используйте этот объект в качестве входного параметра для frestimate
.
opt = frestimateOptions('UseParallel','on'); sysest = frestimate(mdl,io,in,opt); bode(sysest,'r*')
Warning: In "frestimate(modelname,op,io,in,opts)", you specified using parpool in FRESTIMATE; however, Parallel Computing Toolbox is not installed. FRESTIMATE command is ignoring this option and not using parpool.
В общем случае параллельные вычисления значительно ускоряют оценку частотной характеристики с помощью frestimate
. Фактические времена вычислений и объем улучшения будут зависеть от вашей компьютерной настройки и вашей настройки Parallel Computing Toolbox. Например, объем улучшения может быть затронут различными факторами включая издержки от передачи данных клиента рабочему и соревнования ресурса между процессами ОС и рабочими процессами.
Закройте модель.
bdclose(mdl)
Когда количество точек ввода линеаризации или количество каналов в точке ввода линеаризации больше один, frestimate
команда распределяет отдельные симуляции Simulink, соответствующие этим входным каналам среди рабочих в пуле MATLAB.
Откройте модель и получите линейные аналитические точки, сохраненные в модели.
mdl = 'scdplane'; open_system(mdl) io(1) = linio('scdplane/Sum1',1,'input'); io(2) = linio('scdplane/Actuator Model',1,'input'); io(3) = linio('scdplane/Gain5',1,'output');
С linio
функция, вы задаете две точки ввода линеаризации, которые оба расположены на скалярных Сигналах Simulink. Если при запуске frestimate
команда, чтобы оценить частотную характеристику для этой модели, две симуляции Simulink происходят, один для каждого входа.
Линеаризуйте модель и создайте входной сигнал с помощью результата линеаризации.
sys = linearize(mdl,io); in = frest.Sinestream(sys);
Прежде, чем оценить частотную характеристику, найдите все исходные блоки в путях прохождения сигнала линеаризации выходными параметрами, которые генерируют изменяющиеся во времени сигналы с помощью findSources
функция. Такие изменяющиеся во времени сигналы могут вмешаться в сигнал в выходных точках линеаризации и привести к неточным результатам оценки. Чтобы отключить изменяющиеся во времени исходные блоки, создайте frestimateOptions
набор опции и задает BlocksToHoldConstant
опция.
srcblks = frest.findSources('scdplane',io); opt = frestimateOptions('BlocksToHoldConstant',srcblks);
Включите параллельные вычисления с помощью UseParallel
опция оценки, которая распределяет симуляции среди рабочих.
opt.UseParallel = 'on';
Запустите frestimate
использование параллельных вычислений.
sysest = frestimate(mdl,io,in,opt);
Warning: In "frestimate(modelname,op,io,in,opts)", you specified using parpool in FRESTIMATE; however, Parallel Computing Toolbox is not installed. FRESTIMATE command is ignoring this option and not using parpool.
Постройте результат оценки против аналитической линеаризации
bodeopts = bodeoptions; bodeopts.PhaseMatching = 'on'; bodeplot(sys,sysest,'r*',bodeopts);
Закройте модель, открытую фигуру и параллельный пул.
bdclose(mdl) close(gcf) delete(gcp)
Parallel pool using the 'local' profile is shutting down.
frestimate
| frestimateOptions
| gcp
| parpool