我想在内核函数中定义一个函数,使我的索引代码更清晰:
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 ";"
是否有可能做我想要的或有不同的方法来实现同样的目标? 谢谢!
答案 0 :(得分:5)
C不支持嵌套函数。但是,您的案例很简单,可以用宏实现:
#define index(x,y) some_offset+other_offset*(x)+(y)
如果你传递更复杂的表达式,例如index(a+b,c)
,那么x和y周围的括号对于使宏做你想做的事情至关重要。