我遇到的问题非常类似于Intel CPU OpenCL in Mono killed by SIGXCPU (Ubuntu)
基本上,我有一个非常简单的C#应用程序使用OpenCL(通过OpenCL.Net包装器,但它不应该有所作为,因为它只是包装本机函数而已。)。在代码中我只是构建内核然后分配一大堆浮点数。
更具体的我的平台:它是Ubuntu 12.04,OpenCL 1.1(带CUDA)和单声道3.0.3。
问题:通过单声道运行我的代码时出现CPU LIMIT EXCEEDED错误
少数事情:
Strace没有显示任何有用的东西。我也尝试将回调函数传递给ClBuildProgram(注意:如果我用ClBuildProgram注释掉它的行,那就可以了。)
有什么想法吗?
答案 0 :(得分:0)
这最终对我有用。
单声道存在一个主要问题 - 它使用SIGXCPU进行GC处理(这很奇怪)。不幸的是,OpenCL也使用它,因此它会发生冲突。
解决方法是修改单声道代码。
转到源目录和grep -r SIGXCPU。在我的单声道(3.0.3)中有2个重要文件
./ libgc / pthread_stop_world.c:#define SIG_THR_RESTART SIGXCPU
./ mono / metadata / sgen-os-posix.c:const static int restart_signal_num = SIGXCPU;
用SIGWINCH替换SIGXCPU并重新编译。需要注意的是,我不确定它是否没有破坏,但现在看起来还行,OpenCL问题已经消失。如果它破坏某些东西(比如gui)用你拥有的不同信号替换SIGWINCH(signal.h用于信号defs)