如何在OpenCL中的内核函数中声明一个函数?

时间:2011-06-14 12:11:41

标签: c indexing opencl

我想在内核函数中定义一个函数,使我的索引代码更清晰:

kernel void do_something (const int some_offset,
                          const int other_offset,
                          global float* buffer)
{
    int index(int x, int y)
    {
        return some_offset+other_offset*x+y;
    }

    float value = buffer[index(1,2)];
    ...
}

否则我必须在我的内核和索引之外声明索引函数,如

float value = buffer[index(1,2,some_offset,other_offset)];

会让它变得更丑陋等等。有没有办法做到这一点?编译器给我一个错误,说:

OpenCL Compile Error: clBuildProgram failed (CL_BUILD_PROGRAM_FAILURE).
Line 5: error: expected a ";"

是否有可能做我想要的或有不同的方法来实现同样的目标? 谢谢!

1 个答案:

答案 0 :(得分:5)

C不支持嵌套函数。但是,您的案例很简单,可以用宏实现:

#define index(x,y) some_offset+other_offset*(x)+(y)

如果你传递更复杂的表达式,例如index(a+b,c),那么x和y周围的括号对于使宏做你想做的事情至关重要。