Использование #include для загрузки кода OpenCL - PullRequest
6 голосов
/ 12 сентября 2009

Я уже давно видел, как это делается с помощью шейдерного кода hlsl / glsl - с помощью #include в файле исходного кода, который вставляет код в char*, чтобы во время выполнения не происходил ввод-вывод файла.

Если бы я представлял его как псевдокод, это выглядело бы примерно так:

#define CLSourceToString(filename) " #include "filename" "
const char* kernel = CLSourceToString("kernel.cl");

Теперь, конечно, #define не будет работать, потому что он просто попытается использовать эти кавычки для запуска строк.

Ответы [ 2 ]

12 голосов
/ 17 февраля 2011

Посмотрите, как движки физики пули используют OpenCL для как сделать это для ядра .

В источнике C ++ / C

#define MSTRINGIFY(A) #A
char* stringifiedSourceCL = 
#include "VectorAddKernels.cl"

В исходном коде OpenCL

MSTRINGIFY(
   __kernel void VectorAdd(__global float8* c)
   {
    // snipped out OpenCL code...
    return;
   }
);
4 голосов
/ 12 сентября 2009

Согласно это , это невозможно, но вы можете использовать xxd -i для архивации того же эффекта.

...