256 位块的 CRC 计算

Posted

技术标签:

【中文标题】256 位块的 CRC 计算【英文标题】:CRC Calculation for 256 bit chunks 【发布时间】:2017-04-12 11:06:26 【问题描述】:

我在 AVX2 上我的程序的新版本中使用 256 位变量(__m256i 类型),并且我使用 Intel 内在函数。以前,64 位块用于处理数据。因此,_mm_crc32_u64函数用于CRC计算。

crc = _mm_crc32_u64(seed,*chunk_64bit);

但是现在,为了提高性能,我想分别计算每个 256 位块(至少 128 位块)的 CRC。 一种方法可以是在循环中应用 _mm_crc32_u64,每个块有 64 位值。但我认为这对性能没有好处。

在 256 位块(或 128 位)上计算 CRC 的最佳方法是什么,比 _mm_crc32_u64 操作总体上快?

【问题讨论】:

英特尔有详细信息here。 “比 _mm_crc32_u64 更快”不会发生,但是有使用它的简单方法(只需链接它)和快速方法(参见链接,crc32 与自身并行使用) 【参考方案1】:

您可以交错三个crc32 指令以获得更高的性能。有关执行此操作的代码,请参阅 this answer。您可以更进一步,在多个处理器上运行该代码并组合生成的 CRC。

【讨论】:

以上是关于256 位块的 CRC 计算的主要内容,如果未能解决你的问题,请参考以下文章

Python计算校验文件的MD5SHA1SHA256和CRC32

用 C 语言在消息的开头使用 CRC 哈希计算 CRC32

主存与Cache间组相联映射计算

CRC32加密算法的识别

CRC16校验码如何计算

CRC32的计算方法