並列計算のなんちゃら

GPU Challengeと併設されてたCell Challenge(というかこっちが親玉)で1位を取ったチームのスライドを発見。

Cell Challenge 2009 参加記

これを見ると自分のアルゴリズムは「あ、やっぱり全然甘かったね」といった感じ。
そもそも「ビット並列化」という単語をはじめて聞いた。せっかくGPUなのに32bit分しかレジスタ使わないのって…とか思っててこんな方法ないのかなーと考えてたと言えば考えてたんだけど調べ方が全然なっちゃいなかったってことですね。
あとはループアンローリングとかスーパースカラの最適化とかそのレベルの高速化はコンパイラ任せで自分で全然やってないっていう…
そもそもnvccの-O2や-O3でどの程度速くなるのかもわかってない……

ちなみに自分が使ったアルゴリズムはO(ND)です。また後日詳細はエントリ書こうと思ってますが、このあたりの最適化をはかってれば特定の問題が恥ずかしいほど時間がかかるといったこともなかったかもしれない。

まだまだ勉強しなきゃいけないことばかりです。