簡體   English   中英

多個CUDA流使GPU崩潰

[英]Multiple CUDA streams crashing GPU

這是一個延續這一職位。

似乎特例已經通過增加volitile來解決,但現在其他情況已經壞了。 如果在兩個內核調用之間添加任何內容,則系統將恢復為舊的行為,即立即凍結並打印所有內容。 通過添加sleep(2)可以顯示此行為; set_flagread_flag之間。 另外,當放入另一個程序時,這會導致GPU鎖定。 我現在在做什么錯?

再次感謝。

它與X和顯示驅動程序以及標准輸出隊列進行交互,並且與圖形顯示驅動程序進行交互。

您可以嘗試一些實驗(使用sleep(2);set_flagread_flag內核之間添加):

  1. 通過ssh從另一台計算機通過網絡登錄到您的計算機。 我認為您的程序會工作。 (在這種情況下,X不參與顯示)
  2. 注釋掉打印出“正在啟動...”的行,我認為您的程序將可以正常工作。 (這避免了顯示驅動程序/打印隊列死鎖,請參閱下文)。
  3. 增加sleep(2); 在“開始...”打印行和第一個內核之間。 我認為您的程序將可以正常工作。 (這允許顯示驅動程序在啟動第一個內核之前完全服務於第一個打印輸出,因此不會導致CPU線程停頓。)
  4. 停止X並從控制台運行。 我認為您的程序會工作。

當GPU既托管X顯示器又運行CUDA任務時,它必須在兩者之間切換。 在CUDA任務期間,常規顯示處理被暫停。 您可以在此處了解更多信息。

這里的問題是,在運行X時,第一個打印輸出將發送到打印隊列,但是在啟動第一個內核之前實際上並未顯示。 這很明顯,因為在凍結之前您看不到打印輸出。 在那之后,CPU線程陷入停滯,等待文本顯示。 第二個內核沒有啟動。 中間sleep(2); 並且與操作系統的交互足以使此停頓發生。 而且正在執行的第一個內核已將顯示驅動程序“停止”用於常規顯示任務,因此OS永遠不會停止運行,因此第二個內核不會啟動,從而導致掛起。

請注意,鏈接的custhelp文章中的選項1,2或3在您的情況下將是有效的。 選項4不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM