синхронизация последовательных событий в cuda

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

Спасибо!


person amkessel    schedule 28.06.2011    source источник


Ответы (1)


Если все они выполняются в одном потоке или потоке по умолчанию, они будут выполняться последовательно, поэтому я бы сказал «да», если вы синхронизируете только последний, остальные должны быть завершены. Я не гарантирую это, потому что я никогда не проверял это. Я предлагаю вам проверить это на простом случае, когда вы синхронизируете оба события или только последнее, а затем сравните время.

person jmsu    schedule 28.06.2011