Dear Fabian,
Thank you for your answer. I assume there is no way to leave the AVX2
support restricted to the amd64 build only then.
I do really appreciate all the efforts to get programs like shapeit4 in
a debian package format. It is a great gift to the community of
bioinformaticians.
I'll see if I can get the author to take on your suggestion of including
the selection of AVX2 at runtime, which I think is the right approach.
However, in my previous experience the author has been quite non-responsive.
Giulio
On Thu, Nov 5, 2020 at 2:46 PM Fabian Klötzl <kloetzl@evolbio.mpg.de
<mailto:kloetzl@evolbio.mpg.de>> wrote:
Hi all,
I agree that most CPUs used for scientific computing these days support
AVX2. However, that is going to change. For instance, Apple is
switching
to ARM based CPUs. MacBooks are quite popular among
bioinformaticians so
so any tool author would want to support non-x86 CPUs. I also believe
that other manufacturers will follow Apples lead to Arm.
That said, how can one support different instruction sets and get the
optimal performance? Well, depending on the code, it can be simple
or hard.
If there is just one function which needs the boost from the
instruction
set, one can simply add an __attribute__((target_clones("…"))) [1]
However, one can also compile different sections of the code with
different optimizations and then use __builtin_cpu_supports() to decide
at runtime which version should be used. I used that strategy with
ifuncs for phylonium [2]. This way is more difficult and I haven't seen
a good writeup of it yet.
Unfortunately both ways require quite a bit work from the upstream
author. If someone knows a better way, let me know.
Best,
Fabian
1: https://lwn.net/Articles/691932/
2: https://salsa.debian.org/med-team/phylonium
On 05.11.20 15:02, Dylan Aïssi wrote:
> Dear Giulio,
>
> I am CCing the public Debian Med mailing list and Michael Crusoe who
> can help to improve the Debian package in order to have an AVX2
binary
> optimized.
>
> Le jeu. 5 nov. 2020 à 15:20, Giulio Genovese
> <giulio.genovese@gmail.com <mailto:giulio.genovese@gmail.com>> a
écrit :
>>
>> I have noticed you are the author of the following patch for the
shapeit4 debian package:
>>
https://salsa.debian.org/med-team/shapeit4/-/blob/master/debian/patches/use_shared_libs.patch
>>
>> I noticed that this causes shapeit4 to not use the AVX2
instruction set:
>> -CXXFLAG=-O3 -mavx2 -mfma
>> +#CXXFLAG=-O3 -mavx2 -mfma
>> #Portable version without avx2 (much slower)
>> -#CXXFLAG=-O3
>> -LDFLAG=-O3
>> +CXXFLAG=$(CPPFLAGS) $(CXXFLAGS) -O3
>> +LDFLAG=$(LDFLAGS) -O3
>>
>> This causes shapeit4 to run significantly slower than it could
on most systems where this package would be installed.
>>
>> I assume that the reason for this is that older CPUs do not
support AVX2. Is it really important though to support these old
systems? I doubt anybody would run such a tool on old machines.
However, there might be reasons for this decision that I might be
missing so I am curious to know the goals of this modification.
>>
>
> You are right, this is the Debian policy to provide binaries that
> respect the architecture baseline [1] to support older CPUs. And you
> are also right when you said nobody uses this tool on this kind of
> outdated CPU. Personally, I don't have time to work on that but I
> guess someone else in the Debian Med team would be interested?
>
> Best,
> Dylan
>
> [1] https://wiki.debian.org/ArchitectureSpecificsMemo#amd64
>