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