我想定义内核函数中的一个函数,使我的索引代码更清晰:如何在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 ";"
是否可以做我想做的还是有不同的方式来达到同样的? 谢谢!
C没有任何形式的闭包。我假设OpenCL也没有,但是因为它(最初)是Apple的东西,请检查是否可以使用[blocks](http://en.wikipedia.org/wiki/Blocks_%28C_language_extension%29)。否则,在这种情况下,看起来好像你*可以*使用宏,因为你的'some_offset'仍然在范围内。 – 2011-06-14 12:17:34