2013-05-30 7 views
1

CUDA 커널을 프로파일 링 할 수있는 옵션이 있습니까? 전체가 아니라 오히려 그 일부입니다. 일부 장치 기능 호출이 있고 시간을 측정하고 싶습니다. NVIDIA Visual Profiler에서 설정할 수있는 플래그/이벤트/지침이 있습니까? 또는 cudaEventCreate 및 이와 유사한 기능을 수동으로 삽입해야합니다.커널 내부의 CUDA 프로파일 링

답변

3

수동으로 clock() 또는 clock64() 기능을 사용하여 커널의 특정 부분 시간을 초과 할 수 있습니다 :

unsigned long long* time_spent; 

__global__ void kernel(...) 
{ 
    unsigned int t1, t2; 
    // ... 
    t1 = clock(); 
    // code of interest 
    t2 = clock(); 
    atomicAdd(&time_spent, t2 - t1); 
} 

'시계()`가 공식적으로 clock_t는를 반환하지만 내가 얼마나 분명하게 서명되지 않은 INT의 명시 적 사용을 선호 위의 코드를 올바르게만큼 시간 제한 코드가 완료 될 때까지 2 개 이상의^32-1 사이클하지 않는 한 시계 값의 랩 어라운드을 (처리합니다.

것이 확인에도 시간을

t1 = clock(); 
    t2 = clock(); 
01 코드를 확인

back-to-back이므로 타이밍 오버 헤드를 뺄 수 있습니다.

+0

클럭()이 SM 당 로컬 카운터를 반환하지 않습니까? – KiaMorot

+0

이 답변 중독 : http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#time-function – KiaMorot

+0

예. 그러나 우리는 같은 SM의 시간들 사이의 차이점 만 취하는 한 중요하지 않습니다. (동적 인 병렬 처리는 실제로 여기서 문제를 일으킬 것입니다. 간단히 말해서 나는 관심있는 코드가 다른 커널을 시작하지 않는다고 가정했습니다). – tera