如果您有多个连续的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需要等到最后一个事件被记录下来才能记录所有的时间。这是对的吗?
谢谢!
答案 0 :(得分:1)
如果它们都在同一个流或默认流中执行,它们将按顺序执行,所以我会说是,如果你只同步最后一个,那么其他应该完成。我不保证,因为我从未测试过它。我建议你用一个简单的情况来测试它,你同步这两个事件或只是最后一个,然后比较时间。