ゲーム プロセス スレッドが適切に利用され、最適なパフォーマンスになるようにスケジュールされているかを判断するために、考慮すべき点がいくつかあります。
- フレーム ペーシング
- マルチスレッドとスレッド並列化
- CPU コア アフィニティ
マルチスレッド処理
多くのゲームやゲームエンジンは、マルチスレッド処理を使用して CPU 処理を論理タスクに分割し、論理タスクはある程度独立して実行されることもあります。典型的な構成の一つは、入力とゲームロジック用のゲームスレッド、描画するオブジェクトを準備して送信するためのレンダリング スレッド、アニメーションや音声などの他のサブタスク用のワーカー スレッドです。
マルチスレッドによるパフォーマンスの向上を活かせるよう、スレッドの並列化をおすすめします。この例は、ゲーム スレッドとレンダリング スレッドが異なるコアで部分的または完全に同時に実行されるシナリオです。これは、共有データの依存関係がある場合など、常に可能とは限りません。ただし、可能な場合には CPU 時間が短くなるため、フレームレートが高くなる可能性があります。
CPU コア アフィニティ
CPU ワークロードのパフォーマンスに大きく影響する要因の一つは、コアでのスケジューリング方法です。これは次の 2 つの要素に分かれています。
- パフォーマンスのためにゲームスレッドが最適なコアで実行されているかどうか
- ゲームスレッドがコア間を頻繁に切り替えるかどうか
トレースを取得するときにプロファイル構成で CPU を有効にすると、CPU 使用率での CPU スレッドの動作を調査できます。トレースの 200 ミリ秒未満の部分にズームインすると、デバイスの CPU コアで実行されている個々のプロセスを表示できます。通常、小さいコアは小さいインデックス(CPU 0
~3
など)に対応し、大きいコアは高いインデックス(CPU 6
~7
など)に対応します。
一般的に、ゲームがフォアグラウンドにある場合、ゲームスレッドやレンダリング スレッドなどの永続スレッドは高パフォーマンスの大型コアで実行され、他のプロセスやワーカー スレッドは小さいコアでスケジュールされます。
また、ゲームスレッドでコアが頻繁に切り替わるかどうか、メインスレッドとレンダリング スレッドが単一 CPU フレーム内または連続する 2 つの CPU フレーム間でコアを変更しているかどうかも確認できます。この CPU の動作は、ゲームスレッドが適切にアフィニティ化されていないことを示す可能性があります。このようなコアスイッチでは、コンテキスト スイッチによるオーバーヘッドとコアのキャッシュ/レジスタの状態の損失が発生し、CPU フレームの長さが長くなります。