回 帖 发 新 帖 刷新版面

主题:变量属性-openmp

在 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个回复)

沙发

你的end do 在哪儿?
另:还是存在伪共享的风险。。。

板凳

!$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 楼

i是private的,而没指定的默认是share

4 楼

!$omp do 语句只会默认紧跟它的循环语句指标为private属性其他默认共享. 这个可以翻翻书,有写的.
i 私有不能导出b(i)是私有. 你希望是私有就要声明.
最推荐但最麻烦的方式是使用: default(none)

我来回复

您尚未登录,请登录后再回复。点此登录或注册