2013-04-24 48 views
0

我正在使用JOCL庫(通過JOGAMP),我想知道是否有可能測量從主機到設備傳輸數據所花費的時間,內核花費的時間和時間它把結果分開回來了嗎? 。JOCL中的時序數據傳輸和執行

目前,我調用我的內核是這樣的:

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

+0

JavaCL允許命令隊列進行分析(OpenCL標準的一部分),所以我相信JOCL也以某種形式提供它。在OpenCL中執行此操作的方法是獲取緩衝區讀/寫/內核exec的事件對象,並在操作完成後查詢事件的性能分析計數器,以查明事件何時啓動和完成。 – chippies 2013-04-25 13:35:11

+0

我想通了......但我仍然無法弄清楚如何在JOCL中創建CLEvent並使用它來測量時間? – Veles 2013-04-26 10:30:09

+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 2013-04-26 13:37:35

回答

0

要回答我自己的問題; - )的過程是這樣的......第一次創建具有所需容量的CLEventList,因爲我只希望當你設置你的內核到命令隊列來衡量內核執行我設置爲1

CLEventList list = new CLEventList(1); 

現在你將該列表添加爲參數:

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啓用。