任意CUDA应用程序的性能分析

4
我知道nvvpnvprof的存在,但由于各种原因,nvprof不想与涉及大量共享库的应用程序一起工作。 nvidia-smi可以连接到驱动程序以查找正在运行的内容,但我找不到一个好方法来使nvprof附加到正在运行的进程。
有一个标志--profile-all-processes,它确实给出了一个消息“NVPROF正在分析进程12345”,但没有更多的打印输出。我正在使用CUDA 8。
在这种情况下,如何获得我的CUDA内核的详细性能分解?

6
据我所知,CUDA性能分析器都不支持附加到已经运行的进程。nvprof可以像您已经用--profile-all-processes发现的那样,对独立进程进行分析,但必须在这些其他进程开始之前发出此nvprof命令(以便它在后台运行),并且在其他进程结束时仍然必须在运行中。在此前提下,您应该能够使用nvprof来对单独的进程进行性能分析。使用--profile-all-processes后,将不会有任何其他输出,但是当这些其他进程终止时,将会写入一个性能分析文件。 - Robert Crovella
1
@RobertCrovella我可以在启动进程之前运行--profile-all-processes,但我无法弄清楚分析器文件被写入到哪里!例如,如果我使用--log-file log%p.txt,日志文件将出现在每个进程的同一目录中,而我正在运行nvprof,但除了单个“Profile process ...”行外,没有其他任何信息。 - Ken Y-N
1
你需要指定一个输出文件名,并且我相信你必须包含%p,这样它才能用进程号来识别文件名。除此之外,在任何分析结果被写入之前,你需要让应用程序完成(除非你在应用程序中提前调用了cudaProfilerStop()),即使应用程序完成后,如果有大量的分析数据需要处理,写入文件可能需要几分钟甚至更长时间。 - Robert Crovella
3
这是我所跟随的步骤:
  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终止了后台分析。
- Robert Crovella
1
RC关于如何使用--profile-all-processes运行的评论非常有用。 - interestedparty333
显示剩余3条评论
2个回答

2
正如评论所建议的那样,您只需确保在要分析的进程之前启动CUDA分析器(现在是NSight Systems或NSight Compute,不再是nvprof)。例如,您可以配置它在系统启动时运行。
您无法对应用程序进行分析与其涉及许多共享库无关 - 分析工具可以很好地对这些应用程序进行分析。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接