cp2k: bump version to 9.1, fix building with CUDA (#29108)
first step towards fixing #28554
This commit is contained in:
parent
2ab1ace5f4
commit
37f021ef3c
@ -21,6 +21,7 @@ class Cp2k(MakefilePackage, CudaPackage):
|
||||
|
||||
maintainers = ['dev-zero']
|
||||
|
||||
version('9.1', sha256='fedb4c684a98ad857cd49b69a3ae51a73f85a9c36e9cb63e3b02320c74454ce6')
|
||||
version('8.2', sha256='2e24768720efed1a5a4a58e83e2aca502cd8b95544c21695eb0de71ed652f20a')
|
||||
version('8.1', sha256='7f37aead120730234a60b2989d0547ae5e5498d93b1e9b5eb548c041ee8e7772')
|
||||
version('7.1', sha256='ccd711a09a426145440e666310dd01cc5772ab103493c4ae6a3470898cd0addb')
|
||||
@ -60,7 +61,7 @@ class Cp2k(MakefilePackage, CudaPackage):
|
||||
' with cuda_arch=35 for a K20x instead of a K40'))
|
||||
variant('cuda_fft', default=False,
|
||||
description=('Use CUDA also for FFTs in the PW part of CP2K'))
|
||||
variant('cuda_blas', default=False,
|
||||
variant('cuda_blas', default=False, when='@:7', # req in CP2K v8+
|
||||
description=('Use CUBLAS for general matrix operations in DBCSR'))
|
||||
|
||||
HFX_LMAX_RANGE = range(4, 8)
|
||||
@ -85,8 +86,9 @@ class Cp2k(MakefilePackage, CudaPackage):
|
||||
depends_on('openblas threads=openmp', when='^openblas')
|
||||
|
||||
with when('smm=libxsmm'):
|
||||
depends_on('libxsmm@1.17:~header-only', when='@9.1:')
|
||||
# require libxsmm-1.11+ since 1.10 can leak file descriptors in Fortran
|
||||
depends_on('libxsmm@1.11:~header-only')
|
||||
depends_on('libxsmm@1.11:~header-only', when="@:8.9")
|
||||
# use pkg-config (support added in libxsmm-1.10) to link to libxsmm
|
||||
depends_on('pkgconfig', type='build')
|
||||
# please set variants: smm=blas by configuring packages.yaml or install
|
||||
@ -108,7 +110,8 @@ class Cp2k(MakefilePackage, CudaPackage):
|
||||
depends_on('libxc@2.2.2:3', when='@:5', type='build')
|
||||
depends_on('libxc@4.0.3:4', when='@6.0:6.9', type='build')
|
||||
depends_on('libxc@4.0.3:4', when='@7.0:8.1')
|
||||
depends_on('libxc@5.1.3:5.1', when='@8.2:')
|
||||
depends_on('libxc@5.1.3:5.1', when='@8.2:8')
|
||||
depends_on('libxc@5.1.7:5.1', when='@9:')
|
||||
|
||||
with when('+mpi'):
|
||||
depends_on('mpi@2:')
|
||||
@ -116,6 +119,7 @@ class Cp2k(MakefilePackage, CudaPackage):
|
||||
|
||||
with when('+cosma'):
|
||||
depends_on('cosma+scalapack')
|
||||
depends_on('cosma@2.5.1:', when='@9:')
|
||||
depends_on('cosma+cuda', when='+cuda')
|
||||
conflicts('~mpi')
|
||||
# COSMA support was introduced in 8+
|
||||
@ -129,6 +133,7 @@ class Cp2k(MakefilePackage, CudaPackage):
|
||||
depends_on('elpa@2011.12:2017.11', when='@6.0:6')
|
||||
depends_on('elpa@2018.05:2020.11.001', when='@7.0:8.2')
|
||||
depends_on('elpa@2021.05:', when='@8.3:')
|
||||
depends_on('elpa@2021.11.001:', when='@9.1:')
|
||||
|
||||
with when('+plumed'):
|
||||
depends_on('plumed+shared')
|
||||
@ -151,7 +156,8 @@ class Cp2k(MakefilePackage, CudaPackage):
|
||||
depends_on('sirius~openmp', when='~openmp')
|
||||
depends_on('sirius@:6', when='@:7')
|
||||
depends_on('sirius@7.0.0:7.0', when='@8:8.2')
|
||||
depends_on('sirius@7.2:', when='@8.3:')
|
||||
depends_on('sirius@7.2', when='@8.3:8.9')
|
||||
depends_on('sirius@7.3:', when='@9.1')
|
||||
conflicts('~mpi')
|
||||
# sirius support was introduced in 7+
|
||||
conflicts('@:6')
|
||||
@ -508,6 +514,9 @@ def edit(self, spec, prefix):
|
||||
int(elpa.version[1])))
|
||||
fcflags += ['-I{0}'.format(join_path(elpa_incdir, 'elpa'))]
|
||||
|
||||
if '+cuda' in spec and '+cuda' in elpa:
|
||||
cppflags += ['-D__ELPA_NVIDIA_GPU']
|
||||
|
||||
if spec.satisfies('+sirius'):
|
||||
sirius = spec['sirius']
|
||||
cppflags.append('-D__SIRIUS')
|
||||
@ -515,14 +524,29 @@ def edit(self, spec, prefix):
|
||||
libs += list(sirius.libs)
|
||||
|
||||
if spec.satisfies('+cuda'):
|
||||
cppflags += ['-D__ACC']
|
||||
libs += ['-lcudart', '-lnvrtc', '-lcuda']
|
||||
libs += [
|
||||
'-L{}'.format(spec['cuda'].libs.directories[0]),
|
||||
'-L{}/stubs'.format(spec['cuda'].libs.directories[0]),
|
||||
'-lcuda', '-lcudart', '-lnvrtc', '-lstdc++']
|
||||
|
||||
if spec.satisfies('+cuda_blas'):
|
||||
cppflags += ['-D__DBCSR_ACC=2']
|
||||
if spec.satisfies('@9:'):
|
||||
acc_compiler_var = 'OFFLOAD_CC'
|
||||
acc_flags_var = 'OFFLOAD_FLAGS'
|
||||
cppflags += [
|
||||
'-D__DBCSR_ACC',
|
||||
'-D__GRID_CUDA',
|
||||
'-DOFFLOAD_TARGET=cuda',
|
||||
]
|
||||
libs += ['-lcublas']
|
||||
else:
|
||||
cppflags += ['-D__DBCSR_ACC']
|
||||
acc_compiler_var = 'NVCC'
|
||||
acc_flags_var = 'NVFLAGS'
|
||||
cppflags += ['-D__ACC']
|
||||
if spec.satisfies('+cuda_blas'):
|
||||
cppflags += ['-D__DBCSR_ACC=2']
|
||||
libs += ['-lcublas']
|
||||
else:
|
||||
cppflags += ['-D__DBCSR_ACC']
|
||||
|
||||
if spec.satisfies('+cuda_fft'):
|
||||
cppflags += ['-D__PW_CUDA']
|
||||
@ -616,8 +640,9 @@ def edit(self, spec, prefix):
|
||||
mkf.write('CPP = # {0} -E\n'.format(spack_cc))
|
||||
mkf.write('AR = ar -r\n')
|
||||
|
||||
if spec.satisfies('+cuda'):
|
||||
mkf.write('NVCC = {0}\n'.format(
|
||||
if '+cuda' in spec:
|
||||
mkf.write('{0} = {1}\n'.format(
|
||||
acc_compiler_var,
|
||||
join_path(spec['cuda'].prefix, 'bin', 'nvcc')))
|
||||
|
||||
# Write compiler flags to file
|
||||
@ -631,7 +656,7 @@ def fflags(var, lst):
|
||||
mkf.write(fflags('CPPFLAGS', cppflags))
|
||||
mkf.write(fflags('CFLAGS', cflags))
|
||||
mkf.write(fflags('CXXFLAGS', cxxflags))
|
||||
mkf.write(fflags('NVFLAGS', nvflags))
|
||||
mkf.write(fflags(acc_flags_var, nvflags))
|
||||
mkf.write(fflags('FCFLAGS', fcflags))
|
||||
mkf.write(fflags('LDFLAGS', ldflags))
|
||||
mkf.write(fflags('LIBS', libs))
|
||||
|
Loading…
Reference in New Issue
Block a user