回 帖 发 新 帖 刷新版面

主题:[讨论]一个简单的Open mp 问题

一个最简单的例子,哪个能人帮个小忙。
     两句:do i=1,10
           a(i)=i
         if(a(i)>5) then
          m=m+1
          end if
          end do
    不知道怎么加open mp的语句?[em18]

回复列表 (共4个回复)

沙发

m=m+1
前面加atom子句。

板凳

您说的是atomic命令。我按您说的,m显示的值仍然不对。
program zy
integer i,a(10),m
m=0
!$omp parallel private(i,a)
!$omp do
do i=1,10
   a(i)=i
  if(a(i)>5) then
  !$omp atomic
       m=m+1 
write(*,*) a(i),m

      end if
      end do
!$omp end do
!$omp end parallel
     pause
    end program

3 楼


按您说的,m值仍不能正确显示啊。

4 楼

你得看循环结束后的m值,否则你在循环里使用时可能会冲突,导致你输出的m不是你期待的m:)
而且循环分配也不是12345这样顺序来的,默认是平均分成N份的:)

我来回复

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