2014-03-28 47 views
1

我有一個MATLAB mex庫,它在運行時加載問題特定的cubin文件。這個mex函數被MATLAB調用了幾百次。當我打電話給cuModuleLoad時,內核是否每次都重新加載內核?或者它以某種方式被緩存?如果沒有,是否有辦法將加載的模塊保存在兩者之間?我目前不打電話給cuModuleUnload。CUDA環境中模塊的持久性

似乎CUDA上下文只爲MATLAB過程創建一次,因爲只有第一次調用該庫時速度較慢。隨後對mex庫的matlab函數調用很快。所以我想我可以假設相同的CUDA上下文被重用。

+0

問題[MEX庫生命週期](http://stackoverflow.com/q/20575957/2778484)可能會感興趣。 – chappjc

回答

2

簡短的回答是肯定的,你可以重複使用它們。

只要不依賴Matlab內存管理器(mxMalloc,mxCreateNumericArray等),MEX文件中的C++中的全局/靜態變量或靜態成員只會在MEX文件動態加載時創建一次。當Matlab退出或MEX文件由clear mex卸載時,它們被銷燬。也可以使用MEX APImexLock保護MEX文件以防止意外卸載,mexAtExit註冊析構函數回調等。

+0

但是我每次調用函數時都會調用cuModuleLoad函數。所以,我的問題是CUDA如何管理資源。 –

+1

這是一個當你多次調用'cuModuleLoad'時會發生什麼的問題。檢查CUDA文檔。但是,只能通過在類構造函數/析構函數中使用標誌或包裝來使該實例靜態化,才能初始化CUDA資源一次。 – kyamagu

+0

我可以試試看。這肯定會導致一些問題,因爲一段時間後,cuModuleLoad失敗,出現錯誤代碼2(內存不足)。 –