сроки последовательных событий в cuda - PullRequest
0 голосов
/ 28 июня 2011

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

Спасибо!

1 Ответ

1 голос
/ 28 июня 2011

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

...