主题:[讨论]一个简单的Open mp 问题
yunyunzhou
[专家分:50] 发布于 2011-08-17 09:36:00
一个最简单的例子,哪个能人帮个小忙。
两句:do i=1,10
a(i)=i
if(a(i)>5) then
m=m+1
end if
end do
不知道怎么加open mp的语句?[em18]
回复列表 (共4个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-08-17 13:32:00
m=m+1
前面加atom子句。
板凳
yunyunzhou [专家分:50] 发布于 2011-08-17 15:55:00
您说的是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 楼
yunyunzhou [专家分:50] 发布于 2011-08-17 16:56:00
按您说的,m值仍不能正确显示啊。
4 楼
cgl_lgs [专家分:21040] 发布于 2011-08-17 20:07:00
你得看循环结束后的m值,否则你在循环里使用时可能会冲突,导致你输出的m不是你期待的m:)
而且循环分配也不是12345这样顺序来的,默认是平均分成N份的:)
我来回复