Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
#OPENCL#clBuildProgram失败,错误代码为-5_Opencl_Gpu - Fatal编程技术网

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

#OPENCL#clBuildProgram失败,错误代码为-5,opencl,gpu,Opencl,Gpu,在GTX 750上使用clBuildProgram()时遇到问题。内核生成失败,错误代码为-5(CL_OUT_OF_RESOURCES),生成日志为空 有一种可能的解决方案,就是将'-cl nv verbose'作为输入选项添加到clBuildProgram()。然而,它并不适用于所有内核。 基于此,我尝试了另一个优化选项,即'-cl opt disable'。它也适用于某些内核 然后我就糊涂了 我找不到造成错误的真正原因 为什么不同的构建选项对某些内核有意义 该错误似乎与架构无关。因为相同的O

在GTX 750上使用clBuildProgram()时遇到问题。内核生成失败,错误代码为-5(CL_OUT_OF_RESOURCES),生成日志为空

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

然后我就糊涂了

  • 我找不到造成错误的真正原因
  • 为什么不同的构建选项对某些内核有意义
  • 该错误似乎与架构无关。因为相同的Opencl代码在GTX 750上成功执行,而在特斯拉P100上失败

  • 有人有想法吗

    我能想到的可能原因:

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

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


  • 2) 当使用某种形式的模板时,在现代GPU上仍然会发生这种情况(在同一个文件中反复使用相同的内核,但略有不同),您能给我推荐一个GPU分析器分析工具吗?我想测试寄存器压力。另一个问题,我使用了一个简单的opencl基准测试-矩阵乘法。在没有任何构建选项输入的情况下构建内核。然后我编写了一个python脚本来执行它。使用sudo python script.py不会出错,但是只有使用python脚本也会出现上述相同的错误。