皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

PostgreSQL 转向 AVX-512 进行 CRC32 计算:速度提高 3 倍

除了最近对 Linux 上的 PostgreSQL 数据库服务器异步 I/O 批处理模式的可选 IO_uring 支持外,本周还合并了另一项令人兴奋的性能改进。本周登陆 PostgreSQL 数据库服务器支持使用 AVX-512 指令进行 CRC32C 计算。

在功能强大的 AMD 和 Intel 处理器上利用 AVX-512 指令可以为每个流行的开源数据库的 CRC32C 循环冗余校验代码路径带来一些巨大的性能改进。将此 AVX-512 用法添加到 CRC32C 计算的提交解释了:

“使用 AVX-512 指令计算 CRC32C(如果可用

)CRC32C 在 x86 上的先前实现依赖于 SSE 4.2 扩展中的本机 CRC32 指令,该指令一次最多运行 8 个字节。我们可以通过在 SIMD 寄存器上使用无进位乘法来获得显著的加速,每次循环迭代处理 64 字节。较短的 inputs 回退到普通的 CRC 指令。在 Intel Tiger Lake 硬件 (2020) 上,64 到 112 字节输入的 CRC 速度提高了 50%,256 字节的 CRC 速度提高了 3 倍。

512 位寄存器上的 VPCLMULQDQ 指令自 2019 年起在 Intel 硬件上可用,自 2022 年起在 AMD 上可用。128 位寄存器有一个较旧的变体,但至少在 Zen 2 上,对于短输入,它的性能比正常的 CRC 指令差。

我们现在必须进行运行时检查,即使对于以 SSE 4.2 为目标的构建也是如此。这在实践中对于 WAL 来说并不重要(可以说是最关键的情况),因为自提交 e2809e3 以来,使用 20 字节 WAL 标头的最终计算在针对
该扩展时被内联和展开。与两次直接函数调用相比,测试表明,在对几十个字节执行间接
函数调用,然后在 20 字节的恒定输入上执行内联指令时,性能相同或略快。

使用此 AVX-512 CRC32C 代码在 Intel Tiger Lake 上测试时,速度提高 50% 到 3 倍!看看具有更好的 AVX-512 支持的较新的 Intel Xeon 服务器处理器是否有更显着的收益,或者具有广泛 AVX-512 支持的 AMD Zen 4 和 Zen 5 处理器是否有更显着的收益,这将是一件有趣的事情。

PostgreSQL 转向 AVX-512 进行 CRC32 计算:速度提高 3 倍

这是开源 PostgreSQL 18 数据库服务器的又一次重大改进,下一个主要功能版本将于 9 月左右发布。

转自 PostgreSQL Turns To AVX-512 For CRC32 Computations: Up To 3x Faster – Phoronix

登录

注册