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