2011-11-18 13 views
5

まず、明確にするために、C++には膨大な数のMD5実装が存在することを知っています。ここでの問題は、どの実装が他の実装より高速かどうかを比較することができないかと思います。私はこのMD5ハッシュ関数を10GBを超えるサイズのファイルに使用しているので、スピードは本当に大きな問題です。C++でのMD5の高速実装

+11

あなたはこれらの超近代的で高速なSSDドライブを持っていますか? – avakar

+0

この[質問](http://stackoverflow.com/questions/2717216/what-hash-algorithms-are-parallelizable-optimizing-the-hashing-of-large-files-u)が役立つかもしれません。並列化できるものを提案しようとしていましたが、データがどのように格納されているかによって異なります。 – Vlad

+0

@ avakar:データが複製されている場合は、システムが許可していれば、異なるレプリカから並列に実行することで、計算を高速化することは少なくとも可能性があります。 – Vlad

答えて

9

になりますように

http://www.golubev.com/gpuest.htm

に見える私は、ポイントavakarが作るしようとしていると考えている:現代の処理能力とのIOスピードあなたのハードドライブは、ハッシュの計算ではなくボトルネックです。より効率的なアルゴリズムを取得しても、最も遅いポイントではないようには助けになりません。

何か特別なことをしている場合(たとえば、1000秒のラウンド)、ファイルのハッシュを計算しているだけで、異なる場合があります。あなたはあなたの計算ではなくIOをスピードアップする必要があります。

2

確かに、そこにはアルゴリズムのCUDA/OpenCLの適応がたくさんあるので、あなたは明確なスピードアップを得られるはずです。あなたはまた、基本的なアルゴリズムを取ることができ、ビットを考える - > CUDA/OpenCLの実装を行ってください。

ブロック暗号は、このタイプの実装のための完璧な候補です。

また、Cのインプリメンテーションを取得し、インテル®Cコンパイラーのコピーを取得し、それがどれほど優れているかを確認することもできます。インテルCPUのベクトル化拡張は、速度向上のために驚異的です。

1

ここで使用可能なテーブル:おそらくあなたのボトルネックは、あなたのハードドライブIO

3

同じハードウェア上では問題はありませんが、実際にはGPGPUとは異なります(おそらく、この種の問題ではハードウェアが高速かもしれません)。 md5の主要部分は、複雑な算術演算の非常に複雑なループです。コンパイラの最適化の品質は重要です。

また、ファイルの読み方も重要です。 Linuxの場合、mmapmadvisereadaheadが該当します。ディスク速度はおそらくボトルネックです(可能であればSSDを使用してください)。

あなたは本当にmd5を使いたいですか?よりシンプルで高速なハッシュコーディングアルゴリズム(md4など)があります。それでもあなたの問題は、CPUバインドよりも多くのI/Oバウンドです。

関連する問題