OpenCL用户定义的内联函数

dme*_*ssf 9 c opencl

是否可以在OpenCL代码中定义自己的函数,以便内核可以调用它们?是的,我在哪里可以看到一些简单的例子?

Kay*_*ano 13

用于创建程序的函数是......

cl_program clCreateProgramWithSource  (     
    cl_context context,
    cl_uint count,
    const char **strings,
    const size_t *lengths,
    cl_int *errcode_ret)
Run Code Online (Sandbox Code Playgroud)

您可以将函数放在strings参数中,如下所示,

float AddVector(float a, float b)
{
    return a + b;
}

kernel void VectorAdd(
    global read_only float* a,
    global read_only float* b,
    global write_only float* c )
{
    int index = get_global_id(0);
    //c[index] = a[index] + b[index];
    c[index] = AddVector(a[index], b[index]);
}
Run Code Online (Sandbox Code Playgroud)

现在你有一个用户定义的函数"AddVector"和一个内核函数"VectorAdd"


sig*_*fpe 5

根据这里的代码示例,您可以编写如下函数:

inline int add(int a,int b)
{
   return a+b;
}
Run Code Online (Sandbox Code Playgroud)

(例如,查看DXTC中的.cl文件或bitonic排序示例.)

我不知道这是否只是一个nvidia扩展,但OpenCL文档谈到了"辅助功能"以及内核.