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 计算的主要内容,如果未能解决你的问题,请参考以下文章