2012-10-07 5 views
1

OpenCL 커널에서 병목 현상을 찾으려고합니다. Mac OS X에서 OpenCL 프로그램을 프로파일 링 할 수 있습니까? http://www.gremedy.com/에 gDebugger가 있지만 실행하려면 10.5 또는 10.6이 필요합니다. AMD SDK는 Linux 및 Windows 만 지원합니다.Mac OS X 10.8 용 opencl 프로파일 러가 있습니까?

Mountain Lion 용 프로파일 러가 있습니까?

+0

안녕 파벨를 추출 당신은 내 대답의 도움을 했습니까? – Nippey

+0

답장을 보내 주셔서 감사합니다. 그러나 커널 코드의 어느 부분을 개선해야하는지 확인하려면 실제 프로파일 러/분석기가 필요합니다. – Pavel

답변

1

프로파일 링 정보가 얼마나 자세해야합니까? 내장 된 내부 프로파일 러를 사용해도 되나요?
OpenCL 대기열은 CL_QUEUE_PROFILING_ENABLE 플래그를 사용하여 만들 수 있습니다.

당신이 실행 각 커널 볼 수있는이 방법 :
가있다

  • 하여 대기열에
  • 당신에게 제출 OCL-장치
  • 시작
  • 종료

With C++ - 바인딩, c 큐의 reation는 다음과 같이 할 수 있습니다 이

_queue = new cl::CommandQueue(_context, _device, CL_QUEUE_PROFILING_ENABLE); 

프로파일 정보의 extration은 다음과 같습니다

1) 배열의 이벤트 객체를 (저장)를 큐에 커널에 의해 전달 당신이 원하는 윤곽.

cl::Event evt; 
_queue->enqueueNDRangeKernel(_kernel, cl::NullRange, _range, cl::NullRange, NULL, &evt); 

2) 큐의 실행 후, 프로파일 정보

std::vector<cl::Event> evts; 

//add all events to this vector here 
//cl::Event evt; 
//_queue->enqueueNDRangeKernel(_kernel, cl::NullRange, _range, cl::NullRange, NULL, &evt); 
//evts.push_back(evt); 

uint64_t param; 
for (unsigned int i=0; i<evts.size(); i++) 
{ 
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_QUEUED, &param); 
    printf("%u: %llu", i, param); 
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, &param); 
    printf(" %llu", param); 
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_START, &param); 
    printf(" %llu", param); 
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_END, &param); 
    printf(" %llu\n", param); 
}