#opencl #gpu #pyopencl
#opencl #графический процессор #pyopencl
Вопрос:
Поскольку код ядра в PyOpenCL должен быть написан только на C, я написал несколько функций, которые нужно вызывать внутри кода ядра в PyOpenCL.Где я должен хранить эти функции? как передать глобальную переменную в эту функцию. В PyOpenCL мой код ядра выглядит следующим образом:
program = cl.Program(context, """
__kernel void Kernel_OVERLAP_BETWEEN_N_IP_GPU(__constant int *FBNs_array,__local int *Binary_IP, __local int *cc,__global const int *olp)
{
function1(int *x, int *y,__global const int *olp);
}
""").build()
Где я должен написать и сохранить функцию function1. должен ли я определить ее в самом ядре или в каком-либо другом файле и указать путь. Если мне нужно определить ее в каком-либо другом месте и указать путь, пожалуйста, предоставьте мне некоторые подробности, я совершенно новичок в C.
Спасибо
Комментарии:
1. непосредственно перед ядром, в строке, как на его языке C99. Вы также можете добавить макросы #define, но могут потребоваться некоторые символы перевода строки
Ответ №1:
Как и в C, перед ядром.
program = cl.Program(context, """
void function1(int *x, int *y)
{
//function1 code
}
__kernel void kernel_name()
{
function1(int *x, int *y);
}""").build()
Комментарии:
1. При условии, что вы объявите ее первой. Это также может быть после. Однако, для простоты в ядре с одним файлом, и если вам не нужна рекурсия, first всегда является лучшим вариантом.
Ответ №2:
program = cl.Program(context, """
void function1(int x, int *y,__global const int *cc)
{
x=10;
}
__kernel void kernel_name(__global const int *cc)
{
int x=1;
int y[1]={10};
function1(x,y,cc); //now x=10
}""").build()