2016-12-17 120 views
1

我在一個線程上用openCL做了一個快速排序(recursiv),並且出現了一些問題。如果我嘗試爲我的intel cpu編譯我的代碼(使用openCL 2.0檢測到「遞歸」),但openCL編譯器將返回一個錯誤,但它僅編譯和工作在我的nvidia 950M(openCL 1.2)上,僅用於少量遞歸調用。openCL堆棧位置(遞歸)

一些調查後,我發現,當我的籌碼比32KO越大「OUT_OF_MEMORY」錯誤追加,所以我對你expers兩個問題;)

第一個:憑啥我可以在openCL 1.2設備上使用遞歸,而不是在openCL 2.0設備上使用遞歸? (當openCL 1.2不應該支持遞歸時)。

第二個:私人內存不能大於32Ko(像我的堆棧的最大大小)。那麼,我的堆棧存儲在我的私人內存中嗎?或者就在同一空間的另一個位置?

回答

0

在OpenCL內核中不允許遞歸(請參見「6.9限制」小節i:「不支持遞歸」一節)。它在你的一個設備上工作(部分)的事實是一個錯誤。

解決方法:重新編碼您的內核使用迭代而不是遞歸。