主要内容

植物模型的多核部署

这个例子说明了如何利用图形分区在多核处理器上执行多线程代码。这个例子需要Simulink®Coder™来金宝app生成多线程代码。

概述

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

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

slexMulticoreSolverExample

对称多核处理

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

线程同步

金宝appSimulink®Coder™生成的代码可以使两个线程同时执行,并且可能在两个不同的内核上执行。这意味着信号值为x_1美元而且x_2美元必须在两个线程之间同步。金宝appSimulink®提供了几个选项来处理这一需求,如下所示:

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

  • 参考解决方案(ode3) - Simulink®配置为通金宝app过在每个主要和次要时间步骤同步数据来提供参考解决方案。

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

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

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

H =数字;hVal = ishold;持有;mdl =“slexMulticoreSolverExample”;Dt = get_param(mdl,“DataTransfer”);模式= {...确保确定性传输(最小延迟)...“没有”凯西:”...确保确定性传输(最大延迟)...“零订单保持器”“米”...确保确定性传输(最大延迟)...“线性”“b”...};我= 1:3:长度dt(模式)。DefaultTransitionBetweenContTasks = modes{i};dt。DefaultExtrapolationMethodBetweenContTasks = modes{i+1};Out = 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);