我在執行CUDA腳本後(即使使用cudaFree()),我的顯卡仍留有內存問題。GPU內存在CUDA腳本執行後沒有自行釋放
在啓動時,已使用的總內存大約爲128MB,但在腳本運行後,它會在內存執行中耗盡內存。
NVIDIA-SMA:
+------------------------------------------------------+
| NVIDIA-SMI 340.29 Driver Version: 340.29 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 660 Ti Off | 0000:01:00.0 N/A | N/A |
| 10% 43C P0 N/A/N/A | 2031MiB/2047MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Compute processes: GPU Memory |
| GPU PID Process name Usage |
|=============================================================================|
| 0 Not Supported |
+-----------------------------------------------------------------------------+
有什麼辦法來釋放該內存備份而無需重啓,或許是終端命令?
如果我沒有在CUDA腳本中正確管理自己的內存,或者該腳本停止/退出時該內存是否自動釋放,這也是正常行爲嗎?
謝謝 謝謝。
如果您的程序確實退出,CUDA上下文將被銷燬並釋放其使用的所有資源。你確定你沒有一堆殭屍或掛在你的程序仍然在後臺運行的實例嗎? – talonmies 2015-04-06 13:34:39
這是問題所在,我認爲這些進程會在崩潰/完成時自殺。我檢查了系統監視器,發現我運行的輸出文件有幾個進程。殺死那些GPU內存後釋放自己。是否有一個命令,我可以添加到c/cuda以釋放所有gpu內存意外停止(如ctrl + z退出,而不僅僅是如果cudaMalloc失敗)?如果你把它變成一個答案,我也會將它標記爲正確的,再次感謝 – 2015-04-06 13:48:15
你知道ctrl-z不會向前臺進程發送一個SIGINT或SIGTERM信號,它發送SIGTSTP(與ctrl-c或kill不同)。除非您在應用程序中註冊一個信號處理程序來捕獲SIGSTP並導致應用程序退出,否則它永遠不會知道ctrl-z曾經被推送(這是設計)。這聽起來像是用戶行爲問題,而不是編程問題。 – talonmies 2015-04-06 14:00:26