主要内容

coder.CodeConfig

MATLAB 代码生成 C/C++ 代码的配置参数

说明

coder.CodeConfig 对象包含 codegen 用于生成静态库、动态链接库或可执行程序的配置参数。使用 -config 选项将对象传递给 codegen 函数。

创建对象

通过使用 coder.config 函数创建一个 coder.CodeConfig 对象。

创建 coder.CodeConfig 对象后,您可以在命令行以编程方式修改其属性,也可以使用配置参数对话框以交互方式修改其属性。请参阅Specify Code Configuration Parameters Interactively

属性

全部展开

工具链的编译器优化或调试设置,指定为 'Faster Runs''Faster Builds''Debug''Specify'。有关详细信息,请参阅编译配置

动态数组优化,指定为 truefalse。有关详细信息,请参阅缓存动态数组数据

生成代码的格式化工具,指定为 'Auto''Clang-format''MathWorks'。有关详细信息,请参阅选择要使用的代码格式工具

生成代码的代码替换库,指定为字符向量。有关详细信息,请参阅代码替换库

用于编译时递归的最大函数特化数,指定为正整数。有关详细信息,请参阅编译时递归限制

常量折叠器执行的最大指令数,指定为正整数。有关详细信息,请参阅常量折叠超时

是否生成包含枚举类的 C++ 代码,指定为 truefalse。有关详细信息,请参阅从 MATLAB 枚举生成 C++ 枚举类

当您生成 C++ 代码且 CppInterfaceStyle 设置为 'Methods' 时的接口类名称,指定为字符向量。有关详细信息,请参阅 C++ 接口类名称

为您从其生成代码的 MATLAB 入口函数生成的 C++ 代码的接口样式,指定为 'Functions''Methods'。有关详细信息,请参阅接口样式

生成的 C++ 代码的命名空间,指定为字符向量。有关详细信息,请参阅 C++ 命名空间

为 MathWorks 代码生成的 C++ 代码的命名空间,指定为字符向量。有关详细信息,请参阅 MathWorks 代码的命名空间

是为 MATLAB 类生成 C++ 类还是 C 样式结构体,指定为 truefalse。有关详细信息,请参阅从 MATLAB 类生成 C++ 类

是否为您的 MATLAB 代码中的命名空间生成 C++ 命名空间,指定为 truefalse。有关详细信息,请参阅从 MATLAB 命名空间生成 C++ 命名空间

在为 MATLAB 代码中的某些低级向量和矩阵运算生成的代码中,BLAS 库调用的回调类,指定为字符向量。有关详细信息,请参阅自定义 BLAS 库回调

在 MATLAB 代码中为 FFT 函数生成的代码中,FFTW 库调用的回调类,指定为字符向量。有关详细信息,请参阅自定义 FFT 库回调

出现在从您的 MATLAB 代码生成的每个 C/C++ 头文件(rtwtypes.hrtwhalf.h 除外)顶部附近的自定义代码,指定为字符向量。有关详细信息,请参阅头文件

在编译生成代码时要添加到包含路径中的包含文件夹,指定为字符串数组、字符向量元胞数组或字符向量。有关详细信息,请参阅其他包含目录

要包含在生成的初始化函数中的自定义代码,指定为字符向量。有关详细信息,请参阅初始化函数

在为 MATLAB 代码中的某些线性代数函数生成的代码中,LAPACK 库调用的回调类,指定为字符向量。有关详细信息,请参阅自定义 LAPACK 库回调

要与生成代码链接的静态库文件,指定为字符串数组、字符向量元胞数组或字符向量。有关详细信息,请参阅其他库

要编译并与生成代码链接的源文件,指定为字符串数组、字符向量元胞数组或字符向量。有关详细信息,请参阅其他源文件

位于任何函数外部且出现在每个生成的 .c.cpp 文件(rtwhalf.crtwhalf.cpp 除外)顶部附近的代码,指定为字符向量。有关详细信息,请参阅源文件

出现在生成的终止函数中的代码,指定为字符向量。有关详细信息,请参阅终止函数

选定工具链中工具的自定义设置,指定为元胞数组。有关详细信息,请参阅自定义工具链选项

生成代码中的数据类型替换,指定为 'CBuiltIn''CoderTypeDefs'。有关详细信息,请参阅数据类型替换

用于深度学习网络的代码生成的配置对象,指定为下表中的对象之一。

对象需要描述
coder.MklDNNConfig

  • Deep Learning Toolbox™

  • MATLAB Coder™ Interface for Deep Learning 支持包

coder.MklDNNConfig 对象包含特定于使用 Intel® MKL-DNN 的深度学习 C++ 代码生成的参数。要创建 coder.MklDNNConfig 对象,请使用 coder.DeepLearningConfig。例如:

cfg = coder.config('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');

请参阅使用 MKL-DNN 的深度学习网络的代码生成

coder.ARMNEONConfig

  • Deep Learning Toolbox

  • MATLAB Coder Interface for Deep Learning 支持包

coder.ARMNEONConfig 对象包含特定于使用 ARM® Compute Library 的深度学习 C++ 代码生成的参数。要创建 coder.ARMNEONConfig 对象,请使用 coder.DeepLearningConfig。例如:

cfg = coder.config('lib');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('arm-compute');

请参阅Code Generation for Deep Learning Networks with ARM Compute Library

coder.CuDNNConfig (GPU Coder)

  • Deep Learning Toolbox

  • GPU Coder™

  • GPU Coder Interface for Deep Learning 支持包

coder.CuDNNConfig 对象包含特定于使用 cuDNN 库的深度学习 CUDA® 代码生成的参数。要创建 coder.CuDNNConfig 对象,请使用 coder.DeepLearningConfig。例如:

cfg = coder.gpuConfig('lib');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');

请参阅Code Generation for Deep Learning Networks by Using cuDNN (GPU Coder)

coder.TensorRTConfig (GPU Coder)

  • Deep Learning Toolbox

  • GPU Coder

  • GPU Coder Interface for Deep Learning 支持包

coder.TensorRTConfig 对象包含特定于使用 TensorRT 库的深度学习 CUDA 代码生成的参数。要创建 coder.TensorRTConfig 对象,请使用 coder.DeepLearningConfig。例如:

cfg = coder.gpuConfig('lib');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('tensorrt');

请参阅Code Generation for Deep Learning Networks by Using TensorRT (GPU Coder)

依赖关系:如果设置了 DeepLearningConfig,则 codegenTargetLang 设置为 C++

对象描述,指定为字符向量。

动态内存分配模式,指定为下表中的值之一。

描述
'Threshold'

此值是默认值。

代码生成器会在堆上为大小(以字节为单位)大于或等于 DynamicMemoryAllocationThreshold 的可变大小数组动态分配内存。

'AllVariableSizeArrays'代码生成器在堆上为所有可变大小数组动态分配内存。
'Off'

代码生成器在堆栈上静态分配可变大小数组的内存。

无界可变大小数组需要动态内存分配。

依赖关系:

  • EnableVariableSizing 启用此参数。

  • 将此 DynamicMemoryAllocation 设置为 'Threshold' 会启用 DynamicMemoryAllocationThreshold 参数。

请参阅可变大小数组的代码生成

注意

DynamicMemoryAllocation 配置对象属性将在以后的版本中删除。要为可变大小数组动态分配内存,请使用 EnableDynamicMemoryAllocation 属性。使用 DynamicMemoryAllocationThreshold 属性设置动态内存分配阈值。

固定大小数组的动态内存分配,指定为 falsetrue。有关详细信息,请参阅对固定大小数组启用动态内存分配

生成的 C/C++ 函数接口处的动态分配数组的实现,指定为 'Auto''C''C++'。有关详细信息,请参阅动态内存分配接口

可变大小数组的动态内存分配的大小阈值,指定为正整数。有关详细信息,请参阅动态内存分配阈值

自动外部函数调用,指定为 truefalse。有关详细信息,请参阅自动引入外部调用

for 循环的自动并行化,指定为 falsetrue。有关详细信息,请参阅启用自动并行化

for 循环的自动并行化的报告,指定为 truefalse。有关详细信息,请参阅启用自动并行化报告

可变大小数组的动态内存分配,指定为 truefalse。有关详细信息,请参阅启用动态内存分配

生成代码中的隐式扩展功能,指定为 truefalse。有关详细信息,请参阅启用隐式扩展

memcpy 优化,指定为 truefalse。有关详细信息,请参阅使用 memcpy 进行向量赋值

parfor 循环的并行化,指定为 truefalse。有关详细信息,请参阅尽可能启用 OpenMP 库

运行时递归支持,指定为 truefalse。有关详细信息,请参阅启用运行时递归

可变大小数组支持,指定为 truefalse。有关详细信息,请参阅启用可变大小

文件分区模式,指定为 'MapMFileToCFile''SingleFile'。有关详细信息,请参阅生成文件的分区方法

仅生成源代码,指定为 truefalse。有关详细信息,请参阅仅生成代码

生成代码中的注释,指定为 truefalse。有关详细信息,请参阅包括注释

示例 C/C++ 主文件生成,指定为 'GenerateCodeOnly''DoNotGenerate''GenerateCodeAndCompile'。有关详细信息,请参阅生成示例主函数文件

编译过程中的联编文件生成,指定为 truefalse。有关详细信息,请参阅生成联编文件

生成非有限数据的支持文件,指定为 truefalse。有关详细信息,请参阅生成非有限值的支持文件(使用时)

代码生成报告,指定为 falsetrue。有关详细信息,请参阅始终创建报告

使用 GPU Coder 生成 CUDA GPU 代码的配置对象。GpuCodeConfig 对象包含特定于 CUDA GPU 代码生成的参数。要创建 GpuCodeConfig 对象,请使用 coder.gpuConfig (GPU Coder)。例如:

cfg = coder.gpuConfig('lib');
cfg.GpuConfig

ans =
   GpuCodeConfig with properties:

                    Enabled: 1
                 MallocMode: 'discrete'
           KernelNamePrefix: ''
               EnableCUBLAS: 1
             EnableCUSOLVER: 1
                EnableCUFFT: 1
               Benchmarking: 0
                  SafeBuild: 0
          ComputeCapability: 'Auto'
    CustomComputeCapability: ''
              CompilerFlags: ''
        StackLimitPerThread: 1024
            MallocThreshold: 200
     MaximumBlocksPerKernel: 0
        EnableMemoryManager: 1
           SelectCudaDevice: -1

有关详细信息,请参阅Generate Code Using the Command Line Interface (GPU Coder)

如果设置了 GpuConfig,则代码生成器对 GPU 代码生成所需的某些属性使用固定值。某些属性也具有不同默认值。有关详细信息,请参阅Configure GPU Code Generation (GPU Coder)

指定硬件板的对象。要创建 coder.Hardware 对象,请使用 coder.hardware。例如:

cfg = coder.config('lib');
hw = coder.hardware('Raspberry Pi');
cfg.Hardware = hw;

在使用 coder.hardware 之前,您必须安装适用于硬件的支持包。

依赖关系:

  • 设置 Hardware 会为特定硬件板自定义硬件实现对象和其他配置参数。

  • 如果 DeepLearningConfig 设置为 coder.ARMNEONConfig 对象且 Hardware 为空,则 codegenGenCodeOnly 属性设置为 true

注意:

  • 假设您在一个 MATLAB 会话中创建 coder.CodeConfig 对象 cfg 并在另一个 MATLAB 会话中使用它。如果第二个会话的 MATLAB 主机未安装在 cfg.Hardware 属性中指定的硬件板,此参数将恢复为使用默认值。默认值为 []。在 App 中将硬件板选项设置为 MATLAB 主机等效于使用 cfg.Hardwarecfg.HardwareImplementation.ProdHWDeviceType 及其默认值。

指定 C/C++ 代码生成的硬件特定配置参数的硬件实现对象。coder.config 创建一个 coder.CodeConfig 对象,其 HardwareImplementation 属性设置为具有 MATLAB 主机默认参数值的 coder.HardwareImplementation 对象。

生成代码中预处理器指令的样式,指定为 'UseIncludeGuard''UsePragmaOnce'。有关详细信息,请参阅头文件防卫式声明样式

是否在代码生成报告中突出显示由隐式扩展导致的潜在问题,指定为 truefalse。有关详细信息,请参阅突出显示隐式扩展导致的潜在问题

是否在代码生成报告中突出显示由使用循环控制函数导致的潜在问题,指定为 truefalse。有关详细信息,请参阅突出显示使用 coder.loop 函数的潜在问题

潜在的行优先布局效率问题,指定为 truefalse。有关详细信息,请参阅突出显示潜在的行优先问题

使用 memset 将浮点数和双精度数赋值为零,指定为 truefalse。有关详细信息,请参阅使用 memset 将浮点数和双精度数初始化为 0.0

控制 MathWorks 函数之间的内联,指定为 'Speed''Always''Readability''Never'。有关详细信息,请参阅 MathWorks 编写的 MATLAB 函数的内联策略

控制用户编写函数和 MathWorks 函数之间的内联,指定为 'Speed''Always''Readability''Never'。有关详细信息,请参阅 MathWorks 函数和用户函数之间调用的内联策略

控制用户编写函数之间的内联,指定为 'Speed''Always''Readability''Never'。有关详细信息,请参阅用户编写的 MATLAB 函数的内联策略

为目标硬件生成单指令多数据 (SIMD) 代码的指令集,指定为 'Auto''SSE2''None'。有关详细信息,请参阅利用目标硬件指令集扩展

注解生成的 C/C++ 代码以隐藏已知的 MISRA™ 和 AUTOSAR 违规,指定为 falsetrue。有关详细信息,请参阅为已知的 MISRA 违规生成申述注释

代码生成器是将深度神经网络 (DNN) 的大型常量嵌入生成的源代码中还是将这些常量写入二进制数据文件,指定为 'WriteOnlyDNNConstantsToDataFiles''KeepInSourceFiles'。有关详细信息,请参阅大型常量生成

确定代码生成器是否将 DNN 常量写入二进制数据文件的阈值(高于此阈值时写入),指定为正整数。有关详细信息,请参阅大型常量阈值

自动打开代码生成报告,指定为 truefalse。有关详细信息,请参阅生成报告后自动启动报告

确定是否自动展开 for 循环或 parfor 循环的迭代次数阈值,指定为正整数。有关详细信息,请参阅循环展开阈值

在生成代码中包含 MATLAB 源代码作为注释,指定为 truefalse。有关详细信息,请参阅 MATLAB 源代码作为注释

在生成代码中包含 MATLAB 源代码的行号作为注释,指定为 truefalse。有关详细信息,请参阅 MATLAB 源代码注释行号

生成的标识符中的最大字符数,指定为范围 [31, 2048] 内的正整数。有关详细信息,请参阅最大标识符长度

memcpy 或 memset 优化的最小大小(以字节为单位),指定为正整数。有关详细信息,请参阅 Memcpy 阈值(字节)

多实例、可重入代码,指定为 truefalse。有关详细信息,请参阅生成可重入代码

对象名称,指定为字符向量。

在生成的 C/C++ 代码中运行并行 for 循环的最大 CPU 线程数,指定为正整数。有关详细信息,请参阅最大 CPU 线程数

为归约运算生成 SIMD 代码和并行化执行归约运算的 for 循环,指定为 falsetrue。有关详细信息,请参阅优化归约

要从生成的 C/C++ 代码编译的输出,指定为 'LIB''DLL''EXE'。有关详细信息,请参阅编译类型

按引用向入口函数传递结构体,指定为 truefalse。有关详细信息,请参阅按引用向入口函数传递结构体

使用 codegen 生成 MEX 函数后自定义编译处理的命令,指定为字符向量。有关详细信息,请参阅后代码生成的命令

生成使用 N 维索引的代码,指定为 falsetrue。有关详细信息,请参阅保留数组维度

自 R2024b 起

是否在从自定义 C/C++ 代码调用生成的代码时保护入口函数输入数据不被修改,指定为 falsetrue。有关详细信息,请参阅保留入口函数的输入数据

要在生成代码中保留的变量名称,指定为 'None''UserNames''All'。有关详细信息,请参阅保留变量名称

包含关于代码生成的代码生成报告信息的变量的名称,指定为字符向量。有关详细信息,请参阅将报告信息导出到变量

潜在差异报告,指定为 truefalse。有关详细信息,请参阅报告与 MATLAB 的差异

代码生成器不能用于函数或变量的名称,指定为字符串数组、字符向量元胞数组或字符向量。有关详细信息,请参阅保留名称

生成代码的行优先数组布局,指定为 falsetrue。有关详细信息,请参阅数组布局

在生成的入口函数开头自动运行初始化函数,指定为 truefalse。有关详细信息,请参阅自动运行初始化函数

生成代码中的运行时错误检测和报告,指定为 falsetrue。有关详细信息,请参阅生成运行时错误检查

整数溢出支持,指定为 truefalse。有关详细信息,请参阅对整数溢出进行饱和处理

每个应用程序的最大堆栈使用量(以字节为单位),指定为正整数。有关详细信息,请参阅最大堆栈使用量

支持非有限值,指定为 truefalse。有关详细信息,请参阅支持非有限数

要在生成代码中使用的语言,指定为 'C''C++'。有关详细信息,请参阅语言

生成代码时所采用的语言标准,指定为以下选项之一:

  • 'Auto'

  • 'C89/C90 (ANSI)'

  • 'C99 (ISO)'

  • 'C++03 (ISO)'

  • 'C++11 (ISO)'

  • 'C++14 (ISO)'

  • 'C++17 (ISO)'

  • 'C++20 (ISO)'

有关详细信息,请参阅语言标准

用于编译 C/C++ 库或可执行程序的工具链,指定为字符向量。有关详细信息,请参阅工具链

为您的 MATLAB 代码中的快速傅里叶变换 (FFT) 函数生成使用 MATLAB 附带的 FFTW 库的代码,指定为 falsetrue。有关详细信息,请参阅使用内置 FFTW 库

自 R2024b 起

是否在生成代码中使用预编译库,指定为 'Prefer''Avoid'。有关详细信息,请参阅使用预编译库

代码生成进度显示,指定为下表中的值之一。

描述
false

此值是默认值。

代码生成器不显示代码生成进度。

true

代码生成器显示代码生成进度,包括代码生成阶段和编译器输出。

注意

Verbose 配置对象属性将在以后的版本中删除。要查看代码生成进度,请使用 Verbosity 属性。

MATLAB 命令行处的代码生成进度显示,指定为 'Info''Silent''Verbose'。有关详细信息,请参阅显示详尽的编译器输出

示例

全部折叠

编写一个用来生成代码的 MATLAB 函数。此示例使用函数 myadd,它返回其输入的总和。

function c = myadd(a,b)
c = a + b;
end

创建一个用于生成独立 C/C++ 代码(静态库、动态链接库或可执行程序)的配置对象。例如,创建用于生成静态库的配置对象。

cfg = coder.config('lib');

更改您不希望使用默认值的属性的值。例如,在生成的 C/C++ 代码中启用运行时错误检测和报告。

cfg.RuntimeChecks = true;

使用 codegen 生成代码。通过使用 -config 选项将配置对象传递给 codegen。指定输入参量为双精度标量。

codegen myadd -config cfg -args {1 1} -report

替代功能

要对编译类型 'LIB''DLL''EXE' 使用默认配置参数,请分别使用 codegen 选项 -config:lib-config:dll-config:exe。这样,您就不必创建配置对象并将其传递给 codegen

版本历史记录

在 R2011a 中推出

全部展开