AVX2 上的 256 位 CRC 计算

256 bit CRC calculation on AVX2

Intel SSE4.2 内部函数存在 64 位 CRC 函数。

unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v)

但是我在 AVX2 内在函数上找不到 256 位版本的 CRC 计算。 我在我的程序中使用 256 位变量 (__m256i),所以我想计算超过 256 位的 crc(或散列)。我如何使用 Intel AVX2 执行此操作?

_mm_crc32_u64 不是 SIMD 内在函数,尽管它在理论上是 SSE4.2 的一部分——它只是一个对 64 位值进行操作的普通标量指令。所以谈论 128 位或 256 位 SIMD 版本是没有意义的——你只需要在一个循环中将它应用到一个无符号 64 位值的数组。

有关各种 x86 CRC32 指令和内在函数的更完整解释,请参阅 this answer