gpt4 book ai didi

events - 在CUDA中重用事件变量是 "worth it"吗?

转载 作者:行者123 更新时间:2023-12-05 04:13:08 26 4
gpt4 key购买 nike

在 CUDA 中使用事件时,我通常会创建一个事件并立即将其记录在某个流中。同步后,我懒得保留那个 cudaEvent_t,在别处使用它 - 我只是销毁它。

除了避免事件创建和销毁的开销之外,“回收”事件还有其他好处吗?如果不是,为什么 nVIDIA 费心将 cudaEventCreate()cudaEventRecord() 分开?

最佳答案

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

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

您会看到在整个过程中,您需要在主机端和设备端内存中有一些空间来存储时间。在我看来,它是在 eventCreate()/eventDestroy() 中分配/释放内存的完美位置,就像 malloc()/免费()。它看起来也是您在重复记录时间(重用事件)时想要避免的完美开销。

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

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

关于events - 在CUDA中重用事件变量是 "worth it"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38355603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com