X86 256位块的CRC计算

X86 256位块的CRC计算,x86,crc,intrinsics,X86,Crc,Intrinsics,我在AVX2上的新版本程序中使用256位变量(_m256i类型),并且我使用Intel Intrinsic。以前,64位块用于处理数据。因此,\u mm\u crc32\u u64函数用于CRC计算 crc = _mm_crc32_u64(seed,*chunk_64bit); 但现在,为了提高性能,我想分别计算每个256位块(至少128位块)的CRC。 一种方法可以类似于在循环中应用\u mm\u crc32\u u64,每个块上都有64位值。但我认为这对性能没有好处 在256位块(或128

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

crc = _mm_crc32_u64(seed,*chunk_64bit);
但现在,为了提高性能,我想分别计算每个256位块(至少128位块)的CRC。 一种方法可以类似于在循环中应用\u mm\u crc32\u u64,每个块上都有64位值。但我认为这对性能没有好处


在256位块(或128位)上计算CRC的最佳方法是什么,它比\u mm\u crc32\u u64运算的总速度要快

您可以交错三条
crc32
指令以获得更高的性能。请参阅,以获取实现此目的的代码。您可以更进一步,在多个处理器上运行该代码并组合生成的CRC。

英特尔提供了详细信息。“比crc32\U u64更快”并没有发生,但有一种简单的方法可以使用它(只是将它链接起来)和一种快速的方法(参见链接,crc32与自身并行使用)