2013-10-04 32 views
1

如果我的主機程序[exit]/[segfault]/[kill]關於CUDA上下文銷燬和相應分配資源的相應行爲是什麼?主機進程終止時的CUDA上下文銷燬

「行爲」我的意思是自動GPU驅動程序端機制,如果我從來沒有明確地在我的程序中調用cudaDeviceReset。

我正在Linux下工作,我發現我的GPU內存使用量在幾天(甚至一天)內增量增長,而我啓動的CUDA代碼有時通過(CTRL-C)終止或者僅僅是segfaulting(在主機端)...

回答

2

也許,如果你正確管理異常,你可以使用atexit()?使用atexit()的爲例如下:

void ExitFunction() { 
    cudaDeviceReset(); 
} 

int main(...) { 
    atexit(ExitFunction); 
    ... 
    return 0; 
} 
2

設備上的所有分配被封裝在CUDA context。在使用運行時API時,CUDA上下文是「底層」下的created automatically

當應用程序退出時,無論如何,應該銷燬上下文(以及封裝在其中的任何相關分配)。

如果您在各種事件後遇到空閒內存的「小」變化,這可能僅僅是事實,即驅動程序正在爲內部內務處理任務分配額外的空間用於自己的使用。 (驅動程序類似於設備的操作系統。)如果在各種應用程序退出事件後,您在空閒內存中發生「較大」變化,那麼我會說出了一些問題,但由於您的問題沒有提供關於重現它,我不知道還能說什麼。

如果要強制駕駛員「復位」外,你可以嘗試通過卸載驅動程序:

sudo rmmod nvidia 
sudo nvidia-smi -a 

和你的可用內存應恢復「正常」。

相關問題