[Debian-med-packaging] Bug#1020793: gmap: FTBFS on avx512 host in buster

Andreas Beckmann anbe at debian.org
Mon Sep 26 20:53:16 BST 2022


Source: gmap
Version: 2019-01-24-1
Severity: serious
Tags: ftbfs
Justification: fails to build from source (but built successfully in the past)
Control: fixed -1 2021-02-22+ds-1

Hi,

during a local rebuild of all contrib and non-free packages I noticed
that gmap/buster did FTBFS while it succeeded two years ago.
Comparing the build logs I noticed that the new build targted avx512
while the old build targeted sse42. (The old machine has been
decommissioned inbetween ...)

I cannot reproduce this with the versions found in stretch or bullseye.

gcc -DHAVE_CONFIG_H -I.   -Wdate-time -D_FORTIFY_SOURCE=2  -pthread -DTARGET=\"x86_64-pc-linux-gnu\" -DGMAPDB=\"/var/cache/gmap\" -DMAX_STACK_READLENGTH=300 -DGSNAP=1 -DLARGE_GENOMES=1 -mpopcnt -DHAVE_SSE2=1 -DHAVE_SSSE3=1 -DHAVE_SSE4_1=1 -DHAVE_SSE4_2=1 -DHAVE_AVX2=1 -DHAVE_AVX512=1 -msse2 -mssse3 -msse4.1 -msse4.2 -mavx2 -mbmi2 -mavx512f -mavx512cd -g -O2 -fdebug-prefix-map=/build/gmap-2019-01-24=. -fstack-protector-strong -Wformat -Werror=format-security -c -o gsnapl_avx512-merge-uint8.o `test -f 'merge-uint8.c' || echo './'`merge-uint8.c
merge-uint8.c: In function 'merge_4x4':
merge-uint8.c:72:29: error: incompatible type for argument 1 of '_mm_max_epu64'
   *vMergedB = _mm_max_epu64(vTmp, vMax);
                             ^~~~
In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:53,
                 from merge-uint8.c:15:
/usr/lib/gcc/x86_64-linux-gnu/8/include/avx512vlintrin.h:8037:24: note: expected '__m128i' {aka '__vector(2) long long int'} but argument is of type '__m256i' {aka '__vector(4) long long int'}
 _mm_max_epu64 (__m128i __A, __m128i __B)
                ~~~~~~~~^~~
merge-uint8.c:72:35: error: incompatible type for argument 2 of '_mm_max_epu64'
   *vMergedB = _mm_max_epu64(vTmp, vMax);
                                   ^~~~
In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:53,
                 from merge-uint8.c:15:
/usr/lib/gcc/x86_64-linux-gnu/8/include/avx512vlintrin.h:8037:37: note: expected '__m128i' {aka '__vector(2) long long int'} but argument is of type '__m256i' {aka '__vector(4) long long int'}
 _mm_max_epu64 (__m128i __A, __m128i __B)
                             ~~~~~~~~^~~
make[3]: *** [Makefile:35387: gsnapl_avx512-merge-uint8.o] Error 1



BTW, the package content should not depend on the build host cpu.
The sid package currently has avx2 binaries, if I rebuild it it gets
avx512 binaries, who knows what happens after a binNMU? This can easily
lead to significant performance regressions for some users.

As there seems to be some kind of runtime cpu detection, perhaps a
bigger list of cpu targets could be built and shipped (even targets
not supported by the buildd cpu). For correctness validation,
a separate package containing the tests (if any) could be provided...


Andreas

PS: I have no clue what this package is good for :-)



More information about the Debian-med-packaging mailing list