主要内容

为每个子系统使用多线程模拟

这个例子展示了如何在快速加速器模拟模式中使用For Each子系统加速多个核上模型的执行。

测量单线程模拟时间

在这个模型中,For Each子系统接受一个数字数组输入。数组的每个元素作为每次迭代的上界,并馈送到子系统内部的MATLAB函数块表示的计算密集型算法。在MATLAB函数块中实现的算法使用暴力方法计算给定范围内的最大素数,仅用于说明目的。

modelName =“slexForEachMultithreaded”;open_system (modelName);

默认情况下,for Each子系统的多线程模拟支持是启用的。金宝app要选择退出多线程模拟,发出set_param在MATLAB®命令窗口中的命令。在单线程模拟中,For Each子系统的不同迭代中的计算在每个时间步骤中依次执行。

set_param (modelName“MultithreadedSim”“关闭”);

因为在快速加速器模式下运行会创建文件,所以首先创建一个临时目录并移动到它。

originalDir = pwd;tempDir = tempname;mkdir (tempDir);cd (tempDir);

为模型构建快速加速器目标。代码生成和构建过程的进度显示在MATLAB命令窗口中。要抑制此显示,请将命令包装在其中evalc

evalc (“金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget (modelName)”);

此构建步骤是可选的,因为在您第一次模拟模型时,Simulink®会自动生金宝app成Rapid Accelerator模拟目标。在本例中,此步骤用于将生成Rapid Accelerator目标的开销与实际模型执行时间分开。

一旦快速加速器目标生成,模拟模型和测量模拟时间使用抽搐而且toc

抽搐evalc (“sim (modelName)”);toc
运行时间为38.581149秒。

使用多线程模拟在多核上加速

要显式地选择多线程支持,可以发出金宝appset_param在MATLAB命令窗口中的命令。在多线程模拟中,For Each子系统的不同迭代中的计算被分配给多个核心,并并行执行以加速。

set_param (modelName“MultithreadedSim”“汽车”);

由于模型已重新配置,因此再次构建Rapid Accelerator目标。

evalc (“金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget (modelName)”);

再次模拟模型并测量多线程仿真时间。注意,在具有四个或更多核的机器上,模型模拟的运行速度比单线程模拟快两倍以上。请记住,多线程模拟中的操作系统上下文切换总是会导致额外的开销。

抽搐evalc (“sim (modelName)”);toc
运行时间为16.662714秒。

清理

关闭模型并删除生成的文件。

bdclose (modelName);cd (originalDir);删除目录(tempDir“年代”);清晰的originalDirtempDir

另请参阅

|