命令キャッシュミス

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

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


このレシピは、インテル® VTune™ Amplifier の全般解析を使用してフロントエンド依存のアプリケーションをプロファイルし、PGO オプションを指定して ICache ミスを減らします。

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


全般解析は、インテル® VTune™ Amplifier 2019 でマイクロアーキテクチャー全般解析に改名されました。

使用するもの

以下は、パフォーマンス解析シナリオで使用するハードウェアとソフトウェアのリストです。

  • アプリケーション: sqlite データベース・ベースのテストサンプル。このアプリケーションはデモ用であり、ダウンロードすることはできません。
  • ツール:
    • インテル® VTune™ Amplifier 2018: 全般解析

      • インテル® VTune™ プロファイラー評価版のダウンロードと製品サポートについては、https://www.isus.jp/intel-vtune-amplifier-xe/ を参照してください。
      • このクックブックのレシピはすべてスケーラブルであり、インテル® VTune™ Amplifier 2018 以降に適用できます。バージョンにより設定がわずかに異なることがあります。
      • ベータ版インテル® oneAPI ベース・ツールキット向けのバージョンから、インテル® VTune™ Amplifier の名称がインテル® VTune™ プロファイラーに変わりました。引き続き、インテル® Parallel Studio XE またはインテル® System Studio のコンポーネントとして、あるいはスタンドアロン版のインテル® VTune™ プロファイラーをご利用いただけます。
    • インテル® C++ コンパイラー
  • オペレーティング・システム: Microsoft* Windows* 7
  • CPU: インテル® プロセッサー (開発コード名 Skylake)

全般解析を実行する

サンプル・アプリケーションの潜在的なパフォーマンス・ボトルネックを理解するため、まず、インテル® VTune™ Amplifier の全般解析を実行します。

  1. ツールバーの [New Project (新規プロジェクト)] ボタンをクリックして、新規プロジェクトの名前 (例: sqlite) を指定します。
  2. [Analysis Target (解析ターゲット)] ウィンドウで、ホストベースの解析として [local host (ローカルホスト)] ターゲット・システム・タイプを選択します。
  3. [Launch Application (アプリケーションを起動)] ターゲットタイプを選択して、右ペインで解析するアプリケーションを指定します。
  4. 右の [Choose Analysis (解析の選択)] ボタンをクリックし、[Microarchitecture Analysis (マイクロアーキテクチャー解析)] > [General Exploration (全般)] を選択して、[Start (開始)] をクリックします。

    インテル® VTune™ Amplifier は、アプリケーションを起動してデータを収集し、収集したデータをファイナライズして、シンボル情報を解決します。この情報は、ソース解析で必要になります。

ハードウェアの hotspot を特定する

全般解析を実行すると、コードの主要なボトルネックを確認できます。ハードウェア・メトリックごとのアプリケーション・レベルの統計が表示される [Summary (サマリー)] ビューから解析を始めます。フラグの付いているパフォーマンス問題に注目します。

サンプル・アプリケーションは、フロントエンド依存 (パイプライン・スロットの 29.3%) で、命令キャッシュミスが主要なボトルネック (クロック数の 7.1%) です。

[Bottom-up (ボトムアップ)] タブに切り替えてコードの問題を調べます。[Grouping (グループ)] ツールバーの横の [Customize Grouping (グループのカスタマイズ)] ボタンをクリックして、新しいカスタムグループ [Module/Source File (モジュール/ソースファイル)] を作成します。

新しいグループを収集した結果に適用すると、sqlite3.c ファイルがほとんどの CPU サイクルを費やしているメインの hotspot であると表示されます。

ICache Misses (ICache ミス) メトリックに移動すると、sqlite3.c ファイルの値も高いことが分かります。

PGO オプションを指定してコードを再コンパイルする

インテル® C++ コンパイラーを使用して、プロファイルに基づく最適化 (PGO) を sqlite ライブラリーに適用します。

  1. /Qprof-gen オプションを指定してコードを再コンパイルします。
  2. ベンチマークを実行します。
  3. /Qprof-use オプションを指定してコードを再コンパイルします。

詳細は、「プロファイルに基づく最適化の概要」 (https://software.intel.com/en-us/node/522721) を参照してください。

最適化を確認する

最適化したコードで全般解析を再度実行します。新しい結果では、Elapsed Time (経過時間) は 30.3 秒になり、オリジナルの 31.5 秒からパフォーマンスが約 4% 向上しました。

sqlite ライブラリーで ICache ミスによりストールしていたクロック数は 9.3% から 6.4% に減りました。

関連情報

インテル® VTune™ プロファイラー・パフォーマンス解析クックブックのトップに戻る

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