主要内容

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

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

测量单线程模拟时间

在这个模型中,For Each子系统接受一个数字数组输入。数组中的每个元素在每次迭代中都充当上界,并将其输入由子系统中的MATLAB函数块表示的计算密集型算法。在MATLAB函数块中实现的算法使用蛮力方法计算给定范围内的最大素数,这只是为了说明的目的。

modelName =“slexForEachMultithreaded”;open_system (modelName);

默认情况下,启用for Each子系统的多线程模拟支持。金宝app若要选择退出多线程模拟,请发出aset_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目标的开销与实际模型执行时间。

一旦快速加速器目标被生成,模拟模型并测量模拟时间抽搐toc

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

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

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

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

再次构建Rapid Accelerator目标,因为模型已经重新配置。

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

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

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

清理

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

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

另请参阅

|