Skip to content
Snippets Groups Projects
Unverified Commit 6153eea2 authored by Adam J. Stewart's avatar Adam J. Stewart Committed by GitHub
Browse files

CudaPackage: add support for Tesla K80 and older CUDA (#15031)

* CudaPackage: add support for Tesla K80 and older CUDA

* Flake8 fixes

* Fix cuda_arch when no arch is set

* Fine-tune cuda_arch=37,50 supported CUDA versions

* CUDA 6.5+ supports SM_37

* Add @svenevs as a maintainer
parent 167c7584
No related branches found
No related tags found
No related merge requests found
...@@ -13,39 +13,65 @@ class CudaPackage(PackageBase): ...@@ -13,39 +13,65 @@ class CudaPackage(PackageBase):
"""Auxiliary class which contains CUDA variant, dependencies and conflicts """Auxiliary class which contains CUDA variant, dependencies and conflicts
and is meant to unify and facilitate its usage. and is meant to unify and facilitate its usage.
""" """
maintainers = ['ax3l', 'svenevs']
# FIXME: keep cuda and cuda_arch separate to make usage easier untill # https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list
# https://developer.nvidia.com/cuda-gpus
# https://en.wikipedia.org/wiki/CUDA#GPUs_supported
cuda_arch_values = [
'10', '11', '12', '13',
'20', '21',
'30', '32', '35', '37',
'50', '52', '53',
'60', '61', '62',
'70', '72', '75',
]
# FIXME: keep cuda and cuda_arch separate to make usage easier until
# Spack has depends_on(cuda, when='cuda_arch!=None') or alike # Spack has depends_on(cuda, when='cuda_arch!=None') or alike
variant('cuda', default=False, variant('cuda', default=False,
description='Build with CUDA') description='Build with CUDA')
# see http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list
# https://developer.nvidia.com/cuda-gpus
variant('cuda_arch', variant('cuda_arch',
description='CUDA architecture', description='CUDA architecture',
values=spack.variant.any_combination_of( values=spack.variant.any_combination_of(*cuda_arch_values))
'20', '30', '32', '35', '50', '52', '53', '60', '61',
'62', '70', '72', '75'
))
# see http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#nvcc-examples # https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#nvcc-examples
# and http://llvm.org/docs/CompileCudaWithLLVM.html#compiling-cuda-code # https://llvm.org/docs/CompileCudaWithLLVM.html#compiling-cuda-code
@staticmethod @staticmethod
def cuda_flags(arch_list): def cuda_flags(arch_list):
return [('--generate-code arch=compute_{0},code=sm_{0} ' return [('--generate-code arch=compute_{0},code=sm_{0} '
'--generate-code arch=compute_{0},code=compute_{0}').format(s) '--generate-code arch=compute_{0},code=compute_{0}').format(s)
for s in arch_list] for s in arch_list]
depends_on("cuda@7:", when='+cuda') depends_on('cuda', when='+cuda')
# CUDA version vs Architecture # CUDA version vs Architecture
depends_on("cuda@8:", when='cuda_arch=60') # https://en.wikipedia.org/wiki/CUDA#GPUs_supported
depends_on("cuda@8:", when='cuda_arch=61') depends_on('cuda@:6.0', when='cuda_arch=10')
depends_on("cuda@8:", when='cuda_arch=62') depends_on('cuda@:6.5', when='cuda_arch=11')
depends_on("cuda@9:", when='cuda_arch=70') depends_on('cuda@2.1:6.5', when='cuda_arch=12')
depends_on("cuda@9:", when='cuda_arch=72') depends_on('cuda@2.1:6.5', when='cuda_arch=13')
depends_on("cuda@10:", when='cuda_arch=75')
depends_on('cuda@3.0:8.0', when='cuda_arch=20')
depends_on('cuda@3.2:8.0', when='cuda_arch=21')
depends_on('cuda@5.0:10.2', when='cuda_arch=30')
depends_on('cuda@5.0:10.2', when='cuda_arch=32')
depends_on('cuda@5.0:10.2', when='cuda_arch=35')
depends_on('cuda@6.5:10.2', when='cuda_arch=37')
depends_on('cuda@6.0:', when='cuda_arch=50')
depends_on('cuda@6.5:', when='cuda_arch=52')
depends_on('cuda@6.5:', when='cuda_arch=53')
depends_on('cuda@8.0:', when='cuda_arch=60')
depends_on('cuda@8.0:', when='cuda_arch=61')
depends_on('cuda@8.0:', when='cuda_arch=62')
depends_on('cuda@:8', when='cuda_arch=20') depends_on('cuda@9.0:', when='cuda_arch=70')
depends_on('cuda@9.0:', when='cuda_arch=72')
depends_on('cuda@10.0:', when='cuda_arch=75')
# There are at least three cases to be aware of for compiler conflicts # There are at least three cases to be aware of for compiler conflicts
# 1. Linux x86_64 # 1. Linux x86_64
...@@ -130,18 +156,8 @@ def cuda_flags(arch_list): ...@@ -130,18 +156,8 @@ def cuda_flags(arch_list):
# `clang-apple@x.y.z as a possible fix. # `clang-apple@x.y.z as a possible fix.
# Compiler conflicts will be eventual taken from here: # Compiler conflicts will be eventual taken from here:
# https://docs.nvidia.com/cuda/cuda-installation-guide-mac-os-x/index.html#abstract # https://docs.nvidia.com/cuda/cuda-installation-guide-mac-os-x/index.html#abstract
conflicts('platform=darwin', when='+cuda ^cuda@11.0:')
# Make sure cuda_arch can not be used without +cuda # Make sure cuda_arch can not be used without +cuda
conflicts('~cuda', when='cuda_arch=20') for value in cuda_arch_values:
conflicts('~cuda', when='cuda_arch=30') conflicts('~cuda', when='cuda_arch=' + value)
conflicts('~cuda', when='cuda_arch=32')
conflicts('~cuda', when='cuda_arch=35')
conflicts('~cuda', when='cuda_arch=50')
conflicts('~cuda', when='cuda_arch=52')
conflicts('~cuda', when='cuda_arch=53')
conflicts('~cuda', when='cuda_arch=60')
conflicts('~cuda', when='cuda_arch=61')
conflicts('~cuda', when='cuda_arch=62')
conflicts('~cuda', when='cuda_arch=70')
conflicts('~cuda', when='cuda_arch=72')
conflicts('~cuda', when='cuda_arch=75')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment