首先,我相对来说是OpenCL的新手。
问题1:有没有办法在运行时确定设备是否已在运行另一个内核。
我的用例:我的主机程序异步调用不同的OpenCL功能,可能会也可能不会使用同一个设备。有一些功能可以在CPU上快速运行,因此等待设备准备就绪可能成为瓶颈。我想确定设备是否已在使用中,如果是,则在CPU上运行回退功能。
问题2:如果问题1的答案是否定的。除了编写自己的Device-Class之外还有其他可能性吗?
答案 0 :(得分:1)
没有用于查询设备当前是否正在执行内核的专用API,但您可以使用事件对象自行实现。
每当您将内核排入队列时,您都可以选择检索标识该命令的事件对象。使用clGetEventInfo
和CL_EVENT_COMMAND_EXECUTION_STATUS
查询,可以检查特定命令是否已完成执行。通过保留对最近排队的内核的事件对象的引用,您可以使用此API检查设备当前是否在其队列中具有挂起的内核命令。
当然,这只允许您确定是否存在来自 应用程序的待处理内核 - 无法检查是否存在可能也在其上运行的其他OpenCL应用程序的待处理内核系统