这个示例展示了如何在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;