OpenCL数组索引似乎破了

时间:2012-06-16 23:39:15

标签: opencl

我有一个带有简单数组声明和初始化的内核,还有一个额外的函数“get_smooth_vertex(...)”,我已经更改了这个函数来演示一个问题:

//More const __constant declarations
const __constant int edge_parents[12][2] = {    {0,1},  {0,2},  {1,3},  {2,3},  {0,4},  {1,5},  {2,6},  {3,7},  {4,5},  {4,6},  {5,7},  {6,7} };
//More Functions
float3 get_smooth_vertex(const int edge_index, const float* cube_potentials) {
    int i1 = edge_parents[edge_index][0];
    int i2 = edge_parents[edge_index][1];
    if (i1==i2) return (float3)(0);\n"
    return (float3)(1);\n"
}
__kernel void march(const __global float* potentials, __global float* vertices, __global float* normals, const __constant float4* points, const int numof_points) {
    //Lots of stuff.
    //Call get_smooth_vertex(...) a few times
    //More stuff.
}

“get_smooth_vertex(...)”中的if路径似乎总是被执行!现在,我无法想象为什么会这样,因为“edge_parents”中的每一对都是不同的。我检查了“edge_index”,它始终是> = 0并且始终< = 11.此外,没有变量在全局或局部范围中具有别名。内核(和主机代码,FWIW)编译时没有警告或错误。

所以,我无法弄清楚什么是错的 - 为什么指数彼此相等?对齐,也许吧?我只是完全忘记了C是如何运作的?观看 - 这将是皇家用户错误。 。

谢谢,
伊恩

1 个答案:

答案 0 :(得分:2)

我检查了你的代码并且比较工作正常(删除尾随\n"后)。在评估get_smooth_vertex()的返回值时,您可能犯了一个错误。但是如果没有显示它是如何被调用的代码,这很难说清楚。