从主机功能释放设备分配的内存有效吗? 我在写一些应该在主机和设备上使用的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