Instabiler CUDA-Modul
Seit: 0.50.0
Dieses Modul bietet Hilfsfunktionen im Zusammenhang mit dem CUDA Toolkit und dem Erstellen von Code damit.
Hinweis: Dieses Modul ist instabil. Es wird nur als Technologievorschau bereitgestellt. Seine API kann sich zwischen den Versionen beliebig ändern oder es könnte ganz aus Meson entfernt werden.
Importieren des Moduls
Das Modul kann wie folgt importiert werden
cuda = import('unstable-cuda')
Es bietet mehrere nützliche Funktionen, die im Folgenden aufgeführt sind.
Funktionen
nvcc_arch_flags()
Seit: 0.50.0
cuda.nvcc_arch_flags(cuda_version_string, ...,
detected: string_or_array)
Gibt eine Liste von -gencode Flags zurück, die an cuda_args: übergeben werden sollten, um eine "Fat-Binary" für die Architekturen/Compute-Capabilities zu kompilieren, die in den positionalen Argumenten aufgeführt sind. Die Flags müssen für einen NVCC mit der CUDA Toolkit Version cuda_version_string akzeptabel sein.
Eine Reihe von Architekturen und/oder Compute-Capabilities kann angegeben werden durch
- Das einzelne positionale Argument
'All','Common'oder'Auto' - Als (ein Array von)
- Architekturtitel (
'Kepler','Maxwell+Tegra','Turing') und/oder - Compute-Capabilities (
'3.0','3.5','5.3','7.5')
- Architekturtitel (
Ein Suffix von +PTX fordert PTX-Code-Generierung für die gegebene Architektur an. Eine Compute-Capability, die als A.B(X.Y) angegeben ist, fordert PTX-Generierung für eine ältere virtuelle Architektur X.Y vor der Binärgenerierung für eine neuere Architektur A.B an.
Mehrere Architekturen und Compute-Capabilities können übergeben werden
- Mehrere positionale Argumente
- Listen von Zeichenketten
- Leerzeichen (
), Komma (,) oder Semikolon (;)-getrennte Zeichenketten
Die einwortigen Architektursätze 'All', 'Common' oder 'Auto' können nicht mit Architekturtiteln oder Compute-Capabilities gemischt werden. Ihre Interpretation ist
| Name | Compute-Capability |
|---|---|
'All'
|
Alle CCs, die vom gegebenen NVCC-Compiler unterstützt werden. |
'Common'
|
Relativ gebräuchliche CCs, die vom gegebenen NVCC-Compiler unterstützt werden. Schließt in der Regel Tegra- und Tesla-Geräte aus. |
'Auto'
|
Die CCs, die vom Schlüsselwort detected: bereitgestellt werden, gefiltert nach Unterstützung durch den gegebenen NVCC-Compiler. |
Die unterstützten Architekturtitel und ihre entsprechenden Compute-Capabilities sind
| Name | Compute-Capability |
|---|---|
'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 |
Beispiele
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
Hinweis: Diese Funktion ist dazu gedacht, die CMake-Funktion CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable, [list of CUDA compute architectures]) des FindCUDA-Moduls eng nachzubilden.
nvcc_arch_readable()
Seit: 0.50.0
cuda.nvcc_arch_readable(cuda_version_string, ...,
detected: string_or_array)
Hat exakt die gleiche Schnittstelle wie nvcc_arch_flags(), gibt aber anstelle einer Liste von Flags eine "lesbare" Liste von Architekturen zurück, für die kompiliert wird. Die Ausgabe dieser Funktion ist ausschließlich für die informative Meldungsausgabe bestimmt.
archs = '3.0 3.5 5.0+PTX'
readable = cuda.nvcc_arch_readable('10.0', archs)
message('Building for architectures ' + ' '.join(readable))
Dies wird ausgeben
Message: Building for architectures sm30 sm35 sm50 compute50
Hinweis: Diese Funktion ist dazu gedacht, die CMake-Funktion CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable, [list of CUDA compute architectures]) des FindCUDA-Moduls eng nachzubilden.
min_driver_version()
Seit: 0.50.0
cuda.min_driver_version(cuda_version_string)
Gibt die minimale proprietäre NVIDIA-Treiberversion zurück, die auf dem Hostsystem von Kerneln benötigt wird, die mit einem CUDA Toolkit mit der gegebenen Versionsangabe kompiliert wurden.
Die Ausgabe dieser Funktion ist im Allgemeinen für die informative Meldungsausgabe bestimmt, könnte aber für Assertions oder zur bedingten Aktivierung von Funktionen verwendet werden, die innerhalb des minimal benötigten NVIDIA-Treibers bekannt sind.
Die Ergebnisse der Suche sind