Где я должен определить функцию C, которая будет вызываться в коде ядра C при использовании PYOPENCL

#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()