2013-04-24 6 views
0

JOCAMP에 의한 JOCL 라이브러리를 사용하고 있는데, 호스트에서 디바이스로 데이터를 전송하는 데 걸리는 시간을 측정 할 수 있었는지, 커널이 걸린 시간과 시간이 궁금합니다. 별도로 결과를 얻는 데 걸렸습니다. ..이 같은JOCL에서 타이밍 데이터 전송 및 실행

현재 내가 호출하고 내 커널 :

queue.putReadBuffer (...) put1DKernel (...) putWriteBuffer (...)

+0

JavaCL은 프로파일 링 (OpenCL 표준의 일부)을 포함하는 명령 대기열을 허용하므로 JOCL도 일부 양식에서이를 제공합니다. OpenCL에서이 작업을 수행하는 방법은 버퍼 읽기/쓰기/커널 exec에 대한 이벤트 객체를 얻는 것입니다. 작업이 완료되면 이벤트에 대한 프로파일 링 카운터를 쿼리하여 이벤트 시작 및 종료 시점을 찾습니다. – chippies

+0

나는 그것을 알아 냈습니다 ...하지만 JOCL에서 CLEvent를 생성하고 시간을 측정하는 데 사용하는 방법을 알아낼 수 없습니까? – Veles

+0

내 생각 엔 [http://jogamp.org/deployment/jogamp-next/javadoc/jocl/javadoc/com/jogamp/opencl/CLEvent.html#getProfilingInfo(com.jogamp.opencl.CLEvent.ProfilingCommand)](http : //jogamp.org/deployment/jogamp-next/javadoc/jocl/javadoc/com/jogamp/opencl/CLEvent.html#getProfilingInfo(com.jogamp.opencl.CLEvent.ProfilingCommand))는 당신이 찾고있는 것입니다. – chippies

답변

0

내 자신의 질문에 대답하기 위해 -) 절차는 난 단지 당신이 명령 대기열에 커널을 설정할 때 지금

CLEventList list = new CLEventList(1); 

1로 설정 커널 실행을 측정하고자하기 때문에 첫째, 원하는 용량 CLEventList을 만들 ... 이렇게되면 당신 목록을 인수로 추가하십시오.

queue.putReadBuffer(...).put1DKernel(..., list).putWriteBuffer(...).finish(); 

그 후 당신은 호출하여 타이밍을 얻을 수 있습니다 :

long start = list.getEvent(0).getProfilingInfo(ProfilingCommand.START); 
long end = list.getEvent(0).getProfilingInfo(ProfilingCommand.END); 
long duration = end - start // time in nanoseconds 

Mode.PROFILING_MODE하여 명령 대기열이 활성화 초기화하는 것을 잊지 마십시오.