Pour lancer 4 instances d'un même programme il faut utiliser le paramètre
-n 4
Cette option (
-n 4
ou--ntasks=4
) demande à SLURM d'exécuter 4 tâches distinctes.Chaque tâche correspond à un processus indépendant (comme une instance de
MPI
dans un programme distribué).Par défaut, chaque tâche se voit attribuer un seul CPU (sauf si
--cpus-per-task
est spécifié en plus).
Pour allouer plusiseurs coeurs à un programme ou plutot une tache:
srun --cpus-per-task=X
Cette option (
--cpus-per-task=X
) alloue X cœurs à chaque tâche.Elle est utile pour des programmes multi-threadés (comme ceux utilisant OpenMP ou pthreads).
Si
-n
n'est pas spécifié, SLURM considère par défaut-n 1
(une seule tâche avecX
CPU).
Exemple de script parallele qui va lancer 3programmes en meme temps et accomplir une tache pour rassembler les resultats une fois que les 3 programmes sont terminés (merci à Jean-François pour son aide)
#!/bin/bash
#SBATCH -J nom_de_mon_job
#SBATCH -o messortiesecran.out
#SBATCH -e meserreurs.out
#
#SBATCH --ntasks=3 # 3 taches
#SBATCH --cpus-per-task= 2 # on peut éventuellement reserver des CPU pour les programmmes ici 2 processeurs par tache
#SBATCH --mail-type=ALL
#SBATCH --mail-user=jean-francois.rey@inrae.fr
# On supprime la configuration d'environnement précédent (plus de programme par défaut)
module purge
#on charge par exemple le module R3
module load R/3.5.2
# on Lance les 3 taches
srun --exclusive --ntask=1 --mem=500MB monprog.sh "0" &
srun --exclusive --ntask=1 --mem=500MB monprog.sh "1" &
srun --exclusive ---ntask=1 --mem=500MB monprog.sh "2" &
# on attend la fin des 3 taches"
wait
# les 3 programmes sont terminées on lance le programme final
srun programmefinal.sh
Il faut noter la présence du & a la fin du lancement de chaque instance . le & permet de lancer en tache de fond sans attendre la fin.
le deuxième aspect important et le wait qui par opposition au & va attendre que les 3 taches soient terminées pour procéder à l'assemblage des resultats des 3 taches.
! Et enfin le --mem=xxxMB dans le SRUN qui permet d'allouer la mémoire à chacun des jobs sinon les jobs se lanceront séquentiellement en utilisant la mémoire par defaut du SBATCH
attention aux espaces