主要内容

coder.gpuConfig

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

描述

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

创造

描述

例子

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

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

cfg = coder.gpuConfig (build_type“是”,真的)创建一个coder.EmbeddedCodeConfig配置对象,即使未安装Embedded Coder产品。但是,使用coder.EmbeddedCodeConfig对象需要嵌入式编码器许可证。

输入参数

全部展开

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

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

性质

全部展开

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

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

价值 描述
真正的

此值为默认值。

启用CUDA代码生成。

禁用CUDA代码生成。

例子:cfg.GpuConfig.Enabled = true

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

价值 描述
“离散”

此值为默认值。

生成的代码使用库达马洛克用于在CPU和GPU之间传输数据的API。从程序员的角度来看,离散模式有一个传统的内存体系结构,具有独立的CPU和GPU全局内存地址空间。

“统一”

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

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

有关详细信息,请参阅离散模式和管理模式

例子:cfg.GpuConfig.MallocMode =“离散”

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

价值 描述
真正的

此值为默认值。

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

此值为默认值。

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

例子:cfg.GpuConfig.MemoryManager = true

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

例子: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

更换快速傅里叶变换函数调用cuFFT库调用,指定为该表中的值之一。

价值 描述
真正的

此值为默认值。

允许GPU编码器替换适当快速傅里叶变换一个接一个的电话cuFFT图书馆。

禁止使用cuFFT库。使用此选项,GPU编码器使用C语言FFTW库中可用的或从可移植的MATLAB生成内核快速傅里叶变换代码。

有关详细信息,请参阅库调用中的内核

例子:cfg.GpuConfig.EnableCUFFT = true

通过使用此表中的一个值,控制基准代码添加到生成的CUDA代码中。

价值 描述

此值为默认值。

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

真正的

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

例子:cfg.GpuConfig.Benchmarking = true

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

价值 描述

此值为默认值。

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

真正的

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

例子:cfg.GpuConfig.SafeBuild=true

选择代码生成的最小计算能力。计算能力识别GPU硬件支持的功能。应用程序在运行时使用它来确定当前GPU上可用的硬件功能和指令。如果指定自定义计算能力,GPU编码器将忽略此设置。万博1manbetx

要查看代码生成的CUDA计算能力需求,请参阅下表。

目标 计算能力

CUDA墨西哥人

看到GPU版万博1manbetx本支持

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

3.2或更高版本。

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

6.1、6.3或更高。

半精确(16位浮点)的深度学习应用

5.3、6.0、6.2或以上。

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

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

例如,指定虚拟架构类型-arch=计算50. 您可以使用-arch=sm_50.有关更多信息,请参见转向GPU代码生成的选项CUDA工具包文档中的主题。

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

将附加标志传递给GPU编译器。例如,——fmad = false指示学校网站在一个浮点乘法-加法(FMAD)指令中禁用浮点乘法和加法的缩写。

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

例子:cfg.GpuConfig.CompilerFlags = '——fmad = false '

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

例子:cfg.GpuConfig.StackLimitPerThread = 1024

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

例子:cfg.GpuConfig.MallocThreshold = 256

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

由于GPU设备具有有限的流式多处理器(SM)资源,因此限制每个内核的块数可以避免因调度、加载和卸载块而导致的性能损失。

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

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

例子:cfg.GpuConfig.MaximumBlocksPerKernel=1024

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

例子:cfg.GpuConfig.SelectCudaDevice = <的DeviceID >

请注意

SelectCudaDevice可与gpuArray只有gpuDeviceSelectCudaDevice指向同一个GPU。如果gpuDevice指向不同的GPU,一个CUDA_ERROR_INVALID_VALUE抛出运行时错误。

例子

全部折叠

利用MATLAB函数生成CUDA MEX函数,该函数适用于GPU代码生成。另外,启用代码生成报告。

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

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

要生成MEX函数,请创建代码生成配置对象。

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

启用代码生成报告。

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

属性在当前文件夹中生成一个MEX函数,指定配置对象配置选择。

%生成MEX函数和代码生成报告codegen配置cfgarg游戏{0(512512年,“双”),0(512512年,“双”)}VecAdd

限制

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

  • GPU编码器总是设置启用已签名的左移位启用SignedRightShift财产coder.EmbeddedCodeConfig代码配置对象为true。

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

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

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

兼容性的考虑

全部展开

未来版本中的行为更改

介绍了R2017b