p2pquake.ddo.jp - 小ネタ - 2D/3Dゲームを実行するとCPU使用率が100%になるわけ

2D/3Dゲームを実行するとCPU使用率が100%になるわけ

 コンピュータ上でゲームを実行していると、CPU使用率がずっと100%に近いままの状態になることがあります。ゲームのオプションを変えても、CPUやグラフィックカードを高性能なものに変えても、重たくないゲームでも、ずっと100%。この原因は、ディスプレイへの転送処理にあります。

 ゲームが「滑らかに動いている」と感じるには、1秒間に30〜60回ほど、ゲーム画面をディスプレイに転送しなければなりません。1秒30コマだと1コマあたり33ミリ秒、60コマだと1コマあたり16ミリ秒。

 その16〜33ミリ秒の間に、1コマごとのゲーム画面を作り出して、ディスプレイに転送しなくてはなりません。このときに、2つの理由からCPU使用率が高くなります。

ゲーム画面の生成
 キャラクターや建物の位置、光の具合などを、1コマ1コマ計算して、それをゲーム画面として生成しなくてはなりません。しかも、それを次々と行っていく必要があります。CPU使用率が高くなるのは当然です。
ディスプレイの垂直同期信号待ち(乱れ防止)
 ディスプレイは、1秒間に60回以上も表示の更新を行っています。この更新は、「垂直同期信号(VSYNC)」という信号が流れるタイミングを待って定期的に行われています。別のタイミングで更新を行うと、表示が乱れてしまいます。

 ほとんどのゲームも、乱れ防止のためにその「垂直同期信号」を待ってからディスプレイに画面を転送します。それだけなら問題ないのですが、信号を「無限ループ」で待っていると、CPUは休む暇がなく、使用率が100%に近くなります。残念ながら、多くのゲームが該当します(※DirectXのFlip関数がそういう仕様になっているため)。

 ただ、1コマあたり16〜33ミリ秒という時間の中で、CPUを適宜休ませるようにするのは難しいものです。うっかり信号のタイミングを逃せば、動きがカクカクになってしまうこともあります。