Re: Improve CRC32C performance on SSE4.2
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: John Naylor <johncnaylorls@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-02-17T17:41:09Z
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
On Mon, Feb 17, 2025 at 05:58:01PM +0700, John Naylor wrote: > I tried using branching for the runtime check, and this looks like the > way to go: > - Existing -msse4.2 builders will still call directly, but inside the > function there is a length check and only for long input will it do a > runtime check for pclmul. > - This smooths the way for -msse4.2 (and the equivalent on Arm) to > inline calls with short constant input (e.g. WAL insert lock), > although I've not done that here. > - This can be a simple starting point for consolidating runtime > checks, as was proposed for popcount in the AVX-512 CRC thread, but > with branching my model was Andres' sketch here: > > https://www.postgresql.org/message-id/20240731023918.ixsfbeuub6e76one%40awork3.anarazel.de Oh, nifty. IIUC this should help avoid quite a bit of overhead even before adding the PCLMUL stuff since it removes the function pointers for the runtime-check builds. While this needn't block this patch set, I do find the dispatch code to be pretty complicated. Maybe we can improve that in the future by using macros to auto-generate much of it. My concern here is less about this particular patch set and more about the long term maintainability as we add more and more stuff like it, each with its own tangled web of build and dispatch rules. -- nathan