RE: Improve CRC32C performance on SSE4.2
Devulapalli, Raghuveer <raghuveer.devulapalli@intel.com>
From: "Devulapalli, Raghuveer" <raghuveer.devulapalli@intel.com>
To: John Naylor <johncnaylorls@gmail.com>
Cc: "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, "Shankaran, Akash" <akash.shankaran@intel.com>
Date: 2025-02-12T21:02:27Z
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
Hi, > 2. Unfortunately, there is another wrinkle that I failed to consider: If you search > the web for "VirtualBox pclmulqdq" you can see a few reports from not very long > ago that some hypervisors don't enable the CPUID for pclmul. I don't know how > big a problem that is in practice today, but it seems we should actually have > separate checks, with fallback. Sorry I didn't think of this earlier. If someone using a VM that doesn't support a 15 yr old feature, then I would argue performance is not the top priority for them. But that’s up to you. I will work on adding it unless you change your mind. Also, do we really need to have both USE_SSE42_CRC32C and USE_SSE42_CRC32C_WITH_RUNTIME_CHECK features support? The former macro is used to enable running the SSE42 version without a runtime check when someone builds with -msse4.2. The code looks fine now, but the runtime dispatch rules get complicated as we add the PCLMUL and AVX512 dispatch in the future. IMO, this additional complexity is not worth it. The cpuid runtime dispatch runs just once when postgres server is first setup and would hardly affect performance. Let me know what you think. Raghuveer