在调试我的 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
谢谢你的帮助。