不穩定的 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)
傳回應傳遞給 cuda_args:
的 -gencode
旗標的列表,以便針對位置引數中列舉的架構/計算能力編譯「胖二進位檔」。這些旗標應可為具有 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)
給定的計算能力要求先為較舊的虛擬架構 X.Y
產生 PTX 程式碼,然後再為較新的架構 A.B
產生二進位檔。
可以使用以下方式傳遞多個架構和計算能力
- 多個位置引數
- 字串列表
- 空格(
)、逗號(
,
)或分號(;
)分隔的字串
單字架構集 'All'
、'Common'
或 'Auto'
不能與架構名稱或計算能力混合使用。它們的解讀為
名稱 | 計算能力 |
---|---|
'All'
|
給定 NVCC 編譯器支援的所有 CC。 |
'Common'
|
給定 NVCC 編譯器支援的相對常見 CC。通常排除 Tegra 和 Tesla 裝置。 |
'Auto'
|
detected: 關鍵字提供的 CC,經過篩選,以確保給定 NVCC 編譯器支援。 |
支援的架構名稱及其對應的計算能力為
名稱 | 計算能力 |
---|---|
'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, [CUDA 計算架構列表])
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, [CUDA 計算架構列表])
min_driver_version()
自:0.50.0 起
cuda.min_driver_version(cuda_version_string)
傳回主機系統上,以具有給定版本字串的 CUDA 工具組編譯的核心所需的最低 NVIDIA 專有驅動程式版本。
此函式的輸出通常用於資訊訊息列印,但可以用於判斷提示或有條件地啟用已知存在於所需最低 NVIDIA 驅動程式中的功能。
搜尋的結果為