Ожидание одного события в OpenCL

Я пишу программу OpenCL, в которой несколько ядер вызываются на нескольких устройствах. После того, как я поставил все ядра в очередь, я хотел бы дождаться завершения любого из них, а затем поставить в очередь работу для этого устройства послесловия.

Например, у меня есть устройства A и B, и у каждого из них есть ядро. Если A завершает работу первым, я хочу поставить в него новое ядро ​​после некоторой работы. Если B завершит работу первым, я хочу поставить для него новое ядро ​​после некоторой работы. Я ищу что-то вроде clWaitForAnyEvent , которое вернется после завершения любого переданного события.

Глядя на спецификацию, я вижу метод clWaitForEvents , но кажется, что он будет ждать завершения всего события, прежде чем продолжить, и я хочу продолжить после одного события (и мне нужно знать какое событие закончилось).

Варианты, о которых я могу думать прямо сейчас, следующие:

  1. Ожидание при занятости с использованием clGetEventInfo для проверки завершения события.

  2. Многопоточность с одним потоком для каждого события (потребуется всего несколько потоков, но я использую ЦП в качестве одного из устройств)

  3. Что-то пропущено в спецификации, и на самом деле существует метод, который делает это за меня. .

Есть предложения, как действовать, или что-то, чего мне не хватает?

Спасибо!

8
задан KLee1 14 November 2011 в 20:33
поделиться