Re: autovectorize page checksum code included elsewhere - Mailing list pgsql-hackers

From John Naylor
Subject Re: autovectorize page checksum code included elsewhere
Date
Msg-id CANWCAZZYrv63Z4u2vQ7EbHqPDRNsJwZVm9yTnefBr7_ofMfOmw@mail.gmail.com
Whole thread Raw
In response to Re: autovectorize page checksum code included elsewhere  (Nathan Bossart <nathandbossart@gmail.com>)
Responses Re: autovectorize page checksum code included elsewhere
Re: autovectorize page checksum code included elsewhere
List pgsql-hackers
On Thu, Nov 23, 2023 at 11:51 PM Nathan Bossart
<nathandbossart@gmail.com> wrote:
>
> On Thu, Nov 23, 2023 at 05:50:48PM +0700, John Naylor wrote:
> > On Thu, Nov 23, 2023 at 1:49 AM Nathan Bossart <nathandbossart@gmail.com> wrote:
> >> One half-formed idea I have is to introduce some sort of ./configure flag
> >> that enables all the newer instructions that your CPU understands.
> >
> > That's not doable,
>
> It's not?

What exactly would our build system do differently with e.g.
"-march=native" (which is already possible for people who compile
their own binaries, via CFLAGS), if I understand you correctly?

> > but we should consider taking advantage of
> > x86-64-v2, which RedHat 9 builds with. That would allow inlining CRC
> > and popcount there.
>
> Maybe we have something like --with-isa-level where you can specify
> x86-64-v[1-4] or "auto" to mean "build whatever the current machine can
> handle."

That could work, but with the below OS's, it should work
automatically. Also, we may not be many years off from the day we can
move our baseline as well, such that older buildfarm members (if we
have any) would need to pass --disable-isa-extensions, but that may be
pushing things too much for too little benefit. *

> I can imagine packagers requiring v2 these days (it's probably
> worth asking them), and that would not only allow compiling in SSE 4.2 on
> many more machines, but it would also open up a path to supporting
> AVX2/AVX512 and beyond.

A brief look found these OS's are moving / have moved to x86-64-v2:

Redhat 9 [1][2]
OpenSuse ALP [3]
OpenSuse Tumbleweed [4]

Debian considers it a bug if the package fails to build with
x86-64-v2, but they haven't changed their baseline requirement. [5]

> > Not sure how to detect that easily.
>
> I briefly looked around and didn't see a portable way to do so.  We might
> have to exhaustively check the features, which doesn't seem like it'd be
> too bad for x86_64, but I haven't looked too closely at other
> architectures.

Sorry, I wasn't clear, I mean: detect that a packager passed
"-march=x86_64-v2" in the CFLAGS, so that a symbol in header files
would cause inlining of functions containing certain intrinsics.
Exhaustively checking features defeats the purpose of having an
industry-standard shorthand, and says nothing about what the package
does or does not require of the target machine.

* Note: I have seen the threads with the idea of compiling multiple
entire binaries, and switching at postmaster start. I think it's a
good idea, but I also suspect detecting flags from the packager is an
easier intermediate step.

[1]
https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level
[2] https://access.redhat.com/solutions/6833751
[3] https://news.opensuse.org/2022/09/26/alp-architecture-baselevel-x86_64-v2/
[4] https://news.opensuse.org/2022/11/28/tw-to-roll-out-mitigation-plan-advance-microarchitecture/
[5] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=983926



pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] patch: change magic constants to DEFINE value for readability.
Next
From: John Naylor
Date:
Subject: Re: autovectorize page checksum code included elsewhere