有没有办法知道什么';cudaMalloc准备保留的额外空间是什么?

有没有办法知道什么';cudaMalloc准备保留的额外空间是什么?,cuda,malloc,space,granularity,Cuda,Malloc,Space,Granularity,当我使用Cudamaloc(100)时,它保留了超过100B的内存(根据这里的一些用户的说法,这是由于粒度问题和内务管理信息) 是否可以根据需要保留的字节来确定此空间的大小 非常感谢你 编辑:我会解释为什么我需要知道 我想在GPU上的巨大图像上应用卷积算法。要做到这一点,因为GPU上没有足够的内存来容纳它,我需要将图像分成几行,并多次调用内核 事实上,我需要发送两张图像,OnlyRead矩阵和Results矩阵 我想根据可用内存量,预先计算我可以发送到设备的最大行数 第一个cudamaloc成功

当我使用Cudamaloc(100)时,它保留了超过100B的内存(根据这里的一些用户的说法,这是由于粒度问题和内务管理信息)

是否可以根据需要保留的字节来确定此空间的大小

非常感谢你

编辑:我会解释为什么我需要知道

我想在GPU上的巨大图像上应用卷积算法。要做到这一点,因为GPU上没有足够的内存来容纳它,我需要将图像分成几行,并多次调用内核

事实上,我需要发送两张图像,OnlyRead矩阵和Results矩阵

我想根据可用内存量,预先计算我可以发送到设备的最大行数

第一个cudamaloc成功执行,但在尝试执行第二个cudamaloc时出现问题,因为第一个保留占用的字节比预期的多

我现在所做的是考虑到可用内存量比现在少10%…但这只是一个神奇的数字,不知从何而来。

“有没有办法知道Cudamaloc将保留多少额外空间?”

不违反CUDA的平台保证,不。
cudaMalloc()
返回一个指向请求内存量的指针。您不能对请求内存量结束后的有效内存量做出任何假设-CUDA分配器已经使用子分配器,并且与基于CPU的内存分配器不同,用于跟踪空闲列表等的数据结构不与例如,假设CUDA运行时对返回指针对齐的保证意味着除返回指针具有特定对齐之外的任何内容,这是不明智的


如果您研究CUDA运行时的行为,这将有助于了解特定CUDA运行时的行为,但该行为可能会随着未来版本的变化而改变,并破坏您的代码。

可能具有指导意义:“驻留在全局内存中或由某个内存分配例程从驱动程序或运行时API返回的变量的任何地址始终与至少256个字节对齐。”因此,我希望任何分配请求至少“用完”“到下一个更高的256字节的偶数倍。尽管如此,您的问题的答案并没有明确指定,因此试图发现它是什么,然后依靠它可能会有风险。@RobertCrovella我可以知道为什么是”256字节的偶数倍“?为什么不至少使用256的下一个倍数?这也是相关的。对不起,我指的是“整数”倍数。我用“偶数”表示非小数倍数,但我应该说“整数倍数”或“整数倍数”你为什么想知道?是因为你在做很多小的分配,而不想增加开销吗?如果是这样,请编写你自己的分配程序。如果你试图开发依赖于运行时行为的代码,现在就停下来,寻求另一种方法。