主要内容

Coder.gpuconfig.

配置参数CUDA代码生成的马铃薯使用代码GPU编码器

描述

编码器。GpuCodeConfig要么Coder.gpuconfig.对象包含的配置参数Codegen.用于生成CUDA®MEX,一个静态库,一个动态链接库,或一个带有GPU Coder™的可执行程序。将对象传递给Codegen.使用使用的功能-Config.选择。

创建

描述

例子

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

cfg = coder.gpuConfig (build_type.,'ecoder',false)创建代码生成配置对象以生成CUDA“自由”'DLL', 要么'可执行程序'输出即使安装了嵌入式编码器产品也是如此。

cfg = coder.gpuConfig (build_type.,'ecoder',true)创造一个Coder.embeddedCodeConfig即使未安装嵌入式编码器产品,也是Configuration对象。但是,使用a的代码生成Coder.embeddedCodeConfig对象需要嵌入的编码器许可证。

输入参数

展开全部

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

价值 描述
'mex' CUDA MEX.
'lib' 静态库
'DLL' 动态链接库
'可执行程序' 可执行程序

特性

展开全部

Coder.gpuconfig.只包含代码配置对象的GPU特定配置参数。要查看代码配置对象的所有属性,请参见coder.codeConfigCoder.embeddedCodeConfig

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

价值 描述
真的

此值为默认值。

启用CUDA代码生成。

禁用CUDA代码生成。

例子:cfg.guconfig.enabled = true

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

价值 描述
“离散”

此值为默认值。

生成的代码使用Cudamalloc.用于在CPU和GPU之间传输数据的API。从程序员的视角,离散模式具有传统的内存架构,具有单独的CPU和GPU全局存储器地址空间。

'统一'

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

对于nvidia.®嵌入式目标。看到主机不支持统一内存分配方万博1manbetx式

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

例子:cfg.guconfig.mallocmode ='离散'

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

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

用nvidia替换数学函数调用Cublas.库调用,指定为该表中的值之一。

价值 描述
真的

此值为默认值。

允许GPU编码器替换适当的数学函数调用调用Cublas.图书馆。对于在CUDA中没有更换的功能,GPU编码器使用便携式MATLAB®函数,并尝试将它们映射到GPU。

禁止使用Cublas.库。

有关更多信息,请参阅来自图书馆呼叫的内核

例子:cfg.guconfig.enablecublas = true

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

价值 描述
真的

此值为默认值。

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

禁止使用cuSOLVER库。

有关更多信息,请参阅来自图书馆呼叫的内核

例子:cfg.guconfig.enableCusolver =真实

更换FFT.函数调用cuFFT库调用,指定为该表中的值之一。

价值 描述
真的

此值为默认值。

允许GPU编码器更换合适FFT.一个接一个的电话cuFFT图书馆。

禁用使用cuFFT库。使用此选项,GPU编码器使用C语言FFTW.库中可用的或从可移植的MATLAB生成内核FFT.代码。

有关更多信息,请参阅来自图书馆呼叫的内核

例子:cfg.guconfig.enablecufft = true

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

价值 描述

此值为默认值。

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

真的

使用基准测试功能生成CUDA代码。此选项使用CUDA API,如cudaEvent准确时间内核memcpy,以及其他活动。

例子:cfg.guconfig.benchmarking = true

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

价值 描述

此值为默认值。

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

真的

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

例子:cfg.guconfig.safebuild = true

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

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

目标 计算能力

CUDA MEX.

看到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 = compute_50..您可以使用真实架构使用-arch = sm_50.有关更多信息,请参见转向GPU代码生成的选项CUDA工具包文档中的主题。

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

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

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

例子:cfg.guconfig.compilerflags ='--fmad = false'

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

例子:cfg.g.guconfig.stacklimitperthread = 1024.

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

例子:cfg.g.guconfig.mallocthreshold = 256.

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

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

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

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

例子:cfg.guconfig.maximumblocksperkernel = 1024.

在多GPU环境(如NVIDIA Drive Platforms)中,将CUDA设备指定为目标。

例子:cfg.guconfig.selectcudadevice =

请注意

SelectCudaDevice可以使用GPUArray.除非GPudevice.SelectCudaDevice指向同一个GPU。如果GPudevice.指向不同的GPU,acuda_error_invalid_value.抛出运行时错误。

例子

全部收缩

从MATLAB函数生成适用于GPU代码生成的CUDA MEX功能。此外,启用代码生成报告。

写一个matlab函数VecAdd,执行输入的矢量添加一个B

功能[c] = vecadd(a,b)%#codegen.C = coder.nullcopy(0(大小(A)));coder.gpu.kernelfun ();C = a + b;结束

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

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

启用代码生成报告。

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

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

%生成MEX函数和代码生成报告Codegen.-Config.cfgarg游戏{0(512512年,“双”),0(512512年,“双”)}VecAdd

限制

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

  • GPU编码器总是设置启发性leftsprifts.启发性的archights.财产的财产Coder.embeddedCodeConfig代码配置对象为true。

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

    cfg.GpuConfig.CompilerFlags ='-xcompiler / md'

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

兼容性考虑因素

展开全部

未来发布的行为变化

介绍了R2017b