簡介
本篇主要是記錄下,如果使用opencl自帶方式,來計算它kerenl運行時間的方法。
具體實現
openl到代碼框架,這裏就不講了,這方面網上資料很多,這裏主要是獲取運行時間的實現流程:
1、首先如果想用opencl自帶方式打印時間戳。那麼在clCreateCommandQueue函數中,必須設置CL_QUEUE_PROFILING_ENABLE。
比如:commandQueue = clCreateCommandQueue(context, devices[0], CL_QUEUE_PROFILING_ENABLE, &status);
2、獲取kerenl運行時間,必須在確定對應操作完成之後。
也就是在:clFinish(commandQueue);
status = clWaitForEvents(1, &prof_event);之後。
3、使用函數clGetEventProfilingInfo,通過設置參數:
1、CL_PROFILING_COMMAND_QUEUED:獲得kerenl放入命令隊列時間。
2、CL_PROFILING_COMMAND_SUBMIT:獲得kerenl進入關聯設備時間。
3、CL_PROFILING_COMMAND_START :獲得kerenl在關聯設置中開始運行時的時間。
4、CL_PROFILING_COMMAND_END :獲得kerenl在關聯設備中結束運行時的時間。
4、使用CL_PROFILING_COMMAND_END得到的時間戳減去CL_PROFILING_COMMAND_QUEUED得到的時間戳,就是kerenl從放入命令隊列到運行完成時的時間。
實例代碼下載:http://download.csdn.net/detail/u011630458/9600167