2017-03-09 4 views
0

nvprof을 사용하여 CUDA 커널 실행 횟수를 계산할 수 있습니까?nvprof를 사용하여 CUDA 커널 실행 횟수를 계산하십시오.

==537== Profiling application: python tf.py 
==537== Profiling result: 
Time(%)  Time  Calls  Avg  Min  Max Name 
51.73% 91.294us  20 4.5640us 4.1280us 6.1760us [CUDA memcpy HtoD] 
43.72% 77.148us  20 3.8570us 3.5840us 4.7030us [CUDA memcpy DtoH] 
    4.55% 8.0320us   1 8.0320us 8.0320us 8.0320us [CUDA memset] 

==537== API calls: 
Time(%)  Time  Calls  Avg  Min  Max Name 
90.17% 110.11ms   1 110.11ms 110.11ms 110.11ms cuDevicePrimaryCtxRetain 
    6.63% 8.0905ms   1 8.0905ms 8.0905ms 8.0905ms cuMemAlloc 
    0.57% 700.41us   2 350.21us 346.89us 353.52us cuMemGetInfo 
    0.55% 670.28us   1 670.28us 670.28us 670.28us cuMemHostAlloc 
    0.28% 347.01us   1 347.01us 347.01us 347.01us cuDeviceTotalMem 
... 

답변

1

예, 그것의 가능한 : 내가 무엇을보고하고하는 것은 nprof

는 지금은 실행할 때. 알고 있지 않은 경우에는 documentation과 명령 줄 도움말 (nvprof --help)이 있습니다.

당신이 nvprof의 간단한 사용으로 제공을 요청하고 있습니다 :

./my_application

(무엇보다도)이 출력됩니다 이름으로 커널의 목록, 얼마나 많은 시간을 각 nvprof 하나는 출시되었고, 전체 GPU 사용량 중 차지하는 비율은 각각 어느 정도였습니다.

위의 예 run_on_device에서
$ nvprof ./t1288 
==12904== NVPROF is profiling process 12904, command: ./t1288 
[email protected]: 0x402add 
[email protected]: 0x8 
run on device 
func_A is correctly invoked! 
run on host 
func_A is correctly invoked! 
==12904== Profiling application: ./t1288 
==12904== Profiling result: 
Time(%)  Time  Calls  Avg  Min  Max Name 
98.93% 195.28us   1 195.28us 195.28us 195.28us run_on_device(Parameters*) 
    1.07% 2.1120us   1 2.1120us 2.1120us 2.1120us assign_func_pointer(Parameters*) 

==12904== Unified Memory profiling result: 
Device "Tesla K20Xm (0)" 
    Count Avg Size Min Size Max Size Total Size Total Time Name 
     1 4.0000KB 4.0000KB 4.0000KB 4.000000KB 3.136000us Host To Device 
     6 32.000KB 4.0000KB 60.000KB 192.0000KB 34.20800us Device To Host 
Total CPU Page faults: 3 

==12904== API calls: 
Time(%)  Time  Calls  Avg  Min  Max Name 
98.08% 321.35ms   1 321.35ms 321.35ms 321.35ms cudaMallocManaged 
    0.93% 3.0613ms  364 8.4100us  278ns 286.84us cuDeviceGetAttribute 
    0.42% 1.3626ms   4 340.65us 331.12us 355.60us cuDeviceTotalMem 
    0.38% 1.2391ms   2 619.57us 113.13us 1.1260ms cudaLaunch 
    0.08% 251.20us   4 62.798us 57.985us 70.827us cuDeviceGetName 
    0.08% 246.55us   2 123.27us 21.343us 225.20us cudaDeviceSynchronize 
    0.03% 98.950us   1 98.950us 98.950us 98.950us cudaFree 
    0.00% 8.9820us  12  748ns  278ns 2.2670us cuDeviceGet 
    0.00% 6.0260us   2 3.0130us  613ns 5.4130us cudaSetupArgument 
    0.00% 5.7190us   3 1.9060us  490ns 4.1130us cuDeviceGetCount 
    0.00% 5.2370us   2 2.6180us 1.2100us 4.0270us cudaConfigureCall 
$ 

assign_func_pointer 커널 이름은 다음과 같습니다

다음은 예입니다. 또한 링크 된 문서에 예제 출력이 있습니다.

+0

nprof를 실행할 때 나타나는 문제로이 질문을 업데이트했습니다. 나는 커널이라고 불리는 것을 아무것도 보지 못했다. –

+0

두 가지 가능성을 생각해 볼 수 있습니다. 1. 파이썬 코드가 커널 호출을하지 못하고 있습니다. 적절한 오류 검사를 수행하고 있습니까? 커널이 호출되고 있다는 것을 알고 있습니까? 2. nvprof에 하위 프로세스를 프로파일 링하도록 지시해야 할 수도 있습니다.이를 수행하는 방법은 제가 링크 된 문서에서 다룹니다. 이것은 당신이'tf.py'에서 아마도 정확히 어떤 종류의 작업을하는지에 달려 있습니다 - 아마도 tensorflow. –

+0

알았어, 커널이 호출되지 않았 음이 밝혀졌습니다. –