Bonjour,
je cherche à paralléliser les itérations du script suivant, tout en controlant le nombre de coeur utilisé par chaque itérations :

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/bash
 
###################################
## Exploration of parameter space :
###################################
 
Npoints=100
per_min=30
per_max=30
alpha_min=0
alpha_max=4
ind=1 ### 0 if linear in lambda, and 1 if linear in k.
 
 
###### Generation of the lambda values
TEXTE1=$(cat Lambda_vector_gene.m | grep "Lambda_min =")
TEXTE2="Lambda_min = ""$per_min"
sed -i "s/${TEXTE1}/${TEXTE2}/" Lambda_vector_gene.m
TEXTE1=$(cat Lambda_vector_gene.m | grep "Lambda_max =")
TEXTE2="Lambda_max = ""$per_max"
sed -i "s/${TEXTE1}/${TEXTE2}/" Lambda_vector_gene.m
TEXTE1=$(cat Lambda_vector_gene.m | grep "Ind =")
TEXTE2="Ind = ""$ind"
sed -i "s/${TEXTE1}/${TEXTE2}/" Lambda_vector_gene.m
matlab -nodesktop -nosplash -r Lambda_vector_gene
TEXTE1=$(cat Lambda_vector_gene.m | grep "N =")
TEXTE2="N = ""$Npoints"
sed -i "s/${TEXTE1}/${TEXTE2}/" Lambda_vector_gene.m
matlab -nodesktop -nosplash -r Lambda_vector_gene
 
echo "Lambda alpha Sigma Coeff" > sigma_values.data
fichier="Lambda_vector.txt"
 
#for ((L=$per_min; L<=$per_max; L+=2))
 
### Main Loop
for L in $(<$fichier)
do
	for ((A=$alpha_min; A<=$alpha_max; A+=2))
	do
		echo "L = " "$L"
		echo "A = " "$A"
		dir="stability_L""$L""_A_""$A"
		mkdir $dir
		cp dun_stability.par run.bash exp_fit.m $dir
		cp rescal/src/genesis rescal/src/rescal $dir
		cd $dir	
 
		### Run Rescal
		TEXTE1=$(cat dun_stability.par | grep "Csp_template")
		TEXTE2="Csp_template = WAVES_3D(""$L"",""$A"",4,30)"
		sed -i "s/${TEXTE1}/${TEXTE2}/" dun_stability.par
		./run.bash
 
 
		### Run Matlab
 
		TEXTE1=$(cat exp_fit.m | grep "Lambda =")
		TEXTE2="Lambda = ""$L"
		sed -i "s/${TEXTE1}/${TEXTE2}/" exp_fit.m
		TEXTE1=$(cat exp_fit.m | grep "alpha =")
		TEXTE2="alpha = ""$A"
		sed -i "s/${TEXTE1}/${TEXTE2}/" exp_fit.m
		matlab -nodesktop -nosplash -r exp_fit
 
		### Preparation for data reading
		head -n 1 sig_save.txt >> ../sigma_values.data
		cd ../
 
	done
 
done
La commande GNU parallel me parait assez approriée pour ça mais je n'ai pas réussit à comprendre comment m'en servir sur cet example. Etant donné que c'est une double boucle for, dont une des itérations lit la variable utile dans un fichier, ça faisait un peu trop de difficultés pour moi d'un coup. Pour l'instant, il me semble que je devrais écrire un script prenant en variable d'imput L et A, et ensuite entrer une commande du style
Code : Sélectionner tout - Visualiser dans une fenêtre à part
parallel -p ./mon script {1} {1..N}
.

Merci de votre aide !