0

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

谢谢。

4

1 回答 1

0

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

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

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

于 2013-01-19T19:50:47.180 回答