主要内容

本页采用了机器翻译。点击此处可查看英文原文。

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_R1Model1_R2Model1_R3Model1_R4Model2_R1Model2_R3Model2_R4

这些线程以采样率 Ts2*Ts3*Ts4*TsTs3*Ts4*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);

另请参阅

(Embedded Coder) | | | | | |

主题