我知道如何使用CUDA事件来计时一个CUDA内核的执行时间,这对于简单的情况来说是很棒的。但是在现实世界中,一个算法通常由一系列内核组成(例如,CUB::DeviceRadixSort
算法启动了许多内核来完成任务)。如果你在一个有很多其他流和内核的系统上运行你的算法,那么每个内核启动之间的差距会根据其他工作在你的流的启动之间被安排的高度变化,这并不少见。如果我想让我的算法运行得更快,我不在乎它花在等待资源上的时间。我关心它实际执行的时间。
所以问题是,是否有办法在第一个内核启动之前在流中插入一个标记,并在上一个内核启动后再读取它,并让它告诉您执行流所花费的实际时间,而不是端到端墙时钟的总时间?也许CUPTI中有什么东西能做到这一点?
发布于 2022-06-12 15:15:36
您可以使用Nsight系统或Nsight Compute。(https://developer.nvidia.com/tools-overview)
在Nsight系统中,您可以分析每个流的时间线。此外,您还可以使用Nsight Compute来分析每个CUDA内核的详细信息。我想Nsight Compute会更好,因为您可以检查有关GPU性能的各种指标,并获得内核优化方面的提示。
https://stackoverflow.com/questions/72594902
复制