Может ли OpenCL собрать программу из исходного кода .cl вместе с предварительно собранным двоичным ядром? - PullRequest
0 голосов
/ 29 августа 2018

В моей программе несколько ядер. Я хотел бы использовать автономный компилятор для компиляции одного ядра в двоичный файл. Итак, как я могу собрать свою программу, используя другие ядра и этот предварительно собранный двоичный файл ядра?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы должны быть в состоянии скомпилировать другие ваши ядра, используя clCreateProgramWithSource и clCompileProgram, и загрузить предварительно встроенное ядро ​​с clCreateProgramWithBinary. Затем вы можете связать эти программы, используя clLinkProgram, чтобы связать обе программы в одну новую программу, содержащую все ядра.

0 голосов
/ 29 августа 2018

AFAIK это невозможно или очень сложно.

Ядра должны быть небольшими и модульными Составные ядра - плохая практика.

То, что вы можете попробовать, это поставить в очередь ядра, собранные из исходного кода вместе с ядрами, загруженными как двоичные файлы (с / out CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE f.e, с блокировкой / out или без флага). Таким образом, они будут работать параллельно.

Что такое межядерное общение. Вы можете попробовать следующее:

  1. Простой способ: блокировка запуска ядра A после завершения запуска с ядра хоста B.

  2. Сложный способ: с использованием clEnqueueMarkerWithWaitList, clEnqueueBarrierWithWaitList, clEnqueueMarker, clEnqueueWaitLIst, clWaitForEvents, clCreateUserEventclEnqueueBarrier

  3. Pipes. Вы можете использовать трубы для этого. clCreatePipe я никогда не пробовал. (OpenCL 2.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...