hypre: enable cuda variants (#21885)
This commit is contained in:
parent
27ef9f0e07
commit
e88fc38cfe
1 changed files with 39 additions and 2 deletions
|
@ -8,7 +8,7 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
class Hypre(Package):
|
class Hypre(Package, CudaPackage):
|
||||||
"""Hypre is a library of high performance preconditioners that
|
"""Hypre is a library of high performance preconditioners that
|
||||||
features parallel multigrid methods for both structured and
|
features parallel multigrid methods for both structured and
|
||||||
unstructured grid problems."""
|
unstructured grid problems."""
|
||||||
|
@ -78,6 +78,8 @@ class Hypre(Package):
|
||||||
depends_on("lapack")
|
depends_on("lapack")
|
||||||
depends_on('superlu-dist', when='+superlu-dist+mpi')
|
depends_on('superlu-dist', when='+superlu-dist+mpi')
|
||||||
|
|
||||||
|
conflicts('+cuda', when='+int64')
|
||||||
|
|
||||||
# Patch to build shared libraries on Darwin does not apply to
|
# Patch to build shared libraries on Darwin does not apply to
|
||||||
# versions before 2.13.0
|
# versions before 2.13.0
|
||||||
conflicts("+shared@:2.12.99 platform=darwin")
|
conflicts("+shared@:2.12.99 platform=darwin")
|
||||||
|
@ -100,7 +102,8 @@ def url_for_version(self, version):
|
||||||
|
|
||||||
return url.format(version)
|
return url.format(version)
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def _configure_args(self):
|
||||||
|
spec = self.spec
|
||||||
# Note: --with-(lapack|blas)_libs= needs space separated list of names
|
# Note: --with-(lapack|blas)_libs= needs space separated list of names
|
||||||
lapack = spec['lapack'].libs
|
lapack = spec['lapack'].libs
|
||||||
blas = spec['blas'].libs
|
blas = spec['blas'].libs
|
||||||
|
@ -162,6 +165,40 @@ def install(self, spec, prefix):
|
||||||
else:
|
else:
|
||||||
configure_args.append("--disable-debug")
|
configure_args.append("--disable-debug")
|
||||||
|
|
||||||
|
if '+cuda' in self.spec:
|
||||||
|
configure_args.extend([
|
||||||
|
'--with-cuda',
|
||||||
|
'--enable-curand',
|
||||||
|
'--enable-cub'
|
||||||
|
])
|
||||||
|
else:
|
||||||
|
configure_args.extend([
|
||||||
|
'--without-cuda',
|
||||||
|
'--disable-curand',
|
||||||
|
'--disable-cub'
|
||||||
|
])
|
||||||
|
|
||||||
|
return configure_args
|
||||||
|
|
||||||
|
def setup_build_environment(self, env):
|
||||||
|
if '+mpi' in self.spec:
|
||||||
|
env.set('CC', self.spec['mpi'].mpicc)
|
||||||
|
env.set('CXX', self.spec['mpi'].mpicxx)
|
||||||
|
env.set('F77', self.spec['mpi'].mpif77)
|
||||||
|
|
||||||
|
if '+cuda' in self.spec:
|
||||||
|
env.set('CUDA_HOME', self.spec['cuda'].prefix)
|
||||||
|
env.set('CUDA_PATH', self.spec['cuda'].prefix)
|
||||||
|
cuda_arch = self.spec.variants['cuda_arch'].value
|
||||||
|
if cuda_arch:
|
||||||
|
arch_sorted = list(sorted(cuda_arch, reverse=True))
|
||||||
|
env.set('HYPRE_CUDA_SM', arch_sorted[0])
|
||||||
|
# In CUDA builds hypre currently doesn't handle flags correctly
|
||||||
|
env.append_flags(
|
||||||
|
'CXXFLAGS', '-O2' if '~debug' in self.spec else '-g')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
configure_args = self._configure_args()
|
||||||
# Hypre's source is staged under ./src so we'll have to manually
|
# Hypre's source is staged under ./src so we'll have to manually
|
||||||
# cd into it.
|
# cd into it.
|
||||||
with working_dir("src"):
|
with working_dir("src"):
|
||||||
|
|
Loading…
Reference in a new issue