2013-04-24 39 views
4

我正在使用NVIDIA卡在Ubuntu机器上编写我的第一个OpenCL内核。偶尔,应用程序完全冻结整个计算机。鼠标不移动,重启的唯一方法是通过强制按下电源按钮。从Linux中的OpenCL冻结恢复

我意识到冻结的原因是我意外地读过全局只读浮点数组的最后一个索引。虽然我不打算经常这样做,但它可能在未来仍然会发生。

我的问题是 - 有没有办法阻止计算机从完全如果再次发生这种情况,关闭?例如,我知道Windows可以关闭不良的GLSL内核,并在图形驱动程序重新启动时恢复。这里可能有类似的东西吗?

+2

这是一个很好的问题。我的解决方案是首先在CPU上运行我的内核。他们永远不会崩溃整个系统。一旦内核在CPU上稳定后,我会在GPU上尝试它。你也可以在CPU上使用printf,我发现这对调试非常有用。 – 2013-04-25 08:04:04

+0

Windows使用超时检测和恢复(TDR)尝试在图形驱动程序冻结后重新启动它。不知道Linux是否有类似的东西。键盘仍然工作吗?曾经有一种用于在控制台之间切换的关键组合。不是一个理想的解决方案,但也许它可以让你正确地关闭电脑。请记住,显示驱动程序已冻结,因此鼠标不移动,但所有应用程序仍在后台运行 - 它们的进度未显示。 – chippies 2013-04-25 13:33:11

回答

1

您可能无法完全恢复,但使用SysRq(有时称为系统请求或Magic SysRq)可以更好地恢复。通过执行特定的组合键,您可以让Linux以某种理智的方式重新启动(杀死进程和卸载文件系统)。这个键序列在http://en.wikipedia.org/wiki/Magic_SysRq_key详细描述,所以我不会在这里重复。

在某些情况下,您可能仍然可以SSH连接到设备。如果这是你的情况,你可能会更幸运。如果您可以使用SSH,还可以尝试其他一些选项,例如:卸载/重新加载崩溃的模块,重新启动xserver或至少重新启动常规方式。

虽然我不是“HARD”的专家,但我相信它是为了更好地处理这种情况而设计的。我能想到的唯一的其他解决方案是使用两个显卡,一个用于X,另一个用于OpenCL。根据你在做什么,你可能不得不通过NVIDIA到虚拟机,以完全隔离你的主机。