为了衡量 CUDA 程序的指标/事件,我尝试使用命令行,如下所示:
nvprof --metrics <<metric_name>>
我还在可视化探查器nvvp
上测量了相同的指标。我注意到我得到的值没有区别。
当我选择像achieved_occupancy
这样的指标时,我注意到输出有所不同。但这因每次执行而异,这可能就是为什么我每次运行它都会得到不同的结果,无论我使用的是nvvp
还是nvprof
。
问题:
我的印象是nvvp
和nvprof
完全相同,nvvp
只是建立在nvprof
之上的GUI,易于使用。然而,我得到了这个建议:
始终使用可视探查器。切勿使用命令行。
另外,这个问题说:
我不想使用命令行探查器,因为我需要全局加载/存储效率、重放和 DRAM 利用率,这在可视探查器中更加明显。
除了像achieved_occupancy
这样的"动态"指标,我从未注意到结果有任何差异。那么,这个建议有效吗?nvprof
的工作方式是否存在某种缺陷?我想知道使用可视化分析器而不是命令行表单的优势(如果有的话)。
更具体地说,是否存在nvprof
给出错误结果的指标?
注意:
我的问题与这个或这个不同,因为这些问题是关于nvvp
和Nsight之间的区别。
我不知道为什么有人会给你建议:
切勿使用命令行。
假设通过"命令行",您实际上意味着nvprof
.这是不明智的。在某些情况下,使用nvprof
. (请注意,如果您实际上指的是命令行探查器,那么该建议可能有些明智,尽管仍然是一个偏好问题。 它与nvprof
是分开的,因此具有单独的学习曲线。 我个人会使用nvprof
而不是命令行分析器。
nvvp
在引擎盖下使用nvprof
,以便完成其所有测量工作。 然而,nvvp
可以以各种有趣的方式组合测量的指标,例如促进指导分析。
nvprof
不应该给你"错误的结果",如果出于某种原因,那么nvvp
应该同样容易受到此类错误的影响。
使用nvvp
与nvprof
可能只是品味或偏好的问题。
许多人会喜欢GUI的便利性。nvvp
GUI 提供了nvprof
没有的"引导分析"模式。 我敢肯定,如果您浏览文档,可以创建其他差异的详尽列表。 但无论nvvp
做什么,它都使用nvprof
. 它没有查询设备探查器数据的替代方法 - 它使用nvprof
。
当使用nvvp
不方便时,我会使用nvprof
,也许当我在难以或不可能启动nvvp
的计算群集节点上运行时。 如果您正在进行有针对性的分析(测量单个指标,例如shared_replay_overhead
-nvprof
肯定比启动 GUI 并运行会话更快),或者如果您正在收集大量运行的表格生成指标。
在大多数其他情况下,我个人会使用nvvp
. 时间轴功能本身比尝试从nvprof --print-gpu-trace ...
的输出中组装一个序列要方便得多,与时间线的信息基本相同。