## Usage «avancé» OAR : array *La* «bonne pratique» pour lancer massivement, en parallèle, le même programme avec des paramètres différents : **utiliser l'option `--array-param-file parametres.txt` d'OAR **. Cette option lance un «tableau de tâches» chacune indépendantes les unes des autres - développer le programme de tel sorte qu'il prenne les paramètres en argument : ./programme.exe arg1 arg2 arg3... - générer un fichier ascii qui contient l'ensemble des paramètres à tester - arg11 arg12 arg13 .. - arg21 arg22 arg23 .. Note: ce fichier peut contenir des centaines, des milliers de lignes - lancer les expériences via un script OAR: - avec l'option `#OAR --array-param-file parametres.txt` - dans la queue *besteffort* - avec l'option *idempotent* Rappel: en besteffort, les ressources sont illimitées mais les jobs sont non prioritaires (ils peuvent être supprimés sans préavis si des jobs de priorité supérieure sont lancés). À noter dans ce cas que le strict nécessaire aux jobs prioritaires est «libéré»: ce n'est pas le tableau de tâches qui est intégralement supprimé. De plus, l'option *idempotent* permet de relancer automatiquement toutes les expériences (qui auraient été tuées par des jobs prioritaires) ### exemple 1 : pi_array.oar le programme pi.exe calcule une approximation de pi par l'intégration de f(x)=4/(1+x^2) sur [0;1]. Le nombre d'intervalles est passé en argument (regroupé dans le fichier pi_input.txt) - make (compile le programme pi.exe) - oarsub -S ./pi_array.oar ### exemple 2 (matlab): gradientconj.m Le programme résout un système linéaire par la méthode itérative du gradient conjugué. Le script matlab a été tranformé en fonction: gradientconj(n,tolerance,maxiter) - oarsub -S ./gc_array.oar note: contrairement à l'exemple 1 (ci-dessus) et à l'exemple [gradient conjugué](https://www-calculco.univ-littoral.fr/utilisation/tutoriaux/matlab#h3-2-2-batch-simple-2) des tutoriaux, le script bash OAR ne peut accepter la syntaxe de commande: `matlab -nodisplay -nodesktop -nojvm -r 'testgradientconj("$@");exit'" ` L'astuce employée ici est de passer par autre script de lancement intermédiaire: gc_matlab.sh #### description des fichiers - gc_array.oar : le script OAR à lancer (oarsub -S ./gc_array.oar) - gc_matlab.sh : réordonne les paramètres et lance la commande matlab proprement dite - gradientconj.m : prog. matlab - gc_input.txt : paramètres des différents jobs ( n, tol, maxiter ) - 1000 1e-5 1000 - 2000 1e-7 1500 - 6000 1e-6 6000 - etc. - gc_postraitement.sh (optionnel): génère un fichier tableau (csv) gc_bilan.csv à partir des fichiers générés par chaque job #### note: usage de jetons - comme sur un poste personnel, plusieurs sessions matlab ne «consomme» qu'un seul jeton - si le fichier gc_input.txt est suffisamment long ( > nombre max de cœurs du nœud utilisé ) d'autres nœuds seront utilisés , ainsi que d'autres jetons (mais 1 seul jeton/nœud)