求助:Fortran代码采用openmp并行计算结果出错
C/C++ code
!$OMP PARALLEL DO
DO I=2,100
DELT(I)=RAISESTEP
CTIME(I)=CTIME(I-1)+DELT(I-1)
SOURCE(I)=AMP*CTIME(I)/RAISETIME
ENDDO
请问这是什么原因呢?
我发现双核计算,第一个核计算的结果是对的,第二个计算的结果不对。
ctime的计算后面需要前面的结果,需要在什么地方家atomic呢?
求CTIME(I)这个时候用到了 CTIME(I-1),而并行的时候 CTIME(I-1)不一定已经计算出来了,所以可以用并行求前缀和的方法,加atomic也是可以的 不过加了的话很大部分都是串行的了