fortran并行化时遇到的问题

最近在并行一个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) = QR
RR
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并行的高人指点一下

因为浮点运算是不可结合的。这很可能是pgi编译下第一种方式生成的代码浮点运算的顺序与CPU编译器生成的不一样。一般这种情况没法说谁对谁错。但如果计算结果因为这么一点小误差也会被放大成很大的误差的话,这很可能是说明本身的模拟不稳定:例如CFL数太大。

请问楼主 这个问题 现在解决了吗?