我已经写了一个类,在堆中的构造函数内存分配与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