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 ?

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
Merci beaucoup !