优化生成的 C/C++ 和 MEX 代码
默认情况下,从 MATLAB® 代码生成 C/C++ 代码或 MEX 函数时,MATLAB Coder™ 会进行优化。有关详细信息,请参阅MATLAB Coder 对生成代码进行优化。
要进一步优化生成的代码,您可以:
调整您的 MATLAB 代码。
从命令行或工程设置对话框使用配置对象控制代码生成。
代码优化是使用 MATLAB Coder 进行代码生成的概述中的可选步骤。
优化速度的策略
使用下表确定如何优化生成代码的执行速度。
| 条件 | 操作 |
|---|---|
您的代码有 for 循环,这些循环的迭代相互独立。 | Automatic Parallelization of for-Loops in the Generated Code |
| 您的 MATLAB 代码中有可变大小数组。 | 最小化动态内存分配 |
| 您的 MATLAB 代码中有多个可变大小数组。您要为较大的数组使用动态内存分配,为较小的数组使用静态内存分配。 | 设置动态内存分配阈值 |
| 您要按引用传递生成代码中的变量。 | 避免在生成的代码中存在函数输入的数据副本 |
| 您要通过内联大多数或全部函数,以牺牲内存使用量为代价来最大化速度。 | Control Inlining to Fine-Tune Performance and Readability of Generated Code |
| 您不希望为仅包含常量的表达式生成代码。 | 在生成的代码中将函数调用折叠为常量 |
| 您的 MATLAB 代码中的循环运算不依赖于循环索引。 | Minimize Redundant Operations in Loops |
| 您在 MATLAB 代码中有整数运算,并且您知道在执行生成的代码期间不会发生整数溢出。 | Disable Support for Integer Overflow |
| 您知道生成的代码不使用非有限数 | 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 代码使用条件语句,但在生成的代码中不需要使用这些语句的某些分支。 | Prevent Code Generation for Unused Execution Paths |
| 您要按引用传递生成代码中的变量。 | 避免在生成的代码中存在函数输入的数据副本 |
| 代码生成目标上的堆栈空间受限。 | Control Stack Space Usage |
| 由于您在代码生成目标上的内存受限,您要避免使用许多变量的内联函数。 | Control Inlining to Fine-Tune Performance and Readability of Generated Code |
| 您不希望为仅包含常量的表达式生成代码。 | 在生成的代码中将函数调用折叠为常量 |
| 您的 MATLAB 代码中的循环运算不依赖于循环索引。 | Minimize Redundant Operations in Loops |
| 您在 MATLAB 代码中有整数运算,并且您知道在执行生成的代码期间不会发生整数溢出。 | Disable Support for Integer Overflow |
| 您知道生成的代码不使用非有限数 | Disable Support for Nonfinite Numbers |
| 您要优化大型结构体或数组变量的内存使用量,即使这会降低代码的可读性。 | Reuse Large Arrays and Structures |