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