由cudaMallocPitch完成的实内存分配

时间:2013-06-24 15:30:37

标签: c++ cuda

在调试我的cuda代码中的内存泄漏时,我正在运行一些测试,并想知道除了我要求的内容之外在GPU上分配了什么。

这是我正在运行的测试:

__HOST__ __forceinline__
double memoryUsage()
{
    size_t free_byte = 0;
    size_t total_byte = 1;
    cudaMemGetInfo(&free_byte, &total_byte);
    return free_byte;
}

...
double mem = memoryUsage();
cudaMallocPitch((float**)&device_ptr, &pitch, width * sizeof(T), height);
ASSERT(mem - memoryUsage() == pitch * height);
...

当然这里的断言失败了。我稍微简化了代码,但请注意我检查cudaMallocPitch中的任何错误。

有人对此有解释吗? GPU上的内存管理系统(malloc)可以使用这个内存吗?或者我只是误解了什么?

如果它可以提供帮助,以下是我为400 x 400 x sizeof(uint16_t)数组的某些分配获得的一些值:

pitch= 1024; mem-memoryUsage()= 0; pitch*height= 409600
pitch= 1024; mem-memoryUsage()= 1.04858e+006; pitch*height= 501760
pitch= 1536; mem-memoryUsage()= 1.04858e+006; pitch*height= 838656

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我将回答我自己的问题。

这个问题的答案(Why doesn't CudaFree seem to free memory?)显然正在发生什么。 1.04858e+006是用于在我的情况下在GPU上分配内存的页面大小。