diff options
author | Robert Maynard <robert.maynard@kitware.com> | 2020-11-04 13:25:17 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-04 12:25:17 -0600 |
commit | 823a3fa646489789834804480e55f8d0b1b12542 (patch) | |
tree | 86ccbc9f4d55f194719a0c4888dd8335c17e3095 | |
parent | c2b943c2096d066b0e54a4bec3ba34dad77a8fb4 (diff) | |
download | spack-823a3fa646489789834804480e55f8d0b1b12542.tar.gz spack-823a3fa646489789834804480e55f8d0b1b12542.tar.bz2 spack-823a3fa646489789834804480e55f8d0b1b12542.tar.xz spack-823a3fa646489789834804480e55f8d0b1b12542.zip |
Added HIP support to VTK-m package (#19523)
-rw-r--r-- | var/spack/repos/builtin/packages/vtk-m/package.py | 116 |
1 files changed, 73 insertions, 43 deletions
diff --git a/var/spack/repos/builtin/packages/vtk-m/package.py b/var/spack/repos/builtin/packages/vtk-m/package.py index c3f5a70328..7516a87598 100644 --- a/var/spack/repos/builtin/packages/vtk-m/package.py +++ b/var/spack/repos/builtin/packages/vtk-m/package.py @@ -40,32 +40,52 @@ class VtkM(CMakePackage, CudaPackage): variant('build_type', default='Release', description='CMake build type', values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel')) variant("shared", default=False, description="build shared libs") - variant("cuda", default=False, description="build cuda support") + variant("doubleprecision", default=True, description='enable double precision') variant("logging", default=False, description="build logging support") variant("mpi", default=False, description="build mpi support") - variant("openmp", default=(sys.platform != 'darwin'), description="build openmp support") variant("rendering", default=True, description="build rendering support") - variant("tbb", default=(sys.platform == 'darwin'), description="build TBB support") variant("64bitids", default=False, description="enable 64 bits ids") + # Device variants + variant("cuda", default=False, description="build cuda support") + variant("openmp", default=(sys.platform != 'darwin'), description="build openmp support") + variant("tbb", default=(sys.platform == 'darwin'), description="build TBB support") + variant("hip", default=False, description="build hip support") + + # it doesn't look like spack has a amd gpu abstraction + amdgpu_targets = ( + 'gfx701', 'gfx801', 'gfx802', 'gfx803', + 'gfx900', 'gfx906', 'gfx908', 'gfx1010', + 'gfx1011', 'gfx1012' + ) + variant('amdgpu_target', default='none', multi=True, values=amdgpu_targets) + conflicts("+hip", when="amdgpu_target=none") + depends_on("cmake@3.12:", type="build") # CMake >= 3.12 + depends_on("cmake@3.18:", when="+hip") # CMake >= 3.18 + + depends_on('cuda@10.2.0:', when='+cuda') depends_on("tbb", when="+tbb") - depends_on("cuda", when="+cuda") depends_on("mpi", when="+mpi") + depends_on("kokkos@3.1:+hip", when="+hip") + depends_on("rocm-cmake@3.7:", when="+hip") + depends_on("hip@3.7:", when="+hip") + + conflicts("+hip", when="+cuda") conflicts("~shared", when="~pic") def cmake_args(self): spec = self.spec options = [] - gpu_name_table = {'20': 'fermi', - '30': 'kepler', '32': 'kepler', '35': 'kepler', + gpu_name_table = {'30': 'kepler', '32': 'kepler', '35': 'kepler', '50': 'maxwell', '52': 'maxwell', '53': 'maxwell', '60': 'pascal', '61': 'pascal', '62': 'pascal', - '70': 'volta', '72': 'turing', '75': 'turing'} + '70': 'volta', '72': 'turing', '75': 'turing', + '80': 'ampere', '86': 'ampere'} with working_dir('spack-build', create=True): options = ["-DVTKm_ENABLE_TESTING:BOOL=OFF"] # shared vs static libs logic @@ -77,26 +97,6 @@ class VtkM(CMakePackage, CudaPackage): options.append('-DBUILD_SHARED_LIBS=ON') else: options.append('-DBUILD_SHARED_LIBS=OFF') - # cuda support - if "+cuda" in spec: - options.append("-DVTKm_ENABLE_CUDA:BOOL=ON") - options.append("-DCMAKE_CUDA_HOST_COMPILER={0}".format( - env["SPACK_CXX"])) - if 'cuda_arch' in spec.variants: - cuda_value = spec.variants['cuda_arch'].value - cuda_arch = cuda_value[0] - if cuda_arch in gpu_name_table: - vtkm_cuda_arch = gpu_name_table[cuda_arch] - options.append('-DVTKm_CUDA_Architecture={0}'.format( - vtkm_cuda_arch)) - else: - # this fix is necessary if compiling platform has cuda, but - # no devices (this's common for front end nodes on hpc clus - # ters) - # we choose kepler as a lowest common denominator - options.append("-DVTKm_CUDA_Architecture=kepler") - else: - options.append("-DVTKm_ENABLE_CUDA:BOOL=OFF") # double precision if "+doubleprecision" in spec: @@ -122,6 +122,52 @@ class VtkM(CMakePackage, CudaPackage): else: options.append("-DVTKm_ENABLE_MPI:BOOL=OFF") + # rendering support + if "+rendering" in spec: + options.append("-DVTKm_ENABLE_RENDERING:BOOL=ON") + else: + options.append("-DVTKm_ENABLE_RENDERING:BOOL=OFF") + + # 64 bit ids + if "+64bitids" in spec: + options.append("-DVTKm_USE_64BIT_IDS:BOOL=ON") + print("64 bit ids enabled") + else: + options.append("-DVTKm_USE_64BIT_IDS:BOOL=OFF") + + if spec.variants["build_type"].value != 'Release': + options.append("-DVTKm_NO_ASSERT:BOOL=ON") + + # cuda support + if "+cuda" in spec: + options.append("-DVTKm_ENABLE_CUDA:BOOL=ON") + options.append("-DCMAKE_CUDA_HOST_COMPILER={0}".format( + env["SPACK_CXX"])) + if 'cuda_arch' in spec.variants: + cuda_value = spec.variants['cuda_arch'].value + cuda_arch = cuda_value[0] + if cuda_arch in gpu_name_table: + vtkm_cuda_arch = gpu_name_table[cuda_arch] + options.append('-DVTKm_CUDA_Architecture={0}'.format( + vtkm_cuda_arch)) + else: + # this fix is necessary if compiling platform has cuda, but + # no devices (this is common for front end nodes on hpc + # clusters). We choose volta as a lowest common denominator + options.append("-DVTKm_CUDA_Architecture=volta") + else: + options.append("-DVTKm_ENABLE_CUDA:BOOL=OFF") + + # hip support + if "+hip" in spec: + options.append("-DVTKm_ENABLE_HIP:BOOL=ON") + + archs = ",".join(self.spec.variants['amdgpu_target'].value) + options.append( + "-DCMAKE_HIP_ARCHITECTURES:STRING={0}".format(archs)) + else: + options.append("-DVTKm_ENABLE_HIP:BOOL=OFF") + # openmp support if "+openmp" in spec: # openmp is added since version 1.3.0 @@ -132,12 +178,6 @@ class VtkM(CMakePackage, CudaPackage): else: options.append("-DVTKm_ENABLE_OPENMP:BOOL=OFF") - # rendering support - if "+rendering" in spec: - options.append("-DVTKm_ENABLE_RENDERING:BOOL=ON") - else: - options.append("-DVTKm_ENABLE_RENDERING:BOOL=OFF") - # tbb support if "+tbb" in spec: # vtk-m detectes tbb via TBB_ROOT env var @@ -146,14 +186,4 @@ class VtkM(CMakePackage, CudaPackage): else: options.append("-DVTKm_ENABLE_TBB:BOOL=OFF") - # 64 bit ids - if "+64bitids" in spec: - options.append("-DVTKm_USE_64BIT_IDS:BOOL=ON") - print("64 bit ids enabled") - else: - options.append("-DVTKm_USE_64BIT_IDS:BOOL=OFF") - - if spec.variants["build_type"].value != 'Release': - options.append("-DVTKm_NO_ASSERT:BOOL=ON") - return options |