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