不稳定的 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 驱动程序中的功能。
搜索结果如下: