Изменение кода на стороне хоста для 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 С++, который показывает, как запускать программу с ядрами Stringified, а не из файлов .cl? В каком направлении мне идти?


person Mohammad Sohaib    schedule 12.10.2016    source источник


Ответы (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);
person DarkZeros    schedule 12.10.2016

Вы можете просто создать cl::Program, используя строку вместо имени файла. Это все, что вам нужно сделать :)

Проверьте API.

person Mohamed Moanis    schedule 12.10.2016