Simulink Real-Time 上的并发执行
此示例演示了如何应用显式分区来增强由 Simulink® Real-Time™ 生成的实时应用程序的并发执行能力。
Simulink Real-Time 通过隐式划分或显式划分模型来支持并行执行。此示例展示了模型子系统中任务的显式划分与使用 Simulink Real-Time 探查工具执行任务之间的关系。
注意:您也可以使用 Simulink® 日程编辑器对模型进行分区。在 Simulink 编辑器中,点击建模选项卡,然后选择设计 > 进度编辑器。有关详细信息,请参阅Create Partitions from a Rate-Based Model。
示例模型 slrt_ex_mds_and_tasks 以 0.001 秒的采样率运行。
若要以 0.01 秒的调整后采样率运行该模型,请在运行示例之前更改采样率。在 MATLAB® 命令行窗口中,输入:
Ts = 0.01;
创建目标对象并连接
为默认目标计算机创建目标对象,并连接到目标计算机。
tg = slrealtime; connect(tg);
Warning: The timezone on the target is America/Los_Angeles, compared to
Asia/Calcutta on the host computer.
Would you like to sync the timezone on the target to the host computer?
<a href="matlab: sg.host.compareTargetTimeZoneAtConnect('thisTime','slrt1702eth');">sync</a>, <a href="matlab: sg.host.compareTargetTimeZoneAtConnect('ignore','slrt1702eth');">always ignore</a>
打开、构建并下载模型
顶层模型引用了两个具有显式划分的子系统模型。打开子系统 1,其中包含多个基于速率的任务。
open_system('slrt_ex_mds_subsystem1');

打开子系统 2,其中包含其他基于速率的任务。
open_system('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 运行。
model = 'slrt_ex_mds_and_tasks'; open_system(model); modelSTF = getSTFName(tg); set_param(model,"SystemTargetFile",modelSTF); set_param(model,"StopTime","10"); set_param(model,"RTWVerbose","off"); set_param('slrt_ex_mds_subsystem1',"SystemTargetFile",modelSTF); set_param('slrt_ex_mds_subsystem2',"SystemTargetFile",modelSTF);

要应用显式分区,请在 Simulink 编辑器中,于实时选项卡上,点击硬件设置,然后选择求解器 > 配置任务。选择 Tasks and Mapping 节点。有关详细信息,请参阅为并发执行配置您的模型。

构建、下载并运行模型。
evalc('slbuild(model)');
load(tg,model);
在目标计算机上启动应用程序并对其进行探查
startProfiler(tg); start(tg); pause(2); stopProfiler(tg); stop(tg);
下载探查数据
性能探查数据有助于深入了解应用程序的执行行为和性能瓶颈。
getProfilerData(tg,model,"slrt_ex_mds_and_tasks_profiler_data");
Processing data on target computer ...
.perf 文件采用 Linux perf 格式,可使用标准的 Linux perf 工具进行分析。打开 .perf 文件,以可视化形式查看执行剖析结果,其中包括各内核的任务执行时间和调度信息。利用这些数据来识别 CPU 热点、检测调度延迟并验证时序约束。
关闭模型
bdclose('slrt_ex_mds_subsystem1'); bdclose('slrt_ex_mds_subsystem2'); bdclose(model);
另请参阅
schedule (Embedded Coder) | stopProfiler | startProfiler | resetProfiler | getProfilerData | getAvailableProfile | deleteProfilerData
主题
- 代码探查分析器 (Embedded Coder)