【问题标题】:Intel CPU OpenCL in Mono killed by SIGXCPU (Ubuntu)Mono 中的 Intel CPU OpenCL 被 SIGXCPU (Ubuntu) 杀死
【发布时间】:2012-10-30 20:49:36
【问题描述】:

前段时间,我使用 OpenCL(当时是学校作业)编写了简单的 boids 模拟,使用 C#、用于 OpenCL 的 Cloo 和用于 OpenGL 输出的 OpenTK。我在 Windows7 上使用 AMD CPU 实现 OpenCL 和朋友的 NVidia 对其进行了测试。 现在我在 Linux (Ubuntu 12.04) 上试了一下。我安装了amd app sdk和intel sdk。它编译正常,参考 CPU 实现与图形输出工作正常。但是当我尝试运行 OpenCL 版本时,它会运行大约 1 秒(显示 OpenGL 中的有效输出),然后被 SIGXCPU 杀死。试图谷歌一些已知问题,但一无所获。 所以我试图捕捉并忽略这个信号,但每次我尝试时,程序都会挂起。当我将单声道设置为捕获一些不同的信号(例如 SIGPIPE)时,它运行正常(减去 opencl 时的终止)。 在 Mono 中,我尝试了常见问题中所述的 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) {
}

即使我从 main 中删除所有其他内容,它仍然会在“触摸”该信号后的某个时间挂起。

还有一件奇怪的事:

Mono.Unix.Native.Stdlib.SetSignalAction ( Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Default);

在 Application.EnableVisualStyles() 之后的某处使用 SIGXCPU 杀死应用程序;当我之前设置它时,这次甚至没有接触 OpenCL。

我在 Mono 中遗漏了什么吗?是否在内部某处使用此信号会妨碍 OpenCl?

【问题讨论】:

    标签: linux mono opencl signal-handling


    【解决方案1】:

    Mono 在内部出于自己的目的使用 SIGXCPU,因此如果您忽略它(或由于其他原因引发它),事情就会中断。

    【讨论】:

    • 这就是我所害怕的。然后我会尝试一些更简单的 OpenCL 看看,如果它也被杀死了..
    【解决方案2】:

    SIGXCPU 表示您已超出每个进程的时间限制。一旦你超过了它,你就已经超过了它。进程卡住了。您需要使用 ulimit 或寻求管理员的帮助来设置更高的限制。

    【讨论】:

    • 我在 Cuda 应用程序中看到了这一点。似乎有时 Cuda 内核可以在显卡上运行的最长时间。如果您超过此时间限制,应用程序将被终止。
    • @bmargulies 当我尝试“ulimit -a”时我得到“cpu time (seconds, -t) unlimited” 是否有一些特定于 Mono 的设置?
    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 2014-10-23
    • 2014-11-06
    • 2015-11-27
    • 2015-04-16
    • 2018-07-21
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多