Cet article donne des indication sur l'utilisation de programmes multi-threadés (avec OpenMP par exemple) avec l'ordonnanceur Slurm.
Un programme multi-thread est un programme qui est matérialisé par un seul processus. Ce processus aura plusieurs fils (pluriel de fil) d'exécution distincts. Ils sont aussi nommés processus légers ou threads.
Les threads s'exécutent en parallèle : ils peuvent ainsi utiliser plusieurs cœurs (ou CPU) en même temps sur une même machine. Notez qu'ils ne peuvent pas utiliser les ressources de plusieurs machines différentes.
Exemple de fichiers batch slurm adapté pour un programme OpenMP :
#!/bin/bash # #SBATCH --partition=normal #SBATCH --ntasks=1 #SBATCH --cpus-per-task=8 #SBATCH --mem-per-cpu=300 #SBATCH --time 00:01:00 export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./mon_programme
--ntasks=1
est réduite à 1, on ne lance qu'un seul processus par la suite--cpus-per-task=8
réserve 8 CPU (à proprement parler, des cœurs). Le programme pourra alors lancer jusqu'à 8 threads sans dépasser sa réservation. Notez que la valeur maximale dépend des processeurs équipant les nœuds du cluster.
La variable d'environnement OMP_NUM_THREADS
sert à indiquer à OpenMP le nombre de threads utilisables. Il faut indiquer la même valeur que la réservation demandée.
Pour ne pas se tromper, on utilise ici la variable $SLURM_CPUS_PER_TASK
qui sera automatiquement positionnée par slurm.