#!/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 $?