Pour des raisons de besoins mémoire par processus MPI ou de nombre de processus MPI égal à une puissance de 2, il peut être intéressant ou nécessaire de déployer sur chaque nœud un nombre de processus MPI inférieur à 36 (sachant que les noœuds d’Olympe disposent de 36 cœurs physiques).
Attention : la mesure des heures cpu consommées ne tient pas compte du dépeuplement; le nœud étant alloué de manière exclusive on comptabilise l’ensemble des ressources bloquées (soit 36 cœurs par nœud multiplié par le nombre de nœuds).
Ci-dessous nous traitons une demande pour 512 processus MPI sur 16 nœuds d’Olympe.
Réservation des ressources:
#! /bin/bash #SBATCH -J Depeuple #SBATCH -N 16 #SBATCH -n 512 #SBATCH --ntasks-per-node=32 #SBATCH --ntasks-per-core=1
ATTENTION: Ce sont bien les 576 cœurs physiques des 32 nœuds qui sont réservés par la requête.
Création d’un dossier temporaire de calcul:
dirname=$SLURM_JOBID mkdir /tmpdir/$LOGNAME/$dirname cp mes_inputs /tmpdir/$LOGNAME/$dirname cd /tmpdir/$LOGNAME/$dirname
Votre script:
Chargement des modules nécessaires à l'exécution du script (et uniquement ces modules). Ci-dessous exemple pour l'environnement par défaut d'Olympe (Intel, mpi).
module purge module load intel/18.2 intelmpi/18.2 module list
La commande placement ci-dessous, avec les arguments '32' et '1', permet de répartir les 32 processus de manière équilibrée sur les deux sockets du nœud. Le nombre 32 correspond au nombre de processus par nœud, le nombre 1 au nombre de threads par processus (ici 1).
srun $(placement 32 1) ./mon_appli.exe > output_${SLURM_JOBID}.log
Rapatriement des résultats sous votre home directory:
mv mes_outputs $SLURM_SUBMIT_DIR