opencl在内核中迭代数组

时间:2013-06-22 02:09:02

标签: c if-statement opencl

我有一个难以解决的问题。我有两个数组,一个是每个内核调用的固定大小,是一个映射到一维数组的常规3D网格。让我们调用这个数组meshData 第二个数组包含x,y,z坐标和那些未与meshData数组对齐的点的值。我们可以调用这个pointData。

现在我需要使用OpenCL遍历meshData数组,并将两个数组传递给内核以及存储在pointData数组中的点数。在内核中我已经计算了meshData中当前元素的x,y,z坐标而没有任何问题,然后我使用这些坐标通过使用for循环查找pointData数组中的所有点。在for循环中我有一个if语句说

for (l = 0; l < points; l++) {
    if(x1Cell <=pointdata[l*indexOffset] && x2Cell >= pointData[l*indexOffset && 
       y1Cell <=pointdata[l*indexOffset + 1] && y2Cell >=pointdata[l*indexOffset + 1] &&
       z1Cell <=pointdata[l*indexOffset + 2] && z2Cell >=pointdata[l*indexOffset + 2]){

    }
}

问题是,如果我对x1Cell,x2Cell等的值进行硬编码,那么代码会进入if语句,但如果我使用x1Cell等的计算值,则条件永远不会超过y1Cell。

我将整个代码完全用作非OpenCL,所以我知道它有效。 OpenCL中是否存在我在上面遗漏的内容?

1 个答案:

答案 0 :(得分:0)

上面提到的问题不是if语句,而是计算一段代码,计算1D数组中的x,y和z偏移量,这样我就可以将它与原始的3D坐标联系起来。彻底检查你的变量计算是值得的!

我必须使用模数从get_global_id()计算x,y和z,我只是填写条件来检查并获得实际上不存在的偏移量,因此上面提到的长if语句永远不会成为真!