Если я правильно понимаю, когда вы запускаете ядро CUDA в асинхронном режиме, оно может начать выполнение немедленно или может дождаться завершения предыдущих асинхронных вызовов (передачи, ядра и т. Д.). (Я также понимаю, что в некоторых случаях ядра могут работать одновременно, но пока я хочу проигнорировать это).
Как узнать время между запуском ядра («постановка в очередь») и фактическим началом его выполнения. Фактически, я просто хочу знать среднее «время ожидания в очереди» для всех запусков за один запуск моей программы (обычно это десятки или сотни тысяч запусков ядра).
Я могу легко вычислить среднее время выполнения на ядро с событиями (~ 500 мкс). Я попытался смоделировать - я отбрасывал результаты CLOCK()
каждый раз, когда ядро запускается, с мыслью, что затем я смогу определить, какой длины была очередь запуска при запуске каждого ядра. Но CLOCK()
не имеет достаточно высокой точности (0,01 с) - иногда кажется, что одновременно запускается до 60 ядер, хотя на самом деле, конечно, многие не запускаются.