2

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バージョンで何か問題がありますか?

4

1 に答える 1