主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

向量运算优化

此示例展示了 Simulink®Coder™ 如何通过将生成向量的模块输出设置为标量来优化生成的代码,例如 Mux、Sum、Gain 和 Bus 等模块。此优化通过用局部变量替换临时局部数组来减少堆栈内存。

示例模型

在模型 rtwdemo_VectorOptimization 中,Gain 模块 G1G2 的输出是向量信号 tmp1tmp2。这些向量的宽度为 10。

model = 'rtwdemo_VectorOptimization';
open_system(model);
set_param(model, 'SimulationCommand', 'update')

生成代码

编译模型。

slbuild(model)
### Searching for referenced models in model 'rtwdemo_VectorOptimization'.
### Total of 1 models to build.
### Starting build procedure for: rtwdemo_VectorOptimization
### Successful completion of build procedure for: rtwdemo_VectorOptimization

Build Summary

Top model targets:

Model                       Build Reason                                         Status                        Build Duration
=============================================================================================================================
rtwdemo_VectorOptimization  Information cache folder or artifacts were missing.  Code generated and compiled.  0h 0m 6.3214s 

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 7.1454s

优化后的代码在 rtwdemo_VectorOptimization.c 中。信号 tmp1tmp2 是局部变量 rtb_tmp1rtb_tmp2

cfile = fullfile('rtwdemo_VectorOptimization_grt_rtw',...
    'rtwdemo_VectorOptimization.c');
coder.example.extractLines(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void rtwdemo_VectorOptimization_step(void)
{
  real_T rtb_Sum3_0;
  real_T rtb_tmp1_0;
  real_T rtb_tmp2_0;
  int32_T i;
  for (i = 0; i < 10; i++) {
    /* Gain: '<Root>/G2' incorporates:
     *  UnitDelay: '<Root>/X2'
     */
    rtb_tmp2_0 = 0.3 * rtwdemo_VectorOptimization_DW.X2_DSTATE[i];

    /* Gain: '<Root>/G1' incorporates:
     *  UnitDelay: '<Root>/X1'
     */
    rtb_tmp1_0 = 0.2 * rtwdemo_VectorOptimization_DW.X1_DSTATE[i];

    /* Sum: '<Root>/Sum3' incorporates:
     *  Gain: '<Root>/G3'
     *  Inport: '<Root>/In2'
     *  Sum: '<Root>/Sum1'
     *  Sum: '<Root>/Sum2'
     *  UnitDelay: '<Root>/X3'
     */
    rtb_Sum3_0 = ((rtwdemo_VectorOptimization_U.In2[i] - 0.4 *
                   rtwdemo_VectorOptimization_DW.X3_DSTATE[i]) - rtb_tmp2_0) -
      rtb_tmp1_0;

    /* Outport: '<Root>/Out2' */
    rtwdemo_VectorOptimization_Y.Out2[i] = rtb_Sum3_0;

    /* Update for UnitDelay: '<Root>/X3' */
    rtwdemo_VectorOptimization_DW.X3_DSTATE[i] = rtb_tmp2_0;

    /* Update for UnitDelay: '<Root>/X2' */
    rtwdemo_VectorOptimization_DW.X2_DSTATE[i] = rtb_tmp1_0;

    /* Update for UnitDelay: '<Root>/X1' */
    rtwdemo_VectorOptimization_DW.X1_DSTATE[i] = rtb_Sum3_0;
  }
}

关闭模型和代码生成报告。

bdclose(model)

另请参阅

主题