2016-12-17 121 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:“不支持递归”一节)。它在你的一个设备上工作(部分)的事实是一个错误。

解决方法:重新编码您的内核使用迭代而不是递归。