1

我在主机上有一个处理循环,我在 GPU 流中记录一个事件。然后另一个流等待该事件(等待事件的状态“设置”或“真”)。这个函数(cudaStreamWaitEvent)是否会取消设置这个事件(所以,将其切换为“unset”或“false”)?如果没有,我可以使用什么 CUDA 函数来取消设置此事件?

4

1 回答 1

2

这听起来很像一个XY 问题。您最好在更高的层次上描述您正在尝试完成什么,或者您面临或认为您面临什么问题。

cudaStreamWaitEvent不会“取消”事件。

当在流中遇到事件时,cudaStreamWaitEvent将解除阻塞,并且对同一事件的任何后续调用cudaStreamWaitEvent将立即解除阻塞(假设cudaEventRecord再次为该事件发出 no)。这种行为很容易用一个简单的代码示例来证明。

“取消设置” cudaEvent 的函数是cudaEventRecord(). 在该事件被记录后发出的任何cudaStreamWaitEvent调用都将再次等待,直到再次遇到它。

您可能需要阅读 和 的运行时 APIcudaEventRecord文档cudaStreamWaitEvent。请注意以下摘录:

cuda事件记录:

如果之前在事件中调用了 cudaEventRecord(),则此调用将覆盖事件中的任何现有状态。任何检查事件状态的后续调用将仅检查对 cudaEventRecord() 的最近调用的完成情况。

cudaStreamWait事件:

该流stream将仅等待最近对 cudaEventRecord() on 的主机调用完成event

于 2015-08-15T18:51:16.330 回答