执行速度
提高生成的C/ c++代码的执行速度
使用代码生成选项和优化来提高生成代码的执行速度。您可以修改或禁用动态内存分配,这可能会影响执行速度。并行代码可以通过使用parfor
循环。如果可用,可以利用现有的优化C代码和专门的库来加快执行速度。
有关如何针对特定条件优化代码的详细信息,请参见优化策略。
功能
parfor |
平行为 循环 |
coder.varsize |
声明可变大小的数据 |
coder.const |
在生成的代码中将表达式折叠为常量 |
coder.inline |
在所生成的代码中控制特定函数的内联 |
coder.loop.parallelize |
的自动并行化为 循环 |
coder.unroll |
展开为 通过为每次循环迭代复制循环体 |
coder.ceval |
调用外部C/ c++函数 |
类
编码器。LAPACKCallback |
抽象类,用于在生成的代码中为LAPACK调用指定LAPACK库和LAPACKE头文件 |
编码器。BLASCallback |
抽象类,用于在生成的代码中为BLAS调用指定BLAS库和CBLAS报头和数据类型信息 |
coder.fftw.StandaloneFFTW3Interface |
抽象类,用于在生成的代码中为FFTW调用指定FFTW库 |
主题
生成的代码优化
- 优化策略
优化生成代码的执行速度或内存使用。 - 生成代码中的MATLAB编码器优化
为了提高所生成代码的性能,代码生成器使用优化。 - 优化生成代码中的隐式展开
默认情况下,在生成的代码中启用隐式展开。
适应可变数组
- 动态内存分配和性能
动态内存分配会降低执行速度。 - 最小化动态内存分配
通过最小化动态内存分配来改善执行时间。 - 为可变大小的数组提供最大大小
使用技术帮助代码生成器确定可变大小数组的上限。 - 在代码生成过程中禁用动态内存分配
在应用程序或命令行中禁用动态内存分配。 - 设置“内存动态分配阈值”
禁用小于特定大小的数组的动态内存分配。 - 优化动态数组访问
改进生成的C代码中动态数组的执行时间。
阵列布局
- 生成使用行主数组布局的代码
生成C/ c++代码,其中行元素连续存储在内存中。
循环
- 使用并行for循环的算法加速
生成以下的MEX函数parfor
循环。 - parfor-Loops中的变量分类
内部变量parfor
-loops分为循环、切片、广播、缩减和临时。 - 使用并行for循环生成代码(parfor)
生成一个在共享内存多核平台上并行运行的循环。 - 指定parfor-Loops中的最大线程数
生成一个MEX函数,在特定数量的可用内核上并行执行循环迭代。 - 在生成的代码中指定并行for循环运行的最大线程数
平行为
-循环生成的代码中特定数量的可用内核。 - parfor-Loops中的约简赋值
减少变量累积一个值,该值取决于所有循环迭代。 - parfor-Loops的控件编译
治疗parfor
循环,parfor
在单个线程上运行的-循环。 - 在macOS平台上安装OpenMP库
安装OpenMP库生成并行为
循环在macOS平台。 - 尽量减少循环中的冗余操作
尽可能将操作移到循环之外。 - 展开for-Loops和parfor-Loops
控制环展开。 - 自动并行化生成代码中的循环
并行迭代为
循环可以在目标硬件上的多个核上同时运行。 - 生成MATLAB函数的SIMD代码
使用Intel提高生成代码的执行速度®SSE和英特尔AVX技术。
函数调用
- 在生成的代码中避免函数输入的数据副本
生成通过引用传递输入参数的代码。 - 控制内联以优化生成代码的性能和可读性
内联消除了函数调用的开销,但会产生更大的C/ c++代码,并降低代码的可读性。 - 将函数调用折叠为常量
通过在生成的代码中用常量替换表达式来减少执行时间。
数值边缘情况
- 禁用对整数溢出或金宝app非有限的支持
通过抑制生成处理整数溢出或非有限的支持代码来提高性能。金宝app
外部代码集成
- LAPACK调用生成的代码
LAPACK函数调用提高了为某些线性代数函数生成的代码的执行速度。 - BLAS在生成的代码中调用
BLAS函数调用提高了为某些低级向量和矩阵操作生成的代码的执行速度。 - 优化快速傅里叶变换函数的生成代码
为您的工作流程和目标硬件选择正确的快速傅里叶变换实现。 - 集成外部/自定义代码
通过集成您自己优化的代码来提高性能。 - 通过使用LAPACK调用加速生成的独立代码中的线性代数
为某些线性代数函数生成LAPACK调用。指定要使用的LAPACK库。 - 通过使用BLAS调用加速生成的独立代码中的矩阵操作
为某些低级矩阵操作生成BLAS调用。指定要使用的BLAS库。 - 通过使用FFTW库调用加速生成的独立代码中的快速傅里叶变换
生成FFTW库调用快速傅里叶变换。指定FFTW库。 - 在生成的独立代码中同步多线程访问FFTW规划
实现FFT库回调类方法,并提供支持的C代码,以防止并行访问FFTW规划。金宝app
故障排除
的代码生成诊断错误parfor
循环。
排除源MATLAB时出现的问题®类的体中可访问的全局变量或持久变量parfor
循环。