主要内容

coder.gpuConfig

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

描述

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

创建

描述

例子

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

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

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

输入参数

全部展开

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

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

属性

全部展开

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

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

价值 描述
真正的

此值为默认值。

支持CUDA代码生成。

禁用CUDA代码生成。

例子:cfg.GpuConfig.Enabled = true

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

价值 描述
“离散”

此值为默认值。

生成的代码使用cudaMalloc用于在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 Coder使用可移植的MATLAB函数,并尝试将它们映射到GPU。

禁止使用cuSOLVER库。

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

例子:cfg.GpuConfig.EnableCUSOLVER = true

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

价值 描述
真正的

此值为默认值。

允许GPU编码器替换适当fft一个接一个的电话cuFFT图书馆。

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

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

例子:cfg.GpuConfig.EnableCUFFT = true

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

价值 描述

此值为默认值。

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

真正的

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

例子:cfg.GpuConfig.Benchmarking = true

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

价值 描述

此值为默认值。

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

真正的

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

例子:cfg.GpuConfig.SafeBuild = true

为代码生成选择最小计算能力。GPU硬件支持的特性由计算能力决定。万博1manbetx它被应用程序在运行时使用,以确定哪些硬件特性,指令在当前的GPU上可用。如果您指定自定义计算能力,GPU编码器将忽略此设置。

要查看代码生成的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架构的名称。

例如,指定虚拟架构类型拱= compute_50.您可以使用拱= 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, aCUDA_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财产的编码器。CodeConfig编码器。EmbeddedCodeConfig代码配置对象为true。

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

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

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

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

兼容性的考虑

全部展开

未来版本中的行为改变

介绍了R2017b