它值得吗?#34;在CUDA中重用事件变量?

时间:2016-07-13 15:13:53

标签: events cuda

在CUDA中使用事件时,我通常会创建一个事件并立即将其记录在某个流上。在同步之后,我不想再坚持SELECT b, a, c FROM table1 UNION SELECT * FROM t2view ,在其他地方使用它 - 我只是将其销毁。

除了避免事件创建和破坏的开销之外,回收"还有其他好处吗?事件?如果没有,为什么cudaEvent_t费心将nVIDIAcudaEventCreate()分开?

1 个答案:

答案 0 :(得分:1)

首先,我试图回答问题"开销可能是什么"。因为我们没有CUDA事件的源代码。一切都基于一些合理的猜测。您可以做出完全不同的设计决策来实现具有相同或相似行为的CUDA事件。

在计时任务中,我们知道至少在某个地方记录了事件的时间。由于事件发生在设备端,我认为时间记录在设备端内存中,以避免在录制期间使用PCIe(高开销)。最终你从主机端获得时间,记录的时间必须在某个时间通过PCIe传输(可能是eventSync())。

在整个过程中,您会看到主机和设备端内存都需要一些空间来存储时间。对我来说,在eventCreate() / eventDestroy()中分配/释放内存非常合适,就像malloc() / free()一样。在重复记录时间时(重复使用事件),它看起来像是一个完美的开销。

这里有两种类型的开销,分配设备和主机空间,以及PCIe传输。这是我的猜测。也许您可以采用另一种方式来实现计时功能,而不会涉及这些开销。

最后,避免这些开销似乎是nVidia使用单独的eventCreate()的一个很好的理由。