我写了一个类,其中堆中的构造函数内存是用 cudaMallocHost() 和 cudaMalloc() 分配的。
如果我尝试释放内存 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;
}
Run Code Online (Sandbox Code Playgroud)