Re: Improve CRC32C performance on SSE4.2
John Naylor <johncnaylorls@gmail.com>
From: John Naylor <johncnaylorls@gmail.com>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: "Devulapalli, Raghuveer" <raghuveer.devulapalli@intel.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, "Shankaran, Akash" <akash.shankaran@intel.com>
Date: 2025-03-10T08:48:31Z
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 →
-
Include _mm512_zextsi128_si512() in AVX-512 configure probes.
- ccd5bc93fdfe 18.0 landed
-
Properly fix AVX-512 CRC calculation bug
- 43da394304fb 18.0 landed
-
Workaround code generation bug in clang
- f83f14881c7a 18.0 landed
-
Compute CRC32C using AVX-512 instructions where available
- 3c6e8c123896 18.0 landed
-
Inline CRC computation for small fixed-length input on x86
- e2809e3a1015 18.0 landed
-
Be more paranoid in configure's checks for CRC and POPCNT intrinsics.
- fdb5dd6331e3 18.0 cited
Attachments
- v13-0001-Add-a-Postgres-SQL-function-for-crc32c-benchmark.patch (text/x-patch) patch v13-0001
- v13-0002-Inline-CRC-computation-for-fixed-length-input.patch (text/x-patch) patch v13-0002
- v13-0003-Attempt-to-make-benchmark-more-sensitive-to-late.patch.nocfbot (application/octet-stream)
On Tue, Mar 4, 2025 at 2:11 AM Nathan Bossart <nathandbossart@gmail.com> wrote: > > Overall, I wish we could avoid splitting things into separate files and > adding more header file gymnastics, but maybe there isn't much better we > can do without overhauling the CPU feature detection code. I wanted to make an attempt to make this aspect nicer. v13-0002 incorporates deliberately compact and simple loops for inlined constant input into the dispatch function, and leaves the existing code alone. This avoids code churn and saves vertical space in the copied code. It needs a bit more commentary, but I hope this is a more digestible prerequisite to the CLMUL algorithm -- as a reminder, it'll be simpler if we can always assume non-constant input can go through a function pointer. I've re-attached the modified perf test from v12 just in case anyone wants to play with it (v13-0003), but named so that the CF bot can't find it, since it breaks the tests in the original perf test (It's not for commit anyway). Adding back AVX-512 should be fairly mechanical, since Raghuveer and Nathan have already done the work needed for that. -- John Naylor Amazon Web Services