不稳定的 CUDA 模块

自:0.50.0

该模块提供与 CUDA 工具包相关的辅助功能,以及使用该工具包构建代码的功能。

注意:此模块不稳定。它仅作为技术预览提供。其 API 可能会在发布版本之间以任意方式更改,或者可能从 Meson 中完全删除。

导入模块

该模块可以按以下方式导入

cuda = import('unstable-cuda')

它提供了一些有用的函数,如下所述。

函数

nvcc_arch_flags()

自:0.50.0

cuda.nvcc_arch_flags(cuda_version_string, ...,
                     detected: string_or_array)

返回一个 -gencode 标志列表,这些标志应传递给 cuda_args: 以便为位置参数中枚举的体系结构/计算能力编译“胖二进制文件”。这些标志应被具有 CUDA 工具包版本字符串 cuda_version_string 的 NVCC 接受。

可以通过以下方式指定一组体系结构和/或计算能力:

  • 单个位置参数 'All''Common''Auto'
  • 作为(一个字符串数组)
    • 体系结构名称('Kepler''Maxwell+Tegra''Turing')和/或
    • 计算能力('3.0''3.5''5.3''7.5'

+PTX 后缀请求为给定体系结构生成 PTX 代码。作为 A.B(X.Y) 给出的计算能力请求在为较新体系结构 A.B 生成二进制文件之前为较旧的虚拟体系结构 X.Y 生成 PTX。

可以使用以下方式传递多个体系结构和计算能力:

  • 多个位置参数
  • 字符串列表
  • 空格 ( )、逗号 (,) 或分号 (;) 分隔的字符串

单个单词体系结构集 'All''Common''Auto' 不能与体系结构名称或计算能力混合使用。它们的解释是

名称 计算能力
'All' 给定 NVCC 编译器支持的所有 CC。
'Common' 给定 NVCC 编译器支持的相对常见的 CC。通常不包括 Tegra 和 Tesla 设备。
'Auto' detected: 关键字提供的 CC,过滤掉给定 NVCC 编译器支持的 CC。

支持的体系结构名称及其相应的计算能力如下:

名称 计算能力
'Fermi' 2.0, 2.1(2.0)
'Kepler' 3.0, 3.5
'Kepler+Tegra' 3.2
'Kepler+Tesla' 3.7
'Maxwell' 5.0, 5.2
'Maxwell+Tegra' 5.3
'Pascal' 6.0, 6.1
'Pascal+Tegra' 6.2
'Volta' 7.0
'Xavier' 7.2
'Turing' 7.5
'Ampere' 8.0, 8.6

示例

cuda.nvcc_arch_flags('10.0', '3.0', '3.5', '5.0+PTX')
cuda.nvcc_arch_flags('10.0', ['3.0', '3.5', '5.0+PTX'])
cuda.nvcc_arch_flags('10.0', [['3.0', '3.5'], '5.0+PTX'])
cuda.nvcc_arch_flags('10.0', '3.0 3.5 5.0+PTX')
cuda.nvcc_arch_flags('10.0', '3.0,3.5,5.0+PTX')
cuda.nvcc_arch_flags('10.0', '3.0;3.5;5.0+PTX')
cuda.nvcc_arch_flags('10.0', 'Kepler 5.0+PTX')
# Returns ['-gencode', 'arch=compute_30,code=sm_30',
#          '-gencode', 'arch=compute_35,code=sm_35',
#          '-gencode', 'arch=compute_50,code=sm_50',
#          '-gencode', 'arch=compute_50,code=compute_50']

cuda.nvcc_arch_flags('10.0', '3.5(3.0)')
# Returns ['-gencode', 'arch=compute_30,code=sm_35']

cuda.nvcc_arch_flags('8.0', 'Common')
# Returns ['-gencode', 'arch=compute_30,code=sm_30',
#          '-gencode', 'arch=compute_35,code=sm_35',
#          '-gencode', 'arch=compute_50,code=sm_50',
#          '-gencode', 'arch=compute_52,code=sm_52',
#          '-gencode', 'arch=compute_60,code=sm_60',
#          '-gencode', 'arch=compute_61,code=sm_61',
#          '-gencode', 'arch=compute_61,code=compute_61']

cuda.nvcc_arch_flags('9.2', 'Auto', detected: '6.0 6.0 6.0 6.0')
cuda.nvcc_arch_flags('9.2', 'Auto', detected: ['6.0', '6.0', '6.0', '6.0'])
# Returns ['-gencode', 'arch=compute_60,code=sm_60']

cuda.nvcc_arch_flags(nvcc, 'All')
# Returns ['-gencode', 'arch=compute_20,code=sm_20',
#          '-gencode', 'arch=compute_20,code=sm_21',
#          '-gencode', 'arch=compute_30,code=sm_30',
#          '-gencode', 'arch=compute_32,code=sm_32',
#          '-gencode', 'arch=compute_35,code=sm_35',
#          '-gencode', 'arch=compute_37,code=sm_37',
#          '-gencode', 'arch=compute_50,code=sm_50', # nvcc.version()  <  7.0
#          '-gencode', 'arch=compute_52,code=sm_52',
#          '-gencode', 'arch=compute_53,code=sm_53', # nvcc.version() >=  7.0
#          '-gencode', 'arch=compute_60,code=sm_60',
#          '-gencode', 'arch=compute_61,code=sm_61', # nvcc.version() >=  8.0
#          '-gencode', 'arch=compute_70,code=sm_70',
#          '-gencode', 'arch=compute_72,code=sm_72', # nvcc.version() >=  9.0
#          '-gencode', 'arch=compute_75,code=sm_75'] # nvcc.version() >= 10.0

注意:此函数旨在密切复制 CMake 的 FindCUDA 模块函数 CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable, [list of CUDA compute architectures])

nvcc_arch_readable()

自:0.50.0

cuda.nvcc_arch_readable(cuda_version_string, ...,
                        detected: string_or_array)

nvcc_arch_flags() 具有完全相同的接口,但它不返回标志列表,而是返回将为此编译的体系结构的“可读”列表。此函数的输出仅用于信息性消息打印。

archs    = '3.0 3.5 5.0+PTX'
readable = cuda.nvcc_arch_readable('10.0', archs)
message('Building for architectures ' + ' '.join(readable))

这将打印

Message: Building for architectures sm30 sm35 sm50 compute50

注意:此函数旨在密切复制 CMake 的 FindCUDA 模块函数 CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable, [list of CUDA compute architectures])

min_driver_version()

自:0.50.0

cuda.min_driver_version(cuda_version_string)

返回主机系统上使用具有给定版本字符串的 CUDA 工具包编译的内核所需的最低 NVIDIA 专有驱动程序版本。

此函数的输出通常用于信息性消息打印,但可用于断言或有条件地启用已知存在于所需最小 NVIDIA 驱动程序中的功能。

搜索结果如下: