Events cuda中连续事件的计时

Events cuda中连续事件的计时,events,cuda,timing,Events,Cuda,Timing,如果您有多个要计时的连续CUDA事件(在单个流中)(例如,cudaMemcpy之后是内核启动,然后是另一个cudaMemcpy),仅在最后一个事件上同步是否安全/正确/准确?例如: cudaEventRecord(event1_start); // do something cudaEventRecord(event1_stop); cudaEventRecord(event2_start); // do something else cudaEventRecord(event2_stop);

如果您有多个要计时的连续CUDA事件(在单个流中)(例如,cudaMemcpy之后是内核启动,然后是另一个cudaMemcpy),仅在最后一个事件上同步是否安全/正确/准确?例如:

cudaEventRecord(event1_start);
// do something
cudaEventRecord(event1_stop);

cudaEventRecord(event2_start);
// do something else
cudaEventRecord(event2_stop);

cudaEventSynchronize(event2_stop);
cudaEventElapsedTime(&time1, event1_start, event1_stop);
cudaEventElapsedTime(&time2, event2_start, event2_stop);
我的理解是,这些事件和实际的cuda调用被放入FIFO队列。然后,CPU只需等待最后一个事件被记录,然后再记录所有事件的计时。这是正确的吗


谢谢

如果它们都在同一个流或默认流中执行,它们将按顺序执行,因此我会说是的,如果只同步最后一个流,其他流应该完成。我不能保证,因为我从未测试过。我建议您用一个简单的例子来测试它,在这个例子中,您同步两个事件或只同步最后一个事件,然后比较时间