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 <kloe...@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.genov...@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 > > >