Exemples de scripts OAR

1 - Avec les compilateurs Intel et la librairie Intel MPI

#!/bin/bash
#OAR -n nom_du_job_oar
#OAR -l nodes=1,walltime=48:00:00
#OAR -p nbcores=16 AND visu = 'NO'
#OAR -O result.%jobid%.log
#OAR -E result.%jobid%.log
#OAR --notify mail:user@toto.com

module purge
module load intel/12.1
module load intelmpi/4.0

ulimit -s unlimited

NSLOTS=$(cat $OAR_NODEFILE | wc -l)
NNODES=$(cat $OAR_NODEFILE | sort -u | wc -l)

mpdboot -r oarsh --totalnum=${NNODES} --file=$OAR_NODEFILE

mpdtrace -l

mpiexec -np $NSLOTS ./exe

mpdallexit

exit $?

Explications :

  • Les directives OAR sont celles que vous désirez
  • Chargement des modules, d'abord un purge permettant d'avoir un environnement propre, puis le load des modules que vous désirez
  • Pour ne pas avoir de soucis avec la taille de la pile (surtout concernant les messages MPI), mettre ulimit -s unlimited
  • NSLOTS : nombre de coeurs demandés
  • NNODES : nombre de noeuds demandés
  • mpdboot : lancement des daemons mpd sur les noeuds correspondants à votre demande OAR
  • mpiexec : lancement du job MPI (pour Intel MPI, nous vous conseillons mpiexec et pas mpirun)
  • mpdallexit et exit : nettoyage et arrêt de tous daemons lorsque le calcul est terminé

2 - Avec les compilateurs Intel et la librairie OpenMPI compilée Intel

#!/bin/bash
#OAR -n nom_du_job_oar
#OAR -l nodes=1,walltime=48:00:00
#OAR -p nbcores=16 AND visu = 'NO'
#OAR -O result.%jobid%.log
#OAR -E result.%jobid%.log
#OAR --notify mail:user@toto.com

module purge
module load intel/12.1
module load openmpi/intel/1.6.2

ulimit -s unlimited

NSLOTS=$(cat $OAR_NODEFILE | wc -l)
PREF=$(dirname `which mpirun` | awk -F'/[^/]*$' '{print $1}')

mpirun --prefix $PREF -np $NSLOTS -machinefile $OAR_NODEFILE ./exe

exit $?

Explications :

  • Les directives OAR sont toujours celles que vous désirez
  • NSLOTS : nombre de coeurs demandés
  • PREF : man mpirun avec --prefix
  • -machinefile : permet de spécifier le cpuset que vous avez obtenu du gestionnaire de batch
  • mpirun : avec OpenMPI, il faut utiliser impérativement mpirun et pas mpiexec
  • Options supplémentaires :
    • -bind-to-core : attache les process aux coeurs
    • -bind-to-socket : attache les process aux sockets processeur
    • -bysocket / -bynode / -bycore / -npernode / -report-bindings : voir man mpirun

3 - Avec les compilateurs GNU et la librairie OpenMPI compilée gcc

#!/bin/bash
#OAR -n nom_du_job_oar
#OAR -l nodes=1,walltime=48:00:00
#OAR -p nbcores=16 AND visu = 'NO'
#OAR -O result.%jobid%.log
#OAR -E result.%jobid%.log
#OAR --notify mail:user@toto.com

module purge
module load openmpi/1.6.2

ulimit -s unlimited

NSLOTS=$(cat $OAR_NODEFILE | wc -l)
PREF=$(dirname `which mpirun` | awk -F'/[^/]*$' '{print $1}')

mpirun --prefix $PREF -np $NSLOTS -machinefile $OAR_NODEFILE ./exe

exit $?

Mêmes options que pour le 3

4 - Avec les compilateurs GNU et la librairie Mvapich2 1.8 compilée gcc

#!/bin/bash
#OAR -n nom_du_job_oar
#OAR -l nodes=1,walltime=48:00:00
#OAR -p nbcores=16 AND visu = 'NO'
#OAR -O result.%jobid%.log
#OAR -E result.%jobid%.log
#OAR --notify mail:user@toto.com

module purge
module load mvapich2/1.8

ulimit -s unlimited

cat $OAR_NODEFILE | sort -u > hosts.tmp
THREADS=16  // A changer suivant le nombre de threads désirés

// Première variante
mpirun_rsh -hostfile hosts.tmp -n $THREADS ./exe
// Deuxième variante
mpiexec -launcher ssh -launcher-exec /usr/bin/oarsh -f hosts.tmp -n $THREADS ./exe

rm -rf hosts.tmp

exit $?

Comme toujours lire le man des commandes !

 

Adresse

Université de Nice Sophia-Antipolis
D.S.I.
28 Avenue de Valrose
B.P. 2135
06103 NICE Cedex 02