環境:
- CPU: Intel Core 2 Duo T9300 2.5GHz
- OS: Windows 7 64bit
- メモリ: 4GB
- メッセージ長: 64MB
計測結果:
| 256 | 384 | 512 |
| (SHA-2) | 520 Mbps | 802 Mbps | 798 Mbps |
| Luffa | 541 Mbps | 375 Mbps | 260 Mbps |
| 34 cycle/byte | 50 cycle/byte | 71 cycle/byte |
| Skein | 373 Mbps | 373 Mbps | 373 Mbps |
備考:
- SHAは .NET Frameworkに付属のSHA(256|384|512)Managedクラスを利用
- Skeinは内部状態に奨励長である512bitを指定。実装は幾つかあるが、Skeinfishという実装を利用
感想:
Skein以外はC#実装が見つからない・・・Skeinは複数の実装があるのに・・・
本当は、ほとんどのアルゴリズムのC#(.NET)実装があるのかなーと思って、このエントリを書き始めたのに
とっても寂しい表になってしまった。
r2744で、Luffa256のスループットが550Mbpsに達した。
とりあえずは、.NETのSHA256Managedと同等の速度になったからよしとしよう。
ま、僕はWin7の64bit版を使っているので、SHA-1/256系よりもSHA-384/512の方が高速'800Mbps程度)なわけですが・・・
スループットを測定 (64MBのメッセージのダイジェストを計算) してみた。
環境はThinkPad X61 (Core2Duo T9300 2.5GHz Win7)。
150Mbps (r2740) -> 215Mbps (r2742) -> 425Mbps (r2743)
と、2.8倍も速くなった。いやぁ・・・初期実装(r2740)ではあまりの遅さにびっくりしたのですが、
なんとか速くなって良かった。
でも、.NETのSHA-256実装(SHA256Managed)は540Mbpsぐらいでるんだよなぁ・・・なんとか500Mbpsぐらいは出したい物だ。