CUDA事件订单

时间:2014-08-15 09:08:14

标签: cuda

我有关于cuda事件和异步计算的问题,我不确定在那种情况下何时触发事件(伪代码):

cudaStream_t oStream;
cudaEvent_t oEvent;
cudaStreamCreate( &oStream);
cudaEventCreate( &oEvent);
MyKernel1<<<..,..,.., oStream>>>();
cudaEventRecord( oStream, oEvent);
MyKernel2<<<..,..,.., oStream>>>();
cudaEventSynchronize( oEvent );

oEvent之后或MyKernel1之后是MyKernel2,这意味着主持人何时在cudaEventSynchronize之后再次开始处理? (当然,在我的MyKernel1呼叫在主机上完成时MyKernel2未完成{/ p>

1 个答案:

答案 0 :(得分:4)

oEvent&#34;火灾&#34; MyKernel1()完成后(在MyKernel2()开始执行之前)(已完成)。

内核执行是序列化的,因为它们发布到同一个流。 将内核发布到流中,cudaEventRecord发送到流应该都是异步的。

cudaEventSynchronize()语句将导致主机线程暂停直到oEvent完成,然后允许主机线程继续。这意味着主机线程可以在MyKernel2执行时继续,但不能在MyKernel1执行时继续。