2017-04-12 10 views
0

私はAVX2の新しいプログラムで256ビットの変数(__m256iタイプ)を使用していますが、インテルの組み込み関数を使用しています。以前は、64ビットのチャンクがデータの処理に使用されていました。したがって、_mm_crc32_u64関数がCRC計算に使用されます。256ビットチャンクのCRC計算

crc = _mm_crc32_u64(seed,*chunk_64bit); 

しかし、今、私は別々に各256ビットの塊(少なくとも128ビットの塊)のためのCRCを計算したいのパフォーマンスを向上するためです。 一方向に適用すると、_mm_crc32_u64ループ内で、各チャンクに64ビットの値が入ります。しかし、私はそれがパフォーマンスの面で有益ではないと思います。

_mm_crc32_u64より高速な256ビットチャンク(または128ビット)でCRCを計算する最も良い方法は何ですか?

+0

インテルの詳細はこちら[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命令を3つインターリーブして高性能化することができます。これを行うコードについては、this answerを参照してください。このコードを複数のプロセッサで実行し、結果のCRCを組み合わせることで、さらに進歩を遂げることができます。