123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/bin/bash
- #------------------- CHECKPOINT OpenMP DMTCP ex5 ---------------------------
- #
- # - Idem que l'exemple n°4 (20 multiplications matricielles 2000x2000)
- # (cf checkpoint-dmtcp-openmp4.oar)
- # - A la manière de l'ex2 (cf. checkpoint-dmtcp2.oar), la gestion des
- # signaux entre le script OAR et le programme fortrna OpenMP est gérée:
- # le programme est executé jusqu'à son terme apreès une interruption et
- # une relance automatique grace à l'option "idempotent" d'OAR
- # dmtcp. les echanges de signaux entre ce script OAR et le programme
- # sont completement ignores, de sorte que l'option "idempotent" d'OAR
- # est inutile: il n'y a pas de redemarrage automatique. L'utilisateur
- # doit relancer lui-même relancer ce script. Il peut toutefois etre
- # utile:
- # - ex1: programme de 200 h, un checkpoint toutes les 24h (au cas ou...)
- # - ex2: limiter les ressources demandees en prenant le risque d'un
- # walltime " trop court": il suffira de relancer a partir d'un
- # checkpoint.
- # commande: oarsub -S ./checkpoint-dmtcp-openmp5.oar
- # IMPORTANT : la reprise de job se fait ici sur le même noeud,
- # merci de consulter la charge sur cluster (noeud libre) sur
- # https://www-calculco.univ-littoral.fr/outils_visu/drawgantt/
- # et EDITER la ligne: OAR -p network_address = 'orval06'
- # (un peu plus bas)
- #-------------- paramètres OAR---------------------------
- # walltime de 3mn30 ( donc trop court 4mn xxs sur orval06)
- #OAR -l core=8,walltime=00:3:30
- #OAR -n dmtcp-openmp5
- # Les fichiers de sortie sans parametres $OAR_JOBID
- # (=> les jobs successifs ecrivent dans les memes fichiers)
- #OAR -O OAR-ckpt-dmtcp5.out
- #OAR -E OAR-ckpt-dmtcp5.err
- #OAR -q default
- # les tests sont mis au point sur orval06
- # A EDITER apres consultation de :
- # https://www-calculco.univ-littoral.fr/outils_visu/drawgantt/
- # OAR -p network_address = 'orval06'
- # optionnel
- ##OAR -t besteffort
- #OAR -t idempotent
- # checkpoint OAR 60 s avant le walltime (donc ~2mn30)
- # Pour un exemple réel ( plusieurs heures, gros contexte, 600s (10mn))
- #OAR --checkpoint 60
- # chargement du modeul dmtcp
- source /nfs/opt/env/env.sh > /dev/null 2>&1
- module load dmtcp > /dev/null 2>&1
- #---------- la tâche à exécuter ------------------------
- # compilation ( )
- gfortran -fopenmp -O3 timing-matmul2000.f90 -o matmul2000
- #----------- pré-traitement -----------------------------
- # DWTFYW !
-
- echo "Debut du jobs ou restart ?"
- # si c'est une reprise
- if [ -f dmtcp_restart_script.sh ]; then
- echo " -> reprise du job "
- # piste (changement de nœuds): sed -i '/ancien_noeud/nouveau_noeud/' dmtcp_restart_script.sh
- # (-> testé -OK- a la mano, à scripter!)
- ./dmtcp_restart_script.sh &
- PROGPID=$!
- else
- echo " -> Debut du jobs"
- dmtcp_launch ./matmul2000 &
- PROGPID=$!
- fi
- #---------------------------------------------------------
- # gestion du checkpoint OAR
- #---------------------------------------------------------
- # fonction de traitement du signal OAR
- sighandler() {
- echo "reception checkpoint OAR (signal12)"
- # demande de checkpoint (-c) au coordinateur dmtcp
- dmtcp_command -c
- sleep 5
- [ -n "$PROGPID" ] && kill -9 $PROGPID
- SCRIPT_CHECKPOINTED="YES"
- }
- # signal Unix attendu par OAR (defaut = SIGUSR1/10, forcé ici
- # à 12 par le paramètre --signal 12 (cf. param OAR au début)
- CHKPNT_SIGNAL=12
- # valeur de sortie pour l'option "--idempotent"
- # (restart automatique) )
- EXIT_UNFINISHED=99
- # indique au script OAR de capter le signal 12
- trap sighandler $CHKPNT_SIGNAL
- # wait indispensable pour maintien des communucations
- # (signaux) entre ce script et le PROG
- while kill -0 "$PROGPID" 2>/dev/null; do
- wait $PROGPID
- done
- # important : le code 99 doit être retourné pour que l'option
- # idempotent ( relance auto.) soit effective
- [ -n "$SCRIPT_CHECKPOINTED" ] && exit 99
- #---------------------------------------------------------
- # fin du programme: postraitement
- #---------------------------------------------------------
- # DWTFYW!
- echo "---post treatement---"
- # suppression des ckpt (ménage)
- echo "fin effective du programme, suppression des checkpoints"
- rm ckpt_*.dmtcp dmtcp_restart_script*
- exit $?
|