2013-04-24 23 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到虛擬機,以完全隔離你的主機。