我无法在主机上取消分配已在设备上分配的内存,也无法在设备上取消分配在主机上分配的内存。我将 CUDA 5.5 与 VS2012 和 Nsight 一起使用。是因为主机上的堆没有转移到设备上的堆还是相反,所以主机和设备之间的动态分配是未知的?
如果这是在文档中,则不容易找到。同样重要的是要注意,直到我运行带有 CUDA 调试和启用内存检查器的程序时才抛出错误。该问题不会导致 CUDA 调试之外的崩溃,但如果我没有追溯检查内存问题,以后会导致问题。如果有一种方便的方法可以将堆/堆栈从主机复制到设备,那就太好了……希望和梦想。
这是我的问题的一个例子:
__global__ void kernel(char *ptr)
{
free(ptr);
}
void main(void)
{
char *ptr;
cudaMalloc((void **)&ptr, sizeof(char *), cudaMemcpyHostToDevice);
kernel<<<1, 1>>>(ptr);
}