2011-10-25 52 views
2

我在OpenCL的第一步,我有一個問題,我認爲結果沒有正確保存。我首先做了一個簡單的程序,這是工作,給出了正確的結果等主要是正常工作,陣列充滿了他們應該的方式等。內核OpenCL沒有保存結果?

該程序的簡短說明: 我有一個網格4×4點(OP陣列),在40×40的場中。有一架飛機飛過這個領域,它的路線被分成100段(段陣列)。 Coord是一個typedef結構,目前只有一個double x和double y值。我知道有更簡單的解決方案,但我必須稍後使用它,所以我這樣做。內核應該計算從點(OP)到段的距離。結果必須保存在距離數組中。

內核描述:它得到的是全局id,它用來計算哪個OP和哪個段需要計算。有了這些信息,它就從這2箇中獲得x和y,並計算彼此之間的x和y距離。有了這些信息,它可以從距離和飛行狀態中做出平方根。

的問題是,該距離表只顯示爲零的:P

內核:http://pastebin.com/U9hTWvv2還有就是,說__global常量座標* Afstanden的參數,這必須是__global雙* Afstanden

OpenCL的東西主:http://pastebin.com/H3mPwuUH(因爲我不是100%肯定Im做是正確的)

我可以給你的整個程序,但它主要是荷蘭:P

我試圖解釋每如果有什麼不清楚的地方,我會嘗試清除它;)

因爲我在第一個內核中做了很多小錯誤,這裏是他的繼任者:http://pastebin.com/rs6T1nKs另外OpenCL部分有點更新:http://pastebin.com/4NbUQ40L,因爲它也有一個或兩個故障。

應該現在的工作,在我看來......但它不是,問題依然站在

+0

我認爲問題是內核無法從Coord獲取x和y值...但不確定,仍然在尋找那些能夠解決我的問題的人:) – JustAJ

回答

0

好了,似乎「Afstanden」變量聲明爲一個「常量座標*」。取出常量性 - 即「座標*只有 - 並確保當您使用clCreateBuffer‘CL_MEM_WRITE_ONLY’或‘CL_MEM_READ_WRITE的問題是,該距離表只顯示爲零的:P‘ ’作爲參數

’。你可能初始化在CPU端的Afstanden零。我是否正確?這將解釋這種行爲。

+0

我確實已經刪除了這個常量,因爲我已經認爲這很奇怪,在我發佈的內核中也有很多錯誤,所以我上傳了第二個錯誤,我現在使用的一個,我也發佈了一個s在我的主要OpenCL東西輕微修改版本。要回答你的第二段:但是在內核的最後,它應該有一些其他的值。但事實並非如此。它只是顯示那些最初的零。 – JustAJ