在使用PYOPENCL时,我应该在哪里定义将在C内核代码中调用的C函数

时间:2016-10-20 06:11:40

标签: opencl gpu 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完全是新手。 感谢

2 个答案:

答案 0 :(得分: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 :(得分:0)

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