如何在无头节点上分析 CUDA 代码?

How to profile CUDA code on a headless node?

我正在开发一个我想分析的 CUDA 应用程序。到目前为止,我只使用了命令行分析器 nvprof,它只显示汇总的统计信息。

我考虑过使用 GUI 分析器 NVVP。问题是我正在 运行 运行应用程序的远程 Linux 节点没有任何 GUI(甚至 X.org)。此外,即使我设法在远程节点上获得了一些 X11 堆栈,但在整个分析过程中让我自己的笔记本电脑保持活动状态也是非常乏味的。

我尝试通过以下方式收集所有需要的信息:

 nvprof --analysis-metrics -o application.nvprof ./myapplication

然后我将输出文件复制到笔记本电脑上并在 NVVP 中查看。但是,这存在三个问题。

首先,当我将输出文件加载到 NVVP 时,我没有得到任何文件传输信息。 NVVP window.

中根本没有显示它

其次,调用图完全扭曲。内核启动之间的间隔至少比内核持续时间大 100 倍,这使得任何依赖性和流分析都不可能。

最后,我的应用程序使用了大量 GPU 内存。在分析过程中,设备内存不足,而在独立 运行.

期间并非如此

我应该如何在无头节点上正确分析我的 CUDA 应用程序?

NVVP 支持无头节点作为第一个 class 公民。远程分析是 NVVP 的一大特色。

其工作方式是 NVVP 运行 在启用 GUI 的本地主机上运行,​​并在无头计算机上调用 nvprof,在那里生成所需的文件,将文件复制过来,然后打开它们。所有这一切都是透明和自动发生的。您可以像往常一样从 NVVP 运行 进一步分析,它会为您重复这些步骤。

要使用远程分析,打开 NVVP,然后 File->New Session。添加一个连接而不是使用 Local,放入无头机器的详细信息。单击 Manage... 将 NVVP 指向远程计算机上的工具包路径。完成一次性设置后,像往常一样输入可执行文件的路径和 运行。

您可以在 relevant documentation 中阅读有关远程分析的信息。