summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Maynard <robert.maynard@kitware.com>2020-11-04 13:25:17 -0500
committerGitHub <noreply@github.com>2020-11-04 12:25:17 -0600
commit823a3fa646489789834804480e55f8d0b1b12542 (patch)
tree86ccbc9f4d55f194719a0c4888dd8335c17e3095
parentc2b943c2096d066b0e54a4bec3ba34dad77a8fb4 (diff)
downloadspack-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.py116
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