我有,我用它來實例化一個全局變量的類:如何處理cudaFree上全局變量,實例化
class BitUnpackPtrs
{
public:
ushort* d_dataIn;
BitUnpackPtrs() : d_dataIn(NULL) {};
~BitUnpackPtrs()
{
cudaFree(d_dataIn);
}
void update(...) { ... }
};
類是全球實例作爲手柄,以減少CUDA內存的頻繁分配。然而,當我的程序終止,CUDA-MEMCHECK產生一個警告:
計劃打cudaErrorCudartUnloading(誤差29)由於對CUDA API調用cudaFree 「司機關停」。
處理這個問題的正確方法是什麼?我可以刪除cudaFree,但是如果此類在稍後的某個非全局級別使用,則會導致內存泄漏。我可以在構造函數中使用一個標誌來指示應該如何處理內存。
或者,有沒有辦法檢測cuda驅動程序是否正在關閉,而不是在那種情況下調用cudaFree?
不要實例化期望調用或必須在構造函數或析構函數中調用cuda運行時API函數的類的全局對象。 CUDA運行時初始化/拆卸可以在程序啓動和關閉時對此進行破壞,具體取決於您在類構造函數和析構函數中所做的操作。沒有辦法檢測cuda驅動程序是否正在關閉(不會在'cuda-memcheck'中標記),並且不會在該實例中調用'cudaFree'。 –