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