主要内容

植物模型的多核部署

这个示例演示了如何利用图形分区在多核处理器上执行多线程代码。这个例子需要Simulink®Coder™来万博1manbetx生成多线程代码。

概述

基于模型的设计的一个目标是创建物理系统的真实模型,并实时仿真这些模型,例如,使用硬件在环(HIL)来验证控制器。然而,随着更多的特性被添加到工厂模型中,计算需求可能超过单核处理系统可用的资源。

将设备和控制器分割成单独的部分是解决复杂模型计算需求的一种方法。使用Sim万博1manbetxulink®,您可以使用Model块划分植物,然后将每个子模型生成的代码分配给线程,以便在Simulink real-time™等HIL系统上进行实时执行。为了了解它是如何工作的,让我们使用我们的主机作为实时执行环境的替身,并为以下模型生成实时多线程代码。

slexMulticoreSolverExample

对称多核处理

上面的插图显示了为模型生成的代码被分成两个线程。在本例中,目标被假定为一个对称多核处理器,这样线程就不会与任何特定的核心相关联。操作系统负责在调度线程执行时最大限度地利用内核。理想情况下,为了提供最大的灵活性,线程数(Nt)应该大于核数(Nc)。双击“生成代码和概要报告”按钮来生成多线程代码,概要其执行并可视化结果。可视化显示了核心占用图,显示了在执行的每个时间步骤中如何利用核心。可以看到,操作系统调度程序认为线程跨内核浮动是最好的。当操作系统还需要运行其他进程时,这种调度是很好的。

线程同步

万博1manbetxSimulink®Coder™生成的代码,使两个线程可以同时执行,并可能在两个不同的核心上。这意味着信号值为x_1美元x_2美元必须在两个线程之间同步。万博1manbetxSimulink®提供了几个选项来处理这一要求,如图所示:

使用下面的脚本,我们将模拟和演示确定性模式的效果,以理解Simulink®如何处理同步。万博1manbetx

  • 参考解决方案(ode3) - Simulink®被配置为万博1manbetx通过在每个主要和次要时间步同步数据来提供参考解决方案。

  • 零阶保持——每个线程使用自己的求解器求解一个方程组的子系统,而只在主要的时间步骤上同步数据。

  • 线性外推——除了零阶保持模式,每个求解器使用线性预测外推数据,以补偿数据延迟错误。

对于大多数同步点平滑的系统,线性外推模式提供了通信瓶颈和数值精度之间的良好权衡。

h =图;hVal = ishold;持有;mdl =“slexMulticoreSolverExample”;dt = get_param (mdl“DataTransfer”);模式= {...“确保确定性传输(最小延迟)”...“没有”凯西:”...“确保确定性传输(最大延迟)”...“零阶保持器”“米”...“确保确定性传输(最大延迟)”...“线性”“b”...};我= 1:3:长度dt(模式)。DefaultTransitionBetweenContTasks ={我}模式;dt。DefaultExtrapolationMethodBetweenContTasks = {i + 1}模式;= sim (mdl);情节(out.logsout.get (x1的) .Values.Time,...out.logsout.get (x1的) .Values.Data,...模式{我+ 2});结束传奇(“参考解决方案(ode3)”...“零阶保持外推”...线性外推的);

关闭模式

close_system (“slexMulticoreSolverExample”, 0);close_system (“slexMulticoreSolverMdlref”, 0);如果~ hVal,持有结束删除(h);