我已經寫了一個類,在堆中的構造函數內存分配與cudaMallocHost()和cudaMalloc()。cudaFree和cudaFreeHost無法釋放堆分配的內存
如果我嘗試免費存儲器cudaFree()或cudaFreeHost(),GPUassert抱怨:
GPUassert:無效裝置指針../src/main.cu 97
或
GPUassert:無效的參數../src/main.cu 95
我在具有計算能力2.1的設備上使用CUDA TK 7.0。
我想我錯過了一些基本的東西。 我可以創建在設備上分配內存的對象嗎?
class FreeMe {
public:
FreeMe(int size);
~FreeMe(void);
private:
float *A, *dA;
int size;
};
FreeMe::FreeMe(int size) :
size(size) {
gpuErrchk(cudaMallocHost((void**) &A, sizeof(float) * size));
gpuErrchk(cudaMalloc((void**) &dA, sizeof(float) * size));
}
FreeMe::~FreeMe(void) {
std::cout << "FreeMe obj deleted: Free ..." << std::endl;
gpuErrchk(cudaFreeHost(A));
gpuErrchk(cudaFree(dA));
}
int main(int argc, char **argv) {
int size = 3;
FreeMe free1(size);
cudaDeviceReset();
std::cout << "Program terminated successfully." << std::endl;
return EXIT_SUCCESS;
}
我不確定,但也許你需要首先初始化CUDA。 – Unick
也看起來像cudaFreeHost之後調用cudaDeviceReset。 – Unick