coder.gpuConfig
的配置参数CUDA的代码生成MATLAB使用GPU编码器
描述
的编码器。GpuCodeConfig
或coder.gpuConfig
对象包含的配置参数codegen
用于生成CUDA®MEX,静态库,动态链接库,或GPU Coder™可执行程序。将对象传递给codegen
函数。配置
选择。
创建
语法
描述
cfg = code .gpu config (
为指定的构建类型创建代码生成配置对象,该类型可以是CUDA MEX、静态库、动态链接库或可执行程序。如果嵌入式Coder®产品安装后,它会创建一个build_type
)编码器。EmbeddedCodeConfig
对象用于静态库、动态库或可执行构建类型。
cfg = code .gpu config (
创建一个代码生成配置对象来生成CUDAbuild_type
“是”,假)“自由”
,“dll”
,或exe”
输出,即使安装了嵌入式编码器产品。
cfg = code .gpu config (
创建一个build_type
“是”,真的)编码器。EmbeddedCodeConfig
配置对象,即使没有安装嵌入式编码器产品。然而,代码生成使用编码器。EmbeddedCodeConfig
对象需要嵌入式编码器许可证。
输入参数
build_type
- - - - - -从生成的CUDA代码生成的输出
墨西哥人的
|“自由”
|“DLL”
|EXE”
从生成的CUDA代码生成的输出,指定为该表中的值之一。
价值 | 描述 |
---|---|
墨西哥人的 |
CUDA墨西哥人 |
“自由” |
静态库 |
“DLL” |
动态链接库 |
EXE” |
可执行程序 |
属性
编码器。GpuConfig
只包含GPU特定配置参数的代码配置对象。要查看代码配置对象的所有属性,请参见编码器。CodeConfig
而且编码器。EmbeddedCodeConfig
.
启用
- - - - - -控制GPU代码生成
真正的
(默认)|假
通过使用该表中的一个值来控制CUDA (*.cu)文件的生成。
价值 | 描述 |
---|---|
真正的 |
该值为默认值。 支持CUDA代码生成。 |
假 |
禁用CUDA代码生成功能。 |
例子:cfg. gpu . enabled = true
MallocMode
- - - - - -GPU内存分配
“离散”
(默认)|“统一”
内存分配(malloc
)模式在生成的CUDA代码中使用,指定为该表中的值之一。
价值 | 描述 |
---|---|
“离散” |
该值为默认值。 生成的代码使用 |
“统一” |
生成的代码使用 对于英伟达®仅嵌入目标。看到移除主机的统一内存分配模式. |
有关更多信息,请参见离散和管理模式.
例子:cfg. gpu . mallocmode = 'discrete'
KernelNamePrefix
- - - - - -自定义内核名称前缀
' '(默认)|特征向量
为生成的代码中的所有内核指定一个自定义名称前缀。例如,使用值“CUDA_”
创建有名称的内核CUDA_kernel1
,CUDA_kernel2
,等等。如果没有提供名称,GPU Coder将用入口点函数的名称作为内核名称的前缀。内核名称可以包含大写字母、小写字母、数字0 ~ 9和下划线_。GPU Coder从内核名称中删除不支持金宝app的字符并追加α
不以字母开头的前缀。
例子:cfg. gpu . kernelnameprefix = 'myKernel'
EnableCUBLAS
- - - - - -使用cuBLAS
图书馆
真正的
(默认)|假
用NVIDIA替换数学函数调用cuBLAS
库调用,指定为此表中的值之一。
价值 | 描述 |
---|---|
真正的 |
该值为默认值。 允许GPU Coder替换适当的数学函数调用与调用 |
假 |
的使用禁用 |
有关更多信息,请参见库调用的内核.
例子:cfg. gpu . enablecublas = true
EnableCUSOLVER
- - - - - -使用cuSOLVER
图书馆
真正的
(默认)|假
用NVIDIA替换数学函数调用cuSOLVER
库调用,指定为此表中的值之一。
价值 | 描述 |
---|---|
真正的 |
该值为默认值。 允许GPU Coder替换适当的数学函数调用与调用 |
假 |
的使用禁用 |
有关更多信息,请参见库调用的内核.
例子:cfg. gpu . enablecusolver = true
EnableCUFFT
- - - - - -使用cuFFT
图书馆
真正的
(默认)|假
更换fft
函数调用NVIDIAcuFFT
库调用,指定为此表中的值之一。
价值 | 描述 |
---|---|
真正的 |
该值为默认值。 允许GPU编码器替换适当 |
假 |
禁用对 |
有关更多信息,请参见库调用的内核.
例子:cfg. gpu . enablecufft = true
基准测试
- - - - - -向生成的代码添加基准测试
假
(默认)|真正的
通过使用该表中的一个值来控制向生成的CUDA代码添加基准测试代码。
价值 | 描述 |
---|---|
假 |
该值为默认值。 生成的CUDA代码不包含基准测试功能。 |
真正的 |
生成具有基准测试功能的CUDA代码。这个选项使用CUDA api,例如 |
例子:cfg. gpu . benchmarking = true
SafeBuild
- - - - - -在生成的代码中检查错误
假
(默认)|真正的
通过使用该表中的一个值向生成的CUDA代码添加错误检查功能。
价值 | 描述 |
---|---|
假 |
该值为默认值。 生成的CUDA代码不包含错误检查功能。 |
真正的 |
生成带有CUDA API和内核调用错误检查的代码。 |
例子:cfg. gpu . safebuild = true
ComputeCapability
- - - - - -代码生成的最小计算能力
“3.5”
(默认)|“3.2”
|“3.7”
|“5.0”
|“5.2”
|“5.3”
|“6.0”
|“6.1”
|“6.2”
|“7.0”
|“7.1”
|“7.2”
为代码生成选择最小的计算能力。计算能力是GPU硬件支持的特性的标识。金宝app应用程序在运行时使用它来确定当前GPU上可用的硬件特性和指令。如果指定自定义计算能力,GPU Coder将忽略此设置。
要查看代码生成的CUDA计算能力需求,请参考下表。
目标 | 计算能力 |
---|---|
CUDA墨西哥人 |
看到GPU计算要求. |
源代码、静态或动态库和可执行程序 |
3.2或更高。 |
深度学习应用于8位整数精度 |
6.1、6.3或更高。 |
半精度深度学习应用(16位浮点) |
5.3, 6.0, 6.2或更高。 |
例子:cfg. gpu . computecapability = '6.1'
CustomComputeCapability
- - - - - -控制GPU代码生成
''
(默认)|特征向量
指定必须为其编译CUDA输入文件的NVIDIA虚拟GPU架构的名称。
例如,指定虚拟体系结构类型拱= compute_50
.您可以使用拱= sm_50
.有关更多信息,请参见引导GPU代码生成的选项CUDA Toolkit文档中的主题。
例子:cfg. gpu . customcomputecapability = '-arch=compute_50'
CompilerFlags
- - - - - -GPU编译器的附加标志
''
(默认)|特征向量
向GPU编译器传递附加标志。例如,——fmad = false
指示学校网站
编译器禁用浮点乘法的缩写,并将其添加到单个浮点乘法添加(FMAD)指令中。
有关类似的NVIDIA编译器选项,请参阅有关的主题NVCC命令选项在CUDA工具包文档中。
例子:cfg. gpu . compilerflags = '——fmad=false'
StackLimitPerThread
- - - - - -每个GPU线程的堆栈限制
1024
(默认)|整数
指定每个GPU线程的最大堆栈限制为整数值。
例子:cfg. gpu . stacklimitperthread = 1024
MallocThreshold
- - - - - -Malloc阈值
200
(默认)|整数
指定在堆(而不是堆栈)上分配私有变量的大小,作为整数值。
例子:cfg. gpu . mallocthreshold = 256
MaximumBlocksPerKernel
- - - - - -在内核启动期间创建的最大块数
0
(默认)|整数
指定在内核启动期间创建的最大块数。
因为GPU设备有有限的流多处理器(SM)资源,限制每个内核的块数量可以避免调度、加载和卸载块带来的性能损失。
如果循环中的迭代次数大于每个内核的最大块数,代码生成器将创建具有跨步的CUDA内核。
当您为每个内核指定最大块数时,代码生成器将创建1-D内核。要强制代码生成器创建2-D或3-D内核,请使用coder.gpu.kernel
编译指示。的coder.gpu.kernel
Pragma优先于每个块的最大内核数。
例子:cfg. gpu . maximumblocksperkernel = 1024
EnableMemoryManager
- - - - - -使用GPU内存管理器
假
(默认)|真正的
选择GPU内存管理器可以有效地分配、管理内存,并提高运行时性能。
价值 | 描述 |
---|---|
真正的 |
GPU内存管理器创建一个大型GPU内存池的集合,并管理这些池中内存块的分配和回收。通过创建大型内存池,内存管理器减少了对CUDA内存api的调用数量,提高了运行时性能。您可以使用GPU内存管理器进行MEX和独立CUDA代码生成。 |
假 |
关闭使用GPU内存管理器进行内存分配和管理。 该值为默认值。 |
例子:cfg. gpu . enablememorymanager = true
BlockAlignment
- - - - - -指定池中内存块的对齐方式
256
(默认)|正整数
指定GPU内存管理器使用的内存块的对齐方式。池中的块大小(字节)是指定值的倍数。的价值BlockAlignment
一定是2的幂。
例子:cfg. gpu . blockalignment = 1024
FreeMode
- - - - - -指定GPU内存管理器释放内存的时间
“永远”
(默认)|“AtTerminate”
|“AfterAllocate”
指定内存管理器何时释放GPU设备内存,使用该表中的一个值。
价值 | 描述 |
---|---|
“永远” |
销毁内存管理器时释放内存。 该值为默认值。 |
“AtTerminate” |
释放空的GPU池时 对于MEX目标,在每次调用生成的MEX函数后释放内存。 对于其他目标,在调用terminate函数时释放内存。 |
“AfterAllocate” |
每次调用CUDA分配内存后,空池被释放。 |
例子:cfg. gpu . freemode = 'AtTerminate'
MinPoolSize
- - - - - -设置GPU内存管理器的最小内存池大小
8
(默认)|正整数
设置GPU内存管理器的最小内存池大小(单位为MB)。的价值MinPoolSize
一定是2的幂。
方法计算大小级别MinPoolSize
而且MaxPoolSize
参数通过在两个值之间以2的幂递增进行插值。例如,如果MinPoolSize
是4,MaxPoolSize
为1024,大小级别为{4、8、16、32、64、128、256、512、1024}。
例子:cfg. gpu . minpoolsize = 32
MaxPoolSize
- - - - - -设置GPU内存管理器的最大内存池大小
2048
(默认)|正整数
设置GPU内存管理器的最大内存池大小(以MB为单位)。的价值MaxPoolSize
一定是2的幂。
方法计算大小级别MinPoolSize
而且MaxPoolSize
参数通过在两个值之间以2的幂递增进行插值。例如,如果MinPoolSize
是4,MaxPoolSize
为1024,大小级别为{4、8、16、32、64、128、256、512、1024}。
例子:cfg. gpu . maxpoolsize = 4096
例子
生成CUDA墨西哥人
从MATLAB函数中生成CUDA MEX函数,该函数适合GPU代码生成。另外,启用代码生成报告。
写一个MATLAB函数VecAdd
,执行输入向量相加一个
而且B
.
函数[C] = A,B。% # codegenC = code .nullcopy(zero (size(A)));coder.gpu.kernelfun ();C = a + b;结束
要生成MEX函数,请创建一个代码生成配置对象。
cfg = code .gpu config (墨西哥人的);
启用代码生成报告。
cfg. gpu . enablecublas = true;cfg。GenerateReport = true;
方法在指定配置对象的当前文件夹中生成MEX函数配置
选择。
生成MEX函数和代码生成报告。codegen配置cfgarg游戏{0(512512年,“双”),0(512512年,“双”)}VecAdd
限制
GPU Coder总是设置
PassStructByReference
的属性编码器。CodeConfig
而且编码器。EmbeddedCodeConfig
代码配置对象为true。GPU Coder总是设置
EnableSignedLeftShifts
和EnableSignedRightShifts
的属性编码器。EmbeddedCodeConfig
代码配置对象为true。针对Windows中的静态库、动态链接库或可执行程序等独立目标®环境中,生成的makefiles不设置
每公吨
或/ MD
编译器标志。这些标志指示Visual Studio编译器使用多线程库。默认情况下,Visual Studio使用每公吨
在编译过程中。要传递其他编译器特定的标志,请使用CompilerFlags
选择。例如,cfg.GpuConfig.CompilerFlags =“-Xcompiler / MD”;
的
学校网站
编译器对输入文件后缀有限制。例如,如果对象文件包含版本号,编译可能会失败。在这种情况下,创建符号链接或传递“-Xlinker”
到CompilerFlags
.
版本历史
在R2017b中引入R2021a:统一
正在删除主机上的内存分配模式
在未来的版本中,统一内存分配(cudaMallocManaged
当针对主机开发计算机上的NVIDIA GPU设备时,模式将被删除。在针对NVIDIA嵌入式平台时,可以继续使用统一内存分配模式。
当从MATLAB为主机生成CUDA代码时,设置MallocMode
的属性coder.gpuConfig
将配置对象编码为“离散”
.
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。