2016-10-30 1 views
0

OpenCL 세계에는 지연 대기, 제출, 시작 및 종료 시간 (나노초 단위)과 같은 모든 프로파일 정보를 반환하는 함수 clGetEventProfilingInfo이 있습니다. 내가 원할 때마다 나는 그 정보를 printf에게 줄 수 있기 때문에 매우 편리하다.CUDA 프로그램의 코드 내 프로파일 링이 있습니까?

PyOpenCL와 예를 들어 내 작업에 아주 유익이

profile = event.profile                 
print("%gs + %gs" % (1e-9*(profile.end - profile.start), 1e-9*(profile.start - profile.queued))) 

과 같은 코드를 작성할 수 있습니다.

nvprofcompany과 같은 외부 프로파일 링 도구 대신 코드에서 이러한 정보를 얻을 수 있습니까?

+1

cudaEvent 시스템은'cudaEventElapsedTime'을 통해'profile.end-profile.start'와 동일한 기능을 제공합니다 –

답변

1

신속하고 가벼운 타이밍을 위해 cudaEvent API을보고 싶을 수 있습니다. 위의 링크에서

발췌 : 당신이 더 완전한 기능을 갖춘 프로파일 라이브러리를 원하는 경우에

cudaEvent_t start, stop; 
cudaEventCreate(&start); 
cudaEventCreate(&stop); 


cudaMemcpy(d_x, x, N*sizeof(float), cudaMemcpyHostToDevice); 
cudaMemcpy(d_y, y, N*sizeof(float), cudaMemcpyHostToDevice); 

cudaEventRecord(start); 
saxpy<<<(N+255)/256, 256>>>(N, 2.0f, d_x, d_y); 
cudaEventRecord(stop); 

cudaMemcpy(y, d_y, N*sizeof(float), cudaMemcpyDeviceToHost); 

cudaEventSynchronize(stop); 
float milliseconds = 0; 
cudaEventElapsedTime(&milliseconds, start, stop); 

printf("Elapsed time: %f ms\n", milliseconds); 

, 당신은 CUPTI 봐야한다.

1

nvprof 이외의 도구는 지금까지 프로파일 링 데이터를 수집 할 수 없습니다. 그러나 코드에서 nvprof을 사용할 수 있습니다. this Nvida document을보십시오. cuProfilerStart()cuProfilerStop()을 사용하면 코드의 일부만 검사 할 수 있습니다. 내부에 있습니다 cuda_profiler_api.h

관련 문제