Я работаю над проектом, в котором я использую привязки openCL C ++. У меня есть файл kernel.cl, который читается со стороны хоста, загружается и выполняется. Но теперь я хочу встроить его в мой файл .cpp, чтобы я мог распространять двоичный файл без файла kernel.cl.
Я применил метод STRINGIFY, но я не знаю, что еще нужно изменить и какие строки кода изменить?
Предыдущий код:
main.cpp
// Load in kernel source, creating a program object for the context
cl::Program programGA(context, loadProgram
("../src/path/kernelGA.cl"),
true);
// Create the kernel functor
auto kernelGA = cl::make_kernel<cl::Buffer,
cl::Buffer,
cl::Buffer,
cl::Buffer,
cl::Buffer>
(programGA, "kernelGA");
// CREATE THE BUFFERS.
d_buff = cl::Buffer(context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
(Length * P_SIZE * sizeof(double)),
asd);
....and so on...
// Enqueue the kernel.
kernelGA(cl::EnqueueArgs(queue[iter],
cl::NDRange(P_SIZE / numberOfDevices)),
d_buff1,
d_buff2,.. and so on..);
// Enqueue in the corresponding device.
queue[iter].finish();
Теперь я применил метод STRINGIFY, но я не знаю, какие части кода изменить и как их изменить. Потому что теперь ядро должно читаться из stringifiedSourceCL, и в соответствии с этим я должен изменить свою программу на чтение из stringifiedSourceCL, а не из файла.
ПОСЛЕ ПОЛУЧЕНИЯ
// in main.cpp
#define STRINGIFY(src) #src
char * stringifiedSourceCL =
#include "kernelGA.cl"
Какие другие части я должен изменить? Кто-нибудь знает хороший учебник с привязками openCL C ++, который показывает, как запускать программу с ядрами Stringified, а не из файлов .cl? В каком направлении мне идти?
Здесь действительно нет проблем. Просто:
// in main.cpp
#define STRINGIFY(src) #src
const char * stringifiedSourceCL =
#include "kernelGA.cl"
...
// Creating a program object for the context
cl::Program programGA(context, stringifiedSourceCL, true);
Вы можете просто создать cl::Program
используя строку вместо имени файла.
Это все, что вам нужно сделать 🙂
Проверить API.