Как собрать значение события каждый раз, когда функция ядра CUDA вызывается с помощью nvprof? - PullRequest
0 голосов
/ 29 июня 2018

Профилирование программ CUDA с помощью nvprof.

Я описал проблему в Как собирать значение события каждый раз, когда вызывается функция ядра?

Я снова отправляю сообщение о проблеме.

С nvprof --events tex0_cache_sector_queries --replay-mode kernel ./matrixMul,

или nvprof --events tex0_cache_sector_queries --replay-mode application ./matrixMul,

что мы можем собрать значения событий результата:

==40013== Profiling application: ./matrixMul
==40013== Profiling result:
==40013== Event result:
"Device","Kernel","Invocations","Event Name","Min","Max","Avg","Total"
"Tesla K80 (0)","void matrixMulCUDA<int=32>(float*, float*, float*, int, int)",301,"tex0_cache_sector_queries",0,30,24,7224

Выше приведен итог. 301-кратное значение вызова tex0_cache_sector_queries , вызываемое функцией ядра matrixMulCUDA. Он просто имеет значение min, max, avg, total для вызова 301 раза, что является итоговым результатом.

Я хочу собрать полные 301 раз значения tex0_cache_sector_queries, которые каждый раз вызывается matrixMulCUDA. С другой стороны, каждый раз, когда вызывается функция ядра matrixMulCUDA, я хочу получить значение события tex0_cache_sector_queries. Как его собрать?

1 Ответ

0 голосов
/ 11 июля 2018

1 прогон с:

nvprof --pc-sampling-period 31 --print-gpu-trace --replay-mode application \
--export-profile application.prof --events tex0_cache_sector_queries ./matrixMul

2 импортирует application.prof в визуальный профилировщик:

результат визуального профилирования

3 следуйте указателю на рисунке, который получает каждый вызов значения события каждой функции ядра.

4 параметр --print-gpu-trace: Печать отдельных вызовов ядра (включая CUDA memcpy / memset's) и сортировка их в хронологическом порядке. В режиме профилирования событий / метрик показ событий / метрик для каждого вызова ядра может решить эту проблему. print-gpu-trace

...