我希望收集在GPU上设备级别发生的事件的痕迹。
cpu上的背景/类比:
在CPU上,当一个过程A正在运行时,它可能会被另一个用户级的进程B,System/System/内核过程,各种中断(例如硬件中断,网络中断,与Hypervisor相关的中断等(中断,以便测量这些,理想情况下,我必须制作一个内核补丁,该补丁将捕获调度程序和中断托盘中所有过程的开始和结束时间。使这些内核数据结构可见到用户级别,然后从用户级程序中重复阅读它们。
我想为GPU做类似的事情。我如何捕获这些中断和背景过程的时间戳?在文献中,我看到nvidia-smi
可用于收集时间戳,但是我对如何如何清楚如何了解实际上是仪器GPU以获取我的需求。
任何人都可以指出参考文献还是告诉我如何仪器获得时间戳的GPU?或具体来说,将nvprof
,cuda-memcheck
用于相同的目的?
您可以使用clock((或clock64((函数获得时间戳。您可以使用这些捕获块的开始和结束时间并了解块调度程序的工作方式。
您还可以仪器代码来计时内核的特定部分。这可以用来获得对GPU内部运作的令人惊讶的见解。
在CUDA的早期,我在调整代码时经常使用它。然而,如今NVVP的profiler非常好,以至于很少需要手动代码仪器。
请注意,SMS的中断方式与CPU的中断方式没有。较新的GPU能够中止长期运行的内核,以使GUI保持互动性,尤其是在调试器会议期间。但是,没有中断可以处理I/O或进行调度,因为I/O硬件全部由主机管理,并且计划完全在硬件中执行。同样,没有背景过程,因为CPU可以更好地处理此类任务。