~~SLIDESHOW yatil~~ ====== Slurm et programmation multithread ====== Cet article donne des indication sur l'utilisation de programmes //multi-threadés// (avec OpenMP par exemple) avec l'ordonnanceur Slurm. ===== Avant-propos ===== 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. ===== Fichier Batch ===== 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 ==== Options Slurm ==== * L'option ''%%--%%ntasks=1'' est réduite à 1, on ne lance qu'un seul processus par la suite * L'option ''%%--%%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. ==== Variable OpenMP ==== 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//.