基于Simulink实时和多核目标硬件的并发执行金宝app
作者:Abhishek Bhat, MathWorks
实时运行高保真工厂模型进行硬件在环(HIL)仿真有助于减少对硬件原型的需求,从而减少开发时间和成本。然而,模型保真度越高,CPU的风险就越大泛滥-重载目标计算机的CPU。
您可以通过使用c来降低这种风险oncurrent执行.在并发执行中,模型是分区的,每个部分在多核机器上并行执行。通过在目标计算机的多个核心之间平衡计算负载,并发执行提高了实时系统性能,因为它增加了在指定示例时间内可以运行的代码量。
本文以电动汽车模型为例,描述了使用Simulink Real-Time™和Speedgoat双核目标计算机并发执行的工作流。金宝app
我们将首先在单个核心上运行模型,以获得实时性能的基线度量。然后,我们将配置模型以利用多个核心并运行并发执行。单核和多核模拟结果的比较将向我们展示是否存在CPU溢出的风险。
高保真植物模型
在这个例子中,我们将使用一个用Simulink构建的电动汽车模型金宝app®, SimDriveline™,SimElectronics®,以及Simscape™(图1)。
该模型包括以下部分:
- 测试输入-驱动循环(对于本测试,US06驱动循环)
- 操作员和电源管理子系统
- 电池,电力驱动,车辆型号
我们的目标是能够在HIL模拟器上运行这个高保真的工厂模型,这样我们就可以将真实的ECU连接到模拟器并测试其性能。
运行基线模拟
我们首先在单核实时机器上运行电动汽车模型,以获得总执行时间(实时执行模型所需的计算时间)。我们将使用执行时间作为比较单核和多核执行结果的基准。
为了配置Simulink实时模型,我们做以下工作:金宝app
- 选择解算器和采样步长时间——在本例中,是离散解算器,且Ts = 0.001。
- 在配置参数>代码生成选项中将系统目标文件设置为“slrt.tlc”。
- 在“配置参数>代码生成>验证>代码分析”选项中,启用“测量任务执行时间”并选择保存选项“所有测量和分析数据”。
在此之后,我们构建并下载模型到实时机器,并运行它10秒。然后,我们使用以下命令生成一个代码执行分析报告:
% Matlab代码-profileInfo。modelname =“EVdemo_4_RT”;%您的型号名称profData = profile_xpc(profile_info);
分析报告显示模型执行时间的摘要(图2)。
对于基线模型,在代码生成期间,所有的块都被分组为单个任务。因此,分析报告只显示两个任务:计时器中断和基本速率。
报告的右侧显示模型任务的平均执行时间是0.948 ms,而服务触发模型执行的计时器中断所需的时间是~ 0.003 ms。
Execution概要文件显示任务是按顺序执行的(图3)。
总执行时间是服务计时器中断所需的时间和执行模型所需的时间的总和——在本例中,0.948+0.003 =~0.951毫秒。这意味着我们已经使用了95%以上的核心产能。由模型动态引起的执行时间的任何变化都将导致CPU溢出并停止模拟。为了防止这种情况发生,我们将使用并发执行。
为并发执行划分模型
如果模型有多个速率,您可以通过启用配置参数中的“允许任务在目标上并发执行”选项来利用目标硬件的多个核心,而无需重新构造模型。这取决于在每个速率内要完成多少计算工作,也可能不会带来执行时间方面的好处。因为这一步需要最小的配置,所以这是一个很容易尝试的实验。在我们的示例中,整个模型以单一速率运行,因此我们必须显式地对模型进行分区,以便获得多核的好处。
划分模型的方法有很多。在高层次上,模型划分可以基于以下任何一项:
- 速率——基于模型中的多个执行速率(如慢速率、快速率)进行划分
- 物理—基于子系统的物理特性(如发动机模型、传动模型和电气系统)进行分区
- 功能——分离I/O通道和工厂模型组件
由于测试模型是单速率的,并且我们没有使用任何I/O通道,因此我们根据物理特性对模型进行了划分,如下所示:
- 机械部件-车辆模型
- 电气组件-电池模型和DC/DC变换器
- 控件——操作符模型
在显式分区的模型中,每个顶级块必须使用来自Simulink Ports和子系统库的模型引用块(图4)。使用模型引用允许我们在模型级别分离任务。金宝app
配置并发执行模型
要为并发执行配置模型,我们执行以下操作:
- 在Configuration Parameters对话框中的求解器设置下,启用“允许任务在目标上并发执行”并选择“Configure tasks”(图5)。
- 创建三个独立的任务,以便通过单击将每个引用模型分配给单独的任务添加任务按钮(图6)。
- 属性指定各自的引用模型任务与映射选项卡(图7)。
该模型现在已配置为利用多个核心。当模型更新时,分配的任务将显示为左上角的彩色图标。这意味着我们总是可以通过查看顶级模型来查看任务分配。
请注意,以这种方式分配任务将通过在任务之间的边界上添加单元延迟来更改模拟模型的行为。并发执行允许您通过任务转换行上的注释查看这些更改。它还允许您模拟更改后的行为。在模型划分期间,频繁地模拟系统是一个好主意,因为单元延迟会导致工厂模型功能的变化。
使用“构建和下载”按钮,我们将模型下载到Speedgoat实时目标计算机。
并发执行结果
在执行模型10秒之后,我们生成一个新的分析报告(图8)。
报告确认了模型执行已经被分成三个任务,而不是基线模型的单个任务,并且这些任务是并行执行的。还有一个用于附加计时器中断任务的条目。
我们看到Battery_DCDC任务的平均执行时间是最高的。这意味着,从计算的角度来看,该子系统占用了大部分执行时间:如基线模型所示,0.948 ms中的0.789 ms。
由于模型任务现在是并行调度的,因此模型执行所需的总时间仅为0.789+ 0.002 =~ 0.791 - 16.82%,比原来的0.951 ms减少了。
需要注意的是,使用两个内核并不会自动将性能提高50%。实际的性能改进取决于模型的类型和任务的划分方式。此外,多个核心之间的数据传输需要时间,因此创建额外的任务会带来损失。更多的任务允许我们将模型拆分到多个核上,这很好,但是使用多个核也增加了核间通信所需的开销。为了进一步改进,我们可以使用来自Speedgoat的高性能四核目标计算机来代替双核计算机。
总而言之,并发执行允许您利用目标计算机的多个核心实时执行高保真工厂模型。我们看到总执行时间显著减少,这为我们提供了充分的保证,实时执行不会因为CPU溢出而停止。在HIL测试的情况下,减少模型执行时间是有益的,因为这意味着我们可以针对更高保真度的工厂模型测试控制器,这是实际物理系统的更接近的表示。
发布于2015年- 92925v00