Bonjour,
Je ne suis pas du tout un programmeur bash mais plutôt Matlab. Cependant, j'ai un problème avec Matlab au niveau de la parallélisation des calculs (toolbox qui est vraiment catastrophique). Donc je souhaite paralléliser matlab depuis l'extérieur. J'ai écris un petit script (c'est possible que ce soit une horreur, c'est mon premier script).
Ça fonctionne... mais pas trop
Ce que fais ce programme, je regarde le nombre de coeurs disponibles, ensuite je créer un fichier temporaire que j’exécute (pour faire un simulacre de boucle).
Maintenant mes problèmes :
- je voudrais ajouter quelque chose pour que la boucle avec var1 attende que tout les taches qu'elle a lancée soient terminées (sinon je lance plusieurs matlab sur le même coeur -> pas rentable).
- que le disown fonctionne pour de vrai (ce qui ne semble pas être le cas). Comment appliquer de façon certaine le disown à un pid particulier ? Je veux lancer une tâche en tâche de fond puis disown pour pouvoir me déconnecter de l'ordinateur distant sur lequel je travaille.
- comment être certain que chaque matlab soit bien lancé sur un processeur différent ?
Merci beaucoup !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #! /bin/bash # # parmat.sh File Nb_iteration # np=$(nproc) echo "nombre de processeurs disponibles : "$np nbf=$(( $2 / $np)) #number of loops on all processors rmd=$(expr $2 % $np) #remainder # Loop for var1 in $(seq 1 $nbf) do lp=$((var1 * $np - $np + 1)) le=$(($lp + $np - 1)) for var in $(seq $lp $le) do echo $var sed s/pl_id/$var/g <$1 >temp_$var.m /applications/matlab/r2013a/bin/matlab -nodesktop -r temp_$var & #rm temp_$var.m disown done #write something for the loop to wait that all matlabs finished their run. done # Remainder if [ "$rmd" -ne "0" ] then lp=$(($nbf * $np + 1)) le=$(($lp + $rmd - 1)) for var in $(seq $lp $le) do echo $var sed s/pl_id/$var/g <$1 >temp_$var.m /usr/local/MATLAB/R2011b/bin/matlab -nodesktop -r temp_$var & #rm temp_$var.m disown done fi
Partager