I do computing with one fortran program and I have two machines:
- one with an Intel Xeon E5-2670 (Linux Mint 21.2 x86_64, Kernel: 5.15.0-86-generic)
- and the other with an AMD 7700X (Linux Mint 21.3 x86_64, Kernel: 6.5.0-35-generic).
I compile the same program on the same gcc compiler version 11.4.0 (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0) with the same flags (FFLAGS = -O0 -g
, but with other flags the problem remains), but my results on these computers always diverge, and systematically, some arrays of results coincide, but most do not. Regardless of the digit capacity of the number (…E+04 or E-03), the last few digits differ in many arrays.
The command gcc -Q -v /dev/null
output is the same for both machines:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04'
--with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2
--prefix=/usr --with-gcc-major-version-only
--program-suffix=-11 --program-prefix=x86_64-linux-gnu-
--enable-shared --enable-linker-build-id --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --libdir=/usr/lib
--enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new
--enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie
--with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto
--enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet
--with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32
--enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
--with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
The Intel machine has DDR3 with ECC support, but I think this is clearly not the problem, I changed the BIOS settings (Patrol Scrub, Demand Scrub), but the results did not change.
What could be the reason for the difference in the calculation results and how can I try to remove it? I want to achieve a reproduction of the result, I’m trying to migrate my work to a more modern AMD machine.
1