Luffaは256bit単位で攪拌的な事をする仕様で、Luffa-256では256bitステートが3本あるので
この部分を並列化出来ます。というわけで、この部分を並列化する実装を書いてみました。
下に評価結果のグラフを載せます。左側のグラフは4KBのデータのハッシュを計算するときのスループットです。
横軸が並列数なので、右端では2048個の4KBのデータのハッシュ値を計算するという意味になります。
右側の図は効率で、スループットを並列数で割った値です。
なお、青いラインが今日作った実装で、赤いラインが11日に作った実装になります。


効率を見るとなんか面白いですよね。Radeon HD 5750なので、
1つのComputeUnit(=SIMD Engine)には16個のProcessingElement(=SIMD Unit, Thread Processor)が付いています。
んで、攪拌部分は3つ並列と先頭に書きましたが、諸事情によりLocalSize=4nとなっています。
なので、並列数が4(16÷4)~16付近がもっとも効率が良くなっている感じですね~
ちなみに、オフィシャルの64bit最適実装はCore i7 920(3.5GHz OC)では、980Mbpsでました。
なので、クアッドコア+HT補正(x1.5)とすると、8並列で5.8Gbpsでる計算でしょうか。
ビットスライスAESの方はさんざんな結果になっていますが、こっちは少しだけGPUで実行する意味がありそう?
(ただし、512並列というシチュエーションが存在するのか謎ですが)