Основным преимуществом использования событий CUDA для синхронизации является то, что они меньше подвержены возмущениям из-за других системных событий, таких как пейджинг или прерывания от диска или сетевого контроллера.Кроме того, поскольку cu (da) EventRecord является асинхронным, эффект Гейзенберга меньше при сокращении времени выполнения операций, интенсивно использующих графические процессоры.
Еще одно преимущество событий CUDA заключается в том, что они имеют чистый кроссплатформенный API -нет необходимости переносить gettimeofday () или QueryPerformanceCounter ().
Последнее замечание: будьте осторожны при использовании потоковых событий CUDA для синхронизации - если вы не укажете поток NULL, вы можете свернуть операции синхронизации, которые вы выполнялине собираюсь.Существует хорошая аналогия между событиями CUDA и чтением счетчика меток времени CPU, который является командой сериализации.На современных суперскалярных процессорах семантика сериализации делает синхронизацию однозначной.Как и в случае с RDTSC, вы всегда должны заключать события, которые вы хотите рассчитать, в достаточное количество времени, чтобы время имело смысл (точно так же, как вы не можете использовать RDTSC для значимого времени одной машинной инструкции).