Изменение кода на стороне хоста для openCL C++ после строкового кода ядра

Я работаю над проектом, в котором я использую привязки 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? В каком направлении мне идти?

2 ответа

Решение

Здесь действительно нет проблем. Просто:

// 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.

Другие вопросы по тегам