nvvp(视觉)和 nvprof(命令行)的输出有什么不同吗?

Is there any difference in the output of nvvp (visual) and nvprof (command line)?

为了测量 CUDA 程序的 metrics/events,我尝试使用如下命令行:

nvprof --metrics <<metric_name>>

我还在 Visual profiler nvvp 上测量了相同的指标。我注意到我得到的值没有差异。

当我选择 achieved_occupancy 这样的指标时,我注意到输出有所不同。但这随每次执行而变化,这可能就是为什么我每次 运行 都会得到不同的结果,无论我使用的是 nvvp 还是 nvprof.

问题:

我的印象是 nvvpnvprof 完全一样,而且 nvvp 只是构建在 nvprof 之上的 GUI,以便于采用。但是我得到了这个建议:

Always use the visual profiler. Never use the command line.

另外,this question 说:

I do not want to use the command line profiler as I need the global load/store efficiency, replay and DRAM utilization, which are much more visible in the visual profiler.

除了 'dynamic' 指标,如 achieved_occupancy,我从未注意到结果有任何差异。那么,这个建议有效吗? nvprof 的工作方式是否存在某种缺陷?我想知道在命令行形式上使用可视化分析器的优势,如果有的话。

更具体地说,是否有 nvprof 给出错误结果的指标?

注:

我的问题与this or this不一样,因为这些问的是nvvp和Nsight之间的区别。

我不确定为什么有人会给你建议:

Never use the command line.

假设 "command line" 你实际上是指 nvprof这不明智。 在某些情况下使用 nvprof 是有意义的。 (请注意,如果您实际上是指 命令行分析器 ,那么该建议可能有点明智,但仍然是偏好问题。它与 nvprof 分开,因此有一个单独的学习曲线。我个人会使用 nvprof 而不是 the command line profiler。)

nvvp 在后台使用 nvprof,以便完成 所有 的测量工作。然而 nvvp 可能会以各种有趣的方式组合测量指标,例如便于引导分析。

nvprof 不应该给你 "wrong results",如果出于某种原因它给了你,那么 nvvp 应该同样容易受到此类错误的影响。

使用 nvvpnvprof 可能只是品味或偏好的问题。

许多人会喜欢 GUI 的便利性。 nvvp GUI 提供了 "Guided Analysis" 模式,而 nvprof 没有。如果您浏览 documentation,我相信可以创建一个详尽的其他差异列表。但是无论 nvvp 做什么,它都会使用 nvprof 来完成。它没有其他方法来查询设备的分析器数据——它使用 nvprof.

我会在不方便使用 nvvp 时使用 nvprof,也许当我 运行 在难以或不可能启动 nvvp 的计算集群节点上时.如果您正在进行有针对性的分析(测量单个指标,例如 shared_replay_overhead - nvprof 肯定比启动 GUI 和 运行 会话更快),或者如果您正在通过大量运行收集用于表格生成的指标。

在大多数其他情况下,我个人会使用nvvp。时间线功能本身比尝试从 nvprof --print-gpu-trace ... 的输出中 assemble 脑中的序列要方便得多,后者与时间线的信息基本相同。