среднее время между запуском ядра и выполнением? - PullRequest
1 голос
/ 13 июля 2011

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

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

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

1 Ответ

1 голос
/ 07 марта 2012

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

Код для QueryPerformanceTimer

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...