代码之家  ›  专栏  ›  技术社区  ›  tmlen

已完成事件的OpenCL回调

  •  0
  • tmlen  · 技术社区  · 6 年前

    在opencl中,我可以注册一个回调函数,当事件在GPU上完成时,使用 clSetEventCallback .

    但我得到了 cl_event 仅在队列上的命令排队后立即执行。所以在当时 clsetEventCallback 在CPU上调用,事件已在GPU上完成。

    如果 clsetEventCallback 是对已完成的事件调用的,OpenCL驱动程序是否仍将调用回调?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andrew Savonichev    6 年前

    OpenCL specification 说:

    必须调用为事件对象注册的所有回调。应在销毁事件对象之前调用所有排队回调。回电必须及时返回。在回调中,调用昂贵的系统例程、调用opencl api以创建上下文或命令队列,或阻止下面列表中的opencl操作的行为是未定义的。

    这有点含糊,但我认为您可以假定调用回调,即使在您调用时事件已经完成。 clSetEventCallback . 否则会使用户的代码变得不必要复杂。