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))