From dba6a26920f9d6392be10acbddfc2666a21129c9 Mon Sep 17 00:00:00 2001 From: Pieter Ghysels Date: Sat, 23 Jan 2021 00:31:23 -0800 Subject: Add strumpack v5.1.0, add support for ROCm/HIP (#21203) --- .../repos/builtin/packages/strumpack/package.py | 38 +++++++++++++++------- 1 file changed, 26 insertions(+), 12 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/strumpack/package.py b/var/spack/repos/builtin/packages/strumpack/package.py index 88b50c7574..339e9a2a71 100644 --- a/var/spack/repos/builtin/packages/strumpack/package.py +++ b/var/spack/repos/builtin/packages/strumpack/package.py @@ -6,7 +6,7 @@ from spack import * -class Strumpack(CMakePackage, CudaPackage): +class Strumpack(CMakePackage, CudaPackage, ROCmPackage): """STRUMPACK -- STRUctured Matrix PACKage - provides linear solvers for sparse matrices and for dense rank-structured matrices, i.e., matrices that exhibit some kind of low-rank property. It provides a @@ -18,12 +18,13 @@ class Strumpack(CMakePackage, CudaPackage): iterative solvers.""" homepage = "http://portal.nersc.gov/project/sparse/strumpack" - url = "https://github.com/pghysels/STRUMPACK/archive/v4.0.0.tar.gz" + url = "https://github.com/pghysels/STRUMPACK/archive/v5.1.0.tar.gz" git = "https://github.com/pghysels/STRUMPACK.git" maintainers = ['pghysels'] version('master', branch='master') + version('5.1.1', sha256='6cf4eaae5beb9bd377f2abce9e4da9fd3e95bf086ae2f04554fad6dd561c28b9') version('5.0.0', sha256='bdfd1620ff7158d96055059be04ee49466ebaca8213a2fdab33e2d4571019a49') version('4.0.0', sha256='a3629f1f139865c74916f8f69318f53af6319e7f8ec54e85c16466fd7d256938') version('3.3.0', sha256='499fd3b58656b4b6495496920e5372895861ebf15328be8a7a9354e06c734bc7') @@ -34,8 +35,6 @@ class Strumpack(CMakePackage, CudaPackage): variant('mpi', default=True, description='Use MPI') variant('openmp', default=True, description='Enable thread parallellism via tasking with OpenMP') - variant('cuda', default=True, - description='Enable CUDA support') variant('parmetis', default=True, description='Enable use of ParMetis') variant('scotch', default=False, @@ -70,12 +69,16 @@ class Strumpack(CMakePackage, CudaPackage): depends_on('butterflypack@1.2.0:', when='@4.0.0: +butterflypack+mpi') depends_on('cuda', when='@4.0.0: +cuda') depends_on('zfp', when='+zfp') + depends_on('hipblas', when='+rocm') + depends_on('rocsolver', when='+rocm') conflicts('+parmetis', when='~mpi') conflicts('+butterflypack', when='~mpi') conflicts('+butterflypack', when='@:3.2.0') - conflicts('+cuda', when='@:3.9.999') conflicts('+zfp', when='@:3.9.999') + conflicts('+cuda', when='@:3.9.999') + conflicts('+rocm', when='@:5.0.999') + conflicts('+rocm', when='+cuda') patch('intel-19-compile.patch', when='@3.1.1') @@ -88,6 +91,8 @@ class Strumpack(CMakePackage, CudaPackage): args = [ '-DSTRUMPACK_USE_MPI=%s' % on_off('+mpi'), '-DSTRUMPACK_USE_OPENMP=%s' % on_off('+openmp'), + '-DSTRUMPACK_USE_CUDA=%s' % on_off('+cuda'), + '-DSTRUMPACK_USE_HIP=%s' % on_off('+rocm'), '-DTPL_ENABLE_PARMETIS=%s' % on_off('+parmetis'), '-DTPL_ENABLE_SCOTCH=%s' % on_off('+scotch'), '-DTPL_ENABLE_BPACK=%s' % on_off('+butterflypack'), @@ -99,6 +104,7 @@ class Strumpack(CMakePackage, CudaPackage): '-DTPL_LAPACK_LIBRARIES=%s' % spec['lapack'].libs.joined(";"), '-DTPL_SCALAPACK_LIBRARIES=%s' % spec['scalapack']. libs.joined(";"), + '-DBUILD_SHARED_LIBS=%s' % on_off('+shared') ] if spec.satisfies('@:3.9.999'): @@ -112,13 +118,21 @@ class Strumpack(CMakePackage, CudaPackage): '-DSTRUMPACK_C_INTERFACE=%s' % on_off('+c_interface'), ]) - if spec.satisfies('@4.0.0:'): + if '+cuda' in spec: args.extend([ - '-DSTRUMPACK_USE_CUDA=%s' % on_off('+cuda') - ]) - - args.extend([ - '-DBUILD_SHARED_LIBS=%s' % on_off('+shared') - ]) + '-DCUDA_TOOLKIT_ROOT_DIR={0}'.format(spec['cuda'].prefix), + '-DCMAKE_CUDA_HOST_COMPILER={0}'.format(env["SPACK_CXX"])]) + cuda_archs = spec.variants['cuda_arch'].value + if 'none' not in cuda_archs: + args.append('-DCUDA_NVCC_FLAGS={0}'. + format(' '.join(self.cuda_flags(cuda_archs)))) + + if '+rocm' in spec: + args.append( + '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix)) + rocm_archs = spec.variants['amdgpu_target'].value + if 'none' not in rocm_archs: + args.append('-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'. + format(",".join(rocm_archs))) return args -- cgit v1.2.3-70-g09d2