0

我希望收集在 GPU 上的设备级别发生的事件的痕迹。

CPU的背景/类比:

在 CPU 上,当进程 A 运行时,它可能会被另一个用户级进程 B、系统/内核进程、各种中断(如硬件中断、网络中断、管理程序相关的中断等)中断。要衡量这些,理想情况下,我必须制作一个内核补丁,该补丁将捕获调度程序和中断托盘中所有进程和中断的开始和结束时间。使这些内核数据结构对用户级可见,然后从用户级程序中重复读取它们。

我想为 GPU 做类似的事情。如何捕获这些中断和后台进程的时间戳?在我看到的文献中,它nvidia-smi可用于收集时间戳,但我非常不清楚如何实际检测 GPU 以获得我需要的东西。

谁能指出参考资料或告诉我如何使用GPU来获取时间戳?或者具体来说,使用nvprof,cuda-memcheck来达到同样的目的?

4

1 回答 1

1

您可以使用clock() 或 clock64() 函数获取时间戳。例如,您可以使用这些来捕获块的开始和结束时间,并了解块调度程序是如何工作的。

您还可以检测您的代码以对内核的特定部分进行计时。这可以用来获得对 GPU 内部工作原理的惊人了解。

在 CUDA 的早期,我在调整代码时经常使用它。然而,现在nvvp 分析器非常好,以至于很少需要手动代码检测。

但是请注意,SM 的中断方式与 CPU 不同。较新的 GPU 能够暂停长时间运行的内核以允许 GUI 保持交互,尤其是在调试器会话期间。但是没有中断来处理 I/O 或调度,因为 I/O 硬件全部由主机管理,调度完全在硬件中执行。同样,没有后台进程,因为这些任务由 CPU 处理得更好。

于 2018-03-31T23:22:21.757 回答