В этом примере показано, как применить явное разделение, чтобы улучшить параллельное выполнение приложения реального времени, которое вы генерируете при помощи Simulink Real-Time.
Simulink Real-Time поддерживает параллельное выполнение при помощи неявного разделения или явного разделения моделей. Этот пример показывает отношение между явным разделением задач в подсистемах модели и выполнением задач при помощи инструмента профилирования Simulink Real-Time.
Модель slrt_ex_mds_and_tasks
в качестве примера запуски на уровне частоты дискретизации 0,001 секунд.
Чтобы запустить модель с настроенной частотой дискретизации 0,01 секунд, измените выборку, оцененную прежде, чем запустить пример. В Командном Окне MATLAB введите:
Ts = 0.01;
Явное разделение в модели верхнего уровня происходит в subsystem1.
open_system(fullfile(matlabroot,'toolbox','slrealtime','examples','slrt_ex_mds_subsystem1'));
Явное разделение в модели верхнего уровня происходит в subsystem2.
open_system(fullfile(matlabroot,'toolbox','slrealtime','examples','slrt_ex_mds_subsystem2')); %
Откройте модель slrt_ex_mds_and_tasks
. Модель сопоставлена с семью потоками: Model1_R1
, Model1_R2
, Model1_R3
, Model1_R4
, Model2_R1
, Model2_R3
, и Model2_R4
.
Эти потоки, запущенные на уровне частот дискретизации Ts
, 2*Ts
, 3*Ts
, 4*Ts
, Ts
, 3*Ts
, и 4*Ts
.
mdl='slrt_ex_mds_and_tasks'; open_system(fullfile(matlabroot,'toolbox','slrealtime','examples',mdl));
Чтобы применить явное разделение, в Редакторе Simulink, на вкладке Real-Time, нажимают Hardware Settings, и затем выбирают Solver> Configure Tasks. Выберите Tasks and Mapping
узел.
Создайте, загрузите и запустите модель.
set_param(mdl,'RTWVerbose','off'); rtwbuild(mdl); tg = slrealtime; load(tg,mdl); % Open TET Monitor slrtTETMonitor; % Start profiler on the target computer startProfiler(tg); start(tg); pause(2); stop(tg);
### Starting serial model reference simulation build ### Starting serial model reference code generation build ### Successful completion of build procedure for: slrt_ex_mds_subsystem1 ### Successful completion of build procedure for: slrt_ex_mds_subsystem2 ### Successful completion of build procedure for: slrt_ex_mds_and_tasks Unable to find symbol(s) 'slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_Buf0, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_Buf1, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_Buf2, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_LstBufWR, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_RDBuf' in symbol table of ELF file: 'C:\Users\dskolnic\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\dskolnic.Bdoc20b.j1420932\slrealtime-ex84556294\slrt_ex_mds_and_tasks_slrealtime_rtw\slrt_ex_mds_and_tasks' ### Created MLDATX ..\slrt_ex_mds_and_tasks.mldatx Build Summary Code generation targets built: Model Action Rebuild Reason ================================================================================================= slrt_ex_mds_subsystem1 Code generated and compiled slrt_ex_mds_subsystem1.cpp does not exist. slrt_ex_mds_subsystem2 Code generated and compiled slrt_ex_mds_subsystem2.cpp does not exist. Top model targets built: Model Action Rebuild Reason ====================================================================================================== slrt_ex_mds_and_tasks Code generated and compiled Code generation information file does not exist. 3 of 3 models built (0 models already up to date) Build duration: 0h 1m 22.867s
Профильные данные показывают время выполнения каждого потока на многожильном целевом компьютере.
profData = tg.getProfilerData; profData.plot;
Processing data on target computer ... Transferring data from target computer ... Processing data on host computer ...
bdclose('all');