AFAIK это невозможно или очень сложно.
Ядра должны быть небольшими и модульными Составные ядра - плохая практика.
То, что вы можете попробовать, это поставить в очередь ядра, собранные из исходного кода вместе с ядрами, загруженными как двоичные файлы (с / out CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE f.e, с блокировкой / out или без флага). Таким образом, они будут работать параллельно.
Что такое межядерное общение. Вы можете попробовать следующее:
Простой способ: блокировка запуска ядра A после завершения запуска с ядра хоста B.
Сложный способ: с использованием clEnqueueMarkerWithWaitList, clEnqueueBarrierWithWaitList, clEnqueueMarker, clEnqueueWaitLIst, clWaitForEvents, clCreateUserEventclEnqueueBarrier
Pipes
. Вы можете использовать трубы для этого. clCreatePipe я никогда не пробовал. (OpenCL 2.0)