1
CUDA 커널을 프로파일 링 할 수있는 옵션이 있습니까? 전체가 아니라 오히려 그 일부입니다. 일부 장치 기능 호출이 있고 시간을 측정하고 싶습니다. NVIDIA Visual Profiler에서 설정할 수있는 플래그/이벤트/지침이 있습니까? 또는 cudaEventCreate
및 이와 유사한 기능을 수동으로 삽입해야합니다.커널 내부의 CUDA 프로파일 링
CUDA 커널을 프로파일 링 할 수있는 옵션이 있습니까? 전체가 아니라 오히려 그 일부입니다. 일부 장치 기능 호출이 있고 시간을 측정하고 싶습니다. NVIDIA Visual Profiler에서 설정할 수있는 플래그/이벤트/지침이 있습니까? 또는 cudaEventCreate
및 이와 유사한 기능을 수동으로 삽입해야합니다.커널 내부의 CUDA 프로파일 링
수동으로 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이므로 타이밍 오버 헤드를 뺄 수 있습니다.
클럭()이 SM 당 로컬 카운터를 반환하지 않습니까? – KiaMorot
이 답변 중독 : http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#time-function – KiaMorot
예. 그러나 우리는 같은 SM의 시간들 사이의 차이점 만 취하는 한 중요하지 않습니다. (동적 인 병렬 처리는 실제로 여기서 문제를 일으킬 것입니다. 간단히 말해서 나는 관심있는 코드가 다른 커널을 시작하지 않는다고 가정했습니다). – tera