计算大型CRC32的正确方法是什么?

时间:2012-04-26 12:57:27

标签: c x86-64 sse crc32

Here是一篇文章,描述了如何使用现代x86-64处理器中的内置CRC32指令计算最大1024字节的CRC32。但是,我需要计算超过1024字节的CRC32。计算每个1024字节块的CRC32并最终求和它们是否是正确的方法,还是不正确?如果是这样,那么正确的方法是什么?

2 个答案:

答案 0 :(得分:5)

引用您文章提到的intel white paper

  

而不是用传统的计算整个消息的CRC   线性方法,我们使用更快的方法来分割任意长度   缓冲到许多较小的固定大小的段,计算CRC   这些段并行,然后是重组步骤   使用段的部分CRC计算有效CRC

此外,

  

CRC的最终重组增加了开销,可以增加   在Nehalem微体系结构上使用查找表实现 - 我们   给出了如何使用尽可能少的表来执行此操作   在尺寸范围内具有出色的整体性能。 PCLMULQDQ   Westmere微体系结构的教学可以提高效率   没有查找表的CRC的重组。各种方法都是   本文用实际代码示例对此进行了详细解释。

所以你需要详细研究这篇论文: 使用CRC32指令的iSCSI多项式的快速CRC计算

答案 1 :(得分:4)

不,只是添加不会完成这项工作。

您链接的文章告诉我们如何操作:

  

一次计算的CRC输出用作初始CRC   下一次计算[...]

为了覆盖最终结果大于0xffffffff的情况,只需在最终计算后执行crc32 = ~crc32 & 0xffffffff