これは「the free lunch is over(フリーランチは終わった)」という、昨年(2005年)米国で有名になった言葉に集約されている。これは、Microsoftの Software ArchitectであるHerb Sutter氏がコラムなどで言い始めた言葉だ。フリーランチはタダ飯のことで、タダ飯食いは、もうできないという意味だ。
これまで、CPUはシングルコアの性能を高める方向で来た。そのことは、ソフトウェアにとってはタダ飯食いと同じことだったという。つまり、ソフトウェア側は何もしなくても、CPUが進化するにつれて同じコードがより速く走るようになったからだ。ソフトウェアは、増えるパフォーマンスをどんどん食べればよいだけだった。
ところが、CPUベンダーがマルチコアにターンしたため、状況が変わってしまった。汎用CPUコアのシングルスレッド性能は、現状ではもはや急激には伸びてゆかない。その代わり、マルチコア化によりマルチスレッド性能が急激に上がって行く。そのため、ソフトウェア開発者はCPUのパフォーマンスを活かそうとすると、ソフトウェア側を根底から切り替えて行かなければならない。
「Free Lunch Is Over」は、多くのエンジニアに新しい道を提示した。CPU の性能が上がっている間は、プログラマはパフォーマンスを高級言語で消費することができたため、仕事は年々に簡単になっていた。シングルコアの高性能化が見込まれている間、プログラマはパフォーマンスのために特別に何かをする必要はなかった。しかし、現在シングルコアの高性能化は頭打ちになり、プログラマはマルチコアプログラミングを獲得するための努力を始めなければならなくなった。タダ飯の時代は去り、新時代が到来したというわけである。
しかし、パフォーマンスのためのプログラムといっても、昔のようなフル/インラインアセンブリを想像する必要はない。現代のCPUに対してアセンブリは効果的ではないためだ。これらのCPUは非常に長いパイプラインを備えているため、人間がアセンブリを手で書いてプログラムを最適化することがまず不可能になっている。C言語でプログラムを書き、コンパイルオプションを調節してパフォーマンスチューニングを行う必要があるだろう。この状況は、若干気を楽にさせてくれる。
C言語は当面の間、マルチコアプログラミングに対する最適な言語としての地位を保つだろう。また、 C++ はゲームを生産的に開発するための良い言語として使われ続けるだろう。 C# はゲーム開発のシチュエーションから若干遠ざかったように思える。
0 件のコメント:
コメントを投稿