したがって、ファイルに 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
2 番目のケースと同様に、ファイル書き込みが機能する必要があります。システム管理の制約により、Cray に異なるコンパイラをインストールできません。誰かがこれを以前に見たことがありますか / 問題が何であるかを知っていますか? どんな助けでも大歓迎です!