2017-04-11 80 views
0

Intel SSE4.2内部函数中存在64位CRC函数。AVX2上的256位CRC计算

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

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

回答

1

_mm_crc32_u64不是一个SIMD内在的,即使它在概念上是SSE4.2的一部分 - 它只是一个正常的标量指令,它对64位值进行操作。因此,谈论128位或256位SIMD版本是没有意义的 - 您只需将其应用于一个无符号64位值的数组中。

请参阅this answer以更全面地了解各种x86 CRC32指令和内部函数。

+0

在这种情况下,我应该总结来自每个4回路的crc值吗? 因为我想将256位表示为一个crc值。 –

+0

您不应该添加CRC,您应该按照正确的顺序累积地对所有正在生成的数据进行CRC校验。如果这仍然不清楚,那么你可能需要开始一个新问题,解释你想要做什么,并且包括现有代码的相关部分。 –

+0

另一方面,像_mm_crc32_u64函数那样将子操作(移位,XOR,MOD2等)应用于256位向量是否合乎逻辑? –