平行折叠 + 减少不起作用

Parallel collapse + reduction not working

提问人:Pablo Grobas Illobre 提问时间:11/1/2023 更新时间:11/1/2023 访问量:45

问:

我正在尝试并行化两个嵌套循环,但折叠子句失败了。

嘿,我正在尝试并行化这两个嵌套循环,以计算两个积分(int_coulomb 和 int_overlap)。当我应用 collapse 子句时,我的问题就来了,然后我的代码无法从 in 序列中恢复结果。

此外,我还添加了使用所选数量的处理器启动 fortran 程序(并行编译)的可能性。如果我做 ./program input.inp -omp 1,我的代码都不起作用。

另一方面,当我消除 collapse 子句时,我的代码比串行慢,但给了我正确的结果。

This is my code:

!$omp parallel do private(i,j,r,dist,invdst,sf,sf0,screen_pot) &
!$omp collapse(2) & 
!$omp reduction(+:int_coulomb,int_overlap) 
!    aceptor
     do i = 1, aceptor%n_points_reduced
        do j = 1, donor%n_points_reduced

           r(1) = (aceptor%xyz(1,i)-donor%xyz(1,j))
           r(2) = (aceptor%xyz(2,i)-donor%xyz(2,j))
           r(3) = (aceptor%xyz(3,i)-donor%xyz(3,j))
!
           dist = dsqrt(DOT_PRODUCT(r,r))
!
!          Skip when grid points are coincident to avoid instabilities
           if (dist.le.1.0e-14) then
              int_coulomb = int_coulomb + zero
              int_overlap = int_overlap + zero
           else
              invdst = one/dist
!
!             Screening function 
              sf  = dist / QMscrnFact

              sf0        = erf(sf)
              screen_pot = sf0
!   
!             Integrate charges as rho_aceptor * rho_donor * (1/dist) * screening
!               --> the density has been already weigthed by the cube volume
              int_coulomb = int_coulomb +&
                            aceptor%rho_reduced(i) * donor%rho_reduced(j) * invdst * screen_pot
!   
!             Aceptor-donor overlap 
              int_overlap = int_overlap +&
                            aceptor%rho_reduced(i) * donor%rho_reduced(j)
!   
           endif      
!
        enddo
     enddo
!$omp end parallel do`

有什么想法吗?

并行处理 嵌套 Fortran Do并行

评论

2赞 Ian Bush 11/1/2023
如果没有一个最小的、可重复的例子,就很难理清任何事情。但至少请告诉我们“无法从连续剧中恢复结果”是什么意思。你得到什么数字?你怎么知道它们与算法的预期准确性不同?有多少个线程?并行结果是否可重复?你怎么知道序列结果是正确的?
1赞 Ian Bush 11/1/2023
从您在这里所拥有的内容来看,不可能说“我添加了使用所选数量的处理器启动 fortran 程序(并行编译)的可能性”。另请注意,应读作“线程”,而不是处理器。区别很重要。
0赞 Vladimir F Героям слава 11/1/2023
欢迎,我建议参加参观。我支持伊恩写的请求。我们需要更多细节。当您展示一些代码时,至少应该声明所有符号。通常,一个完整的最小可重现示例是必要的。另请参阅如何提问
0赞 Vladimir F Героям слава 11/1/2023
此外,您应该提及您正在使用的编译器版本。

答: 暂无答案