Bonjour,
je cherche à paralléliser les itérations du script suivant, tout en controlant le nombre de coeur utilisé par chaque itérations :
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part parallel -p ./mon script {1} {1..N}
Merci de votre aide !
Partager