Я провожу некоторые тесты, используя очереди команд на стороне устройства в сочетании с вызовами enqueue_kernel, чтобы дать им работу.
Мой вопрос касается характера флага CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, установленного в очереди на стороне устройства при его инициализации.
Согласно спецификации:
"Если свойство CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE объекта
commandqueue установлен, тогда нет никакой гарантии, что ядро A будет
закончить до того, как ядро B начнет выполнение. «
Однако эта формулировка оставляет две (неоднозначные) возможности:
запускается ядро A, запускается ядро B, заканчивается ядро B, завершается ядро A (они запускаются последовательно, но работают параллельно, что допускает завершение / выполнение вне очереди)
ядро B запускается, ядро B заканчивается, ядро A запускается, ядро A заканчивается (они работают последовательно, но запускаются не по порядку)
Возможность 2 - это то, что я ожидал, но возможность 1 соответствует описанию ... так какое же предположение верно? Или они оба возможны? Специфично поведение поставщика / реализации?