openCL堆栈位置(递归)

时间:2016-12-17 12:59:55

标签: stack opencl

我正在一个线程上使用openCL进行快速排序(recursiv),但我遇到了一些问题。如果我尝试为我的intel cpu编译我的代码(使用openCL 2.0检测到“递归”),openCL编译器将返回错误,但它编译并在我的nvidia 950M(openCL 1.2)上工作,仅用于少量递归调用。

经过一些调查后,我发现当我的筹码量超过32Ko时,会出现“OUT_OF_MEMORY”错误,所以我有两个问题要求你出局;)

第一个:为什么我可以在openCL 1.2设备上使用递归而不是在openCL 2.0设备上使用递归? (当openCL 1.2不支持递归时)。

第二个:私有内存不能大于32Ko(就像我的堆栈的最大大小)。那么,我的堆栈是否存储在我的私有内存中?或者只是在具有相同空间的其他位置?

1 个答案:

答案 0 :(得分:1)

OpenCL内核中不允许递归(请参阅“6.9限制”小节i:“不支持递归”)。它(部分)在您的某个设备中工作的事实是一个错误。

解决方案:重新编写内核以使用迭代而不是递归。