请参见下图 Nvidia Nsight 2.2 分析会话(Win7、MSVC++ 10 Pro、CUDA 4.2、GTX 670)。
在第一个主机线程 (26.8%) 上,我从 CUDA API 获取函数调用名称。是否可以从主机进程中的第二个线程 (13.6%) 正在执行的用户定义函数中获取函数调用名称?如果是这样,怎么做?
Paul,默认情况下不支持此功能。
使用 NVIDIA 工具扩展 (NVTX) 库,您可以手动检测您的代码。此库安装在目录 C:\Program Files\NVIDIA GPU Computing Toolkit\nvToolsExt 中,带有 Nsight Visual Studio Edition(所有版本)或 CUDA Toolkit 5.0 RC。5.0 RC 中的 Visual Profiler 支持 NVTX。
该库附带两个示例,向您展示如何使用该库。NvtxMultithread.cpp 示例提供了一个帮助程序库。感兴趣的功能是
nvtxRangePushA
nvtxRangePop
或者,如果您使用的是 C++,则帮助程序库具有可用作作用域的帮助程序
nvtx::ScopedRange range(__FUNCTION__)
在每个函数的顶部。
可以通过使用 cl.exe 选项 /Gh 和 /GH 来自动执行此操作,但这需要编写程序集。
此演示文稿可能会有所帮助。Parallel Nsight:分析和优化大规模并行应用程序。