前一段时间我写了使用OpenCL的简单类鸟群模拟(是学校分配),使用C#,Cloo针对OpenCL和OpenTK的OpenGL输出。 我与AMD的CPU执行的OpenCL的和朋友的NVidia测试了Windows7的。 现在,我想它在Linux(Ubuntu的12.04)。 我安装了AMD APP SDK和英特尔SDK。 它编译OK,参考CPU执行工作正常图形输出。 但是,当我尝试运行的OpenCL版本,它运行约1秒(显示什么似乎像在OpenGL的有效输出),然后得到由SIGXCPU杀害。 试图谷歌的一些已知的问题,但一无所获。 于是,我就赶上并忽略的信号,但每次我尝试,程序挂起。 当我设置单捕捉一些不同的信号(例如SIGPIPE),它运行正常(减去杀死时的OpenCL)。 在单声道,我试图Mono.UnixSignal中常见问题陈述尝试
Mono.Unix.Native.Stdlib.SetSignalAction ( Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Ignore);
那么一些东西,不挂,但并没有帮助:
Mono.Unix.Native.Stdlib.SetSignalAction ( Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Error);
乃至
ignore (0);
Mono.Unix.Native.Stdlib.signal(Mono.Unix.Native.Signum.SIGXCPU, new Mono.Unix.Native.SignalHandler (ignore));
同
static void ignore(int signal) {
}
甚至当我从主删除一切,但它仍然之后的某个时间“接触”该信号挂起。
还有一个奇怪的事情:
Mono.Unix.Native.Stdlib.SetSignalAction ( Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Default);
Application.EnableVisualStyles后某处SIGXCPU杀死应用(); 当我设置它的权利之前,甚至没有接触OpenCL的这段时间。
是不是我在单错过了吗? 使用此信号在某处内部,它获取的OpenCL的方式吗?