当我使用cudaMalloc(100)时,它预留了超过100 B(根据一些用户的说法,这是由于粒度问题和内务管理信息。
是否有可能根据我需要保留的字节数来确定这个空间的大小?
非常感谢你。
编辑:我会解释为什么我需要知道。我想将卷积算法应用于GPU上的巨大图像。要做到这一点,由于GPU上没有足够的内存来保存它,我需要分批分割图像,并多次调用内核。
实际上,我需要发送2个图像,OnlyRead矩阵和Results矩阵。
我想先计算一下我可以根据可用内存量发送给设备的最大行数。
第一个cudaMalloc成功执行,但是在尝试执行第二个CudaMalloc时会出现问题,因为第一个保留占用了比预期更多的字节数。
我现在正在做的是考虑免费记忆量比现在少10%......但这只是一个神奇的数字来自无处......
答案 0 :(得分:1)
"有没有办法知道cudaMalloc要保留的额外空间是什么?"
不违反CUDA的平台保证,没有。 cudaMalloc()
返回指向所请求的内存量的指针。您无法对请求数量结束后恰好有效的内存量做出任何假设 - CUDA分配器已经使用了子分配器,与基于CPU的内存分配器不同,数据结构可以跟踪免费列表等不与分配的内存交错。因此,例如,假设CUDA运行时保证返回指针的对齐意味着返回指针以外的任何内容将具有某种对齐,这是不明智的。
如果您研究CUDA运行时的行为,那将会揭示该特定CUDA运行时的行为,但行为可能会随着将来的版本而改变并破坏您的代码。