主要内容

执行速度

提高生成C/ c++代码的执行速度

使用代码生成选项和优化来提高生成代码的执行速度。您可以修改或禁用动态内存分配,这可能会影响执行速度。并行化代码可以通过使用parfor循环。在可用的情况下,利用预先存在的优化C代码和专门的库来加速执行。

有关如何针对特定条件优化代码的更多信息,请参阅优化策略

功能

parfor 平行的循环
coder.varsize 声明适应数据
编码常数 在生成的代码中,将表达式折叠为常量
coder.inline 在生成的代码中控制内联
coder.unroll 展开-通过为每个循环迭代制作循环体的副本来循环
塞瓦尔编码员 调用外部C/ c++函数

编码器。LAPACKCallback 抽象类,用于在生成的代码中为LAPACK调用指定LAPACK库和LAPACKE头文件
编码器。BLASCallback 抽象类,用于在生成的代码中为BLAS调用指定BLAS库、CBLAS头和数据类型信息
coder.fftw.StandaloneFFTW3Interface 用于在生成的代码中为FFTW调用指定FFTW库的抽象类

示例和如何

可变大小数组

最小化动态内存分配

通过最小化动态内存分配来缩短执行时间。

为可变大小数组提供最大大小

使用技术帮助代码生成器确定可变大小数组的上限。

在代码生成期间禁用动态内存分配

在应用程序或命令行中禁用动态内存分配。

设置动态内存分配阈值

为小于一定大小的数组禁用动态内存分配。

循环

使用并行for循环生成代码(parfor)

生成一个在共享内存多核平台上并行运行的循环。

指定parfor循环中的最大线程数

生成一个MEX函数,在特定数量的可用核上并行执行循环迭代。

parfor循环的控件编译

治疗parfor循环,parfor-在单个线程上运行的循环。

在macOS平台上安装OpenMP库

安装OpenMP库来生成并行循环在马科斯站台。

最小化循环中的冗余操作

如果可能的话,将操作移到循环之外。

展开for循环

控制循环展开。

函数调用

避免在生成的代码中复制函数输入的数据

生成通过引用传递输入参数的代码。

控制内联以微调生成代码的性能和可读性

内联消除了函数调用的开销,但可以生成更大的C/C++代码并降低代码可读性。

将函数调用折叠为常量

通过在生成的代码中用常量替换表达式来减少执行时间。

数值边界情况

禁用对整数溢出或金宝app非有限值的支持

通过抑制生成处理整数溢出或非有限的支持代码来提高性能。金宝app

外部代码集成

集成外部/自定义代码

通过集成您自己的优化代码来提高性能。

使用LAPACK调用在生成的独立代码中加速线性代数

生成特定线性代数函数的LAPACK调用。指定LAPACK库要使用。

通过使用BLAS调用在生成的独立代码中加速矩阵运算

为某些低级矩阵操作生成BLAS调用。指定要使用的BLAS库。

通过使用FFTW库调用加速生成的独立代码中的快速傅里叶变换

生成用于快速傅里叶变换的FFTW库调用。指定FFTW库。

在生成的独立代码中同步对FFTW规划的多线程访问

实现FFT库回调类方法,并提供支持C代码,以防止并发访问FFTW计划。金宝app

概念

优化策略

优化生成代码的执行速度或内存使用。

动态内存分配与性能

动态内存分配会降低执行速度。

并行for循环算法加速(parfor)

为生成MEX函数parfor循环。

parfor循环中变量的分类

内部变量parfor循环分为循环、切片、广播、减少或临时。

parfor循环中的归约赋值

reduce变量累积一个依赖于所有循环迭代的值。

生成代码中的MATLAB编码器优化

为了提高所生成代码的性能,代码生成器使用了优化。

memcpy优化

代码生成器通过使用memcpy

memset优化

代码生成器通过使用清零

生成代码中的LAPACK调用

LAPACK函数调用提高了某些线性代数函数生成代码的执行速度。

生成代码中的BLAS调用

BLAS函数调用提高了为某些低级向量和矩阵操作生成的代码的执行速度。

生成使用行主数组布局的代码

用连续存储在内存中的行元素生成C/ c++代码。

故障排除

故障排除parfor-Loops

诊断代码生成的错误parfor循环。

在macOS平台上生成的MEX将保留在内存中

故障排除的问题,发生时的源代码MATLAB®代码包含全局变量或持久变量,这些变量可从parfor循环。

特色的例子