phyml icon indicating copy to clipboard operation
phyml copied to clipboard

build with --disable-native fails

Open rekado opened this issue 2 years ago • 3 comments

After configuring with --disable-native the build fails:

gcc  -I. -I..     -std=c99 -O3 -fomit-frame-pointer -funroll-loops -Wall -Winline -finline  -MT sse.o -MD -MP -MF .deps/sse.Tpo -c -o sse.o sse.c
In file included from utilities.h:43,
                 from sse.h:18,
                 from sse.c:14:
sse.c: In function ‘SSE_Lk_Core_One_Class_Eigen_Lr’:
/gnu/store/094bbaq6glba86h1d4cj16xhdi6fk2jl-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/include/pmmintrin.h:86:1: error: inlining failed in call to ‘always_inline’ ‘_mm_hadd_pd’: target specific option mismatch
   86 | _mm_hadd_pd (__m128d __X, __m128d __Y)
      | ^~~~~~~~~~~
sse.c:122:8: note: called from here
  122 |   _x = _mm_hadd_pd(_x,_x);
      |        ^~~~~~~~~~~~~~~~~~
make[2]: *** [Makefile:1215: sse.o] Error 1
make[2]: *** Waiting for unfinished jobs....

rekado avatar Aug 08 '22 08:08 rekado

Sorry for the (very) late response... I'm aware of this issue. Is there any specific reason why you would use this compilation option?

stephaneguindon avatar Aug 31 '22 08:08 stephaneguindon

We're building generic binaries for users of GNU Guix. For a distribution we cannot assume that the CPU features of the build servers are also available on the users' CPUs.

Perhaps in the long run function multi-versioning would be an option? https://hpc.guix.info/blog/2022/01/tuning-packages-for-a-cpu-micro-architecture/

rekado avatar Aug 31 '22 08:08 rekado

I see... Versioning with SIMD extensions is giving me nightmares.

The "problem" with the --disable-native option is that one cannot completely discard SSE as some core functions of glibc rely on it. I just posted a commit whereby compilation of the SSE and AVX parts of the code of PhyML is discarded when using this option. I hope this will do the trick on your side.

ps : The core of PhyML calculation rests on a couple of functions that already have AVX and SSE versions. It is thus already relying on "function multi-versioning" in a sense.

stephaneguindon avatar Aug 31 '22 10:08 stephaneguindon