主要内容

比较性能

当仿真执行时间超过代码生成所需的时间时,与普通模式相比,加速器和快速加速器仿真模式可以提高速度。当模拟执行时间为几分钟或更长时,加速器和快速加速器模式通常比普通模式表现得更好。然而,具有大量状态流的模型®MATLAB函数与正常模式相比,块可能只显示出很小的速度改进,因为这些块也通过正常模式下的代码生成进行模拟。

在模型中包含可调参数也会增加模拟时间。

该图显示了一个假设模型的正常模式、加速模式和快速加速模式的一般模拟的相对性能。

必须重建目标时的性能

实线,标记所有目标都过时了,在图中显示了必须重新构建目标代码时的性能。对于这个假设的模型,时间尺度以分钟为单位。然而,对于更复杂的模型,时间尺度可能更长。

在正常模式下编译模型通常比构建加速器目标或快速加速器可执行文件所需的时间更少。对于较小的模拟停止时间,与加速器和快速加速器模式相比,正常模式可以更快地进行整体模拟。

加速模式或快速加速模式导致更快的整体模拟的交叉点取决于模型的复杂性和内容。例如,包含大量使用解释代码的块的模型在加速模式下可能不会比在正常模式下运行得快得多,除非模拟停止时间非常长。有关更多信息,请参见为加速模式选择Blocks.类似地,具有大量状态流图表或MATLAB函数除非模拟停止时间很长,否则块可能不会比正常模式显示出太多的速度提高。您可以使用Stateflow或MATLAB函数通过代码生成块。

该图表示具有大量状态流图表或状态流的模型MATLAB函数块。曲线被标记为正常的如果模型不包含这些块,则初始运行时间将比显示的要小得多。

目标更新时的性能

虚线,标记所有目标都是最新的图中显示,确定加速器目标或快速加速器可执行文件是否为最新的时间明显小于生成代码所需的时间,生成代码由标记为实线的实线表示所有目标都过时了.当您希望测试各种设计权衡时,可以利用这个特性。

例如,您可以生成一次加速器模式目标,并使用它来模拟具有一系列增益设置的模型。此方法对于加速或快速加速模式特别有效,因为这种类型的更改不会导致重新生成目标代码。目标代码是在模型第一次运行时生成的,但是在随后的运行中,软件只花费必要的时间来验证目标是最新的。此过程比生成代码快得多,因此后续运行可能比初始运行快得多。

因为检查目标比生成代码要快,所以当目标是最新的时候,交叉点比必须生成代码的时候要小。与正常模式相比,在加速或快速加速模式下,您的模型的后续运行可能会模拟得更快,即使停机时间很短。

分析仿真模式的性能

要查看使用加速器或快速加速器模式模拟模型的效果,可以使用不同的模拟模式运行等效的模拟,并检查在模拟元数据中捕获的时间信息。

本例使用该模型sldemo_fuelsys.有关该模型的更多信息,请参见一个容错燃油控制系统的建模

模型=“sldemo_fuelsys”

要配置基线模拟,请创建金宝app仿真软件。SimulationInput对象。设置停止时间为10000

simIn = 金宝appSimulink.SimulationInput(model);simIn = setModelParameter(simIn,“StopTime”“10000”);

要获取基线计时信息,请使用正常模式模拟模型。

simOut = sim(simIn);

金宝app仿真软件。SimulationOutput对象包含金宝app仿真软件。SimulationMetadata对象具有有关仿真的信息,包括时序信息的结构、TimingInfo

normalMode = simOut.SimulationMetadata.TimingInfo;

从计时信息中提取模拟的初始化时间、执行时间和总运行时间。

normalInit = normalMode.InitializationElapsedWallTime;normalExec = normalMode.ExecutionElapsedWallTime;normalTotal = normalMode.TotalElapsedWallTime;

使用快速加速模式再次模拟模型。第一次在快速加速模式下模拟模型时,快速加速目标将在初始化阶段构建。

simIn = setModelParameter(simIn,“SimulationMode”“快速”);simOut = sim(simIn);
###为模型构建快速加速器目标:sldemo_fuelsys成功构建模型快速加速器目标:sldemo_fuelsys构建摘要顶级模型快速加速器目标构建:模型动作重建原因=============================================================================================== sldemo_fuelsys生成和编译代码生成信息文件不存在。构建1个模型中的1个(0个已经更新的模型)构建持续时间:0h 0m 48.581s

访问第一次快速加速器模拟的定时信息。然后,提取模拟的初始化时间、执行时间和总运行时间。

快速加速= simOut.SimulationMetadata.TimingInfo;rapidBuildInit = rapidaccelerator . initializationelapsedwalltime;rapidBuildExec = rapidaccelerator . executionelapsedwalltime;rapidBuildTotal = rapidaccelerator . totalelapsedwalltime;

再次进行模拟,以了解快速加速模式对于不构建快速加速目标的模拟的好处。

simOut = sim(simIn);
构建总结1个模型中的0个(1个模型已经更新)构建持续时间:0h 0m 1.7911s

访问在没有建立目标的情况下运行的快速加速器模拟的定时信息。然后,提取模拟的初始化时间、执行时间和总运行时间。

rapidAccelNoRebuild = simOut.SimulationMetadata.TimingInfo;rapidInit = rapidAccelNoRebuild.InitializationElapsedWallTime;rapidExec = rapidAccelNoRebuild.ExecutionElapsedWallTime;rapidTotal = rapidAccelNoRebuild.TotalElapsedWallTime;

构建一个表来比较每个模拟的时间。

InitializationTime = [normalInit;rapidBuildInit;rapidInit];ExecutionTime = [normalExec;rapidBuildExec;rapidExec];TotalSimulationTime = [normalTotal;rapidBuildTotal;rapidTotal];simNames = [“正常模式”“快速加速器”“快速加速器无需重建”];timingTable = table(TotalSimulationTime,InitializationTime,ExecutionTime RowNames = simNames);

在第一个快速加速器模拟中,初始化时间增加,因为在初始化阶段构建快速加速器目标。对于这个模型和仿真持续时间,使用快速加速器模式大大减少了执行时间,以至于第一次快速加速器仿真仍然比使用普通模式快。

timingTable
timingTable =3×3表TotalSimulationTime InitializationTime ExecutionTime ___________________ __________________ _____________正常模式92.268 5.8193 86.356快速加速器61.405 50.257 10.895快速加速器不重建12.662 2.2544 10.33

相关的话题