Re: Improve CRC32C performance on SSE4.2

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: John Naylor <johncnaylorls@gmail.com>, Andy Fan <zhihuifan1213@163.com>, "Devulapalli, Raghuveer" <raghuveer.devulapalli@intel.com>, Jesper Pedersen <jesperpedersen.db@gmail.com>, Tomas Vondra <tomas@vondra.me>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, "Shankaran, Akash" <akash.shankaran@intel.com>
Date: 2025-06-23T15:29:32Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Include _mm512_zextsi128_si512() in AVX-512 configure probes.

  2. Properly fix AVX-512 CRC calculation bug

  3. Workaround code generation bug in clang

  4. Compute CRC32C using AVX-512 instructions where available

  5. Inline CRC computation for small fixed-length input on x86

  6. Be more paranoid in configure's checks for CRC and POPCNT intrinsics.

Attachments

Nathan Bossart <nathandbossart@gmail.com> writes:
> On Mon, Jun 23, 2025 at 11:10:45AM -0400, Tom Lane wrote:
>> I was imagining just including _mm512_zextsi128_si512() in the
>> code being tested during configure, so that we fall back to
>> the non-AVX-512 code if the compiler is too old to have it.
>> I don't really feel a need to work harder than that.

> Sorry, my note wasn't clear.  Right now, the configure test uses
> _mm512_castsi512_si128(), so we can't just do a simple s/cast/zext.  We'll
> need to make a slightly bigger modification to the test to make sure the
> zext intrinsics are understood.  I agree that we needn't work any harder
> than that.

The code still uses _mm512_castsi512_si128, so I think removing it
from the configure snippet might not be bright.  I adapted what's
there now to get the attached, which builds successfully on my old
compiler.  I still need to check it on a newer compiler.

			regards, tom lane