【发布时间】:2017-11-07 21:34:11
【问题描述】:
我正在开发一个我想要分析的 CUDA 应用程序。到目前为止,我使用的只是命令行分析器nvprof,它只显示汇总统计信息。
我考虑过使用 GUI 分析器 NVVP。问题是我运行应用程序的远程 Linux 节点没有任何 GUI(甚至是 X.org)。此外,即使我设法在远程节点上获得了一些 X11 堆栈,在整个分析过程中保持我自己的笔记本电脑处于活动状态也是非常乏味的。
我尝试通过以下方式收集所有需要的信息:
nvprof --analysis-metrics -o application.nvprof ./myapplication
然后我将输出文件复制到我的笔记本电脑上并在 NVVP 中查看。但是,这有三个问题。
首先,当我将输出文件加载到 NVVP 时,我没有得到任何文件传输信息。在 NVVP 窗口中根本不显示。
其次,调用图完全扭曲。内核启动之间的间隔至少比内核持续时间大 100 倍,这使得任何依赖关系和流分析都不可能。
最后,我的应用程序使用了大量的 GPU 内存。在分析期间,设备内存不足,而在独立运行期间不会出现这种情况。
我应该如何在无头节点上正确分析我的 CUDA 应用程序?
【问题讨论】:
-
您描述的方法是正确的方法。 nvprof->nvvp 方法存在潜在限制,仅在使用 nvvp 时可能不存在。我不知道您所说的“文件传输信息”究竟是什么意思,但是当您使用
nvprof捕获指标时,还有其他类型的数据没有被收集。研究 nvprof 文档并了解它对捕获的内容有限制,具体取决于您选择的模式。我从未见过您报告的第二个问题。对于第三个问题:限制 profiling 的范围。 -
并非所有可以在 nvvp 中完成的事情都可以通过将 nvprof 导入到 nvvp 中来完成。例如,引导分析非常有限。
标签: cuda profiling nvprof nvvp