优化策略
MATLAB® Coder™ 在从您的 MATLAB 代码生成 C/C++
代码或 MEX
函数时会进行一定的优化。有关详细信息,请参阅MATLAB Coder 对生成代码进行优化。
要进一步优化生成的代码,您可以:
调整您的 MATLAB 代码。
从命令行或工程设置对话框使用配置对象控制代码生成。
要优化生成的代码的执行速度,请针对下列情况根据需要执行相应操作:
条件 | 操作 |
---|---|
您有 for 循环,其迭代彼此独立。 | |
您的 MATLAB 代码中有可变大小数组。 | 最小化动态内存分配 |
您的 MATLAB 代码中有多个可变大小数组。您要为较大的数组使用动态内存分配,为较小的数组使用静态内存分配。 | r |
您要通过引用调用生成的函数。 | Avoid Data Copies of Function Inputs in Generated Code |
您正在调用 MATLAB 代码中的小函数。 | 内联代码 |
您生成的代码的目标内存受限。您要内联小函数并为较大的函数生成单独的代码。 | Control Inlining to Fine-Tune Performance and Readability of Generated Code |
您不希望为仅包含常量的表达式生成代码。 | Fold Function Calls into Constants |
您的 MATLAB 代码中的循环运算不依赖于循环索引。 | Minimize Redundant Operations in Loops |
您的 MATLAB 代码中有整数运算。您事先知道在执行生成的代码期间不会发生整数溢出。 | Disable Support for Integer Overflow |
您事先知道在执行生成的代码期间不会出现 Inf 和 NaN 。 | Disable Support for Nonfinite Numbers |
您有迭代次数很少的 for 循环。 | Unroll for-Loops and parfor-Loops |
您已针对目标环境优化了原有 C/C++ 代码。 | Integrate External/Custom Code |
您希望加快为基本向量和矩阵函数生成的代码的执行速度。 | Speed Up Matrix Operations in Generated Standalone Code by Using BLAS Calls |
您希望加快为线性代数函数生成的代码的执行速度。 | Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK Calls |
您希望加速为快速傅里叶变换 (FFT) 函数生成的代码。 | Speed Up Fast Fourier Transforms in Generated Standalone Code by Using FFTW Library Calls |
要优化生成的代码的内存使用量,请针对下列情况根据需要执行相应操作:
条件 | 操作 |
---|---|
在 MATLAB 代码中有 if/else/elseif 语句或 switch/case/otherwise 语句。您不需要在生成的代码中使用语句的某些分支。 | Prevent Code Generation for Unused Execution Paths |
您要通过引用调用生成的函数。 | Avoid Data Copies of Function Inputs in Generated Code |
您生成的代码的堆栈空间受限。 | Control Stack Space Usage |
您正在调用 MATLAB 代码中的小函数。 | 内联代码 |
您生成的代码的目标内存受限。您要内联小函数并为较大的函数生成单独的代码。 | Control Inlining to Fine-Tune Performance and Readability of Generated Code |
您不希望为仅包含常量的表达式生成代码。 | Fold Function Calls into Constants |
您的 MATLAB 代码中的循环运算不依赖于循环索引。 | Minimize Redundant Operations in Loops |
您的 MATLAB 代码中有整数运算。您事先知道在执行生成的代码期间不会发生整数溢出。 | Disable Support for Integer Overflow |
您事先知道在执行生成的代码期间不会出现 Inf 和 NaN 。 | Disable Support for Nonfinite Numbers |
您的 MATLAB 代码包含大型数组变量或结构体变量。您的变量不会在生成的代码中重用。它们是保留变量。您希望查看保留大型数组或结构体的变量名称所需的额外内存是否会影响性能。 | Reuse Large Arrays and Structures |