ゲーム プロセス スレッドが適切に利用され、最高のパフォーマンスを得られるようにスケジュールされているかどうかを判断するには、いくつかの点を考慮する必要があります。
- フレーム ペーシング
- マルチスレッドとスレッドの並列化
- CPU コア アフィニティ
マルチスレッド
多くのゲームとゲームエンジンでは、マルチスレッドを使用して CPU の作業を論理タスクに分割し、ある程度独立して実行できるようにしています。一般的な構成としては、入力とゲームロジック用のゲームスレッド、描画するオブジェクトの準備と送信用のレンダリング スレッド、アニメーションや音声などの他のサブタスク用のワーカー スレッドがあります。
マルチスレッドのパフォーマンス上のメリットを活用するために、スレッドを並列化することをおすすめします。たとえば、ゲームスレッドとレンダリング スレッドが異なるコアで部分的または完全に同時に実行されるシナリオがあります。共有データ依存関係がある場合など、常に可能とは限りませんが、可能であれば、CPU 時間を短縮し、フレームレートを向上させることができます。
CPU コア アフィニティ
CPU ワークロードのパフォーマンスに大きな影響を与える要因の 1 つは、コアでのスケジューリング方法です。これは次の 2 つのコンポーネントに分けることができます。
- ゲームスレッドが、ワークロードに最適なコアで実行されているかどうか。
- ゲームスレッドがコアを頻繁に切り替えているかどうか。
最近のデバイスでは、コアのパフォーマンス レベルが異なる ヘテロジニアス コンピューティング というアーキテクチャがよく使用されます。
- 1 つまたは少数のコアは最高のピーク パフォーマンスを発揮しますが、消費電力は大きくなります。これらは「ビッグ」コアと呼ばれることもあります。
- 他のコアはピーク パフォーマンスは低いですが、電力効率は優れています。これらは「リトル」コアと呼ばれることもあります。
- 必要に応じて、1 つ以上のコアでパフォーマンスと電力のバランスを取ります。これらは「ミッド」コアと呼ばれることもあります。
トレースを取得するときにプロファイル構成で [CPU] を有効にすると、[CPU 使用率] で CPU スレッドの動作を調べることができます。トレースの 200 ミリ秒未満のセクションを拡大すると、デバイスの CPU コアで実行されている個々のプロセスを確認できます。通常、小さいコアは小さいインデックス(CPU '0'~'3' など)に対応し、大きいコアは大きいインデックス(CPU '6'~'7' など)に対応します。ミッドコアがある場合は、その間のインデックス(CPU '5'~'6' など)を使用します。 これは一般的な慣例ですが、保証されるものではありません。
特定のスレッドが、パフォーマンスや電力のニーズを満たさない CPU でスケジュールされている場合は、それらのスレッドの CPU アフィニティを手動で設定することを検討してください。
スレッドがコアを切り替えているかどうかを確認することもできます。 このようなコアの切り替えは、コンテキストの切り替えとコアのキャッシュ/レジスタでの状態の損失により、オーバーヘッドが発生します。
スレッドの CPU アフィニティを設定すると、ゲームがフォアグラウンドにあるときに、指定されたコアでスケジュールするようにシステムに指示されます。これを行う際には、次のようないくつかの要因を考慮する必要があります。
- プラットフォーム ソフトウェアは、負荷やサーマル スロットリングなどのランタイム要因に応じてタスクの配置を動的に調整できません。
デバイスによって価格帯やリリース日が大きく異なる場合、さまざまなデバイスでのパフォーマンス テストでパフォーマンス特性が大きく異なることがあります。
新しいデバイスや高価なデバイスでは、リトルコアで特定のワークロードを快適に実行できますが、古いデバイスや手頃な価格のデバイスでは、同じワークロードの期限を満たすために大きなコアが必要になる場合があります。
アフィニティをビッグコアに強制すると、バッテリーの消耗や熱負荷が不必要に増加する可能性があります。
このような理由から、通常は CPU アフィニティを手動で設定しないことをおすすめします。