2012-09-26 3 views
1

최근에 두 종류의 커널 런타임 측정을 비교 한 결과 혼란스러운 결과가 나타납니다.AMD GPU OpenCL 시간 측정 문제

통합 된 GPU 및 우분투 리눅스 (CL_PLATFORM_VERSIONOpenCL 1.2 AMD-APP (923.1))와 함께 AMD Bobcat CPU (E-350)를 사용합니다.

기본은 gettimeofday 아이디어는 다음과 같습니다

clFinish(...) // that all tasks are finished on the command queue 
gettimeofday(&starttime,0x0) 
clEnqueueNDRangeKernel(...) 
clFlush(...) 
clWaitForEvents(...) 
gettimeofday(&endtime,0x0) 

이 커널은 약 5466 밀리 필요했다.

두 번째 시간 측정은 내가 QUEUED/SUBMIT/START/END에 대한 clGetEventProfilingInfo로했다.

  • 시간이 제출 한 지출, 0.06 MS : 실행에
  • 시간을 보내고 2733 밀리 초,

    • 시간 대기 지출 : 4 개 시간 값으로

      나는 다른 상태의 시간 비용을 계산할 수 있습니다 : 2731 ms (실제 실행 시간).

    나는 그것이 5466 밀리 초를 합친 것을 본다. 그러나 그것은 반 시간 동안 제출 된 상태로 머무르는 이유는 무엇인가?

    그리고 재미 사항은 다음과 같습니다

    • 제출 된 상태 (그래서 일정한 설정 시간이 될 수 없습니다),

      도 다른 커널이나 다른 작업을 위해, 항상 실제 실행 시간의 절반 는 CPU 제출 된 상태에서 시간의 지출이 0이고 실행 시간은 gettimeofday를 결과와 동일에 대한
    • ,
    • 나는 CPU와 GPU를 사용하여 윈도우와 인텔 아이비 브릿지에 내 커널을 테스트하고 나는 'didn를 보아라. 거기에 미치는 영향.

    실마리가 있습니까?

    GPU가 커널을 두 번 실행 (gettimeofday가 실제 실행 시간의 두 배가 됨)되거나 clGetEventProfilingInfo 함수가 AMD GPU에서 올바르게 작동하지 않는 것으로 의심됩니다.

  • +0

    데이터를 기기로 보내십니까? 일부 I/O 시간도 측정했을 수 있습니다. 전송 된 데이터의 양을 줄이거 나 clEnqueueWriteBuffer를 비활성화하여 측정치가 어떻게 변하는 지 확인하십시오. –

    +0

    장치에 데이터를 보내지 만 측정하기 전에 커널을 실행하고 clFinish (...)를 실행하기 전에 큐에서 모든 작업을 완료해야합니다. 또한 데이터가 전송 될 때까지 차단하는 CL_TRUE로 데이터를 복사합니다. – Tomas

    +0

    메모 편집 : 여기에 게시물의 형식을 지정하는 방법에 대해 읽어야합니다. 귀하의 서식이 끔찍했습니다! Markdown과 HTML을 혼합했습니다. ** Markdown **을 사용합니다. 방금 질문을 취소했지만 어려운 작업이었습니다. 많은 엉망이 ... – trejder

    답변