【问题标题】:Profiling arbitrary CUDA applications分析任意 CUDA 应用程序
【发布时间】:2018-10-28 10:18:51
【问题描述】:

我当然知道nvvpnvprof 的存在,但由于各种原因nvprof 不想使用我的应用程序,该应用程序涉及大量共享库。 nvidia-smi 可以连接到驱动程序以找出正在运行的内容,但我找不到让 nvprof 附加到正在运行的进程的好方法。

有一个标志 --profile-all-processes 实际上确实给了我一条消息“NVPROF 正在分析过程 12345”,但没有进一步打印出来。我正在使用 CUDA 8。

在这种情况下,我如何获得 CUDA 内核的详细性能细分?

【问题讨论】:

  • 没有一个 CUDA 分析器支持附加到我知道的已经运行的进程。 nvprof 可以分析您已经使用 --profile-all-processes 发现的独立进程,但是必须在其他进程开始之前发出这个 nvprof 命令(以便它在后台运行),并且它必须仍然在运行其他进程结束。有了这个附带条件,您应该能够使用nvprof 分析一个单独的进程。使用--profile-all-processes,不会再打印任何内容,但会在其他进程终止时写入分析器文件。
  • @RobertCrovella 我可以在启动进程之前运行--profile-all-processes,但我无法确定分析器文件的写入位置!例如,如果我使用--log-file log%p.txt,每个进程的日志文件都会出现在与我运行nvprof 相同的目录中,但仅包含单个“Profile process ...”行。
  • 您确实需要指定输出文件名,而且我很确定您必须包含 %p 以便它可以用进程号识别文件名。除此之外,您需要在写入任何分析结果之前让应用程序完成(除非您在应用程序前面调用cudaProfilerStop()),即使在应用程序完成之后,如果要处理大量的分析数据,它写入文件可能需要几分钟或更长时间。
  • 这是我遵循的步骤: 1. 使用nvprof --profile-all-processes --log-file log%p.log & 启动后台日志记录 如果您想使用单独的进程来启动事物,则与号是可选的。此时出现了一个(空)日志文件log5699.log。 2. 我运行了我一直在使用 python t4.py 开发的 numba cuda 应用程序。运行大约需要 10 秒。完成后,会出现一个名为log5704.log 日志文件,该文件具有来自进程5704(即python 进程)的预期分析器输出。 3. 我用kill 5699终止了后台分析。
  • 请不要删除这个。 RC 关于如何使用--profile-all-processes 运行的 cmets 很有用。

标签: linux cuda nvprof nvvp


【解决方案1】:

正如 cmets 建议的那样,您只需确保在要分析的进程之前启动 CUDA 分析器(现在是 NSight Systems 或 NSight Compute,不再是 nvprof)。例如,您可以将其配置为在系统启动时运行。

您无法分析您的应用程序与它是一个“涉及大量共享库的应用程序”无关 - 分析工具可以很好地分析此类应用程序。

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 2017-06-01
    • 2011-08-19
    • 2015-10-23
    • 2011-04-11
    • 2011-01-14
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多