從主機功能釋放設備分配的內存有效嗎? 我在寫一些應該在主機和設備上使用的C++類。我的構造函數和析構函數是這樣的:在主機設備上分配的空閒內存
class myClass {
public:
__host__ __device__ myClass() {
#if defined(__CUDA_ARCH__)
data = (char*)malloc(DATA_SIZE);
#else
cudaMalloc(&data,DATA_SIZE);
#endif
}
__host__ __device__ ~myClass() {
#if defined(__CUDA_ARCH__)
free(data);
#else
cudaFree(data);
#endif
}
private:
char* data;
}
上面的代碼編譯,如果我的設備和自由它的主機上建立一個一流的,我沒有得到一個錯誤。但是這種情況在CUDA開發人員論文中沒有記錄。
我認爲你有你的情況倒退。如果定義了__CUDA_ARCH__,那麼你不想使用'cuda'函數嗎? –
如果定義了__CUDA_ARCH__,則會爲設備編譯代碼。在設備上,我必須使用'malloc'和'free'。只有在主機上,需要使用'cudaMalloc'和'cudaFree' –
只要malloc和cudaMalloc以及free和cudaFree在同一堆上運行,我會認爲它會好的。 – grieve