#OPENCL#clBuildProgram失败,错误代码为-5

时间:2018-06-20 17:12:06

标签: opencl gpu

在GTX 750上使用clBuildProgram()时遇到问题。内核无法构建,错误代码为-5(CL_OUT_OF_RESOURCES),构建日志为空。

有一个可能的解决方案,即将'-cl-nv-verbose'作为输入选项添加到clBuildProgram()。但是,它不适用于所有内核。 基于此,我尝试了另一个优化选项,即“ -cl-opt-disable”。它也适用于某些内核。

然后我很困惑。

  1. 我找不到导致错误的真正原因;
  2. 为什么对于某些内核来说,不同的构建选项有意义?
  3. 该错误似乎与体系结构无关。由于相同的Opencl代码在GTX 750上成功执行,而在Tesla P100上失败。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

我能想到的可能原因:

  1. 寄存器用完。如果内核代码中有很多(private)变量,尤其是数组,则会发生这种情况。每个内核仅具有一定数量的可用寄存器(取决于体系结构),并且编译器可能无法将它们“溢出”到全局内存中。如果这是问题所在,您可以尝试重新排列代码,使变量的作用域更加有限,或者您可以尝试将一些数组移至local内存中(请注意,这在组中的工作项之间共享,并且大小也受限制)。一个好的GPU探查器/代码分析工具应该能够告诉您存在多少寄存器压力,因此,如果您的内核在某些硬件上工作,则应该能够找到该寄存器压力,并得出结论。其他硬件。

  2. 代码大小本身。我认为在现代GPU上这不再是一个大问题,但是如果您拥有真正的巨大内核,则有可能。