主要内容

coder.gpuConfig

的配置参数CUDA的代码生成MATLAB使用GPU编码器

描述

编码器。GpuCodeConfigcoder.gpuConfig对象包含的配置参数codegen用于生成CUDA®MEX,静态库,动态链接库,或GPU Coder™可执行程序。将对象传递给codegen函数。配置选择。

创建

描述

例子

cfg = code .gpu config (build_type为指定的构建类型创建代码生成配置对象,该类型可以是CUDA MEX、静态库、动态链接库或可执行程序。如果嵌入式Coder®产品安装后,它会创建一个编码器。EmbeddedCodeConfig对象用于静态库、动态库或可执行构建类型。

cfg = code .gpu config (build_type“是”,假)创建一个代码生成配置对象来生成CUDA“自由”“dll”,或exe”输出,即使安装了嵌入式编码器产品。

cfg = code .gpu config (build_type“是”,真的)创建一个编码器。EmbeddedCodeConfig配置对象,即使没有安装嵌入式编码器产品。然而,代码生成使用编码器。EmbeddedCodeConfig对象需要嵌入式编码器许可证。

输入参数

全部展开

从生成的CUDA代码生成的输出,指定为该表中的值之一。

价值 描述
墨西哥人的 CUDA墨西哥人
“自由” 静态库
“DLL” 动态链接库
EXE” 可执行程序

属性

全部展开

编码器。GpuConfig只包含GPU特定配置参数的代码配置对象。要查看代码配置对象的所有属性,请参见编码器。CodeConfig而且编码器。EmbeddedCodeConfig

通过使用该表中的一个值来控制CUDA (*.cu)文件的生成。

价值 描述
真正的

该值为默认值。

支持CUDA代码生成。

禁用CUDA代码生成功能。

例子:cfg. gpu . enabled = true

内存分配(malloc)模式在生成的CUDA代码中使用,指定为该表中的值之一。

价值 描述
“离散”

该值为默认值。

生成的代码使用cudaMallocCPU和GPU之间传输数据的API。从程序员的角度来看,离散模式具有传统的内存架构,CPU和GPU的全局内存地址空间是独立的。

“统一”

生成的代码使用cudaMallocManaged使用共享(统一)CPU和GPU全局内存地址空间的API。

对于英伟达®仅嵌入目标。看到移除主机的统一内存分配模式

有关更多信息,请参见离散和管理模式

例子:cfg. gpu . mallocmode = 'discrete'

为生成的代码中的所有内核指定一个自定义名称前缀。例如,使用值“CUDA_”创建有名称的内核CUDA_kernel1CUDA_kernel2,等等。如果没有提供名称,GPU Coder将用入口点函数的名称作为内核名称的前缀。内核名称可以包含大写字母、小写字母、数字0 ~ 9和下划线_。GPU Coder从内核名称中删除不支持金宝app的字符并追加α不以字母开头的前缀。

例子:cfg. gpu . kernelnameprefix = 'myKernel'

用NVIDIA替换数学函数调用cuBLAS库调用,指定为此表中的值之一。

价值 描述
真正的

该值为默认值。

允许GPU Coder替换适当的数学函数调用与调用cuBLAS图书馆。对于CUDA中没有替换的函数,GPU Coder使用便携的MATLAB®函数,并尝试将它们映射到GPU。

的使用禁用cuBLAS库中生成的代码。

有关更多信息,请参见库调用的内核

例子:cfg. gpu . enablecublas = true

用NVIDIA替换数学函数调用cuSOLVER库调用,指定为此表中的值之一。

价值 描述
真正的

该值为默认值。

允许GPU Coder替换适当的数学函数调用与调用cuSOLVER图书馆。对于CUDA中没有替换的函数,GPU Coder使用可移植的MATLAB函数,并试图将它们映射到GPU。

的使用禁用cuSOLVER库中生成的代码。

有关更多信息,请参见库调用的内核

例子:cfg. gpu . enablecusolver = true

更换fft函数调用NVIDIAcuFFT库调用,指定为此表中的值之一。

价值 描述
真正的

该值为默认值。

允许GPU编码器替换适当fft叫着叫着cuFFT图书馆。

禁用对cuFFT库中生成的代码。有了这个选项,GPU Coder使用CFFTW库或从可移植的MATLAB中生成内核fft代码。

有关更多信息,请参见库调用的内核

例子:cfg. gpu . enablecufft = true

通过使用该表中的一个值来控制向生成的CUDA代码添加基准测试代码。

价值 描述

该值为默认值。

生成的CUDA代码不包含基准测试功能。

真正的

生成具有基准测试功能的CUDA代码。这个选项使用CUDA api,例如cudaEvent准确的时间内核memcpy,以及其他事件。

例子:cfg. gpu . benchmarking = true

通过使用该表中的一个值向生成的CUDA代码添加错误检查功能。

价值 描述

该值为默认值。

生成的CUDA代码不包含错误检查功能。

真正的

生成带有CUDA API和内核调用错误检查的代码。

例子:cfg. gpu . safebuild = true

为代码生成选择最小的计算能力。计算能力是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'

指定必须为其编译CUDA输入文件的NVIDIA虚拟GPU架构的名称。

例如,指定虚拟体系结构类型拱= compute_50.您可以使用拱= sm_50.有关更多信息,请参见引导GPU代码生成的选项CUDA Toolkit文档中的主题。

例子:cfg. gpu . customcomputecapability = '-arch=compute_50'

向GPU编译器传递附加标志。例如,——fmad = false指示学校网站编译器禁用浮点乘法的缩写,并将其添加到单个浮点乘法添加(FMAD)指令中。

有关类似的NVIDIA编译器选项,请参阅有关的主题NVCC命令选项在CUDA工具包文档中。

例子:cfg. gpu . compilerflags = '——fmad=false'

指定每个GPU线程的最大堆栈限制为整数值。

例子:cfg. gpu . stacklimitperthread = 1024

指定在堆(而不是堆栈)上分配私有变量的大小,作为整数值。

例子:cfg. gpu . mallocthreshold = 256

指定在内核启动期间创建的最大块数。

因为GPU设备有有限的流多处理器(SM)资源,限制每个内核的块数量可以避免调度、加载和卸载块带来的性能损失。

如果循环中的迭代次数大于每个内核的最大块数,代码生成器将创建具有跨步的CUDA内核。

当您为每个内核指定最大块数时,代码生成器将创建1-D内核。要强制代码生成器创建2-D或3-D内核,请使用coder.gpu.kernel编译指示。的coder.gpu.kernelPragma优先于每个块的最大内核数。

例子:cfg. gpu . maximumblocksperkernel = 1024

选择GPU内存管理器可以有效地分配、管理内存,并提高运行时性能。

价值 描述
真正的

GPU内存管理器创建一个大型GPU内存池的集合,并管理这些池中内存块的分配和回收。通过创建大型内存池,内存管理器减少了对CUDA内存api的调用数量,提高了运行时性能。您可以使用GPU内存管理器进行MEX和独立CUDA代码生成。

关闭使用GPU内存管理器进行内存分配和管理。

该值为默认值。

例子:cfg. gpu . enablememorymanager = true

指定GPU内存管理器使用的内存块的对齐方式。池中的块大小(字节)是指定值的倍数。的价值BlockAlignment一定是2的幂。

例子:cfg. gpu . blockalignment = 1024

指定内存管理器何时释放GPU设备内存,使用该表中的一个值。

价值 描述
“永远”

销毁内存管理器时释放内存。

该值为默认值。

“AtTerminate”

释放空的GPU池时终止函数在生成的代码中调用。

对于MEX目标,在每次调用生成的MEX函数后释放内存。

对于其他目标,在调用terminate函数时释放内存。

“AfterAllocate”

每次调用CUDA分配内存后,空池被释放。

例子:cfg. gpu . freemode = 'AtTerminate'

设置GPU内存管理器的最小内存池大小(单位为MB)。的价值MinPoolSize一定是2的幂。

方法计算大小级别MinPoolSize而且MaxPoolSize参数通过在两个值之间以2的幂递增进行插值。例如,如果MinPoolSize是4,MaxPoolSize为1024,大小级别为{4、8、16、32、64、128、256、512、1024}。

例子:cfg. gpu . minpoolsize = 32

设置GPU内存管理器的最大内存池大小(以MB为单位)。的价值MaxPoolSize一定是2的幂。

方法计算大小级别MinPoolSize而且MaxPoolSize参数通过在两个值之间以2的幂递增进行插值。例如,如果MinPoolSize是4,MaxPoolSize为1024,大小级别为{4、8、16、32、64、128、256、512、1024}。

例子:cfg. gpu . maxpoolsize = 4096

在多GPU环境中,如NVIDIA Drive平台,指定目标CUDA设备。

例子:cfg.GpuConfig.SelectCudaDevice =

请注意

SelectCudaDevice可与gpuArray只有在gpuDevice而且SelectCudaDevice指向相同的GPU。如果gpuDevice指向一个不同的GPU, aCUDA_ERROR_INVALID_VALUE抛出运行时错误。

例子

全部折叠

从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总是设置EnableSignedLeftShiftsEnableSignedRightShifts的属性编码器。EmbeddedCodeConfig代码配置对象为true。

  • 针对Windows中的静态库、动态链接库或可执行程序等独立目标®环境中,生成的makefiles不设置每公吨/ MD编译器标志。这些标志指示Visual Studio编译器使用多线程库。默认情况下,Visual Studio使用每公吨在编译过程中。要传递其他编译器特定的标志,请使用CompilerFlags选择。例如,

    cfg.GpuConfig.CompilerFlags =“-Xcompiler / MD”

  • 学校网站编译器对输入文件后缀有限制。例如,如果对象文件包含版本号,编译可能会失败。在这种情况下,创建符号链接或传递“-Xlinker”CompilerFlags

版本历史

在R2017b中引入

全部展开