ハイブリッド CPU プラットフォーム向けの Windows* アプリケーションのプロファイル

インテル® VTune™ プロファイラー

この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® VTune™ Profiler Performance Analysis Cookbook」の「Profiling Windows* Applications for Hybrid CPU Platforms」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


このレシピでは、Windows* ベースのアプリケーションのハイブリッド CPU 利用率データをプロファイルして表示します。

Performance-cores (P-cores) と Efficient-cores (E-cores) の組み合わせにより、ハイブリッド CPU は、コンピューター・ゲームを含む最新のワークロードの処理要求に対応できます。特に第 12 世代インテル® Core™ プロセッサーでは、アプリケーションをファインチューニングすることで、ハイブリッド CPU の処理能力を最大限に活用できます。

このレシピでは、インテル® VTune™ プロファイラーを使用して、ハイブリッド CPU 上で Windows* アプリケーションをプロファイルし、パフォーマンス・データを可視化する方法を紹介します。HybridDetect サンプルの asteroids_d3d12 実行ファイルを使用して 2 つの例に注目します。このサンプルについては、「第 12 世代インテル® Core™ プロセッサー向けゲーム開発者ガイド」を参照してください。

コンテンツ・エキスパート: Jennifer Dimatteo (英語)

使用するもの

  • アプリケーション: HybridDetect (英語) サンプルの asteroids_d3d12 実行ファイル

  • ツール:

    • インテル® VTune™ プロファイラー 2023 – ホットスポット解析 (ハードウェア・イベントベース・サンプリングを使用)。
    • Microsoft* Visual Studio* – インテル® VTune™ プロファイラーと互換性のあるバージョンについては、「インテル® VTune™ プロファイラーの動作環境」 (英語) を参照してください。
  • CPU/GPU: インテル® Core™ i7-12700H プロセッサー
  • オペレーティング・システム: Windows* 11 Enterprise

Microsoft* Visual Studio* でのサンプルのビルド

  1. Microsoft* Visual Studio* で HybridDetect サンプルを開きます。
  2. サンプルをビルドします。

ホットスポット解析の実行

この手順では、スタンドアロン版のインテル® VTune™ プロファイラーを使用して、ハードウェア・イベントベース・サンプリング・モードでホットスポット解析を行う方法について説明します。Microsoft* Visual Studio* に統合されたインテル® VTune™ プロファイラーを使用する場合、ハードウェア・イベントベース・サンプリング解析は、Visual Studio* を管理者として実行する必要があります。

  1. インテル® VTune™ プロファイラーを起動して、[Welcome (ようこそ)] ページで [New Project (新規プロジェクト)] をクリックします。

  2. プロジェクトの名前と場所を指定します。

  3. [Create Project (プロジェクトの作成)] をクリックします。
  4. [Configure Analysis (解析の設定)] ウィンドウの [WHERE (どこを)] ペインで [Local Host (ローカルホスト)] を選択します。
  5. [WHAT (何を)] ペインでは、以下の値を入力します。
    • [Application (アプリケーション)] フィールドに、asteroids_d3d12 実行ファイルのパスを指定します。

    • [Application parameters (アプリケーションのパラメーター)] フィールドに、-scheduler 0 を入力します。このパラメーターにより、レンダリングと更新の各タスクが個別のスレッドで実行されます。

    • [Advanced (詳細)] セクションで [Automatically stop collection after (sec) (指定時間後に収集を自動停止 (秒))] を 30 秒に指定します。[Analyze child processes (子プロセスの解析)] もオンにします。
  6. [HOW (どのように)] ペインで [Hotspots (ホットスポット)] 解析タイプを選択し、[Hardware Event-Based Sampling (ハードウェア・イベントベース・サンプリング)] をオンにします。

  7. [Start (開始)] をクリックして、解析を開始します。

サンプルは、フレームレートが 103fps 近辺で変動していることを示しています。

結果の確認

データ収集を約 30 秒間実行したら、インテル® VTune™ プロファイラーはアプリケーションとデータ収集を終了します。デバッグシンボルを検出して解決するため、結果のファイナライズには数分かかることがあります。

結果がファイナライズされると、[Summary (サマリー)] タブに以下の情報が表示されます。

  • Elapsed time (経過時間)
  • Top hotspots (上位のホットスポット)
  • Top tasks (上位のタスク)
  • その他の情報とガイダンス

この例では、上位のタスクは DrawString で、命令あたりのクロックサイクル (CPI) レートは 1.729 と高く、命令の実行が最適ではないことを意味します。スレッド数は 8 ですが、実行ファイルの並列性は非常に低いことが分かります。この詳細は、右上の [Additional Insights (その他の情報)] セクションから推測できます。このアプリケーションは非常にゆっくりと、しかも単一の CPU 上でのみ命令を実行しています。

次に、[Bottom-up (ボトムアップ)] ウィンドウを見てみましょう。

コアタイプ別に結果をカスタマイズ

アプリケーションが P-cores と E-cores をどのように使用しているか確認するには、カスタムグループを作成します。[Grouping (グループ化)] プルダウンメニューの横にあるツールアイコンをクリックし、[Function/Core Type/Logical Core (関数/コアタイプ/論理コア)] で結果をグループ化します。

次に、RenderSubset 関数を展開します。この関数は 2 つの P-cores 上で実行されたことが分かります。

タイムラインを見ると、アプリケーション全体が 2 つの P-cores のみを使用し、E-cores はほとんど使用していません。これは、インテル® VTune™ プロファイラーがデータを収集して使用するのに十分な実行が E-cores にディスパッチされなかったことを意味します。

スケジューラー値の調整と解析の繰り返し

[Application parameters (アプリケーション・パラメーター)]-scheduler 1 に設定して、ホットスポット解析を再度実行します。この設定により、レンダリング・タスクの数が P-cores の数と等しくなります。また、8 つの更新タスクがレンダリング・タスクから独立して実行されるようになります。

解析を再度実行すると、アプリケーションは 12 個のタスクを実行しています。平均フレームレートは 119fps です。

データ収集が完了すると、インテル® VTune™ プロファイラーは結果をファイナライズします。[Summary (サマリー)] ウィンドウが開き、以下の情報が表示されます。

並列性が大幅に向上し、1 つの論理 CPU を使用する代わりに、アプリケーションは 12 以上の CPU を使用しています。

今回の上位のタスクは TaskScheduler です。総スレッド数は 27 で、CPI レートは 0.35 とかなり低くなりました。これは、スケジューラーの CPI レートが非常に低く、CPU 時間のほとんどを占めていたためと考えられます。

オーバーヘッドによって結果が歪められないように、レンダリング・パフォーマンスが実際に向上していることを確認することが重要です。[Bottom-up (ボトムアップ)] ウィンドウは、レンダリング関数の CPI レートが向上したことを示しています。

しかし、レンダリング関数は前回の 450 万命令と比較して、今回はほぼ 2,000 万の命令を実行しています。作業は P-cores と E-cores でほぼ均等に分割されていますが、P-cores は命令を 2 倍高速に実行しています。繰り返しになりますが、タイムラインにはコア全体の利用率が表示されます。

HybridDetect (英語) サンプルには、ハイブリッド・プラットフォームで CPU 利用率を制御する方法を理解するのに役立つ、いくつかの設定が含まれています。このレシピでは、サンプルで利用可能なデフォルトのプリコンパイル・マクロを使用します。これらのマクロを使用すると、レンダリング・スレッドと更新スレッドを制御できますが、使用するコアタイプはインテル® Thread Detector によって決定されます。

追加の演習として、レンダリング・タスクを P-cores で実行し、更新タスクを E-cores で実行するように強制します。これを行うには、HybridDetect.hENABLE_RUNON マクロを有効にします。この変更がパフォーマンスにどのような影響を与えるかを確認してください。

関連情報

タイトルとURLをコピーしました