在 CUDA 中重用事件“值得”吗?

问题描述 投票:0回答:1

在 CUDA 中使用事件时,我通常创建一个事件并立即将其记录在某个流上。同步后,我懒得保留那个

cudaEvent_t
,在其他地方使用它 - 我只是销毁它。

除了避免事件创建和销毁的开销之外,“回收”事件还有其他好处吗?如果不是,为什么

nVIDIA
费心将
cudaEventCreate()
cudaEventRecord()
分开?

events cuda
1个回答
3
投票

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

在计时任务中我们知道至少事件发生的时间被记录在某处。由于事件发生在设备端,我认为时间记录在设备端内存中,以避免在记录过程中使用 PCIe(高开销)。当您最终从主机端获取时间时,记录的时间必须在某个时候通过 PCIe 传输(可能

eventSync()
)。

您会看到在整个过程中,主机和设备端内存都需要一些空间来存储时间。在我看来,它是在

eventCreate()
/
eventDestroy()
中分配/释放内存的完美位置,就像
malloc()
/
free()
一样。它看起来也像是您在重复记录时间(重用事件)时想要避免的完美开销。

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

最后,避免这些开销似乎是 nVidia 使用单独的

eventCreate()
的一个很好的理由。

© www.soinside.com 2019 - 2024. All rights reserved.