2011-06-28 29 views
0

如果您有多個想要時間連續的CUDA事件(例如cudaMemcpy,然後是內核啓動,然後是另一個cudaMemcpy),它是安全/適當/準確的僅在最後一個事件上同步?例如:cuda中的連續事件時序

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需要等到最後一個事件被記錄後才記錄所有事件的時間。它是否正確?

謝謝!

回答

1

如果它們全部在同一個流或默認流中執行,它們將按順序執行,所以我會說是,如果只同步最後一個,其他應該完成。我不保證它,因爲我從來沒有測試過它。我建議你用一個簡單的例子來測試它,在這種情況下你可以同步兩個事件或者只是最後一個,然後比較時間。