在Fortran中获取OpenMP线程中的最大值

时间:2019-02-17 16:42:52

标签: fortran openmp

我有一个do循环,该循环更新T值并计算迭代期间的最大差异,称为dumax。

我需要初始化dumax,因此将其设置为

firstprivate

然后我将无法使用:

reduction(max: dumax)

归约运算符似乎接受私有变量。 那么在结束并行操作之前如何获得dumax的最大值?

我的程序如下所示:

DUMAX=0.0D0
!$OMP PARALLEL DEFAULT(PRIVATE), SHARED(T_R, T_B), FIRSTPRIVATE(DUMAX)
            !$OMP DO 
            DO I=2, N-1, 2
                DO J=2, N-1, 2
                    T_OLD=T_B(I,J)
                    T_B(I,J)=0.25*(T_R(I,J-1)+T_R(I,J+1)+T_R(I+1,J)+&
                                    T_R(I-1,J)-DX**2*S(I,J))
                    DUMAX=MAX(DUMAX, ABS(T_OLD-T_B(I,J)))
                END DO
            END DO
            !$OMP END DO 
!$OMP END PARALLEL

1 个答案:

答案 0 :(得分:1)

您不应将dumax设置为firstprivate。归约变量应为shared。使其共享,然后使用reduction(max: dumax)。您的初始化将保留。