文档

在块输出中最小化中间结果的计算和存储

表达折叠

表达折叠优化代码,以最小化块输出时中间结果的计算以及在临时缓冲区或变量中存储这些结果。当表达式折叠开启时,代码生成器将块计算折叠到一个表达式中,而不是为模型中的每个块生成单独的代码语句和存储声明。大多数Si金宝appmulink块都支持表金宝app达式折叠。

表达式折叠提高了生成代码的效率,经常可以获得比手工优化代码更好的结果。在许多情况下,整个模型计算组折叠成一个单一的、高度优化的代码行。

您可以在自己的内联s函数块中使用表达式折叠。有关更多信息,请参见支持表达式折叠的s函数金宝app(金宝app仿真软件编码器)。

示例模型

生成代码

用表情折掉,在explfld.c文件时,代码生成器生成此代码。

/* Model step function */ void exprfld_step(void) {/* Gain: '/Gain'合并:* import: '/In1' */ exprfld_B. */ exprfld_B. */S1 = exprfld_P。Gain_Gain * exprfld_U.i1;/* import: '/In2' */ exprfld_B. conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf。S2 = exprfld_P。Gain1_Gain * exprfld_U.i2;/* Outport: '/Out1'合并:* Product: '/Product' */ exprfld_Y。着干活= exprfld_B。S1 * exprfld_B.S2;}

两个Gain块都有单独的代码语句。在最终输出之前,这些代码语句为Gain块计算临时结果。

启用优化

默认情况下,表达式折叠是开启的。要查看现有模型是否开启了表达式折叠:

  1. 表达式折叠仅在配置参数>信号存储重用之所以选择参数,是因为表达式折叠仅对涉及局部变量的表达式进行操作。启用信号存储重用范围。

  2. 当你选择信号存储重用,启用本地块输出重用局部块输出,消除多余的局部变量(表达式折叠)默认情况下,所有参数都是开启的。

优化生成代码

通过表达式折叠,代码生成器会产生单行输出计算,如图所示expfld.c文件。生成的注释记录了表达式中出现的块参数。

/* Model step function */ void exprfld_step(void) {/* Outport: '/Out1'合并:* Gain: '/Gain' * Gain: '/Gain1' * Inport: '/In1' * Inport: '/In2' * Product: '/Product' */ exprfld_Y。着干活= exprfld_P。Gain_Gain * exprfld_U。i1 * (exprfld_P。Gain1_Gain * exprfld_U.i2);}

有关在更复杂模型的上下文中进行表达式折叠的示例,请单击rtwdemo_slexprfold,或在命令提示符处输入:

rtwdemo_slexprfold

有关更多信息,请参见在生成的代码中启用和重用本地块输出(金宝app仿真软件编码器)

另请参阅

|||

相关话题