Ускорьте оценку частотной характеристики Используя параллельные вычисления

Этот пример иллюстрирует, как ускорить оценку частотной характеристики моделей Simulink® с помощью параллельных вычислений. В некоторых сценариях функция frestimate оценивает частотную характеристику модели Simulink путем выполнения нескольких симуляций Simulink. Можно распределить эти симуляции пулу работников MATLAB при помощи Parallel Computing Toolbox™.

Этот пример требует Parallel Computing Toolbox. Можно опционально запустить симуляции на компьютерном кластере с помощью MATLAB® Parallel Server™. Этот пример использует локальную функциональность рабочего, доступную в Parallel Computing Toolbox.

Ускорьте Симуляции Simulink, Выполняемые frestimate

Когда вы вычисляете частотную характеристику с помощью функции frestimate, большинство времени вычисления обычно тратится в симуляциях Simulink. Чтобы уменьшать общее время симуляции, вы можете:

  1. Используйте быстрый режим Accelerator. Используйте этот метод, когда frestimate выполнит только одну симуляцию Simulink. Для примера смотрите Валидацию Линеаризации в Частотном диапазоне Используя FRESTIMATE.

  2. Распределите симуляции на рабочих в пуле MATLAB. Используйте этот метод, когда frestimate выполнит несколько симуляций Simulink. frestimate выполняет больше чем одну симуляцию Simulink, когда вы задаете следующее:

  • sinestream входной сигнал с набором параметра SimulationOrder к 'OneAtATime'. В этом случае каждая частота в сигнале sinestream моделируется отдельно.

  • Линейный анализ указывает больше чем с одной точкой ввода или нескалярной точкой ввода. В этом случае каждая точка ввода линеаризации или каждый канал в нескалярной точке ввода линеаризации приводят к отдельной симуляции Simulink.

Используя функцию frestimate с параллельными вычислениями также поддерживает нормальный, акселератор и быстрые режимы Accelerator.

Сконфигурируйте пул MATLAB

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

Распределите симуляции Simulink для каждой частоты во входе Sinestream

Когда вы используете 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*')

В целом параллельные вычисления значительно ускоряют оценку частотной характеристики с помощью frestimate. Фактические времена вычислений и объем улучшения будут зависеть от вашей компьютерной настройки и вашей настройки Parallel Computing Toolbox. Например, объем улучшения может быть затронут различными факторами включая издержки от передачи данных клиента рабочему и соревнования ресурса между процессами ОС и рабочими процессами.

Закройте модель.

bdclose(mdl)

Распределите симуляции Simulink для входных каналов

Когда количество точек ввода линеаризации или количество каналов в точке ввода линеаризации больше, чем один, команда 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);

Постройте результат оценки против аналитической линеаризации

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.

Смотрите также

| | |

Похожие темы