jobs array¶
Les jobs array permettent de lancer plusieurs exécutions en se basant sur une exécution itérative des commandes.
L'intérêt est de pouvoir gêrer l'exécution de plusieurs séquences de commande et de mieux prendre en compte la gestion des codes via pbs
.
Exemple :¶
- Un script lançant 4 lignes de commande successives:
#!/bin/bash -l #PBS -N Matlab_Multi_Test #PBS -l select=1:ppn=20 #PBS -l walltime=0:10:00 #PBS -j oe #PBS -M user@univ-poitiers.fr #PBS -q default #### array size module load XXX/XXXX cd $PBS_O_WORKDIR #### start matlab computations matlab -nodisplay -nosplash < matlab0.m > out.dat0 & matlab -nodisplay -nosplash < matlabdemo1.m > out.dat1 & matlab -nodisplay -nosplash < matlabdemo2.m > out.dat2 & matlab -nodisplay -nosplash < matlabdemo3.m > out.dat3 &
- La version mettant en oeuvre le job_array:
#!/bin/bash -l #PBS -N Matlab_Multi_Test #PBS -l select=1:ncpus=20 #PBS -l walltime=0:10:00 #PBS -j oe #PBS -M user@univ-poitiers.fr #PBS -q default #### array size #PBS -J 0-3 module load XXX/XXXX cd $PBS_O_WORKDIR #### start matlab computations matlab -nodisplay -nosplash < matlabdemo$PBS_ARRAY_INDEX.m > out.dat$PBS_ARRAY_INDEX
Lancer des simulations identiques sous plusieurs sous-répertoires.¶
- On considère 6 répertoires contenant chacun un fichier d'entrée.
[user@thor ]$ ls array.pbs dir_0 dir_1 dir_2 dir_3 dir_4 dir_5
- le script utilise l'option
#PBS -J 0-5
pour créer les index de 0 à 5.
L'utilisation de la commandecd dir_$PBS_ARRAY_INDEX
permet de se placer dans chaque sous-répertoires.
[user@thor ]$ cat array.pbs #!/bin/bash #PBS -l place=scatter:excl #PBS -l walltime=02:00:00 #PBS -l select=1:ncpus=20:mpiprocs=20 #PBS -j oe #PBS -q small #PBS -N array #PBS -m ae -M user@ensma.fr #PBS -J 0-5 cd ${PBS_O_WORKDIR} #Affichage dans le fichier de sortie de plusieurs informations NCPU=`wc -l < $PBS_NODEFILE` CODE=/path/to/your/code INP_FILE=./input ulimit -s unlimited cd dir_$PBS_ARRAY_INDEX mpiexec_mpt -np $NCPU $CODE $INP_FILE > ${INP_FILE%.inp}.out.$PBS_JOBID 2>&1
- On lance le calcul avec qsub.
qstat -Jt
permet d'avoir l'état de chaque sous-calculs.[user@thor]$ qsub array.pbs 429505[].thor [user@thor]$ qstat -Jt Job id Name User Time Use S Queue ---------------- ---------------- ---------------- -------- - ----- 429505[0].thor array user 0 X small 429505[1].thor array user 0 X small 429505[2].thor array user 00:00:00 R small 429505[3].thor array user 00:00:00 R small 429505[4].thor array user 0 R small 429505[5].thor array user 0 Q small