Chiharu の日記

絵描き C/C++ プログラマーの日記です。

Parallel force - パラレル・フォース 〜ちょっと高速化

Intel Core i7 の PC を購入しました。相方の要望で、省スペースかつ静かなマシンということで、EPSON DIRECT の Endeavor MR4000 をセレクトしました。CPU は i7-870、メモリは 8GB。グラボは静かな GT220。BD ドライブをつけました。音源が貧弱だったので、手持ちの SE-90PCI と組み合わせて、Windows 7 (x64) で動作させています。これでやっとパラレル・フォースの開発 & 動作確認環境が整いました。マルチコアのハイスペック (i7-870) と、低スペック (Atom 330) の双方が整いました。
ということで、早速 4 コア (8 論理コア) に対する並列度を計測。i7 にて 4 コアで 4 倍強の速度になりました。15fps 対 62fps。んー。論理コアが 8 つなので、多分もう少し速くなるはず。座標計算を 1 コアだけでやってるのが敗因かな。パフォーマンス モニタで CPU 使用率は 90% 程度なので、これを並列化すれば、もっと並列度が上がって高速になるはず。
ここまでの傾向から、パラレル・フォースの並列描画処理がそれなりに コア数比で伸びていくことがわかってきました。コア数比を抑制するボトルネックもなんとなくわかってきました。プロデューサ コンシューマ パターンは偉大です。ボトルネックはプロデューサ部をさらに並列化することで解消できそうです。こうなってくると、1 コアあたりの処理速度で手を抜いている部分が気になってきます。気になったので、少し速くしてみました。画素計算処理を 8 画素単位でループ展開しました。そうしたら、i7 にて 4 コアで 1 割程度高速化されました。62fps が 70fps 程度になりました。んー。CPU って単純ね。1 コアあたりの速度を向上させるには、アルゴリズム レベルではオクルージョン カリング、コーディング レベルでは SIMD が必要になってきます。でも、これはもうちょっと先かな。それよりも先にイメージのアフィン変換を実装しないと。