Предположим, у меня есть набор ядер, которые я хочу запустить асинхронно с некоторыми зависимостями между ними.
Один из вариантов синхронизации: clEnqueueMarkerWithWaitList .
В спецификации говорится, что это
Включает команду маркера, которая ожидает либо список событий для
complete [...] Эта команда возвращает событие, которого можно ожидать, то есть этого события можно ожидать, чтобы убедиться, что все события либо в event_wait_list, либо во всех ранее помещенных в очередь командах, поставленных в очередь перед этой командой в command_queue, завершены.
С другой стороны, я мог бы также ставить ядра в очередь непосредственно с помощью clEnqueueNDRangeKernel .
Это имеет следующие параметры:
event_wait_list и num_events_in_wait_list
Укажите события, которые необходимо завершить, прежде чем эта конкретная команда может быть выполнена. [...] События, указанные в event_wait_list, действуют как
точки синхронизации.
Насколько я видел, все функции cl имеют эти параметры.
Так в чем же смысл clEnqueueMarkerWithWaitList
?
Единственное, что я могу придумать, основываясь на описании на веб-сайте, это то, что я могу ждать результирующего события команды маркера вместо всех событий в списке, но это кажется лишь небольшим удобством во время программирования (если даже это ) и ничего, что могло бы иметь значение.
Есть ли какая-то тонкая разница между двумя, которые мне не хватает?
Обратите внимание, что этот вопрос сравнивается только с clWaitForEvents
.