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

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

不,只是添加不会做的工作。

您链接的文章告诉我们如何做到这一点:

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

为了覆盖最终结果的大小,那么0xffffffff在最终计算之后只做crc32 = ~crc32 & 0xffffffff

引用你的文章提到的英特尔白皮书 ,

我们使用更快的方法将任意长度的缓冲区拆分为多个较小的固定大小的段,而不是使用传统的线性方法计算整个消息的CRC,并行计算这些段上的CRC,然后重新计算使用段的部分CRC的有效CRC

也,

CRC的最终重组增加了开销, 可以通过Nehalem微体系结构的查找表来实现 – 我们展示了如何使用尽可能少的表来实现这一点,同时在大小范围内提供出色的整体性能。 Westmere微体系结构中的PCLMULQDQ指令允许在没有查找表的情况下有效地重组CRC。 本文通过实际代码示例对各种方法进行了详细说明。

因此,您需要详细研究本文: 使用CRC32指令对iSCSI多项式进行快速CRC计算