2017-04-11 20 views
0

インテルSSE4.2組み込み関数に64ビットCRC関数が存在します。AVX2での256ビットCRC計算

unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) 

しかし、私はAVX2組み込み関数で256ビット版のCRC計算を見つけることができません。 私のプログラムで256ビットの変数(__m256i)を使用していますので、256ビットを超えるcrc(またはハッシュ)を計算します。インテル®AVX2でこの操作を行うにはどうすればよいですか?

答えて

1

_mm_crc32_u64は、概念上はSSE4.2に属していますが、64ビット値で動作する通常のスカラ命令です。したがって、128ビットまたは256ビットのSIMDバージョンについては話が分かりません。符号なし64ビット値の配列にループ内で適用するだけで済みます。

さまざまなx86 CRC32命令と組み込み関数の詳細については、this answerを参照してください。

+0

その場合、各4ループから来るcrc値を合計する必要がありますか? 私は256ビットを1つのcrc値として表現したいからです。 –

+0

CRCを追加するべきではありません。生成するすべてのデータを正しい順序で累積的にCRCするだけです。これでもまだ明らかでない場合は、新しい質問を開始し、何をしようとしているのか説明し、既存のコードの関連部分を含める必要があります。 –

+0

一方、_mm_crc32_u64関数のような256ビットのベクトルにサブ演算(シフト、XOR、MOD2など)を適用するのは論理的ですか? –