下の Nvidia Nsight 2.2 プロファイリング セッションの画像を参照してください (Win7、MSVC++ 10 Pro、CUDA 4.2、GTX 670)。
最初のホスト スレッド (26.8%) で、CUDA API から関数呼び出し名を取得します。ホスト プロセスの 2 番目のスレッド (13.6%) によって実行されているユーザー定義関数から関数呼び出し名を取得することは可能ですか? もしそうなら、どのように?
ポール、これはデフォルトではサポートされていません。
NVIDIA Tools Extension (NVTX) ライブラリを使用すると、コードを手動で計測できます。このライブラリは、ディレクトリ C:\Program Files\NVIDIA GPU Computing Toolkit\nvToolsExt に Nsight Visual Studio Edition (すべてのバージョン) または CUDA Toolkit 5.0 RC と共にインストールされます。NVTX は、5.0 RC の Visual Profiler でサポートされています。
ライブラリには、ライブラリの使用方法を示す 2 つのサンプルが付属しています。NvtxMultithread.cpp サンプルは、ヘルパー ライブラリを提供します。気になる機能は、
nvtxRangePushA
nvtxRangePop
または、C++ を使用している場合、ヘルパー ライブラリには、次のように使用できるスコープ付きヘルパーがあります。
nvtx::ScopedRange range(__FUNCTION__)
各関数の上部にあります。
cl.exe オプション /Gh および /GH を使用してこれを自動化することは可能ですが、これにはアセンブリの記述が必要です。
このプレゼンテーションは役立つかもしれません。Parallel Nsight: 超並列アプリケーションの分析と最適化.