最近在并行一个CFD程序,用的的是PGI编译器,其中发现一个问题,描述如下:
在执行下面这段代码时:
d_GFS(I,J,K,3) = 0.5*(QLRVL+QRRVR+(PPL+PPR)*SSJ-DFF(3)),与CPU上执行的串行结果不一样
当我将四则运算拆开,分别用变量来表示中间变量的时候结果才对。
d_SI(I,J,K,1) = QLRL
d_SI(I,J,K,2) = QRRR
d_SI(I,J,K,3) = d_SI(I,J,K,1) + d_SI(I,J,K,2) - DFF(1)
d_GFS(I,J,K,1) = 0.5 * d_SI(I,J,K,3)
这里的d_SI(I,J,K,1)、d_SI(I,J,K,2)、d_SI(I,J,K,3) 都是全局内存中的变量
不清楚为什么会这样,希望与用fortran并行的高人指点一下