[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: shapeit4 and AVX2



Actually here is another way that might work without touching the original source: Compile shapeit4 twice: once with AVX2 and once generic. Then have a tiny wrapper program that passes all arguments to whatever version is supported on this CPU.

If this approach works for shapeit4, that might just be a very generic way that can be adapted to many other tools also.

Fabian


On 05.11.20 20:05, Giulio Genovese wrote:
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
     >



Reply to: