최근에 두 종류의 커널 런타임 측정을 비교 한 결과 혼란스러운 결과가 나타납니다.AMD GPU OpenCL 시간 측정 문제
통합 된 GPU 및 우분투 리눅스 (CL_PLATFORM_VERSION
은 OpenCL 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
로했다.
- 시간 대기 지출 : 4 개 시간 값으로
나는 다른 상태의 시간 비용을 계산할 수 있습니다 : 2731 ms (실제 실행 시간).
나는 그것이 5466 밀리 초를 합친 것을 본다. 그러나 그것은 반 시간 동안 제출 된 상태로 머무르는 이유는 무엇인가?
그리고 재미 사항은 다음과 같습니다
제출 된 상태 (그래서 일정한 설정 시간이 될 수 없습니다),
도 다른 커널이나 다른 작업을 위해, 항상 실제 실행 시간의 절반 는 CPU 제출 된 상태에서 시간의 지출이 0이고 실행 시간은 gettimeofday를 결과와 동일에 대한- ,
- 나는 CPU와 GPU를 사용하여 윈도우와 인텔 아이비 브릿지에 내 커널을 테스트하고 나는 'didn를 보아라. 거기에 미치는 영향.
실마리가 있습니까?
GPU가 커널을 두 번 실행 (gettimeofday가 실제 실행 시간의 두 배가 됨)되거나 clGetEventProfilingInfo 함수가 AMD GPU에서 올바르게 작동하지 않는 것으로 의심됩니다.
데이터를 기기로 보내십니까? 일부 I/O 시간도 측정했을 수 있습니다. 전송 된 데이터의 양을 줄이거 나 clEnqueueWriteBuffer를 비활성화하여 측정치가 어떻게 변하는 지 확인하십시오. –
장치에 데이터를 보내지 만 측정하기 전에 커널을 실행하고 clFinish (...)를 실행하기 전에 큐에서 모든 작업을 완료해야합니다. 또한 데이터가 전송 될 때까지 차단하는 CL_TRUE로 데이터를 복사합니다. – Tomas
메모 편집 : 여기에 게시물의 형식을 지정하는 방법에 대해 읽어야합니다. 귀하의 서식이 끔찍했습니다! Markdown과 HTML을 혼합했습니다. ** Markdown **을 사용합니다. 방금 질문을 취소했지만 어려운 작업이었습니다. 많은 엉망이 ... – trejder