我正在带有 NVIDIA 卡的 Ubuntu 机器上编写我的第一个 OpenCL 内核。偶尔,该应用程序会完全卡住整个计算机。鼠标不动,重启的唯一方法是用力按下电源按钮。
我意识到卡住的原因是我不小心读取了全局只读 float 组的最后一个索引。虽然这是我不打算经常做的事情,但它可能会在未来发生。
我的问题是 - 如果再次发生这种情况,是否有任何方法可以防止计算机完全关闭?我知道,例如,Windows 可以关闭损坏的 GLSL 内核并通过重新启动图形驱动程序来恢复。这里可能有类似的东西吗?
最佳答案
您可能无法完全恢复,但可以使用 SysRq(有时称为 System Request 或 Magic SysRq)更好地恢复。通过执行特定的组合键,您可以让 Linux 以某种理智的方式重新启动(杀死进程和卸载文件系统)。此键序列在 http://en.wikipedia.org/wiki/Magic_SysRq_key 中有详细描述。在此不再赘述。
在某些情况下,您仍然可以通过 SSH 连接到设备。如果这是你的情况,你可能会更幸运。如果你可以 SSH,你可以尝试许多其他选项,例如:卸载/重新加载崩溃的模块,重新启动 xserver,或者至少以正常方式重新启动。
虽然我不是“HURD”方面的专家,但我相信它旨在更好地处理此类情况。我能想到的唯一其他解决方案是使用两张显卡,一张用于 X,一张用于 OpenCL。根据您正在做的事情,您可能必须将 NVIDIA 传递给虚拟机,以便将其与您的主机完全隔离。
关于linux - 从 Linux 中的 OpenCL 卡住中恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195105/