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。
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。