2013-06-22 61 views
0

我有點難以解決的問題。我有兩個數組,每個內核調用一個固定大小,並且是一個映射到一維數組的常規3D網格。讓我們調用這個數組meshData 第二個數組保存這些點的x,y,z座標和值,這些點不與meshData數組對齊。讓我們調用這個pointData。opencl遍歷內核中的數組

現在我需要使用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中有沒有我在上面錯過的東西?

+0

您在「pointData [l * indexOffset &&」中缺少結尾「]」。 – chippies

+0

感謝您指出。實際上這並不是問題,因爲我爲這篇文章創建了上述內容,並且未經測試。但是,我發現問題與問題完全無關。答案如下 – airtruk

回答

0

上面描述的問題不是用if語句,而是評價者計算一維數組中的x,y和z偏移量的代碼段,因此我可以將它與原始3D座標關聯起來。它有利於徹底檢查您的變量計算!

我必須使用模數從get_global_id()計算x,y和z,並且我簡單地填充條件來檢查並獲得實際上不存在的偏移量,因此上面提到的長if語句永遠不會成爲真正!