在CUDA中使用事件时,我通常会创建一个事件并立即将其记录在某个流上。在同步之后,我不想再坚持SELECT b, a, c
FROM table1
UNION
SELECT *
FROM t2view
,在其他地方使用它 - 我只是将其销毁。
除了避免事件创建和破坏的开销之外,回收"还有其他好处吗?事件?如果没有,为什么cudaEvent_t
费心将nVIDIA
与cudaEventCreate()
分开?
答案 0 :(得分:1)
首先,我试图回答问题"开销可能是什么"。因为我们没有CUDA事件的源代码。一切都基于一些合理的猜测。您可以做出完全不同的设计决策来实现具有相同或相似行为的CUDA事件。
在计时任务中,我们知道至少在某个地方记录了事件的时间。由于事件发生在设备端,我认为时间记录在设备端内存中,以避免在录制期间使用PCIe(高开销)。最终你从主机端获得时间,记录的时间必须在某个时间通过PCIe传输(可能是eventSync()
)。
在整个过程中,您会看到主机和设备端内存都需要一些空间来存储时间。对我来说,在eventCreate()
/ eventDestroy()
中分配/释放内存非常合适,就像malloc()
/ free()
一样。在重复记录时间时(重复使用事件),它看起来像是一个完美的开销。
这里有两种类型的开销,分配设备和主机空间,以及PCIe传输。这是我的猜测。也许您可以采用另一种方式来实现计时功能,而不会涉及这些开销。
最后,避免这些开销似乎是nVidia使用单独的eventCreate()
的一个很好的理由。