主要内容

coder.gpuConfig

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

描述

coder.GpuCodeConfigcoder.gpuConfig对象包含的配置参数codegen使用生成CUDA®墨西哥人,一个静态库,动态链接库,或一个可执行程序与GPU编码器™。通过对象的codegen函数使用配置选择。

创建

描述

例子

cfg = coder.gpuConfig (build_type)创建一个指定构建代码生成配置对象类型,可CUDA墨西哥人,一个静态库,动态链接库,或一个可执行程序。如果嵌入式编码器®产品安装,它会创建一个coder.EmbeddedCodeConfig对象为静态库,动态库,或可执行的构建类型。

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

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

输入参数

全部展开

输出从生成的CUDA代码构建,指定为这个表中的值之一。

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

属性

全部展开

coder.GpuConfig只包含GPU的具体配置参数配置对象的代码。查看所有的属性代码配置对象,明白了coder.CodeConfigcoder.EmbeddedCodeConfig

控制代CUDA (* .cu)文件用这个表中的值之一。

价值 描述
真正的

这个值是默认值。

支持CUDA代码生成。

禁用CUDA代码生成。

例子:cfg.GpuConfig。启用= true

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

价值 描述
“离散”

这个值是默认值。

生成的代码使用cudaMallocAPI在CPU和GPU之间传输数据。从程序员的观点来看,离散模式有传统与独立的CPU和GPU内存架构全局内存地址空间。

“统一”

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

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

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

例子:cfg.GpuConfig。MallocMode= 'discrete'

选择有效的GPU内存管理器内存分配,管理和提高运行时性能。

价值 描述
真正的

这个值是默认值。

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

这个值是默认值。

禁用使用GPU内存管理器内存分配和管理。

例子:cfg.GpuConfig。MemoryManager = true

指定一个自定义名称前缀的所有内核在生成的代码。例如,使用价值“CUDA_”创建内核名字CUDA_kernel1,CUDA_kernel2,等等。如果没有提供名字,GPU编码器内核加名字的入口点函数的名称。内核名称可以包含大写字母,小写字母,数字0 - 9和下划线字符_。GPU编码器移除不支持的字符从内核名字和金宝app附加α前缀不一个字母字母开头。

例子:cfg.GpuConfig。KernelNamePrefix = ' myKernel '

更换与NVIDIA的数学函数调用cuBLAS库调用,指定为这个表中的值之一。

价值 描述
真正的

这个值是默认值。

允许GPU编码器取代和调用适当的数学函数调用cuBLAS图书馆。对于函数没有替代品在CUDA GPU编码器使用便携式MATLAB®函数和试图将它们映射到GPU。

禁用的使用cuBLAS图书馆在生成的代码中。

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

例子:cfg.GpuConfig。EnableCUBLAS= true

更换与NVIDIA的数学函数调用cuSOLVER库调用,指定为这个表中的值之一。

价值 描述
真正的

这个值是默认值。

允许GPU编码器取代和调用适当的数学函数调用cuSOLVER图书馆。在CUDA函数没有替代品,GPU编码器使用便携式MATLAB函数和试图将它们映射到GPU。

禁用的使用cuSOLVER图书馆在生成的代码中。

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

例子:cfg.GpuConfig。EnableCUSOLVER= true

更换fft函数调用与英伟达cuFFT库调用,指定为这个表中的值之一。

价值 描述
真正的

这个值是默认值。

允许GPU编码器取代适当fft调用调用cuFFT图书馆。

禁用的使用cuFFT图书馆在生成的代码中。采用这一选项,GPU编码器使用CFFTW库,使用或从便携式MATLAB生成内核fft代码。

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

例子:cfg.GpuConfig。EnableCUFFT= true

控制的基准测试代码生成的CUDA代码通过使用这个表中的值之一。

价值 描述

这个值是默认值。

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

真正的

生成CUDA代码与基准测试功能。这个选项使用CUDA api等cudaEvent准确的时间内核,memcpy和其他事件。

例子:cfg.GpuConfig。基准测试= true

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

价值 描述

这个值是默认值。

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

真正的

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

例子:cfg.GpuConfig。SafeBuild= true

为代码生成选择最小的计算能力。计算能力识别GPU硬件支持的特性。金宝app它所使用的是应用程序在运行时确定哪些硬件特性,说明目前的GPU上都是可用的。如果您指定自定义计算能力,GPU编码器忽略此设置。

看到CUDA计算代码生成功能要求,参考下表。

目标 计算能力

CUDA墨西哥人

看到GPU的金宝app支持版本

源代码、静态或动态库和可执行文件

3.2或更高版本。

深度学习应用8位整数的精度

6.1、6.3或更高版本。

深度学习应用half-precision(16位浮点)

5.3、6.0、6.2或更高版本。

例子:cfg.GpuConfig。ComputeCapability = ' 6.1 '

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

例如,指定一个虚拟架构类型拱= compute_50。您可以指定一个真正的建筑使用拱= sm_50。有关更多信息,请参见选择转向GPU代码生成主题在CUDA工具包的文档中。

例子:cfg.GpuConfig。CustomComputeCapability = '拱= compute_50 '

通过额外的旗帜GPU编译器。例如,——fmad = false指示学校网站编译器禁用收缩浮点乘法和添加到一个浮点Multiply-Add (FMAD)指令。

NVIDIA的编译器选项类似,看到这个话题NVCC命令选项CUDA工具包的文档。

例子:cfg.GpuConfig。CompilerFlags= '--fmad=false'

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

例子:cfg.GpuConfig。StackLimitPerThread = 1024

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

例子:cfg.GpuConfig。MallocThreshold = 256

指定模块中创建一个内核启动的最大数量。

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

如果在一个循环的迭代次数大于每个内核模块的最大数量,代码生成器创建CUDA内核大步。

当你指定块的最大数量为每个内核,代码生成器创建一维内核。强制代码生成器创建2 d或3 d内核,使用coder.gpu.kernel编译指示。的coder.gpu.kernel编译指示优先于内核的最大数量为每个块。

例子:cfg.GpuConfig。MaximumBlocksPerKernel = 1024

在NVIDIA驱动等多GPU环境平台,指定目标CUDA设备。

例子:cfg.GpuConfig。选择CudaDevice =

请注意

SelectCudaDevice可以使用gpuArray只有在gpuDeviceSelectCudaDevice指向相同的GPU。如果gpuDevice指向一个不同的GPU,CUDA_ERROR_INVALID_VALUE运行时错误。

例子

全部折叠

生成CUDA墨西哥人从一个适合GPU的MATLAB函数函数代码生成。同时,使代码生成报告。

编写一个MATLAB函数VecAdd执行向量加法的输入一个B

函数[C] = VecAdd (A, B)% # codegenC = coder.nullcopy(0(大小(A)));coder.gpu.kernelfun ();C = A + B;结束

生成一个墨西哥人功能,创建一个代码生成配置对象。

cfg = coder.gpuConfig (墨西哥人的);

使代码生成报告。

cfg.GpuConfig。EnableCUBLAS= true; cfg.GenerateReport = true;

生成一个墨西哥人函数在当前文件夹指定配置对象使用配置选择。

%生成一个墨西哥人的功能和代码生成报告codegen配置cfgarg游戏{0(512512年,“双”),0(512512年,“双”)}VecAdd

限制

  • GPU编码器总是设置PassStructByReference财产的coder.CodeConfigcoder.EmbeddedCodeConfig代码配置对象为true。

  • GPU编码器总是设置EnableSignedLeftShiftsEnableSignedRightShifts财产的coder.EmbeddedCodeConfig代码配置对象为true。

  • 为独立的目标,如静态库,动态链接库,或者在Windows可执行程序®不设置环境,生成makefile每公吨/ MD编译器标志。这些标志指示Visual Studio编译器使用多线程库。默认情况下,Visual Studio使用每公吨在编译过程中。通过其它的编译器具体标志,使用CompilerFlags选择。例如,

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

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

兼容性的考虑

全部展开

在未来的发布行为改变

介绍了R2017b