nixpkgs/pkgs/by-name/mp/mpiCheckPhaseHook/mpi-check-hook.sh
aleksana 571c71e6f7 treewide: migrate packages to pkgs/by-name, take 1
We are migrating packages that meet below requirements:

1. using `callPackage`
2. called path is a directory
3. overriding set is empty (`{ }`)
4. not containing path expressions other than relative path (to
makenixpkgs-vet happy)
5. not referenced by nix files outside of the directory, other
than`pkgs/top-level/all-packages.nix`
6. not referencing nix files outside of the directory
7. not referencing `default.nix` (since it's changed to `package.nix`)
8. `outPath` doesn't change after migration

The tool is here: https://github.com/Aleksanaa/by-name-migrate.
2024-11-09 20:04:51 +08:00

78 lines
2.5 KiB
Bash

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)
# Note, that openmpi-5 switched to using PRRTE.
# Thus we need to set PRTE_MCA_* instead of OMPI_MCA_*.
# We keep the openmpi-4 parameters for backward compatability.
# Make sure the test starts even if we have less than the requested amount of cores
export OMPI_MCA_rmaps_base_oversubscribe=1
export PRTE_MCA_rmaps_default_mapping_policy=node:oversubscribe
# Make sure we do not need openssh in the checkPhase
export OMPI_MCA_plm_ssh_agent=false
export PRRTE_MCA_plm_ssh_agent=false
# Disable CPU pinning
export OMPI_MCA_hwloc_base_binding_policy=none
export PRTE_MCA_hwloc_default_binding_policy=none
# OpenMPI get confused by the sandbox environment and spew errors like this (both to stdout and stderr):
# [hwloc/linux] failed to find sysfs cpu topology directory, aborting linux discovery.
# [1729458724.473282] [localhost:78 :0] tcp_iface.c:893 UCX ERROR scandir(/sys/class/net) failed: No such file or directory
# These messages contaminate test output, which makes the difftest to fail.
# The solution is to use a preset cpu topology file and disable ucx model.
# Disable sysfs cpu topology directory discovery.
export PRTE_MCA_hwloc_use_topo_file="@topology@"
# Use the network model ob1 instead of ucx.
export OMPI_MCA_pml=ob1
;;
MPICH)
# Fix to make mpich run in a sandbox
export HYDRA_IFACE=lo
# Disable sysfs cpu topology directory discovery.
export HWLOC_XMLFILE="@topology@"
;;
MVAPICH)
# Disable CPU pinning
export MV2_ENABLE_AFFINITY=0
;;
esac
# Limit number of OpenMP threads. Default is "all cores".
export OMP_NUM_THREADS=1
}