Я пытаюсь понять разницу между выполнением синхронизации ядра с использованием таймеров CUDA (событий) и регулярных методов синхронизации процессора (gettimeofday
на Linux и т. Д.).Таймеры CUDA - процессор против GPU?
От чтения http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/ раздела 8.1, мне кажется, что единственное реальное различие заключается в том, что при использовании таймеров ЦП необходимо помнить о синхронизации графического процессора, поскольку вызовы асинхронны. Предположительно, API-интерфейсы CUDA делают это для вас.
Так это действительно вопрос:
- С GPU событий вам не нужно явно вызывать
cudaDeviceSynchronize
- С GPU событий вы получите по своей сути независимый от платформы синхронизации API, в то время как с CPU вам необходимо использовать отдельные API для каждой ОС
?
Заранее благодарен
В целом я согласен с вашим ответом, и я согласен с тем, что ОП имеет концепции в основном правильные. Однако я не уверен, что согласен с этим утверждением: «в то время как события таймера cuda зависят только от кода GPU». По крайней мере, на linux я могу обернуть события таймера cuda вокруг кода, который является чисто хост-кодом (даже не требуется CUDA в моей программе, кроме механизма синхронизации cudaEvents), и, похоже, точное время выполнения кода хоста , из того, что я могу сказать. Таким образом, мне кажется, что cudaEvents, в истекшее время, будет зависеть от надмножества CPU и кода графического процессора, который происходит между ними. –
Хорошая точка. Кажется, вы не единственный, кто нашел, что это правда. См. Соответствующий вопрос SO [здесь] (http://stackoverflow.com/a/5846331/832648). – Justin