【问题标题】:Openmp Fortran SubroutineOpenmp Fortran 子程序
【发布时间】:2013-04-22 05:07:33
【问题描述】:

我正在尝试使用 Openmp 并行化子例程。 该子程序包含一个连续的过松弛循环,该循环在总 错误是一个共享变量。现在,当我将我调用的部分并行化时 主程序中的子程序,它使错误成为私有变量,然后我不能在主程序中显式地使其成为共享变量。

我正在粘贴代码以供参考。

program test
!$omp parallel
call sub()
!$omp end parallel
end program test

subroutine sub()
do  while(totalerror.ge.0.0001.and.sor.lt.10000)
totalerror=0.0
sor=sor+1
error=0.0
!$OMP DO REDUCTION(+:toterror) REDUCTION(MAX:error) 
! shared (vorticity,strmfn,toterror,error,guess) PRIVATE (i,j,t1,t2)
do i=1,nx
do j=1,ny
guess(i,j)=0.25*((h**2.)*vorticity(i,j)+strmfn(i+1,j)+strmfn(i-    1,j)+strmfn(i,j+1)+strmfn(i,j-1))
totalerror = totalerror + error
error      = max(abs(strmfn(`enter code here`i,j) - guess(i,j)),error)
strmfn(i,j)= strmfn(i,j) + omega*(guess(i,j)-strmfn(i,j))
enddo
enddo
!$OMP END DO
enddo

任何帮助将不胜感激。

【问题讨论】:

  • 这只是一个例子,所以没有定义变量。

标签: fortran subroutine


【解决方案1】:

toterrorerror 不应出现在 shared 子句中,因为它们在 reduction 中。如果您需要shared 版本,请将它们复制到不同的变量中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多