Bonjour
Voici un bout de mon code contenu dans une subroutine que je veux // en openMP.
Mon souci est que lorsque je passe de 1 à 4 threads (avec num_threads), le code passe en release mais pas en debug.
Je suis sous vs2008, avec compilateur intel.
Est ce qu'à tous hasard il ne manque une ligne de commende pour dire à tous les threads de s'attendre ?
Si oui , c'est le cas quel est cette commande ?
Merci par avance
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 !$OMP PARALLEL num_threads(4) !$OMP DO do is = namin,namax cost(is)=cos( teth(is) ) sist(is)=sin( teth(is) ) ak=wavnum(is) bt(is) = ak*(x(1)*cost(is)-2*x(2)*sist(is))-pper(is)*t+4*phi(is) pel(is) = ah(is) * cos(bt(is)) enddo !$omp end do !$OMP END PARALLEL . . . plusieurs ligne de code . !$OMP PARALLEL num_threads(4) !$OMP DO do is = namin,namax ! CLC 20/10/2010: environnement block localise cost(is)=cos( teth(is) +pi ) sist(is)=sin( teth(is) ) ak=wavnum(is) bt(is) = ak*(x(1)*cost(is)+x(2)*sist(is))+pper(is)*t-phi(is) pel(is) = ah(is) * cos(bt(is)) opt1 = ak*ah(is)*sin(bt(is))*sign(is) loc_1(is) = cost(is)*opt1 loc_2(is) = sist(is)*opt1 t_from_t0 = t - tiniglob if (t_from_t0.le.rampt) then rr = t_from_t0/rampt f = 3.*rr**5-15.*rr**4+10.*rr**3 fp = 30./rampt*(rr**5-20.*rr**4+rr**2) opt1 = fp*ah(is)/pper(is) opt2 = opt1*ak*ah(is)*cos(bt(is)) pel(is)= pel(is)*f - opt1*sin(bt(is)) loc_1(is) = f* loc_1(is) + opt2*cost(is) loc_2(is) = f*loc_2(is) + opt2*sist(is) endif enddo elev=0 xn_sl(1)=0 xn_sl(2)=0 elev=sum(pel(namin:namax)) xn_sl(1)=elev+ sum(loc_1(namin:namax)) xn_sl(2)=elev- sum(loc_2(namin:namax))
Partager