2017-04-12 98 views
0

我在AVX2的新版本程序中使用256位變量(__m256i類型),並使用了Intel內在函數。之前,使用64位塊來處理數據。所以,_mm_crc32_u64函數用於CRC計算。用於256位塊的CRC計算

crc = _mm_crc32_u64(seed,*chunk_64bit); 

但現在,爲了提高性能,我想計算CRC每個256個數據塊(至少128個數據塊)seperately。 一種方法可以像這樣在每個塊上應用_mm_crc32_u64在64位值的循環中。但我認爲這在性能方面並不有利。

什麼是計算超過256位塊(或128位)的CRC的最佳方法,它總共比運行速度快_mm_crc32_u64

+0

Intel有詳細信息[here](http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/crc-iscsi-polynomial-crc32-instruction-paper .PDF)。 「比_mm_crc32_u64更快」不會發生,但有一種天真的方式來使用它(只是鏈接它)和快速的方式(請參閱鏈接,與本身並行使用crc32) – harold

回答

1

您可以交錯三條crc32指令以獲得更高性能。有關代碼,請參閱this answer。您可以通過在多個處理器上運行該代碼並結合最終的CRC來進一步推進。