【发布时间】:2011-12-28 09:37:45
【问题描述】:
我正在编写一个 OpenCL 程序,其中在多个设备上调用多个内核。在我将所有内核排入队列后,我想等到它们中的任何一个完成后,然后将该设备的工作排入队列。
例如,我有设备 A 和 B,它们每个都有一个内核。如果 A 先完成,我想在完成一些工作后将一个新内核加入其中。如果 B 先完成,我想在做一些工作后为它加入一个新内核。我正在寻找类似clWaitForAnyEvent 的东西,它将在传入的任何事件完成后返回。
查看规范,我看到了一个clWaitForEvents 方法,但似乎它会等待所有事件完成后再继续,我想在一个事件之后继续(并且需要知道哪个事件完成) .
我现在能想到的选项是:
忙等待使用
clGetEventInfo来测试事件是否完成。多线程,每个事件都有一个线程(只需要几个线程,但我使用 CPU 作为设备之一)
在规范中遗漏了一些东西,实际上有一种方法可以为我做到这一点。
关于如何进行的任何建议或我缺少的东西?
谢谢!
【问题讨论】: