我有一个非常类似的问题在这里说:Intel CPU OpenCL in Mono killed by SIGXCPU (Ubuntu)
本质上,我有一个非常简单的C#应用程序使用OpenCL (通过OpenCL.Net包装,但它不应该有什么区别,因为它只是包装本机函数,仅此而已)。在代码中,我只构建内核,然后分配一个大的浮动数组。
更具体地说,我的平台是Ubuntu12.04,OpenCL 1.1 (带有CUDA)和mono3.0.3。
问题:当通过mono运行我的代码时,我得到的CPU限制超过了错误
很少的事情:
斯特拉斯没有显示出任何有用的东西。我还尝试将一个回调传递给ClBuildProgram (注意:如果我用ClBuildProgram进行注释,它就能工作)。
有什么想法吗?
发布于 2013-07-29 10:45:26
这就是我最终成功的原因。
mono有一个主要问题-它使用SIGXCPU进行GC处理(这是奇怪的)。不幸的是,OpenCL也使用它,因此它会发生冲突。
变通办法是修改单一代码。
转到源目录和grep -r SIGXCPU。在我的mono (3.0.3)中有两个重要文件
./libgc/p线程_stop_world.c:#定义SIG_THR_RESTART SIGXCPU
./mono/元数据/sgen posix.c:const restart_signal_num = SIGXCPU;
用SIGWINCH替换SIGXCPU并重新编译。一个注意事项是,我不确定它是否破坏了什么东西,但目前看来还可以,OpenCL问题已经解决了。如果它破坏了什么东西(如gui),将SIGWINCH替换为您拥有的不同信号(signals.h表示信号防御)
https://stackoverflow.com/questions/17879292
复制相似问题