不穩定的 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 驅動程式中的功能。

搜尋的結果為