Как структурировать большие ядра OpenCL? - PullRequest
14 голосов
/ 01 октября 2011

Я работал с OpenCL над несколькими проектами, но всегда писал ядро ​​как одну (иногда довольно большую) функцию.Сейчас я работаю над более сложным проектом и хотел бы разделить функции между несколькими ядрами.

Но все примеры, которые я могу найти, показывают ядро ​​как один файл (очень немногие даже вызывают вторичные функции).Кажется, что можно использовать несколько файлов - clCreateProgramWithSource() принимает несколько строк (и я предполагаю, что объединяет их) - хотя Program() pyopencl принимает только один источник.

Так что я хотел бы услышатьот любого, кто имеет опыт в этом:

  • Есть ли проблемы, связанные с несколькими исходными файлами?
  • Является ли наилучшим обходным решением для pyopencl просто объединить файлы?
  • Есть ли способ скомпилировать библиотеку функций (вместо того, чтобы передавать источник библиотеки с каждым ядром, даже если не все используются)?
  • Если необходимо каждый раз передавать источник библиотеки, используются неиспользуемые функцииОтклонено (без накладных расходов)?
  • Любые другие лучшие практики / предложения?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 06 октября 2011

Я не думаю, что в OpenCL есть концепция нескольких исходных файлов в программе - программа - это одна единица компиляции.Однако вы можете использовать #include и извлекать заголовки или другие файлы .cl во время компиляции.

В программе OpenCL может быть несколько ядер - так что после одной компиляции вы можете вызвать любой из набораскомпилированных ядер.

Предполагается, что любой неиспользуемый код - функции или что-либо статически недоступное - может быть исключен во время компиляции, с небольшими затратами времени на компиляцию.

5 голосов
/ 25 января 2012

В OpenCL 1.2 вы связываете разные объектные файлы.

...