Hello,
forgive me if my question is a litte bit weak in content and linguistic. I'm only a Hobbyist and english is not my nativ.
I'm trying to compile an App from Einstein@Home for AARCH64 using GCC. Einstein@Home is a DC-Projekt using Boinc. The App mainly calculates FFT's in single-precision using FFTW-lib. After the calculations are finished it send's them back to the Server and validates them against the same Tasks calculated by an different Host. Host's can vary over many different CPU-Architectures.
The Problem is that Task's from my AARCH64-App-Version are mostly above the threshold of the Validator. Compiling the App with the same settings for the AARCH32-Instructions on the same Device delivers Valid results. I've tryed this with many different Compiler-options, GCC-versions, lib-versions, with and without using of NEON. The result is always the same: AARCH64-invalid, AARCH32-valid.
I've readed in the ARMv8-documentions. But can't find somethink that influences the precion of float calcluations in a way that fit's to my Problem.
Sorry for that squishy Question but I don't know where to start to debug this.
Greetings from Germany
Okay, time for a little Update:
The 32bit-Version seems to be affected too. The Error occours if I specify the Arch-Type in GCC to ARMv8-A. Compiled with -march=ARMv7-A all Results get Valid. As soon as I switch to -march=ARMv8-A mostly all of my result's get not validated by the server. The output seems to be slighty different. The differens between both is very little. Any suggestions what can cause this differences?
Hi,
my guess is that one is executed with 32bit precision because of the float operation and another is executed with 64bit (or much wider) precision to use the same execution logics. Of course, the float data would be converted into the double data and re-converted into the float data.
If the assumption would be right, a little difference of the bit data might occur.
Best regards,
Yasuhiko Koumoto.
View all questions in Cortex-A / A-Profile forum