如何获取EventID并使用它来获取gpu处理内核的实际时间?

时间:2012-12-12 19:14:38

标签: c opencl

可能是论坛上更直接和快速回答的问题之一。我正在开发一个openCL项目,我正在尝试找到一种获取eventID的方法,以便使用getEvent()来查找GPU处理图像所花费的时间(我正在处理图像卷积)。有人知道怎么做吗?

感谢。

1 个答案:

答案 0 :(得分:0)

以clEnqueue开头的任何命令都可以返回cl_event(或者更准确地说,可以填写您在地址中传递的cl_event的内容)。这是创建事件的典型方法,您可以稍后从中查询时间值。

因此,声明一个cl_event对象,然后将其地址作为最后一个参数传递给clEnqueueNDRangeKernel,然后在内核完成运行后(您可以使用clFinish或等待事件),使用cl_event调用clGetEventProfilingInfo并请求CL_PROFILING_COMMAND_START和然后CL_PROFILING_COMMAND_END减去它们以获得执行时间。注意:命令队列必须启用分析(包括在属性参数中设置的CL_QUEUE_PROFILING_ENABLE标志) clCreateCommandQueue)为此起作用。

最后,一定要clReleaseEvent,否则你会泄漏内存。