На основе спецификации OpenCL 1.2 (также то же самое для 2.0),
-I dir Добавить каталог dir в список каталогов для поиска файлов заголовков.
Вы не можете включать какой-либо ".cl" в другой ".cl", но вы можете #include "Header.h"
столько, сколько хотите, где у вас могут быть некоторые функции или #define и т. Д.
Обратите внимание, что код в этих заголовках должен быть в OpenCL C похож на ваше ядро (за исключением случаев, когда используется OpenCL 2.2, где вы можете использовать OpenCL C ++).
И, наконец, за исключением того, что вы используете OpenCL 2.0 и вышеВы не можете вызывать функцию ядра внутри ядра, поэтому они должны быть обычной функцией void foo()
.
Итак, в вашем случае вы можете сделать это:
Program program = Program(context, source);
errcode = program.build(devices, "-I C:\Path\To\My\Include\Header);
И ответитьВаш второй вопрос
На следующем шаге я думаю, что нужно добавить второй источник в Program :: Sources.Кто-нибудь написал это?
Вы можете push_back sources.push_back({ kernelSource.c_str(), kernelSource.length() + 1 });
столько исходного кода ядра, сколько хотите, в один sources
вектор, который вы предоставляете программе.Но, в конце концов, вы можете создать несколько ядер с помощью этой программы, так как вам нужно предоставить одно имя ядра для cl :: Kernel, например:
Kernel kernel_add(program, "vector_add");
Kernel kernel_sub(program, "vector_sub");
Так что это означает kernel_add
и kernel_sub
собираются в одно и то же время, но в конце они представляют собой два разных ядра.