среднее время между запуском ядра и выполнением?

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

Как узнать время между запуском ядра («постановка в очередь») и фактическим началом его выполнения. Фактически, я просто хочу знать среднее «время ожидания в очереди» для всех запусков за один запуск моей программы (обычно это десятки или сотни тысяч запусков ядра).

Я могу легко вычислить среднее время выполнения на ядро ​​с событиями (~ 500 мкс). Я попытался смоделировать - я отбрасывал результаты CLOCK() каждый раз, когда ядро ​​запускается, с мыслью, что затем я смогу определить, какой длины была очередь запуска при запуске каждого ядра. Но CLOCK() не имеет достаточно высокой точности (0,01 с) - иногда кажется, что одновременно запускается до 60 ядер, хотя на самом деле, конечно, многие не запускаются.


person jmilloy    schedule 13.07.2011    source источник


Ответы (1)


Вместо clock используйте QueryPerformanceTimer, который считает на основе тактов машины.

Код для QueryPerformanceTimer

Во-вторых, инструмент профилирования (Visual Profiler) измеряет только серийные запуски [см. сообщение № 3].

Таким образом, лучший вариант - (1) использовать QueryPerformanceTimer (или Visual Profiler), чтобы получить точное измерение одного запуска, и (2) использовать QueryPerformanceTimer, чтобы получить время нескольких запусков и наблюдать, предполагают ли результаты синхронизации, что асинхронный запуск состоялся.

person akk    schedule 06.03.2012