読者です 読者をやめる 読者になる 読者になる

燃えよCPU

ここ1ヶ月くらいはゲームの並列化についてあれこれ考えつつ、exceptionで実践して遊んだりしてて、その軌跡。


exception
version 1.09現行版。単純に衝突判定処理をスレッドの数に分割して食わせてるだけ。…なんだけど、改良作業中はなかなかこれより早くならなくて歯軋りしていた。これだけでもそれなりに優秀と言えそう。


exception
TBB (LOST PLANETにも使われてるらしいインテル製スレッド抽象化ライブラリ) を真似たオレオレスケジューラを作成、300オブジェクトくらいを1つのタスクとしてスケジューラに放り込んでいくように変更。また、色んな葛藤を経て共有変数はほとんど使わない路線に変更。その他色々頑張って同期処理を圧縮。


exception
破片は衝突判定以外の処理もほとんど非同期にできるように改良。また、衝突判定高速化のロジックを変更、これまで等間隔グリッドに分けて同じグリッド内にいるオブジェクトを見ていく方式だったのを、破片に関してはx,y軸別にソートして隣接する対象に見ていく方式に。その他色々頑張って同期処理を圧縮。


ここらでこれ以上早くする方法が思いつかなくなってきたので一段落。
とりあえず1.09から全体的に早くなり、特にCPUが増えた時のスケール度が大きく上がった。最終的に60FPSを維持した状態でCore2 Quad 2.4GHzを70%くらいぶん回せている。(1.09だと50%程度)
なんというか、並列化の作業は上手くいくと目に見えて動作が早くなり、CPU使用率というスコアも上がるので、完全にゲーム感覚。実にエキサイティングなパズルゲームでした。

変更が大きすぎて怖いので、パッチとしてのリリースはもう少し様子を見る予定。