このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
GPU パフォーマンス アナライザー
GPU パフォーマンス アナライザーは、GPU と CPU のアクティビティ、イベント、パフォーマンス メトリクスを時系列のタイムライン プロットに表示します。これを使用して、CUDA® 生成コードのパフォーマンス ボトルネックを可視化し、特定し、対処することができます。
プロファイリング タイムライン
[プロファイリング タイムライン] タブには、実行時間がしきい値を上回るイベントの完全なトレースが表示されます。タイムラインには次のようなイベントが記録されます。
関数
深層学習層
ループ
CPU と GPU の間のメモリ転送
GPU メモリの割り当てと割り当て解除
カーネル
次のイメージは、プロファイリング トレースの一部を示しています。
マウス ホイールまたは同等のタッチパッド オプションを使用して、タイムラインのズームイン/ズームアウトができます。あるいは、タブの上部にあるタイムラインの概要を使用して、タイムライン プロットをズームしたり操作したりすることもできます。GPU パフォーマンス アナライザー用のバインディングを表示するには、[キー バインディング] ボタン を使用します。色の意味を表示するには、[凡例] ボタン を使用します。
各イベントのツールヒントは、CPU と GPU 上での選択されたイベントの開始時間、終了時間、および持続時間を示します。また、CPU でカーネルが起動してから GPU でカーネルが実際に実行されるまでの経過時間も示します。
既定では、ツールストリップの [フィルター] セクションで [1 回の実行を表示] ボタンが選択され、関連するドロップダウン メニューが生成コードの最後の反復に設定されます。以前の反復のプロファイリング データを表示するには、ドロップダウン メニューで該当する実行を選択します。初期化と終了を含むアプリケーション全体のプロファイリング データを表示するには、[プロファイリング セッション全体を表示] ボタンを選択します。
[関数] 行と [ループ] 行では、イベント バーの右側にある上矢印と下矢印を使用して、呼び出し元と呼び出し先の関数とループの間を移動できます。
プロファイリングの概要
[プロファイリングの概要] ペインには、GPU と CPU のアクティビティの概要が表示されます。棒グラフは、プロファイリング タイムラインのズーム レベルに応じて変化します。次のイメージは、タイムライン上で選択された領域の [プロファイリングの概要] ペインを示しています。GPU 使用率が 75% であることがわかります。
イベント統計
[イベント統計] ペインには、選択したイベントの追加情報が表示されます。たとえば、プロジェクトにカーネル feature_matching_kernel1
が含まれているとします。[プロファイリング タイムライン] ペインで feature_matching_kernel1
を選択すると、[イベント統計] ペインにその詳細情報が表示されます。
呼び出しツリー
[呼び出しツリー] ペインには、CPU から呼び出された GPU イベントが一覧表示されます。呼び出しツリーの各イベントには、呼び出し元関数の実行時間が割合で表示されます。このメトリクスを使用して、生成されたコードのパフォーマンス ボトルネックを特定できます。呼び出しツリーで対応するイベントをクリックして、プロファイリング タイムラインの特定のイベントに移動することもできます。
ファイル
GPU プロファイリング レポートを開くには、[レポートを開く] ボタンを使用します。既定では、gpuPerformanceAnalyzer
関数は次の場所に gpuProfiler.mldatx
レポート ファイルを生成します。
codegen/target/fcn_name/html
ここで、target
は次のとおりです。
mex
(CUDA MEX)lib
(CUDA ライブラリ)dll
(CUDA ダイナミック ライブラリ)
fcn_name
は、MATLAB® エントリポイント関数の名前です。
メモ
gpuPerformanceAnalyzer
は、同じコードに対して同じタイプの出力を生成するたびに、以前のビルドからファイルを削除します。以前のビルドのファイルを保持する場合は、別のビルドを開始する前に、それらを別の場所にコピーします。
フィルター処理オプション
ツールストリップの [フィルター] セクションを使用してレポートにフィルターを適用できます。
プロファイリング セッション全体を表示 — このオプションを使用して、初期化と終了を含むアプリケーション全体のプロファイリング結果を表示します。
1 回の実行を表示 — このオプションを使用して、生成コードの単一の反復に対するプロファイリング結果を表示します。
イベントのフィルター処理:
しきい値 (ms) — 指定したしきい値より短いイベントをスキップします。
メモリの割り当て/解放 — GPU デバイスのメモリ割り当てと割り当て解除に関連するイベントを CPU アクティビティ バーに表示します。
メモリ転送 — ホストからデバイス、およびデバイスからホストへのメモリ転送を表示します。
カーネル — CPU カーネルの起動と GPU カーネルのアクティビティを表示します。
他のイベント — 同期や GPU の待機など、その他の GPU 関連イベントを表示します。
制限
[関数] 行と [ループ] 行では、イベント バーの右側にある上矢印と下矢印を使用して、呼び出し元と呼び出し先の関数とループの間を移動できます。短いイベントの場合、上矢印と下矢印を使用して呼び出し元の関数またはループに戻ることができない場合があります。このような場合は、呼び出しツリーを使用して関数またはループに移動します。
GPU パフォーマンス アナライザーは、行にイベントが含まれていない場合でも、行ヘッダーを表示します。
低いズーム レベルでは、GPU パフォーマンス アナライザーは、短い間隔で区切られた短いイベントの密集したエリアを単一のイベントとして表します。高いズーム レベルでは、GPU パフォーマンス アナライザーは個々のイベントを表示します。ただし、イベントの継続時間が極端に短い場合は、高いズーム レベルでも、このイベントをタイムライン プロット上にレンダリングできない可能性があります。
GPU パフォーマンス アナライザーは、単一の行を使用してすべての GPU イベントを表します。複数の CUDA ストリームの場合、[GPU アクティビティ] 行にオーバーラップ イベントが含まれることにより、[洞察] パネルでの占有率の計算が不正確になる可能性があります。たとえば、cuDNN などの深層学習ライブラリが複数の CUDA ストリームを使用する場合があります。