OpenCL:确定设备是否已经 运行
OpenCL: Determine if a Device is already running
首先,我是 OpenCL 的新手。
问题 1: 有没有办法在 运行 时确定设备是否已经 运行 正在安装另一个内核。
我的用例: 我有一个主机程序异步调用不同的 OpenCL 函数,它可能使用也可能不使用相同的设备。在 CPU 上有一个功能可以 运行 快速接受,因此等待设备准备就绪可能是一个瓶颈。我想确定该设备是否已在使用中,如果是 运行 CPU 上的后备函数。
问题 2:如果问题 1 的答案是否定的。除了编写我自己的 Device-Class?
之外,还有其他可能性吗?
没有专门的 API 查询设备当前是否正在执行内核,但您可以使用事件对象自行实现。
无论何时将内核加入队列,您都可以选择检索标识该命令的事件对象。使用 clGetEventInfo
和 CL_EVENT_COMMAND_EXECUTION_STATUS
查询,您可以检查特定命令是否已完成执行。通过保留对最近入队内核的事件对象的引用,您可以使用此 API 检查设备当前是否在其队列中有待处理的内核命令。
当然,这只允许您确定是否有来自您的应用程序的未决内核——无法检查是否有来自其他 OpenCL 应用程序的未决内核可能在系统上也是运行。
首先,我是 OpenCL 的新手。
问题 1: 有没有办法在 运行 时确定设备是否已经 运行 正在安装另一个内核。
我的用例: 我有一个主机程序异步调用不同的 OpenCL 函数,它可能使用也可能不使用相同的设备。在 CPU 上有一个功能可以 运行 快速接受,因此等待设备准备就绪可能是一个瓶颈。我想确定该设备是否已在使用中,如果是 运行 CPU 上的后备函数。
问题 2:如果问题 1 的答案是否定的。除了编写我自己的 Device-Class?
之外,还有其他可能性吗?没有专门的 API 查询设备当前是否正在执行内核,但您可以使用事件对象自行实现。
无论何时将内核加入队列,您都可以选择检索标识该命令的事件对象。使用 clGetEventInfo
和 CL_EVENT_COMMAND_EXECUTION_STATUS
查询,您可以检查特定命令是否已完成执行。通过保留对最近入队内核的事件对象的引用,您可以使用此 API 检查设备当前是否在其队列中有待处理的内核命令。
当然,这只允许您确定是否有来自您的应用程序的未决内核——无法检查是否有来自其他 OpenCL 应用程序的未决内核可能在系统上也是运行。