2

Ants を使用してアプリケーションのプロファイリングを行ったところ、10% を超える割合が CRC32 計算に含まれていることがわかりました。(CRC32 計算はプレーンな C# で行われます)

グーグルで調べて、Visual Studio 2008 の次の組み込み関数について学びました。

_mm_crc32_u8

_mm_crc32_u16

_mm_crc32_u32

_mm_crc32_u64

( http://msdn.microsoft.com/en-us/library/bb514036.aspx )

自作のCRC32を置き換えるためにこれらを使用する方法を教えてもらえますか?

4

4 に答える 4

3

これを回避する AC# ラッパーは、適切なサイズのデータ​​に対する現在の最適なソリューションである可能性があります。

http://code.google.com/p/crcutil/

Crcutil ライブラリは、CRC アルゴリズムの効率的な実装を提供します。これには、2007 年初頭に Andrew Kadatch と Bob Jenkins によって発明された新しい Multiword CRC アルゴリズムのリファレンス実装が含まれています。新しいアルゴリズムは、最新の Intel および AMD プロセッサ向けに大幅に調整されており、他のほとんどすべてのソフトウェア CRC アルゴリズムよりも大幅に高速です。

ハードウェア支援の CRC32C: 1 バイトあたり 0.13 (Nehalem) CPU サイクル。64 ビット以下の CRC: 1.0 (Nehalem) - 1.2 (コア) CPU サイクル/バイト。128 ビット CRC: 1 バイトあたり 1.7 CPU サイクル。

Haswell の AVX2 は、パフォーマンスをさらに向上させるいくつかの命令をもたらす可能性があります。もしそうなら、それらがこのライブラリに含まれていればすばらしいでしょう。

于 2013-03-08T11:20:04.350 に答える
2

自家醸造の代わりにこれらの方法を使用する必要があるかどうかはわかりません。ここでC#でCRC-32を計算するための優れた実装を見つけました。

于 2011-04-14T21:12:11.990 に答える
0

PInvoke (および純粋な c#) を使用するか、C++/CLI プロジェクトを作成して、この関数のラッパーを記述できます。

msdn で例を見ましたか? 文字列のCRCを計算するには、ループするだけです。

まあ、それらは組み込み関数です。これは、C++/CLI ラッパーを作成するという 1 つのオプションしかないことを意味します。

于 2009-12-07T09:50:57.093 に答える