1

所以我有一段代码将 9 个变量写入文件:

if (rank == 0) then
    write (filehandle,*) a,b,c,d,e,f,g,h,i
endif

但是代码在不同的机器/编译器上给了我不同的结果:如果我在 Cray 集群上使用 PathScale 编译器,我会得到:

5.444445          0.0000000E+00      0.0000000E+00      1.5010493E-04    
1.4887122E-04      2.5604754E-09      0.0000000E+00     -4.7524699E-07    
0.0000000E+00

(每 x 列后换行)

但是如果我在不同的集群上使用 GNU 编译器,我会得到:

5.444445          0.0000000E+00      0.0000000E+00      1.5010493E-04      1.4887122E-04      2.5604754E-09      0.0000000E+00     -4.7524699E-07     0.0000000E+00

(没有换行符,代码按预期工作)

我的两个编译器的生成文件如下所示:

# PathScale
FC = ftn
OPTFC = -Ofast -cpp
CC = cc
CFLAGS = -O3

# GNU
FC = mpif90
OPTFC = -O3 -funroll-loops -ftree-vectorize -fcray-pointer -cpp
CC = mpicc
CFLAGS = -O3

我需要文件写入像在第二种情况下一样工作。由于系统管理员的限制,我无法在 Cray 上安装不同的编译器。有没有人见过这个/知道问题可能是什么?任何帮助,将不胜感激!

4

0 回答 0