CRC32チェックを実行しているコードの一部を最適化しようとしています。
テストバッファについては、次のことを行いました。
char *buff = new char[1024];
for (int i = 0; i < 1024; ++i)
buff[i] = i;
現在、私はブーストのcrc実装を次のように使用しています。
boost::crc_optimal<32, 0x1EDC6F41, 0, 0> crc;
crc.process_bytes(buff, 1024);
unsigned int boostCRC = crc();
これは、初期値が0、最終的なxorが0の多項式「0x1EDC6F41」を意味します。
次に、crc32cアルゴリズムの可能な限り単純なsse4.2バージョンを作成しました。
unsigned int sseCRC = 0;
for (char *iter = buff, *end = buff + 1024; iter != end; ++iter)
sseCRC = _mm_crc32_u8(sseCRC, *iter);
問題は、多項式が同じであると想定されていても、最終的な値が一致しないことです。誰かがこれを経験したことがありますか?sseバージョンで何か問題がありますか?