Если у вас есть несколько последовательных событий 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. Затем ЦП нужно только подождать, пока не будет записано последнее событие, прежде чем он запишет тайминги для всех. Это правильно?
Спасибо!