マルチスレッド・プログラミングの現状
未来のCPU & GPU統合型プロセッサは数十コアから成るメニーコアCPUであり、これまでのGPU的ポテンシャルがCPUと統合されているのだとしたら、そのプログラミングモデルはどうなるべきなのだろうか。
TIM SWEENEY氏は、この未来型ハードウェアのプログラミングモデルへと話題を移していく。
「現実問題として、数十コアのプロセッサがいくら高性能でも、これをプログラミングするのが困難では意味がない。現在のプロセッサの20倍高性能だからといって、そのプログラミングが20倍複雑で、20倍開発予算が掛かっていては意味がない」(TIM SWEENEY氏)
そこでメニープロセッサ時代における効率のよいプログラミングモデルを考える必要が出てくるというわけだ。TIM SWEENEY氏は「この問題を先送りにしたら2012~2020年のゲーム開発の未来は暗いものになる」と憂う。具体的にいえば高効率なマルチスレッドプログラミングを考える必要があるということになる。
未来の話にいく前に、"メニーコア"前夜ともいえる現在の"マルチコア"CPUのプログラミングモデルはどうなっているのか、TIM SWEENEY氏は現在のUE3のマルチスレッド対応状況をマルチコア時代の典型として公開した。
UE3では、今世代のやや先進的なゲームエンジンでは採用例が多い「タスク並列」型のマルチスレッド設計を採用している。
これはソフトウェアのある程度独立した機能ブロックを個別のスレッドに割り当てるやり方だ。シングルスレッドのプログラムを、大幅に設計変更せずにマルチスレッド化する手法として誰もが通る道だ。
UE3では、AI,シナリオ制御などを統括するゲームプレイ制御スレッド、3Dグラフィックス制御スレッド、その他の処理を実行するヘルパースレッドが3大スレッドとなって実装されているという。
これは現行の数コアから成るマルチコアCPU時代にはうまく適合するが、将来の数十~数百コアのプロセッサに対しては完璧な手法とは言い難い、とTIM SWEENEY氏は自らいう。