当我使用cudaMalloc(100)时,它保留了超过100B(根据这里的一些用户的说法,这是由于粒度问题和内务信息。
有可能根据我需要保留的字节数来确定这个空间有多大吗?
非常感谢。
编辑:我会解释为什么我需要知道。
我想在GPU上对巨大的图像应用卷积算法。要做到这一点,由于GPU上没有足够的内存来容纳它,我需要将图像分为几行,并多次调用内核。
事实上,我需要发送两个图像,OnlyRead矩阵和Results矩阵。
我想根据可用内存的数量,先验地计算我可以发送到设备的最大行数。
第一个cudaMalloc成功执行,但在尝试执行第二个cudaMalloc时出现了问题,因为第一个保留占用的字节数超过了预期。
我现在所做的是考虑空闲内存量比实际少10%……但这只是一个不知从哪里来的神奇数字。。
"有办法知道cudaMalloc将保留的额外空间是多少吗?"
不违反CUDA的平台保证。cudaMalloc()
返回一个指向请求内存量的指针。你不能对请求量结束后有效的内存量做出任何假设——CUDA分配器已经使用了子分配器,与基于CPU的内存分配器不同,跟踪空闲列表等的数据结构没有与分配的内存交错。因此,例如,假设CUDA运行时对返回指针的对齐的保证意味着除了返回指针之外的任何东西都将具有特定的对齐,这是不明智的。
如果你研究CUDA运行时的行为,这将揭示特定CUDA运行库的行为,但这种行为可能会随着未来的发布而改变,并破坏你的代码。