主要内容

执行速度

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

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

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

功能

parfor 平行循环
coder.varsize 声明适应数据
coder.const 在生成的代码中,将表达式折叠为常量
coder.inline 在生成的代码中控制特定函数的内联
coder.loop.parallelize 禁用自动并行化循环
coder.unroll 展开-loop方法是为每个循环迭代复制循环体
coder.ceval 调用外部C/ c++函数

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

主题

生成的代码优化

优化策略

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

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

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

优化生成代码中的隐式扩展

默认情况下,生成代码中的隐式扩展是启用的。

memcpy和memset优化

memcpy优化

代码生成器通过使用memcpy

memset优化

代码生成器通过使用memset

适应可变数组

动态内存分配和性能

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

最小化动态内存分配

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

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

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

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

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

设置“动态内存分配阈值”

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

优化动态数组访问

提高生成的C代码中动态数组的执行时间。

阵列布局

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

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

循环

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

生成MEX函数parfor循环。

parfor循环中变量的分类

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

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

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

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

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

在生成的代码中指定要运行并行循环的最大线程数

平行在生成的代码中循环特定数量的可用内核。

parfor循环中的reduce赋值

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

parfor-Loops的控制编译

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

在macOS平台上安装OpenMP库

安装OpenMP库来生成并行循环在macOS平台。

最小化循环中的冗余操作

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

展开for-Loops和parfor-Loops

控制循环展开。

在生成的代码中自动并行化循环

迭代并行循环可以在目标硬件的多个核心上同时运行。

为MATLAB函数生成SIMD代码

使用Intel SSE和Intel AVX技术提高生成代码的执行速度。

函数调用

在生成的代码中避免函数输入的数据副本

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

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

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

将函数调用折叠到常量中

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

数值边界情况

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

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

外部代码集成

生成代码中的LAPACK调用

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

生成代码中的BLAS调用

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

优化生成的代码快速傅里叶变换函数

为您的工作流程和目标硬件选择正确的快速傅里叶变换实现。

集成外部/自定义代码

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

通过使用LAPACK调用加速独立代码中的线性代数

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

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

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

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

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

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

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

故障排除

故障排除parfor-Loops

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

在macOS平台上生成的MEX一直加载在内存中

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

解决问题:数组或变量访问模式不适合并行执行

故障排除由内存访问模式引起的自动并行化失败循环。

特色的例子