OpenCL:确定设备是否已在运行

时间:2015-05-19 10:23:09

标签: opencl

首先,我相对来说是OpenCL的新手。

问题1:有没有办法在运行时确定设备是否已在运行另一个内核。

我的用例:我的主机程序异步调用不同的OpenCL功能,可能会也可能不会使用同一个设备。有一些功能可以在CPU上快速运行,因此等待设备准备就绪可能成为瓶颈。我想确定设备是否已在使用中,如果是,则在CPU上运行回退功能。

问题2:如果问题1的答案是否定的。除了编写自己的Device-Class之外还有其他可能性吗?

1 个答案:

答案 0 :(得分:1)

没有用于查询设备当前是否正在执行内核的专用API,但您可以使用事件对象自行实现。

每当您将内核排入队列时,您都可以选择检索标识该命令的事件对象。使用clGetEventInfoCL_EVENT_COMMAND_EXECUTION_STATUS查询,可以检查特定命令是否已完成执行。通过保留对最近排队的内核的事件对象的引用,您可以使用此API检查设备当前是否在其队列中具有挂起的内核命令。

当然,这只允许您确定是否存在来自 应用程序的待处理内核 - 无法检查是否存在可能也在其上运行的其他OpenCL应用程序的待处理内核系统