mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 15:03:28 +00:00
mpiCheckPhaseHook: add new setup hook for MPI aware check phases
Add this hook to checkPhase to allow for running MPI application in the sandbox. It detects the MPI implementations and sets the respective environment variables.
This commit is contained in:
parent
95d630c68d
commit
587a19e43c
@ -17,6 +17,7 @@ installShellFiles.section.md
|
|||||||
libiconv.section.md
|
libiconv.section.md
|
||||||
libxml2.section.md
|
libxml2.section.md
|
||||||
meson.section.md
|
meson.section.md
|
||||||
|
mpi-check-hook.section.md
|
||||||
ninja.section.md
|
ninja.section.md
|
||||||
patch-rc-path-hooks.section.md
|
patch-rc-path-hooks.section.md
|
||||||
perl.section.md
|
perl.section.md
|
||||||
|
24
doc/hooks/mpi-check-hook.section.md
Normal file
24
doc/hooks/mpi-check-hook.section.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# mpiCheckPhaseHook {#setup-hook-mpi-check}
|
||||||
|
|
||||||
|
|
||||||
|
This hook can be used to setup a check phase that
|
||||||
|
requires running a MPI application. It detects the
|
||||||
|
used present MPI implementaion type and exports
|
||||||
|
the neceesary environment variables to use
|
||||||
|
`mpirun` and `mpiexec` in a Nix sandbox.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ mpiCheckPhaseHook, mpi, ... }:
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
openssh
|
||||||
|
mpiCheckPhaseHook
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
|||||||
|
{ callPackage, makeSetupHook }:
|
||||||
|
|
||||||
|
makeSetupHook {
|
||||||
|
name = "mpi-checkPhase-hook";
|
||||||
|
} ./mpi-check-hook.sh
|
@ -0,0 +1,54 @@
|
|||||||
|
preCheckHooks+=('setupMpiCheck')
|
||||||
|
preInstallCheckHooks+=('setupMpiCheck')
|
||||||
|
|
||||||
|
|
||||||
|
setupMpiCheck() {
|
||||||
|
# Find out which MPI implementation we are using
|
||||||
|
# and set safe defaults that are guaranteed to run
|
||||||
|
# on any build machine
|
||||||
|
|
||||||
|
mpiType="NONE"
|
||||||
|
|
||||||
|
# OpenMPI signature
|
||||||
|
if command ompi_info &> /dev/null; then
|
||||||
|
mpiType="openmpi"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# MPICH based implementations
|
||||||
|
if command mpichversion &> /dev/null; then
|
||||||
|
if [ "$mpiType" != "NONE" ]; then
|
||||||
|
echo "WARNING: found OpenMPI and MPICH/MVAPICH executables"
|
||||||
|
fi
|
||||||
|
|
||||||
|
version=$(mpichversion)
|
||||||
|
if [[ "$version" == *"MPICH"* ]]; then
|
||||||
|
mpiType="MPICH"
|
||||||
|
fi
|
||||||
|
if [[ "$version" == *"MVAPICH"* ]]; then
|
||||||
|
mpiType="MVAPICH"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Found MPI implementation: $mpiType"
|
||||||
|
|
||||||
|
case $mpiType in
|
||||||
|
openmpi)
|
||||||
|
# make sure the test starts even if we have less than the requested amount of cores
|
||||||
|
export OMPI_MCA_rmaps_base_oversubscribe=1
|
||||||
|
# Disable CPU pinning
|
||||||
|
export OMPI_MCA_hwloc_base_binding_policy=none
|
||||||
|
;;
|
||||||
|
MPICH)
|
||||||
|
# Fix to make mpich run in a sandbox
|
||||||
|
export HYDRA_IFACE=lo
|
||||||
|
;;
|
||||||
|
MVAPICH)
|
||||||
|
# Disable CPU pinning
|
||||||
|
export MV2_ENABLE_AFFINITY=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Limit number of OpenMP threads. Default is "all cores".
|
||||||
|
export OMP_NUM_THREADS=1
|
||||||
|
}
|
||||||
|
|
@ -12258,6 +12258,7 @@ with pkgs;
|
|||||||
outils = callPackage ../tools/misc/outils { };
|
outils = callPackage ../tools/misc/outils { };
|
||||||
|
|
||||||
mpi = openmpi; # this attribute should used to build MPI applications
|
mpi = openmpi; # this attribute should used to build MPI applications
|
||||||
|
mpiCheckPhaseHook = callPackage ../build-support/setup-hooks/mpi-check-hook { };
|
||||||
|
|
||||||
ucc = callPackage ../development/libraries/ucc { };
|
ucc = callPackage ../development/libraries/ucc { };
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user