tjmiuraの日記

気づいたら技術リンクメモになっていた。

メモ: Solarisにはいつの間にかlibmd5なんてのがある

自前プログラムでMD5の計算をする必要があるときにはRFC1321の付録コードを使っていたのだが、あるとき、Solaris9にはlibmd5.soなんてのがあることに気付いた。
これをlddしてみると、さらにlibmd5_psr.so.1をリンクしている。
アーキテクチャ依存チューニングされたコードになってそうだ。

試しに、固定データブロックをMD5計算しまくるテストコードを書いてベンチマークしてみると、ブロックサイズが16や32ならRFC1321付録コードの方が速い(多分、ダイナミックリンクの呼び出しオーバヘッドで)のだが、64以上ならlibmd5の勝ち。
ブロックサイズの大きい方の極限ではUltraSPARC IIIiなら2倍、x86でも1.5倍ほどスループットが出ている。Solaris9でも10でも傾向は変わらない。もっとも、x86やT1だとブロックサイズが小さくても最初からlibmd5の勝ちだが。

さらにUltraSPARC-T1でもこの傾向は変わらない。もっと段違いの数字が出るかと思いきや、T1プロセッサ内蔵のMAU(暗号アクセラレータ)はMD5計算には役に立たないらしい。
但し、クロックが遅い上にさらに時分割されてる遅さが逐次では(いつもの通り)出てしまうものの、ハードウエアスレッド数までなら「殆ど遅くならない」というお約束もまた分かりやすく現れるので、T1のほうが有利になる場面というのもあるだろう。今回の事例では1GHz 8coreのT1プロセッサが2.2GHz 4coreのOpteronに対して約1.5倍のスループットを出せるようだ。

なお、コンパイルにはGCC 4.1.1を使った(ちょっと古い)。
SunStudio CやらIntel Cやらを使うとまた傾向が変わるのかどうかは調べてみていない。
MAUがMD5をサポートしているT2プロセッサでどれくらい性能が伸びるのか、誰かベンチマークしてくれ。

これもメモ。