From 037d2265859d860f1b60c3ca64617fc1d0fbc554 Mon Sep 17 00:00:00 2001 From: chn Date: Sat, 21 Sep 2024 04:46:38 +0800 Subject: [PATCH] try to use intel vasp --- modules/system/nixpkgs.nix | 4 +- packages/default.nix | 4 +- packages/vasp/hdf5-oneapi/default.nix | 48 ---------- packages/vasp/intel/default.nix | 126 +++++--------------------- packages/vasp/intel/makefile.include | 4 +- 5 files changed, 30 insertions(+), 156 deletions(-) delete mode 100644 packages/vasp/hdf5-oneapi/default.nix diff --git a/modules/system/nixpkgs.nix b/modules/system/nixpkgs.nix index d878d524..33e04a7f 100644 --- a/modules/system/nixpkgs.nix +++ b/modules/system/nixpkgs.nix @@ -46,7 +46,9 @@ inputs: } // (if nixpkgs.march == null then {} else { - oneapiArch = let match = { znver3 = "CORE-AVX2"; znver4 = "CORE-AVX512"; }; + # TODO: change znver4 after update oneapi + # TODO: test znver3 do use AVX + oneapiArch = let match = { znver3 = "CORE-AVX2"; znver4 = "znver3"; }; in match.${nixpkgs.march} or nixpkgs.march; nvhpcArch = nixpkgs.march; # contentAddressedByDefault = true; diff --git a/packages/default.nix b/packages/default.nix index da769607..a8c22afd 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -52,9 +52,9 @@ inputs: rec nvidia = inputs.pkgs.callPackage ./vasp/nvidia { inherit lmod nvhpc vtst src; hdf5 = hdf5-nvhpc; }; intel = inputs.pkgs.callPackage ./vasp/intel - { inherit lmod oneapi vtst src; hdf5 = hdf5-oneapi; }; + { inherit vtst src; inherit (inputs.pkgs.intelPackages_2023) stdenv; hdf5 = hdf5-oneapi; }; hdf5-nvhpc = inputs.pkgs.callPackage ./vasp/hdf5-nvhpc { inherit lmod nvhpc; inherit (inputs.pkgs.hdf5) src; }; - hdf5-oneapi = inputs.pkgs.callPackage ./vasp/hdf5-oneapi { inherit lmod oneapi; inherit (inputs.pkgs.hdf5) src; }; + hdf5-oneapi = inputs.pkgs.hdf5.override { inherit (inputs.pkgs.intelPackages_2023) stdenv; }; vtst = (inputs.pkgs.callPackage ./vasp/vtst.nix {}); vtstscripts = inputs.pkgs.callPackage ./vasp/vtstscripts.nix {}; }; diff --git a/packages/vasp/hdf5-oneapi/default.nix b/packages/vasp/hdf5-oneapi/default.nix deleted file mode 100644 index bfbbe470..00000000 --- a/packages/vasp/hdf5-oneapi/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - buildFHSEnv, writeScript, stdenvNoCC, symlinkJoin, - src, - oneapi, lmod, cmake, gcc, glibc, binutils, - config, oneapiArch ? config.oneapiArch or "SSE3" -}: -let - gccFull = symlinkJoin { name = "gcc"; paths = [ gcc gcc.cc gcc.cc.lib glibc.dev binutils.bintools ]; }; - buildEnv = buildFHSEnv - { - name = "buildEnv"; - targetPkgs = pkgs: with pkgs; [ zlib (writeTextDir "etc/release" "") gccFull ]; - extraBwrapArgs = [ "--bind" "$out" "$out" ]; - }; - buildScript = writeScript "build" - '' - . ${lmod}/share/lmod/lmod/init/bash - module use ${oneapi}/share/intel/modulefiles - module load tbb compiler-rt oclfpga # dependencies - module load mpi mkl compiler - mkdir build - cd build - cmake -DCMAKE_INSTALL_PREFIX=$out -DHDF5_INSTALL_CMAKE_DIR=$out/lib/cmake \ - -DHDF5_BUILD_FORTRAN=ON -DHDF5_ENABLE_PARALLEL=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=OFF \ - -DBUILD_TESTING=OFF .. - make -j$NIX_BUILD_CORES - make install - ''; -in stdenvNoCC.mkDerivation -{ - name = "hdf5-oneapi"; - inherit src; - dontConfigure = true; - enableParallelBuilding = true; - nativeBuildInputs = [ cmake ]; - I_MPI_CC = "icx"; - I_MPI_CXX = "icpx"; - I_MPI_FC = "ifx"; - I_MPI_F90 = "ifx"; - buildPhase = - '' - mkdir -p $out - ${buildEnv}/bin/buildEnv ${buildScript} - ''; - dontInstall = true; - dontFixup = true; - requiredSystemFeatures = [ "gccarch-exact-${stdenvNoCC.hostPlatform.gcc.arch}" "big-parallel" ]; -} diff --git a/packages/vasp/intel/default.nix b/packages/vasp/intel/default.nix index fdd44b8f..2c009aa9 100644 --- a/packages/vasp/intel/default.nix +++ b/packages/vasp/intel/default.nix @@ -1,107 +1,27 @@ { - buildFHSEnv, writeScript, stdenvNoCC, substituteAll, symlinkJoin, writeTextDir, src, - config, oneapiArch ? config.oneapiArch or "SSE3", - oneapi, gcc, glibc, lmod, rsync, which, wannier90, binutils, hdf5, zlib, vtst -}: -let - buildEnv = buildFHSEnv - { - name = "buildEnv"; - # make "module load mpi" success - targetPkgs = _: [ zlib (writeTextDir "etc/release" "") gccFull ]; - }; - buildScript = writeScript "build" - '' - . ${lmod}/share/lmod/lmod/init/bash - module use ${oneapi}/share/intel/modulefiles - module load tbb compiler-rt oclfpga # dependencies - module load mpi mkl compiler - make DEPS=1 -j$NIX_BUILD_CORES - ''; - include = substituteAll { src = ./makefile.include; inherit oneapiArch; }; - gccFull = symlinkJoin { name = "gcc"; paths = [ gcc gcc.cc gcc.cc.lib glibc.dev binutils.bintools ]; }; - vasp = stdenvNoCC.mkDerivation - { - name = "vasp-intel"; - inherit src; - # patches = [ ../vtst.patch ]; - configurePhase = - '' - cp ${include} makefile.include - chmod +w makefile.include - cp ${../constr_cell_relax.F} src/constr_cell_relax.F - # cp -r ${vtst}/* src - chmod -R +w src - ''; - nativeBuildInputs = [ rsync which ]; - HDF5_ROOT = hdf5; - WANNIER90_ROOT = wannier90; - buildPhase = "${buildEnv}/bin/buildEnv ${buildScript}"; - installPhase = - '' - mkdir -p $out/bin - for i in std gam ncl; do cp bin/vasp_$i $out/bin/vasp-$i; done - mkdir $out/src - ln -s ${src} $out/src/vasp - ln -s ${vtst} $out/src/vtst - ''; - dontFixup = true; - requiredSystemFeatures = [ "gccarch-exact-${stdenvNoCC.hostPlatform.gcc.arch}" "big-parallel" ]; - }; - startScript = variant: writeScript "vasp-intel" - '' - . ${lmod}/share/lmod/lmod/init/bash - module use ${oneapi}/share/intel/modulefiles - module load tbb compiler-rt oclfpga # dependencies - module load mpi mkl compiler - - # if OMP_NUM_THREADS is not set, set it according to SLURM_CPUS_PER_TASK or to 1 - if [ -z "''${OMP_NUM_THREADS-}" ]; then - if [ -n "''${SLURM_CPUS_PER_TASK-}" ]; then - OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK - else - OMP_NUM_THREADS=1 - fi - fi - export OMP_NUM_THREADS - - # if I_MPI_PIN_PROCESSOR_LIST is not set, set it to allcores - if [ -z "''${I_MPI_PIN_PROCESSOR_LIST-}" ]; then - I_MPI_PIN_PROCESSOR_LIST=allcores - fi - export I_MPI_PIN_PROCESSOR_LIST - - # set I_MPI_PIN I_MPI_PIN_DOMAIN I_MPI_DEBUG if not set - export I_MPI_PIN=''${I_MPI_PIN-yes} - export I_MPI_PIN_DOMAIN=''${I_MPI_PIN_DOMAIN-omp} - export I_MPI_DEBUG=''${I_MPI_DEBUG-4} - - # fork to bootstrap, do not use srun, causing it could not find proper ld - export I_MPI_HYDRA_BOOTSTRAP=''${I_MPI_HYDRA_BOOTSTRAP-fork} - - # set OMP_STACKSIZE if not set - export OMP_STACKSIZE=''${OMP_STACKSIZE-512M} - - ${ - if variant == "env" then ''exec "$@"'' - else - '' - if [ -n "''${SLURM_JOB_ID-}" ]; then - exec mpirun -n $SLURM_NTASKS ${vasp}/bin/vasp-${variant} - else - exec mpirun -n 1 ${vasp}/bin/vasp-${variant} - fi - '' - } - ''; - runEnv = variant: buildFHSEnv - { - name = "vasp-intel${if variant == "" then "" else "-${variant}"}"; - targetPkgs = _: [ zlib vasp (writeTextDir "etc/release" "") gccFull ]; - runScript = startScript (if variant == "" then "std" else variant); - }; -in symlinkJoin + stdenv, src, rsync, which, wannier90, hdf5, vtst +}: stdenv.mkDerivation { name = "vasp-intel"; - paths = builtins.map (variant: runEnv variant) [ "" "env" "std" "gam" "ncl" ]; + inherit src; + # patches = [ ../vtst.patch ]; + configurePhase = + '' + cp ${./makefile.include} makefile.include + chmod +w makefile.include + cp ${../constr_cell_relax.F} src/constr_cell_relax.F + # cp -r ${vtst}/* src + chmod -R +w src + ''; + nativeBuildInputs = [ rsync which ]; + HDF5_ROOT = hdf5; + WANNIER90_ROOT = wannier90; + installPhase = + '' + mkdir -p $out/bin + for i in std gam ncl; do cp bin/vasp_$i $out/bin/vasp-$i; done + mkdir $out/src + ln -s ${src} $out/src/vasp + ln -s ${vtst} $out/src/vtst + ''; } diff --git a/packages/vasp/intel/makefile.include b/packages/vasp/intel/makefile.include index e4b1e30d..fbb1baea 100644 --- a/packages/vasp/intel/makefile.include +++ b/packages/vasp/intel/makefile.include @@ -49,8 +49,8 @@ LLIBS = -lstdc++ # When compiling on the target machine itself, change this to the # relevant target when cross-compiling for another architecture -VASP_TARGET_CPU ?= -x@oneapiArch@ -FFLAGS += $(VASP_TARGET_CPU) +# VASP_TARGET_CPU ?= -x@oneapiArch@ +# FFLAGS += $(VASP_TARGET_CPU) # Intel MKL (FFTW, BLAS, LAPACK, and scaLAPACK) # (Note: for Intel Parallel Studio's MKL use -mkl instead of -qmkl)