cp2k: cleanup, format, move to pkgs/by-name (#344847)

This commit is contained in:
Markus Kowalewski
2024-09-27 14:13:58 +02:00
committed by GitHub
3 changed files with 143 additions and 114 deletions
@@ -1,55 +1,61 @@
{ lib
, stdenv
, fetchFromGitHub
, mpiCheckPhaseHook
, python3
, gfortran
, blas
, lapack
, fftw
, libint
, libvori
, libxc
, dftd4
, mctc-lib
, mstore
, multicharge
, mpi
, gsl
, scalapack
, openssh
, makeWrapper
, libxsmm
, spglib
, which
, pkg-config
, plumed
, zlib
, hdf5-fortran
, sirius
, libvdwxc
, spla
, spfft
, enableElpa ? false
, elpa
, cudaPackages
, rocmPackages
, config
, gpuBackend ? (
if config.cudaSupport
then "cuda"
else if config.rocmSupport
then "rocm"
else "none"
)
# Change to a value suitable for your target GPU.
# For AMD values see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2v-rocmhip-support-for-amd-gpu
# and for Nvidia see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2i-cuda-optional-improved-performance-on-gpu-systems
, gpuVersion ? ( if gpuBackend == "cuda" then "A100" else "Mi100" )
, gpuArch ? ( if gpuBackend == "cuda" then "sm_80" else "gfx908" )
{
lib,
stdenv,
fetchFromGitHub,
mpiCheckPhaseHook,
python3,
gfortran,
blas,
lapack,
fftw,
libint,
libvori,
libxc,
dftd4,
mctc-lib,
mstore,
multicharge,
mpi,
gsl,
scalapack,
openssh,
makeWrapper,
libxsmm,
spglib,
which,
pkg-config,
plumed,
zlib,
hdf5-fortran,
sirius,
libvdwxc,
spla,
spfft,
enableElpa ? false,
elpa,
cudaPackages,
rocmPackages,
config,
gpuBackend ? (
if config.cudaSupport then
"cuda"
else if config.rocmSupport then
"rocm"
else
"none"
),
# Change to a value suitable for your target GPU.
# For AMD values see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2v-rocmhip-support-for-amd-gpu
# and for Nvidia see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2i-cuda-optional-improved-performance-on-gpu-systems
gpuVersion ? (if gpuBackend == "cuda" then "A100" else "Mi100"),
gpuArch ? (if gpuBackend == "cuda" then "sm_80" else "gfx908"),
}:
assert builtins.elem gpuBackend [ "none" "cuda" "rocm" ];
assert builtins.elem gpuBackend [
"none"
"cuda"
"rocm"
];
let
cp2kVersion = "psmp";
@@ -74,47 +80,53 @@ stdenv.mkDerivation rec {
./remove-compiler-options.patch
];
nativeBuildInputs = [ python3 which openssh makeWrapper pkg-config ]
++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc;
nativeBuildInputs = [
python3
which
openssh
makeWrapper
pkg-config
] ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc;
buildInputs = [
gfortran
fftw
gsl
libint
libvori
libxc
dftd4
mctc-lib
mstore
multicharge
libxsmm
mpi
spglib
scalapack
blas
lapack
plumed
zlib
hdf5-fortran
sirius
spla
spfft
libvdwxc
]
++ lib.optional enableElpa elpa
++ lib.optionals (gpuBackend == "cuda") [
cudaPackages.cuda_cudart
cudaPackages.libcublas
cudaPackages.cuda_nvrtc
] ++ lib.optionals (gpuBackend == "rocm") [
rocmPackages.clr
rocmPackages.rocm-core
rocmPackages.hipblas
rocmPackages.hipfft
rocmPackages.rocblas
]
;
buildInputs =
[
gfortran
fftw
gsl
libint
libvori
libxc
dftd4
mctc-lib
mstore
multicharge
libxsmm
mpi
spglib
scalapack
blas
lapack
plumed
zlib
hdf5-fortran
sirius
spla
spfft
libvdwxc
]
++ lib.optional enableElpa elpa
++ lib.optionals (gpuBackend == "cuda") [
cudaPackages.cuda_cudart
cudaPackages.libcublas
cudaPackages.cuda_nvrtc
]
++ lib.optionals (gpuBackend == "rocm") [
rocmPackages.clr
rocmPackages.rocm-core
rocmPackages.hipblas
rocmPackages.hipfft
rocmPackages.rocblas
];
propagatedBuildInputs = [ (lib.getBin mpi) ];
propagatedUserEnvPkgs = [ mpi ];
@@ -136,6 +148,8 @@ stdenv.mkDerivation rec {
'';
configurePhase = ''
runHook preConfigure
cat > arch/${arch}.${cp2kVersion} << EOF
CC = mpicc
CPP =
@@ -143,28 +157,34 @@ stdenv.mkDerivation rec {
LD = mpif90
AR = ar -r
${lib.strings.optionalString (gpuBackend == "cuda") ''
OFFLOAD_CC = nvcc
OFFLOAD_FLAGS = -O3 -g -w --std=c++11 -arch ${gpuArch}
OFFLOAD_TARGET = cuda
GPUVER = ${gpuVersion}
CXX = mpicxx
CXXFLAGS = -std=c++11 -fopenmp
OFFLOAD_CC = nvcc
OFFLOAD_FLAGS = -O3 -g -w --std=c++11 -arch ${gpuArch}
OFFLOAD_TARGET = cuda
GPUVER = ${gpuVersion}
CXX = mpicxx
CXXFLAGS = -std=c++11 -fopenmp
''}
${lib.strings.optionalString (gpuBackend == "rocm") ''
GPUVER = ${gpuVersion}
OFFLOAD_CC = hipcc
OFFLOAD_FLAGS = -fopenmp -m64 -pthread -fPIC -D__GRID_HIP -O2 --offload-arch=${gpuArch} --rocm-path=${rocmPackages.rocm-core}
OFFLOAD_TARGET = hip
CXX = mpicxx
CXXFLAGS = -std=c++11 -fopenmp -D__HIP_PLATFORM_AMD__
GPUVER = ${gpuVersion}
OFFLOAD_CC = hipcc
OFFLOAD_FLAGS = -fopenmp -m64 -pthread -fPIC -D__GRID_HIP -O2 --offload-arch=${gpuArch} --rocm-path=${rocmPackages.rocm-core}
OFFLOAD_TARGET = hip
CXX = mpicxx
CXXFLAGS = -std=c++11 -fopenmp -D__HIP_PLATFORM_AMD__
''}
DFLAGS = -D__FFTW3 -D__LIBXC -D__LIBINT -D__parallel -D__SCALAPACK \
-D__MPI_VERSION=3 -D__F2008 -D__LIBXSMM -D__SPGLIB \
-D__MAX_CONTR=4 -D__LIBVORI ${lib.optionalString enableElpa "-D__ELPA"} \
-D__PLUMED2 -D__HDF5 -D__GSL -D__SIRIUS -D__LIBVDWXC -D__SPFFT -D__SPLA \
-D__DFTD4 \
${lib.strings.optionalString (gpuBackend == "cuda") "-D__OFFLOAD_CUDA -D__ACC -D__DBCSR_ACC -D__NO_OFFLOAD_PW"} \
${lib.strings.optionalString (gpuBackend == "rocm") "-D__OFFLOAD_HIP -D__DBCSR_ACC -D__NO_OFFLOAD_PW"}
${
lib.strings.optionalString (
gpuBackend == "cuda"
) "-D__OFFLOAD_CUDA -D__ACC -D__DBCSR_ACC -D__NO_OFFLOAD_PW"
} \
${
lib.strings.optionalString (gpuBackend == "rocm") "-D__OFFLOAD_HIP -D__DBCSR_ACC -D__NO_OFFLOAD_PW"
}
CFLAGS = -fopenmp
FCFLAGS = \$(DFLAGS) -O2 -ffree-form -ffree-line-length-none \
-ftree-vectorize -funroll-loops -msse2 \
@@ -187,15 +207,20 @@ stdenv.mkDerivation rec {
-lz -ldl ${lib.optionalString (mpi.pname == "openmpi") "$(mpicxx --showme:link)"} \
-lplumed -lhdf5_fortran -lhdf5_hl -lhdf5 -lgsl -lsirius -lspla -lspfft -lvdwxc \
-ldftd4 -lmstore -lmulticharge -lmctc-lib \
${lib.strings.optionalString (gpuBackend == "cuda") ''
-L${cudaPackages.cuda_cudart}/lib/stubs/ \
-lcudart -lnvrtc -lcuda -lcublas
${
lib.strings.optionalString (gpuBackend == "cuda") ''
-L${cudaPackages.cuda_cudart}/lib/stubs/ \
-lcudart -lnvrtc -lcuda -lcublas
''
} \
${lib.strings.optionalString (gpuBackend == "rocm") "-lamdhip64 -lhipfft -lhipblas -lrocblas"}
${
lib.strings.optionalString (gpuBackend == "rocm") "-lamdhip64 -lhipfft -lhipblas -lrocblas"
}
LDFLAGS = \$(FCFLAGS) \$(LIBS)
include ${plumed}/lib/plumed/src/lib/Plumed.inc
EOF
runHook postConfigure
'';
nativeCheckInputs = [
@@ -213,6 +238,8 @@ stdenv.mkDerivation rec {
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/share/cp2k
cp exe/${arch}/* $out/bin
@@ -228,15 +255,19 @@ stdenv.mkDerivation rec {
--set OMP_NUM_THREADS 1
cp -r data/* $out/share/cp2k
runHook postInstall
'';
passthru = { inherit mpi; };
passthru = {
inherit mpi;
};
meta = with lib; {
meta = {
description = "Quantum chemistry and solid state physics program";
homepage = "https://www.cp2k.org";
license = licenses.gpl2Plus;
maintainers = [ maintainers.sheepforce ];
license = lib.licenses.gpl2Plus;
maintainers = [ lib.maintainers.sheepforce ];
platforms = [ "x86_64-linux" ];
};
}
-2
View File
@@ -36024,8 +36024,6 @@ with pkgs;
avogadro2 = libsForQt5.callPackage ../applications/science/chemistry/avogadro2 { };
cp2k = callPackage ../applications/science/chemistry/cp2k { };
d-seams = callPackage ../applications/science/chemistry/d-seams { };
ergoscf = callPackage ../applications/science/chemistry/ergoscf { };