我正在尝试在OpenCL中编写MergeSort(我知道,BitonicSort更快,但我想比较它们),目前我遇到了一个奇怪的问题:
如果我将全局大小设置为1 << 24
并将本地大小设置为512
,则内核将无法执行,也无法执行下一个排队的内核。但是,在排队内核或等待队列完成时,我都不会收到任何错误。没什么,只是内核没有被执行。 ComputeProfiler也显示它 - 没有内核。但是,对于全局大小1 << 23
,算法运行良好。对于本地尺寸256
,最小失败的全局尺寸为1 << 23
。
为什么会这样?我认为可能至少有65535
个工作组(根据NVidia编程指南),向下舍入为最接近2的幂32768 == 1 << 15
,本地大小为512 == 1 << 9
这意味着具有全局大小1 << 24
应该还可以。此外,我可以使用此全局和本地大小执行另一个内核。
最重要的是,没有错误,我无法察觉到这种情况已经发生。可能我需要做一些解决方法(在大型集合中手动循环工作组)但我想了解问题。
感谢您的任何建议
PS:我在Linux机器上使用NVidia GTX 580,驱动程序为260.19.26。