风平老涡 发表于 2022-8-24 20:10
好像不行。因为该包中有涉及变化的全局变量,可能会在并行中引起racing。
12138世界 发表于 2022-8-25 16:14
有没有什么修改的策略,使之能并行
1.43 MB, 下载次数: 5
12138世界 发表于 2022-8-26 16:24
使用了多线程的FM_parallel包,没有出现并行的报错,但是输出的结果不对
INTEGER :: ppi,ppj,i
s = 1.0D0
!----------------------------test for FM package----------------------------------!
!$omp parallel do private(ppi,CoAMP_HELICITY)
do ppi = 1,6
write(str,*) s
AP_sqs(ppi)=TO_FM(str)
write(str,*) pin(ppi)
AP_pin(ppi)=TO_FM(str)
write(str,*) pin(ppi)
AP_pout(ppi)=TO_FM(str)
var(ppi) = AP_pin(ppi)**2+AP_pout(ppi)**2+AP_sqs(ppi)**2
CoAMP_HELICITY = TO_DP(var(ppi))
! CoAMP_HELICITY = pin(ppi)**2+pin(ppi)**2+s**2
write(*,*) ppi,s,pin(ppi),CoAMP_HELICITY
end do
!$OMP END parallel do
!--------------------------------------------------------------------------------!
12138世界 发表于 2022-8-29 10:37
上面这个问题,将str设为private,可以解决,但是若这段程序是在一个子程序中,如何将str再次设置为private ...
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |