Я пишу программу OpenCL, в которой несколько ядер вызываются на нескольких устройствах. После того, как я поставил все ядра в очередь, я хотел бы дождаться завершения любого из них, а затем поставить в очередь работу для этого устройства послесловия.
Например, у меня есть устройства A и B, и у каждого из них есть ядро. Если A завершает работу первым, я хочу поставить в него новое ядро после некоторой работы. Если B завершит работу первым, я хочу поставить для него новое ядро после некоторой работы. Я ищу что-то вроде clWaitForAnyEvent
, которое вернется после завершения любого переданного события.
Глядя на спецификацию, я вижу метод clWaitForEvents
, но кажется, что он будет ждать завершения всего события, прежде чем продолжить, и я хочу продолжить после одного события (и мне нужно знать какое событие закончилось).
Варианты, о которых я могу думать прямо сейчас, следующие:
Ожидание при занятости с использованием clGetEventInfo
для проверки завершения события.
Многопоточность с одним потоком для каждого события (потребуется всего несколько потоков, но я использую ЦП в качестве одного из устройств)
Что-то пропущено в спецификации, и на самом деле существует метод, который делает это за меня. .
Есть предложения, как действовать, или что-то, чего мне не хватает?
Спасибо!