瀏覽代碼

déplacement des scripts OAR & matlab du site www-calculco dans ce dépôot

Philippe Marion 7 年之前
父節點
當前提交
3bbc9e5c9b

+ 3 - 0
Matlab/tuto-www/README.md

@@ -0,0 +1,3 @@
+## Contenu
+
+fichiers sources (matlab & script _OAR_) du tutorial [www-calculco.univ-littoral.fr/utilisation/tutoriaux/matlab](https://www-calculco.univ-littoral.fr/utilisation/tutoriaux/matlab)

+ 121 - 0
Matlab/tuto-www/matlab_ex1_launch.oar

@@ -0,0 +1,121 @@
+#!/bin/bash
+
+# sur orval 
+################################################################################
+# matlab_ex1_launch.oar - exemple de batch permettant de lancer le script Matlab
+# system_ex1.m sur un noeud / 8 coeurs pour 20 minutes max
+# Utilisation d'un répertoire de travail en local dans l'espace Scratch 
+#
+# system_ex1: 
+#   - résolution d'un système linéaire Ax=b où A est soit triangulaire soit symétrique
+#   - matlab dispose d'une multitude de fonctions "built-in" qui sont nativement
+#  "multithreadées" (cf https://fr.mathworks.com/discovery/matlab-multicore.html)
+#
+# Usage: oarsub -S ./ matlab_ex1_launch.oar
+# 
+#
+# Note: les directives OAR commencent par #OAR pour les mettre en commentaires
+# il faut utiliser un double #
+################################################################################
+
+#-----------------------------------------------------------
+# chargement du module matlab (mise à jour du PATH) 
+#
+# (ajout avril 2017: mise en place de lmod et easybuild sur
+# la plateforme)
+# http://lmod.readthedocs.io/en/latest/010_user.html
+# http://easybuild.readthedocs.io/en/latest/Introduction.html
+#-----------------------------------------------------------
+source /nfs/opt/env/env.sh
+module load matlab
+
+
+#-----------------------------------------------------------
+# Les directives OAR
+#-----------------------------------------------------------
+# donner un nom au job
+#OAR -n system_ex1
+
+# les ressources
+
+#OAR -l /nodes=1/cpu=1/core=8,walltime=00:20
+
+# la file de soumission
+#OAR -q default
+
+# notification par mail ou script
+##OAR --notify mail:prenom.nom@univ-littoral.fr
+##OAR --notify exec:/chemin/vers/mon/script arguments
+
+# affiner la selection des ressources avec les propriétés
+# voir sortie de la commande oarnodes sur le frontal pour les connaître
+# syntax à la SQL
+# ex novembre 2016: matlab était installé que sur orval 4 et 5 
+##OAR -p network_address = 'orval05' or network_address = 'orval04'
+##OAR -p nodemodel = 'Dell_R820' and disktype = 'sas'
+
+# redirection des sorties standard stdout et stderr
+# par défaut redirection vers OAR.%jobid%.stdout et OAR.%jobid%.stderr
+# dans le répertoire courant
+# A mettre dans scratch sous votre arborescence
+#OAR -O /scratch/lmpa/pmarion/%jobid%.out
+#OAR -E /scratch/lmpa/pmarion/%jobid%.err
+
+# IMPORTANT (ajout déc.2016):
+# inclure dans les ressources demandées un jeton Matlab de sorte
+# que le script sera lancé que s'il y a bien un jeton de libre
+#OAR -t token:matlab=1
+
+# mode besteffort et restart automatique
+##OAR -t besteffort
+##OAR -t idempotent
+
+PROG=system_ex1.m
+
+GROUP=$(id -gn $OAR_USER)
+#-----------------------------------------------------------
+# Création du répertoire temporaire local dans scratch
+#-----------------------------------------------------------
+SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME.$OAR_JOBID
+[ ! -d $SCRATCHDIR ] && mkdir $SCRATCHDIR 
+
+#-----------------------------------------------------------
+# Recopie du programme et des données en local
+#-----------------------------------------------------------
+cd $SCRATCHDIR
+# programme
+cp $OAR_WORKDIR/$PROG .
+
+# recopie des données depuis les espaces Data et/ou Home
+# ici il n'y en a pas
+# cp /nfs/home/labo/user/chemin/vers/mes/donnees .
+# cp /nfs/data/labo/user/chemin/vers/mes/autres/donnees .
+
+#-----------------------------------------------------------
+# Execution du programme depuis l'espace scratch
+# 
+# NB: options de Matlab en mode batch:  -nodesktop -nodisplay -nosplash
+#-----------------------------------------------------------
+#
+
+matlab -nodesktop -nodisplay -nosplash < $PROG > matlab.out
+
+mv $OAR_STDOUT .
+mv $OAR_STDERR .
+
+#-----------------------------------------------------------
+# suppression du programme et des données utilisées en entrée
+# avant transfert
+#-----------------------------------------------------------
+ rm ./$PROG
+#rm mes_donnees_copiees_de home
+#rm mes_donnees_copiees_de_data
+
+#-----------------------------------------------------------
+# transfert des résultats vers Home ou Data
+# ici vers le répertoire Home du programme
+# suppression des fichiers sur /scratch
+#-----------------------------------------------------------
+cd ..
+cp -pR $SCRATCHDIR $OAR_WORKDIR
+rm -rf $SCRATCHDIR

+ 123 - 0
Matlab/tuto-www/matlab_ex2_launch.oar

@@ -0,0 +1,123 @@
+#!/bin/bash
+
+# sur orval 
+################################################################################
+# matlab_ex2_launch.oar - exemple de batch permettant de lancer le script Matlab
+# parfor_ex2.m sur un noeud / 16 coeurs pour 10 minutes max
+# Utilisation d'un répertoire de travail en local dans l'espace Scratch 
+#
+# parfor_ex2:
+#    - "Parallel for" (parfor), fonctionnalité basique  de la Parallel ToolBox
+#
+# Usage: oarsub -S ./ matlab_ex2_launch.oar
+#
+# Note: les directives OAR commencent par #OAR pour les mettre en commentaires
+# il faut utiliser un double #
+################################################################################
+
+#-----------------------------------------------------------
+# chargement du module matlab (mise à jour du PATH) 
+#
+# (ajout avril 2017: mise en place de lmod et easybuild sur
+# la plateforme)
+# http://lmod.readthedocs.io/en/latest/010_user.html
+# http://easybuild.readthedocs.io/en/latest/Introduction.html
+#-----------------------------------------------------------
+source /nfs/opt/env/env.sh
+module load matlab
+
+
+#-----------------------------------------------------------
+# Les directives OAR
+#-----------------------------------------------------------
+# donner un nom au job
+#OAR -n parfor_ex2
+
+# les ressources
+
+#OAR -l /nodes=1/core=16,walltime=00:10
+
+# Facultatif (cf commentaire du programme parfor_ex2.m)
+# mais si actif, doit correspondre au nb de coeurs réservés
+# (ligne #OAR ci-dessus -l .../core=XX,...)
+export number_Threads=16
+
+# la file de soumission
+#OAR -q default
+
+# notification par mail ou script
+##OAR --notify mail:prenom.nom@lmpa.univ-littoral.fr
+##OAR --notify exec:/chemin/vers/mon/script arguments
+
+# affiner la selection des ressources avec les propriétés
+# voir sortie de la commande oarnodes sur le frontal pour les connaître
+# syntax à la SQL
+# novembre 2016: matlab est installé que sur orval 4 et 5 
+#OAR -p network_address = 'orval05' or network_address = 'orval04'
+##OAR -p nodemodel = 'Dell_R820' and disktype = 'sas'
+
+# redirection des sorties standard stdout et stderr
+# par défaut redirection vers OAR.%jobid%.stdout et OAR.%jobid%.stderr
+# dans le répertoire courant
+# A mettre dans scratch sous votre arborescence
+#OAR -O /scratch/lmpa/pmarion/%jobid%.out
+#OAR -E /scratch/lmpa/pmarion/%jobid%.err
+
+
+# IMPORTANT (ajout déc.2016):
+# inclure dans les ressources demandées un jeton Matlab de sorte
+# que le script sera lancé que s'il y a bien un jeton de libre
+#OAR -t token:matlab=1
+
+# mode besteffort et restart automatique
+##OAR -t besteffort
+##OAR -t idempotent
+
+PROG=parfor_ex2.m
+
+GROUP=$(id -gn $OAR_USER)
+#-----------------------------------------------------------
+# Création du répertoire temporaire local dans scratch
+#-----------------------------------------------------------
+SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME.$OAR_JOBID
+[ ! -d $SCRATCHDIR ] && mkdir $SCRATCHDIR 
+
+#-----------------------------------------------------------
+# Recopie du programme et des données en local
+#-----------------------------------------------------------
+cd $SCRATCHDIR
+# programme
+cp $OAR_WORKDIR/$PROG .
+
+# recopie des données depuis les espaces Data et/ou Home
+# ici il n'y en a pas
+# cp /nfs/home/labo/user/chemin/vers/mes/donnees .
+# cp /nfs/data/labo/user/chemin/vers/mes/autres/donnees .
+
+#-----------------------------------------------------------
+# Execution du programme depuis l'espace scratch
+# 
+# NB: options de Matlab en mode batch:  -nodesktop -nodisplay -nosplash
+#-----------------------------------------------------------
+#
+
+matlab -nodesktop -nodisplay -nosplash < $PROG > matlab.out
+
+mv $OAR_STDOUT .
+mv $OAR_STDERR .
+
+#-----------------------------------------------------------
+# suppression du programme et des données utilisées en entrée
+# avant transfert
+#-----------------------------------------------------------
+ rm ./$PROG
+#rm mes_donnees_copiees_de home
+#rm mes_donnees_copiees_de_data
+
+#-----------------------------------------------------------
+# transfert des résultats vers Home ou Data
+# ici vers le répertoire Home du programme
+#-----------------------------------------------------------
+cd ..
+cp -pR $SCRATCHDIR $OAR_WORKDIR
+rm -rf $SCRATCHDIR

+ 119 - 0
Matlab/tuto-www/matlab_ex3_launch.oar

@@ -0,0 +1,119 @@
+#!/bin/bash
+
+# sur orval 
+################################################################################
+# matlab_ex3_launch.oar - exemple de batch permettant de lancer le script Matlab
+# parfor_print_ex3.m sur un noeud / 16 coeurs pour 20 minutes max
+# Utilisation d'un répertoire de travail en local dans l'espace Scratch 
+#
+# parfor_print_ex3:
+#    - "Parallel for" (parfor), fonctionnalité basique  de la Parallel ToolBox
+#    - le programme génère une figure illustrant le speedup sur 1,2,4,8,16 coeurs. 
+#    - ...lancer en mode batch, sans interface graphique, il est ESSENTIEL de 
+# MODIFIER les scripts matlab de sorte à générer des fichiers images (plot -> fichiers!)  
+#
+# Usage: oarsub -S ./ matlab_ex3_launch.oar
+#
+# Note: les directives OAR commencent par #OAR pour les mettre en commentaires
+# il faut utiliser un double #
+################################################################################
+
+#-----------------------------------------------------------
+# chargement du module matlab (mise à jour du PATH) 
+#
+# (ajout avril 2017: mise en place de lmod et easybuild sur
+# la plateforme)
+# http://lmod.readthedocs.io/en/latest/010_user.html
+# http://easybuild.readthedocs.io/en/latest/Introduction.html
+#-----------------------------------------------------------
+source /nfs/opt/env/env.sh
+module load matlab
+
+#-----------------------------------------------------------
+# Les directives OAR
+#-----------------------------------------------------------
+# donner un nom au job
+#OAR -n parfor_ex3
+
+# les ressources
+
+#OAR -l /nodes=1/core=16,walltime=00:20
+
+# la file de soumission
+#OAR -q default
+
+# notification par mail ou script
+#OAR --notify mail:marion@lmpa.univ-littoral.fr
+##OAR --notify exec:/chemin/vers/mon/script arguments
+
+# affiner la selection des ressources avec les propriétés
+# voir sortie de la commande oarnodes sur le frontal pour les connaître
+# syntax à la SQL
+# ex: novembre 2016: matlab n'était que sur orval 4 et 5 
+##OAR -p network_address = 'orval05' or network_address = 'orval04'
+##OAR -p nodemodel = 'Dell_R820' and disktype = 'sas'
+
+# redirection des sorties standard stdout et stderr
+# par défaut redirection vers OAR.%jobid%.stdout et OAR.%jobid%.stderr
+# dans le répertoire courant
+# A mettre dans scratch sous votre arborescence
+#OAR -O /scratch/lmpa/pmarion/%jobid%.out
+#OAR -E /scratch/lmpa/pmarion/%jobid%.err
+
+# IMPORTANT (ajout déc.2016):
+# inclure dans les ressources demandées un jeton Matlab de sorte
+# que le script sera lancé que s'il y a bien un jeton de libre
+#OAR -t token:matlab=1
+
+# mode besteffort et restart automatique
+##OAR -t besteffort
+##OAR -t idempotent
+
+PROG=parfor_print_ex3.m
+
+GROUP=$(id -gn $OAR_USER)
+#-----------------------------------------------------------
+# Création du répertoire temporaire local dans scratch
+#-----------------------------------------------------------
+SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME.$OAR_JOBID
+[ ! -d $SCRATCHDIR ] && mkdir $SCRATCHDIR 
+
+#-----------------------------------------------------------
+# Recopie du programme et des données en local
+#-----------------------------------------------------------
+cd $SCRATCHDIR
+# programme
+cp $OAR_WORKDIR/$PROG .
+
+# recopie des données depuis les espaces Data et/ou Home
+# ici il n'y en a pas
+# cp /nfs/home/labo/user/chemin/vers/mes/donnees .
+# cp /nfs/data/labo/user/chemin/vers/mes/autres/donnees .
+
+#-----------------------------------------------------------
+# Execution du programme depuis l'espace scratch
+# 
+# NB: options de Matlab en mode batch:  -nodesktop -nodisplay -nosplash
+#-----------------------------------------------------------
+#
+
+matlab -nodesktop -nodisplay -nosplash < $PROG > matlab.out
+
+mv $OAR_STDOUT .
+mv $OAR_STDERR .
+
+#-----------------------------------------------------------
+# suppression du programme et des données utilisées en entrée
+# avant transfert
+#-----------------------------------------------------------
+ rm ./$PROG
+#rm mes_donnees_copiees_de home
+#rm mes_donnees_copiees_de_data
+
+#-----------------------------------------------------------
+# transfert des résultats vers Home ou Data
+# ici vers le répertoire Home du programme
+#-----------------------------------------------------------
+cd ..
+cp -pR $SCRATCHDIR $OAR_WORKDIR
+rm -rf $SCRATCHDIR

+ 127 - 0
Matlab/tuto-www/matlab_ex4_launch.oar

@@ -0,0 +1,127 @@
+#!/bin/bash
+
+# sur orval 
+################################################################################
+# matlab_ex4_launch.oar - exemple de batch permettant de lancer le script Matlab
+# spmd_ex4_int_trapeze.m sur un noeud / 16 coeurs pour 20 minutes max
+# Utilisation d'un répertoire de travail en local dans l'espace Scratch 
+#
+# spmd_ex4_int_trapeze.m:
+#    - "Simple Program Multiple Data" (SPMD ~ mpi "sauce Matlab")
+#    - le programme calcul une approximation de pi par intégration
+#    - chaque processus (ici 16 "Labs") calcule son aire local par la méthode 
+#  des trapèzes
+#
+# Usage: oarsub -S ./ matlab_ex4_launch.oar
+#
+# Note: les directives OAR commencent par #OAR pour les mettre en commentaires
+# il faut utiliser un double #
+################################################################################
+
+#-----------------------------------------------------------
+# chargement du module matlab (mise à jour du PATH) 
+#
+# (ajout avril 2017: mise en place de lmod et easybuild sur
+# la plateforme)
+# http://lmod.readthedocs.io/en/latest/010_user.html
+# http://easybuild.readthedocs.io/en/latest/Introduction.html
+#-----------------------------------------------------------
+source /nfs/opt/env/env.sh
+module load matlab
+
+
+#-----------------------------------------------------------
+# Les directives OAR
+#-----------------------------------------------------------
+# donner un nom au job
+#OAR -n spmd_ex4
+
+# les ressources
+
+#OAR -l /nodes=1/core=16,walltime=00:20
+
+# la file de soumission
+#OAR -q default
+
+# Facultatif (cf commentaire du programme parfor_ex2.m)
+# mais si actif, doit correspondre au nb de coeurs réservés
+# (ligne #OAR ci-dessus -l .../core=XX,...)
+export number_Threads=16
+
+
+# notification par mail ou script
+#OAR --notify mail:marion@lmpa.univ-littoral.fr
+##OAR --notify exec:/chemin/vers/mon/script arguments
+
+# affiner la selection des ressources avec les propriétés
+# voir sortie de la commande oarnodes sur le frontal pour les connaître
+# syntax à la SQL
+## ex:novembre 2016: matlab était installé que sur orval 4 et 5
+##OAR -p network_address = 'orval05' or network_address = 'orval04'
+##OAR -p nodemodel = 'Dell_R820' and disktype = 'sas'
+
+# redirection des sorties standard stdout et stderr
+# par défaut redirection vers OAR.%jobid%.stdout et OAR.%jobid%.stderr
+# dans le répertoire courant
+# A mettre dans scratch sous votre arborescence
+#OAR -O /scratch/lmpa/pmarion/%jobid%.out
+#OAR -E /scratch/lmpa/pmarion/%jobid%.err
+
+# IMPORTANT (ajout déc.2016):
+# inclure dans les ressources demandées un jeton Matlab de sorte
+# que le script sera lancé que s'il y a bien un jeton de libre
+#OAR -t token:matlab=1
+
+
+# mode besteffort et restart automatique
+##OAR -t besteffort
+##OAR -t idempotent
+
+PROG=spmd_ex4_int_trapeze.m
+
+GROUP=$(id -gn $OAR_USER)
+#-----------------------------------------------------------
+# Création du répertoire temporaire local dans scratch
+#-----------------------------------------------------------
+SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME.$OAR_JOBID
+[ ! -d $SCRATCHDIR ] && mkdir $SCRATCHDIR 
+
+#-----------------------------------------------------------
+# Recopie du programme et des données en local
+#-----------------------------------------------------------
+cd $SCRATCHDIR
+# programme
+cp $OAR_WORKDIR/$PROG .
+
+# recopie des données depuis les espaces Data et/ou Home
+# ici il n'y en a pas
+# cp /nfs/home/labo/user/chemin/vers/mes/donnees .
+# cp /nfs/data/labo/user/chemin/vers/mes/autres/donnees .
+
+#-----------------------------------------------------------
+# Execution du programme depuis l'espace scratch
+# 
+# NB: options de Matlab en mode batch:  -nodesktop -nodisplay -nosplash
+#-----------------------------------------------------------
+#
+
+matlab -nodesktop -nodisplay -nosplash < $PROG > matlab.out
+
+mv $OAR_STDOUT .
+mv $OAR_STDERR .
+
+#-----------------------------------------------------------
+# suppression du programme et des données utilisées en entrée
+# avant transfert
+#-----------------------------------------------------------
+ rm ./$PROG
+#rm mes_donnees_copiees_de home
+#rm mes_donnees_copiees_de_data
+
+#-----------------------------------------------------------
+# transfert des résultats vers Home ou Data
+# ici vers le répertoire Home du programme
+#-----------------------------------------------------------
+cd ..
+cp -pR $SCRATCHDIR $OAR_WORKDIR
+rm -rf $SCRATCHDIR

+ 133 - 0
Matlab/tuto-www/matlab_ex5_launch.oar

@@ -0,0 +1,133 @@
+#!/bin/bash
+
+# sur orval 
+################################################################################
+# matlab_ex5_launch.oar - exemple de batch permettant de lancer le script Matlab
+# pi_checkpoint_ex5.m sur un noeud / 1 coeurs pour en mode besteffort idempotent
+# Utilisation d'un répertoire de travail en local dans l'espace Scratch 
+#
+# pi_checkpoint_ex5.m:
+#    - Calcul de l'approximation de pi par la méthode de Leibniz
+#    - le programme simule un job long  avec des instructions "pause" inutiles
+#  afin d'illustrer une solution de checkpoint et de reprise manuelle(*) si le
+#  job long a été tué, cf.:
+# https://www-calculco.univ-littoral.fr/utilisation/lancer-un-calcul#r_beseffort
+#
+# Note: le script pi_checkpoint_ex5.m peut-être tester avec Matlab en mode
+# interactif:  il suffit de le stopper avec CTRL+C (et le relancer une 2ième fois)
+#
+# manuelle(*) cf. idempotent
+#
+# Usage: oarsub -S ./ matlab_ex5_launch.oar
+#
+# Note: les directives OAR commencent par #OAR pour les mettre en commentaires
+# il faut utiliser un double #
+################################################################################
+
+#-----------------------------------------------------------
+# chargement du module matlab (mise à jour du PATH)
+#
+# (ajout avril 2017: mise en place de lmod et easybuild sur
+# la plateforme)
+# http://lmod.readthedocs.io/en/latest/010_user.html
+# http://easybuild.readthedocs.io/en/latest/Introduction.html
+#-----------------------------------------------------------
+source /nfs/opt/env/env.sh
+module load matlab
+
+#-----------------------------------------------------------
+# Les directives OAR
+#-----------------------------------------------------------
+# donner un nom au job
+#OAR -n pi_checkpoint_ex5
+
+# les ressources
+
+#OAR -l /nodes=1/core=1,walltime=24:00:00
+
+# la file de soumission
+#OAR -q besteffort
+
+## À faire.  
+##OAR -t idempotent
+
+# notification par mail ou script
+#OAR --notify mail:marion@lmpa.univ-littoral.fr
+##OAR --notify exec:/chemin/vers/mon/script arguments
+
+# affiner la selection des ressources avec les propriétés
+# voir sortie de la commande oarnodes sur le frontal pour les connaître
+# syntax à la SQL
+## ex:novembre 2016: matlab était installé que sur orval 4 et 5
+##OAR -p network_address = 'orval05' or network_address = 'orval04'
+##OAR -p nodemodel = 'Dell_R820' and disktype = 'sas'
+
+# redirection des sorties standard stdout et stderr
+# par défaut redirection vers OAR.%jobid%.stdout et OAR.%jobid%.stderr
+# dans le répertoire courant
+# A mettre dans scratch sous votre arborescence
+#OAR -O /scratch/lmpa/pmarion/%jobid%.out
+#OAR -E /scratch/lmpa/pmarion/%jobid%.err
+
+# IMPORTANT (ajout déc.2016):
+# inclure dans les ressources demandées un jeton Matlab de sorte
+# que le script sera lancé que s'il y a bien un jeton de libre
+#OAR -t token:matlab=1
+
+# mode besteffort et restart automatique
+##OAR -t besteffort
+##OAR -t idempotent
+
+PROG=pi_checkpoint_ex5.m
+
+GROUP=$(id -gn $OAR_USER)
+#-----------------------------------------------------------
+# Création du répertoire temporaire local dans scratch
+#-----------------------------------------------------------
+SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME.$OAR_JOBID
+[ ! -d $SCRATCHDIR ] && mkdir $SCRATCHDIR 
+
+#-----------------------------------------------------------
+# Recopie du programme et des données en local
+#-----------------------------------------------------------
+cd $SCRATCHDIR
+# programme
+cp $OAR_WORKDIR/$PROG .
+
+# recopie des données depuis les espaces Data et/ou Home
+# cp /nfs/home/labo/user/chemin/vers/mes/donnees .
+# cp /nfs/data/labo/user/chemin/vers/mes/autres/donnees .
+# ici il n'y en a pas sauf si un premier run avorté a eu lieu,
+# recopie du checkpoint "check.mat" :
+
+if [ -e  $OAR_WORKDIR/check.mat ] ; then
+   cp $OAR_WORKDIR/check.mat .
+fi
+
+#-----------------------------------------------------------
+# Execution du programme depuis l'espace scratch
+# 
+# NB: options de Matlab en mode batch:  -nodesktop -nodisplay -nosplash
+#-----------------------------------------------------------
+#
+
+matlab -nodesktop -nodisplay -nosplash < $PROG > matlab.out
+
+mv $OAR_STDOUT .
+mv $OAR_STDERR .
+
+#-----------------------------------------------------------
+# suppression du programme et des données utilisées en entrée
+# avant transfert
+#-----------------------------------------------------------
+ rm ./$PROG
+#rm mes_donnees_copiees_de home
+#rm mes_donnees_copiees_de_data
+
+#-----------------------------------------------------------
+# transfert des résultats vers Home ou Data
+# ici vers le répertoire Home du programme
+#-----------------------------------------------------------
+cd ..
+cp -pR $SCRATCHDIR $OAR_WORKDIR
+rm -rf $SCRATCHDIR

+ 93 - 0
Matlab/tuto-www/matlab_ex5_nfs_launch.oar

@@ -0,0 +1,93 @@
+#!/bin/bash
+
+# sur orval 
+################################################################################
+# matlab_ex5_launch.oar - exemple de batch permettant de lancer le script Matlab
+# pi_checkpoint_ex5.m sur un noeud / 1 coeurs pour en mode besteffort idempotent
+# Utilisation d'un répertoire de travail en local dans l'espace Scratch 
+#
+# pi_checkpoint_ex5.m:
+#    - Calcul de l'approximation de pi par la méthode de Leibniz
+#    - le programme simule un job long  avec des instructions "pause" inutiles
+#  afin d'illustrer une solution de checkpoint et de reprise manuelle(*) si le
+#  job long a été tué, cf.:
+# https://www-calculco.univ-littoral.fr/utilisation/lancer-un-calcul#r_beseffort
+#
+# Note: le script pi_checkpoint_ex5.m peut-être tester avec Matlab en mode
+# interactif:  il suffit de le stopper avec CTRL+C (et le relancer une 2ième fois)
+#
+# manuelle(*) cf. idempotent
+#
+# Usage: oarsub -S ./ matlab_ex5_launch.oar
+#
+# Note: les directives OAR commencent par #OAR pour les mettre en commentaires
+# il faut utiliser un double #
+################################################################################
+
+#-----------------------------------------------------------
+# chargement du module matlab (mise à jour du PATH) 
+#
+# (ajout avril 2017: mise en place de lmod et easybuild sur
+# la plateforme)
+# http://lmod.readthedocs.io/en/latest/010_user.html
+# http://easybuild.readthedocs.io/en/latest/Introduction.html
+#-----------------------------------------------------------
+source /nfs/opt/env/env.sh
+module load matlab
+
+#-----------------------------------------------------------
+# Les directives OAR
+#-----------------------------------------------------------
+# donner un nom au job
+#OAR -n pi_checkpoint_ex5
+
+# les ressources
+
+#OAR -l /nodes=1/core=1,walltime=24:00:00
+
+# la file de soumission
+#OAR -q besteffort
+
+## À faire.  
+##OAR -t idempotent
+
+# notification par mail ou script
+#OAR --notify mail:marion@lmpa.univ-littoral.fr
+##OAR --notify exec:/chemin/vers/mon/script arguments
+
+# affiner la selection des ressources avec les propriétés
+# voir sortie de la commande oarnodes sur le frontal pour les connaître
+# syntax à la SQL
+## ex:novembre 2016: matlab était installé que sur orval 4 et 5
+##OAR -p network_address = 'orval05' or network_address = 'orval04'
+##OAR -p nodemodel = 'Dell_R820' and disktype = 'sas'
+
+# redirection des sorties standard stdout et stderr
+# par défaut redirection vers OAR.%jobid%.stdout et OAR.%jobid%.stderr
+# dans le répertoire courant
+# A mettre dans scratch sous votre arborescence
+#OAR -O %jobid%.out
+#OAR -E %jobid%.err
+
+# IMPORTANT (ajout déc.2016):
+# inclure dans les ressources demandées un jeton Matlab de sorte
+# que le script sera lancé que s'il y a bien un jeton de libre
+
+#OAR -t token:matlab=1
+# mode besteffort et restart automatique
+##OAR -t besteffort
+##OAR -t idempotent
+
+PROG=pi_checkpoint_ex5.m
+
+#GROUP=$(id -gn $OAR_USER)
+#-----------------------------------------------------------
+# Création du répertoire temporaire local dans scratch
+#-----------------------------------------------------------
+# NOTE:  pour simplifier l'exemple arrêt/repise de job
+# tout ce qui concerne l'execution dans l'espace disque local
+# (scratch) a été supprimé. ce n'est pas une bonne idée... surtout
+# si votre programme implique de nombreuses entrées/sorties
+
+matlab -nodesktop -nodisplay -nosplash < $PROG > matlab.out
+

+ 134 - 0
Matlab/tuto-www/matlab_ex5_scratch_launch.oar

@@ -0,0 +1,134 @@
+#!/bin/bash
+
+# sur orval 
+################################################################################
+# matlab_ex5_launch.oar - exemple de batch permettant de lancer le script Matlab
+# pi_checkpoint_ex5.m sur un noeud / 1 coeurs pour en mode besteffort idempotent
+# Utilisation d'un répertoire de travail en local dans l'espace Scratch 
+#
+# pi_checkpoint_ex5.m:
+#    - Calcul de l'approximation de pi par la méthode de Leibniz
+#    - le programme simule un job long  avec des instructions "pause" inutiles
+#  afin d'illustrer une solution de checkpoint et de reprise manuelle(*) si le
+#  job long a été tué, cf.:
+# https://www-calculco.univ-littoral.fr/utilisation/lancer-un-calcul#r_beseffort
+#
+# Note: le script pi_checkpoint_ex5.m peut-être tester avec Matlab en mode
+# interactif:  il suffit de le stopper avec CTRL+C (et le relancer une 2ième fois)
+#
+# manuelle(*) cf. idempotent
+#
+# Usage: oarsub -S ./ matlab_ex5_launch.oar
+#
+# Note: les directives OAR commencent par #OAR pour les mettre en commentaires
+# il faut utiliser un double #
+################################################################################
+
+#-----------------------------------------------------------
+# chargement du module matlab (mise à jour du PATH) 
+#
+# (ajout avril 2017: mise en place de lmod et easybuild sur
+# la plateforme)
+# http://lmod.readthedocs.io/en/latest/010_user.html
+# http://easybuild.readthedocs.io/en/latest/Introduction.html
+#-----------------------------------------------------------
+source /nfs/opt/env/env.sh
+module load matlab
+
+
+#-----------------------------------------------------------
+# Les directives OAR
+#-----------------------------------------------------------
+# donner un nom au job
+#OAR -n pi_checkpoint_ex5
+
+# les ressources
+
+#OAR -l /nodes=1/core=1,walltime=24:00:00
+
+# la file de soumission
+#OAR -q besteffort
+
+## À faire.  
+##OAR -t idempotent
+
+# notification par mail ou script
+#OAR --notify mail:marion@lmpa.univ-littoral.fr
+##OAR --notify exec:/chemin/vers/mon/script arguments
+
+# affiner la selection des ressources avec les propriétés
+# voir sortie de la commande oarnodes sur le frontal pour les connaître
+# syntax à la SQL
+## ex:novembre 2016: matlab était installé que sur orval 4 et 5
+##OAR -p network_address = 'orval05' or network_address = 'orval04'
+##OAR -p nodemodel = 'Dell_R820' and disktype = 'sas'
+
+# redirection des sorties standard stdout et stderr
+# par défaut redirection vers OAR.%jobid%.stdout et OAR.%jobid%.stderr
+# dans le répertoire courant
+# A mettre dans scratch sous votre arborescence
+#OAR -O /scratch/lmpa/pmarion/%jobid%.out
+#OAR -E /scratch/lmpa/pmarion/%jobid%.err
+
+# IMPORTANT (ajout déc.2016):
+# inclure dans les ressources demandées un jeton Matlab de sorte
+# que le script sera lancé que s'il y a bien un jeton de libre
+#OAR -t token:matlab=1
+
+# mode besteffort et restart automatique
+##OAR -t besteffort
+##OAR -t idempotent
+
+PROG=pi_checkpoint_ex5.m
+
+GROUP=$(id -gn $OAR_USER)
+#-----------------------------------------------------------
+# Création du répertoire temporaire local dans scratch
+#-----------------------------------------------------------
+SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME.$OAR_JOBID
+[ ! -d $SCRATCHDIR ] && mkdir $SCRATCHDIR 
+
+#-----------------------------------------------------------
+# Recopie du programme et des données en local
+#-----------------------------------------------------------
+cd $SCRATCHDIR
+# programme
+cp $OAR_WORKDIR/$PROG .
+
+# recopie des données depuis les espaces Data et/ou Home
+# cp /nfs/home/labo/user/chemin/vers/mes/donnees .
+# cp /nfs/data/labo/user/chemin/vers/mes/autres/donnees .
+# ici il n'y en a pas sauf si un premier run avorté a eu lieu,
+# recopie du checkpoint "check.mat" :
+
+if [ -e  $OAR_WORKDIR/check.mat ] ; then
+   cp $OAR_WORKDIR/check.mat .
+fi
+
+#-----------------------------------------------------------
+# Execution du programme depuis l'espace scratch
+# 
+# NB: options de Matlab en mode batch:  -nodesktop -nodisplay -nosplash
+#-----------------------------------------------------------
+#
+
+matlab -nodesktop -nodisplay -nosplash < $PROG > matlab.out
+
+mv $OAR_STDOUT .
+mv $OAR_STDERR .
+
+#-----------------------------------------------------------
+# suppression du programme et des données utilisées en entrée
+# avant transfert
+#-----------------------------------------------------------
+ rm ./$PROG
+#rm mes_donnees_copiees_de home
+#rm mes_donnees_copiees_de_data
+
+#-----------------------------------------------------------
+# transfert des résultats vers Home ou Data
+# ici vers le répertoire Home du programme
+#-----------------------------------------------------------
+cd ..
+cp -pR $SCRATCHDIR $OAR_WORKDIR
+rm -rf $SCRATCHDIR

+ 84 - 0
Matlab/tuto-www/parfor_ex2.m

@@ -0,0 +1,84 @@
+% - exemple de boucle parallèle: parfor
+% - les itérations sont indépendantes, l'efficacité est donc optimale(!)
+%
+%
+
+N = 200;
+M = 400;
+a = zeros(N,1);
+
+tic;   % serial (regular) for-loop
+% calcul séquentiel
+for i = 1:N
+        a(i) = a(i) + max(eig(rand(M)));
+end
+time(1) = toc;
+fprintf('temps sequentiel: %f \n', time(1));
+
+% Usage de la Parallel Computing Toolbox:
+%
+% Les fonctionnalités parallèle (parfor, parfeval, spmd ...)
+% nécessite l'initialisation d'un "pool de workers" via 
+% la commande  "parpool" 
+%
+% - le nombre de workers ne peut être supérieur au nombre de cœurs  
+% - le nombre de workers par défaut est le nombre de coeurs 
+% demandés (et max 12) , par conséquent si les ressources demandées 
+% via OAR sont supérieures à 12 , il faut forcer  l'usage de
+%   ces ressources:
+%
+%  exemple  (manuellement):  
+%   - parpool(16)
+%   - (avec 16 cœurs demandés: OAR -l /nodes=1/core=16,walltime=00:20)
+%
+% exemple 2 (mieux?): récupération du nombre de ressources via une
+% variable d'environnement du SHELL passée par exemple dans le 
+% script de soumission du jobs   
+%    
+%  - export number_Threads=16
+%  
+% Remarque: l'instruction "parpool" est facultative: elle est implicitement  
+% lancée dès que l'interpréteur rencontre une instruction propre
+% à la Parallèle ToolBox - par ex. parfor - ... (mais le nombre
+% de workers sera dans ce cas au plus 12)  
+%
+% cf. https://fr.mathworks.com/help/distcomp/parpool.html
+
+% Selon la solution adoptée plus haut:
+
+if (isempty(getenv('number_Threads'))) 
+     %nb de thread fixé manuellement mais qui...
+     % doit être inférieur aux ressources/coeurs demandés!!
+     nbcore = 8
+   else
+     % lecture de la variable SHELL number_Threads 
+     nbcore = uint8(str2num(getenv('number_Threads'))) 
+end
+
+% initialisation du pool de workers
+parpool(nbcore)
+
+tic;   
+% parallel for-loop
+parfor i = 1:N
+      a(i) = a(i) + max(eig(rand(M)));
+end   
+time(2) = toc;
+speedup = time(1)/time(2);
+
+fprintf('temps execution parallele : %f \n', time(2));
+fprintf('acceleration du parallelisme: %f \n', speedup);
+
+% Pour infos, si on désire connaître/manipuler les propriétés
+% d'un pool (NumWorkers, AttachedFiles,SpmdEnabled etc.),
+% il faut utiliser la fonction "get current pool" (gcp), ex:
+
+  % recuperer les propriétes du pool courant:  
+   p = gcp('nocreate');
+fprintf('le nombre de workers est: %d \n',p.NumWorkers);  
+   
+
+%delete(gcp('nocreate'))
+
+% merci de quitter matlab pour libérer les jetons de licence.
+quit 

+ 46 - 0
Matlab/tuto-www/parfor_print_ex3.m

@@ -0,0 +1,46 @@
+% - ex boucle parallèle: parfor
+% - les itérations sont indépendantes, l'efficacité est donc optimale(!)
+% - En revanche, les itérations sur le nombre de threads (1, 2, 4, 8)
+% sont réalisées avec l'initialisation/réinitialisation d'un pool 
+% de coeur à chaque itération (parpool(nb_coeurs)): cette opération est 
+% lourde en temps...mais nécessaire car Matlab utilise par défaut le
+% nombre max de coeurs alloués/demandés: la fonction maxNumCompThreads est 
+% inopérante dans un parfor.
+
+N = 200;
+M = 400;
+a = zeros(N,1);
+core(1)= 1;
+speedup(1)=1;
+tic;   % serial (regular) for-loop
+% calcul séquentiel
+for i = 1:N
+        a(i) = a(i) + max(eig(rand(M)));
+end
+time(1) = toc;
+
+for j = 2:5
+    %maxNumCompThreads will be removed in a future release ...but replace by?
+    %
+    core(j) = 2^(j-1);     % 1,2,4,8...
+    parpool(core(j));
+    fprintf('nombre de threads: %d \n', core);
+    tic;   % parallel for-loop
+    parfor i = 1:N
+            a(i) = a(i) + max(eig(rand(M)));
+    end   
+    time(j) = toc;
+    speedup(j) = time(1)/time(j);
+    delete(gcp('nocreate'))
+end
+
+ % En mode batch, les figures doivent être sauvées dans des fichiers
+ fig = figure;
+ plot(core,core,core,speedup,'-*');
+ title(' Speedup parfor (exemple 1) : 1,2,..,16 coeurs ');
+ xlabel('nombre de coeurs');
+ ylabel('Speedup = T_{coeurs} / T_{sequentiel}');
+ % sauve figure-20161028-11-24.png
+ print(fig, strcat('figure-',datestr(now,'yyyymmdd-HH-MM')),'-dpng');
+ % merci de quitter matlab pour libérer les jetons de licence.
+ quit 

+ 58 - 0
Matlab/tuto-www/pi_checkpoint_ex5.m

@@ -0,0 +1,58 @@
+% pi_checkpoint_ex5.m:
+%    - Calcul de l'approximation de pi par la méthode de Leibniz
+%    - le programme simule un job long  avec des instructions "pause" inutiles
+%  avec un checkpoint à intevalle de temps régulier. 
+%    - Il s'agit juste d'un exemple ...le choix de placer deux tests "if", une 
+%   éventuelle sauvegarde dans une boucle qui contient seulement 3 instructions 
+%   de calculs élémentaire est évidemment très critiquable!
+%
+%    - Le problème des checkpoint est à prendre en considération si vous soumettez
+%    des jobs de très longue durée sur le cluster ( pannes , coupures de courant,
+%    jobs soumis sur des files besteffort, long ,...)
+% 
+% Note: le script pi_checkpoint_ex5.m peut-être tester avec Matlab en mode
+% interactif:  il suffit de le stopper avec CTRL+C (et le relancer une 2ième fois)
+%
+
+if exist('check.mat')
+    % initialise les données au redémarrage
+    fprintf('restart après arrêt\n');  
+    load('check.mat');  
+    fprintf('valeur provisoire de pi: %f et iteration %d \n',4*approxpi,n);
+    % modif du flag 'passe' pour supprimer les pauses et finir le calcul
+    passe = 0;
+    save('check.mat');
+else
+    Nmax=1000;
+    approxpi=0;
+    fac=1;
+    n=1;
+    passe=1;
+    save('check.mat','Nmax','approxpi','fac','n','passe');
+end 
+t = clock;
+% environ 30 secondes entre chaque checkpoint
+intervalle_checkpnt=30;
+while( n < Nmax )
+    approxpi=approxpi+fac/(2*n-1);
+    fac=-fac;
+    n=n+1;
+    % simulation d'un job long...
+    if ( passe == 1 )
+        pause(2)
+    end
+    % checkpoint
+    if( etime(clock,t) >= intervalle_checkpnt )           
+        fprintf('checkpoint, indice de boucle = %d \n', n );  
+        save('check.mat','Nmax','approxpi','fac','n','passe');
+        %pause( 1 );
+        t = clock;
+    end
+end
+approxpi=4*approxpi;
+fprintf('\n approximation de pi: %f après %d itérations\n',approxpi,Nmax); 
+% suppression du fichier checkpoint
+delete('check.mat');
+
+% merci de quitter matlab pour libérer les jetons de licence.
+ quit 

+ 55 - 0
Matlab/tuto-www/spmd_ex4_int_trapeze.m

@@ -0,0 +1,55 @@
+% Calculs Parallèles avec la Parallel Toolbox
+% - mise en oeuvre de spmd (Single Program Multiple Data)  
+%  (spmd ~ une version simplifiée de MPI "sauce Matlab")
+%
+% Program spmd_ex4_int_trapeze.m: 
+%  - Calcul intégral par la méthode des trapèzes.
+%  https://fr.wikipedia.org/wiki/Méthode_des_trapèzes
+%
+%
+% Remarque: il s'agit d'un programme exemple ... car en matlab
+% les deux lignes suivantes suffisent !!! ;-)  : 
+%
+% f=@(x) 4./(1+x.^2);
+% Q=integral(f,0,1)
+
+%function value = spmd_ex4_int_trapeze(n)
+
+% cf tutoriaux parfor_ex2.m: si le nombre de ressources est
+% supérieur à 12, il faut forcer le pool.
+% le script oar matlab_ex4_lauch.oar demande 16 coeurs via
+% la variable d environnement number_Threads
+
+if (~isempty(getenv('number_Threads'))) 
+     % parpool(16)
+     parpool(uint8(str2num(getenv('number_Threads'))))
+   else
+     % rien, le pool est initialisé au nb de coeurs demandés
+end
+
+%p = gcp;
+%p.NumWorkers
+n=100;
+% cf matlab anonymous function. (ici, (4 x) dérivé de arctan pour le calcul de pi)
+f = @(x) 4./(1+x.^2)
+
+fprintf ( 1 , 'calcul des bornes \n');
+  spmd
+     a = ( labindex -1 ) / numlabs ;
+     b = labindex/ numlabs ;
+fprintf ( 1, 'le Lab %d  travaille sur l intervalle [% f ,% f] \n',labindex ,a ,b ) ;
+  end
+  fprintf ( 1 , 'chaque workers calcule son aire locale  \n') ;
+  spmd
+      x = linspace ( a ,b ,n );
+      fx = f(x);
+      formule_de_quadrature = ( b - a ) * ( (fx(1) + fx(n))/2 +  sum ( fx(2:n-1) ))/(n-1);
+      fprintf ( 1 , ' Approximation partielle %f \n', formule_de_quadrature) ;
+  end
+  %approximation = sum ( formule_de_quadrature{:} ) ;
+  approximation = sum(cellfun(@double,formule_de_quadrature(:,:)));
+  fprintf ( 1, 'Approximation de pi = %f \n', approximation);
+
+    
+% merci de quitter matlab proprement pour libérer correctement les jetons
+quit

+ 29 - 0
Matlab/tuto-www/system_ex1.m

@@ -0,0 +1,29 @@
+% résolution de Ax = b avec du multithreading
+n = 20000;        % taille de la matrice n x n 
+P = randn(n);
+A = P' + P;       % A matrice symétrique  
+%A = triu(rand(n)); % A triangulaire
+x = ones(n,1);    % la solution est le vecteur unité
+b = A*x;          % calcul du rhs
+
+fprintf('\n\n*** resolution systeme lineaire ***\n');
+fprintf('\n taille du systeme, n = %d \n\n',n);
+
+
+tic                     % top horloge
+y1 = A\b;               % calcul de la solution (en principe vec unité!)
+time= toc;          % top horloge
+
+fprintf('\n temps execution mldivide: %f \n',time);
+
+opts= struct('SYM', true);
+%opts= struct('UT', true);
+tic
+y2 = linsolve(A,b,opts);
+%y2 = linsolve(A,b);
+time= toc;          % top horloge
+
+fprintf('\n temps execution linsolve: %f \n',time);
+
+ % merci de quitter matlab pour libérer les jetons de licence.
+ quit 

+ 63 - 0
Matlab/tuto-www/testgradientconj.m

@@ -0,0 +1,63 @@
+function [x] = testgradientconj(n,tol,maxiter)
+
+% exemple pour illustrer un exemple de passage de paramètres
+% d'un script matlab lancer en mode batch sur calculco (tutoriaux)
+
+% résolution du système Ax =b par la méthode du gradient conjugué
+
+% En entrée les arguments (facultatifs!) sont:
+%   -n : taille du système  (100 par défaut)
+%   -tol: la tolérance  (1-e5 par défaut)
+%   -maxiter: nombre max d'itérations (n, par défaut)
+
+% En sortie : x la solution ... qui est connue (!): ones(n,1) 
+
+if nargin < 1 
+    n = 100; 
+end
+if nargin < 2 
+    tol = 1e-5; 
+end
+if nargin < 3
+    maxiter = n; 
+end
+Atmp=rand(n,n);
+A = Atmp + Atmp';
+sol=ones(n,1);
+b=A*sol;
+x0 = rand(n,1);
+iter =1;
+% Calcul du 1er résidu
+r = A*x0-b;
+% direction du gradient d = -r
+d = -r;
+% Calcul du pas 
+a = norm(r)^2/dot(A*d,d);
+% 1ere itération x1
+x_ = x0 + d*a;
+% gradient en x1
+r_ = A*x_- b;
+p = norm(r_)^2/dot(r_-r,d);
+% direction 
+d_ = -r_+ d*p;
+x = x_;
+r = r_;
+d = d_;
+while ((norm(r) > tol) && (iter < maxiter))
+    a = norm(r)^2/dot(A*d,d);
+    x_ = x + d*a;
+    r_ = A*x_-b;
+    p = norm(r_)^2/dot(d,r_-r);
+    % direction suivante
+    d_ = -r_+ d*p; 
+    x = x_;
+    r = r_;
+    d = d_;
+    iter=iter+1;
+end
+%nombre d'iterations
+  fprintf('Les 10 premiers elements de la solution sont : \n')
+  x(1:10)
+  fprintf('Le nombre d''iterations realisee est : %d \n', iter);
+
+end