主题:变量属性-openmp
wtdadam
[专家分:0] 发布于 2011-12-26 11:14:00
在 parallel programming in fortran95 using OpenMP中看到一个例子(P19)
!$omp do
do i=1,1000
b(i)=10*i
a(i)=a(i)+b(i)
!$omp end do
作者说这个例子不会正确运行,请大家给我解释一下,本人初学OpenMP 谢谢
回复列表 (共4个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-12-26 12:35:00
你的end do 在哪儿?
另:还是存在伪共享的风险。。。
板凳
wtdadam [专家分:0] 发布于 2011-12-26 12:43:00
!$omp do
do i=1,1000
b(i)=10*i
a(i)=a(i)+b(i)
[color=FF0000]end do [/color]
!$omp end do
作者指出:the following example will not work correctly using the !$OMP DO/!$OMP END
DO directive-pair for its parallelization:
real(8) :: A(1000), B(1000)
do i = 1, 1000
B(i) = 10 * i
A(i) = A(i) + B(i)
enddo
because the correct value of the matrix B is not ensured until the end of the worksharing
construct !$OMP END DO.不大明白意思,我认为在 循环中默认设置下,循环index为private,那么b(i) 为private
3 楼
cgl_lgs [专家分:21040] 发布于 2011-12-26 14:16:00
i是private的,而没指定的默认是share
4 楼
yeg001 [专家分:14390] 发布于 2011-12-26 18:52:00
!$omp do 语句只会默认紧跟它的循环语句指标为private属性其他默认共享. 这个可以翻翻书,有写的.
i 私有不能导出b(i)是私有. 你希望是私有就要声明.
最推荐但最麻烦的方式是使用: default(none)
我来回复