|
@@ -0,0 +1,133 @@
|
|
|
|
+#!/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 $?
|