2013-06-14 2 views
0

GTX 650에서 실행되는 CUDA rodinia 벤치 마크를 프로파일 링하려고합니다. 코드 /usr/local/cuda-5.0/extras/CUPTI/samples/event_sampling을 사용하고 있습니다. 명령을 실행하여 카운터를 읽습니다. 이상한 것처럼 보입니다. CUDA 벤치 마크를 실행하고 있는지 여부에 관계없이 event_sampling에 의해보고 된 값이 값으로 변경되지 않습니다.GPU 카운터를 애플리케이션 코드에 투명하게 읽을 수 있습니까?

event_sampling 코드에는 실행 된 명령어를 측정하기위한 자체 계산도 있습니다. CPU와는 달리, instruction_executed와 같은 GPU 카운터를 읽을 수 있으려면 응용 프로그램의 소스 코드를 변경해야합니까?

답변

1

CUPTI는 동일한 프로세스에서 커널에 대한 카운터 업데이트 만 제공합니다. NVIDIA 시각적 프로파일 러 또는 코드를 수정하지 않고 관련 환경 변수를 사용하면 이러한 정밀도 수준이 아닌 일부 값을 얻을 수 있습니다.

+0

@ njustn - 소스 코드를 수정하지 않고도 카운터 이벤트를 읽을 수 없다는 의미입니까? 또한 nvprof가 소스 코드를 수정하지 않고이 카운터 값을 제공하기 위해 사용하는 API는 무엇입니까? –

+0

"API"는 없지만 환경 변수가 있습니다. 이 DrDobbs 기사 (http://www.drdobbs.com/parallel/cuda-supercomputing-for-the-masses-part/209601096?pgno=2)는 약간 오래되었지만 올바른 방향으로 시작해야합니다. . 내가 아는 한, 한 프로그램이 다른 프로그램의 카운터를 실시간으로 모니터 할 수있는 방법은 없지만, 나중에 분석을 위해 카운터를 덤프 할 수 있습니다. 그것이 실시간 일 필요가 있다면, 코드가 실행되고 있어야합니다. – njustn

+1

nvprof는 CUDA 드라이버를 통해 실행중인 프로세스에 코드를 삽입합니다. nvprof는 CUPTI SDK를 사용하여 결과를 프로그래밍하고 수집합니다. LD_PRELOAD의 바이너리 코드 계측 (detours, 핀), DLL 인터 포저 라이브러리를 사용하여 실행중인 프로세스에 코드를 삽입하여 동일한 결과를 얻을 수 있습니다. –

관련 문제