文档

优化生成的代码通过使用信号标签指导缓冲重用

如果你的模型的最优参数设置删除数据副本,您可以删除额外的数据副本通过使用信号标签。学习后生成的代码和静态代码度量报告和识别领域你认为缓冲重用是可能的,您可以添加标签线信号。如果可能的话,代码生成器重组实现重用块操作规范。

指定缓冲区重用提高执行速度和可能减少内存消耗。

示例模型

该模型rtwdemo_label_guided_reuse演示了如何使用标签请求信号缓冲重用块输入和输出信号。对于这个模型,代码生成器可以使用相同的变量进行原子子系统和增益或饱和块输出。生成的代码使用相同的变量的饱和度和原子子系统块输出包含相同的标签,因为这些信号使用信号标签指导缓冲重用参数被选中。

没有生成代码优化

  1. 打开模型。

    模型=“rtwdemo_label_guided_reuse”;open_system(模型);
  2. 在配置参数对话框中清除使用信号标签指导缓冲重用参数。

  3. 构建的模型。的rtwdemo_label_guided_reuse_step函数包含这个代码:

    空白rtwdemo_label_guided_reuse_step (void) {real_T rtb_Saturation [4];real_T rtb_Bias [4];int32_T我;AtomicSubsystem (rtU。三机一体,rtb_Bias);(我= 0;我< 4;我+ +){如果(rtb_Bias[我]> 10.0){rtb_Saturation[我]= 10.0;}else if (rtb_Bias[我]< -10.0){rtb_Saturation[我]= -10.0;其他}{rtb_Saturation[我]= rtb_Bias[我];}rtb_Bias[我]* = 3.0; } AtomicSubsystem1(rtb_Saturation, rtb_Bias, rtY.Out1); }
    默认情况下,在循环,获得块饱和后执行块。生成的代码使用相同的变量进行原子的输出子系统和增益模块。结果,生成的代码包含了两个局部变量rtb_Saturationrtb_Bias对中间结果。

生成代码的优化

在配置参数对话框中,选择使用信号标签指导缓冲重用参数和建立模型。的rtwdemo_label_guided_reuse_step函数包含这个代码:

空白rtwdemo_label_guided_reuse_step (void) {real_T rtb_Gain1 [4];int32_T我;AtomicSubsystem (rtU。三机一体,rtY.Out1);(我= 0;我< 4;我+ +){rtb_Gain1[我]= 3.0 * rtY.Out1[我];如果(而无。着干活[我]> 10.0){而无。着干活[我]= 10.0;}{如果(而无其他。着干活[我]< -10.0){而无。着干活[我]= -10.0; } } } AtomicSubsystem1(rtY.Out1, rtb_Gain1, rtY.Out1); }

代码生成器改变了块内的执行顺序,这样循环,获得后的饱和块执行块。生成的代码包含一个局部变量rtb_Gain1对中间结果。

除了请求重用缓冲区,另一个可能的用例是请求缓冲块的输入和输出信号的复用,是复杂的。

使用基于标签的重用和可重用定义存储类

您还可以使用相同的可重用的自定义存储类规范不同的信号线路指定缓冲区的重用。相比使用可重用的自定义存储类,使用信号标签指定重用这些好处:

  • 信号标签不是观察点在生成的代码中,所以使用它们不阻止其他优化如死代码消除和表达折叠。

  • 代码生成器并不力信号与一个标签生成的代码的全局变量。信号可以是一个本地或全局变量。

  • 信号与信号,标签可以重用缓冲区没有标签,所以重用本地和全局变量之间是可能的。

使用信号标签是一个更为保守的方法比使用指定的重用可重用的自定义存储类。代码生成器时没有实现基于标签的重用可以实现通过使用重用可重用的在这些情况下自定义存储类:

  • 重用,可以防止其他优化发生在生成的代码。

  • 重用根尺寸和输出港港口。

  • 模型参考或子系统之间重用。

  • 在一个子系统,缓冲重用一个中介信号和一个输入或输出端口上。

另请参阅

相关的话题