【发布时间】:2015-12-15 07:05:08
【问题描述】:
当我使用 cudaMalloc (100) 时,它保留了超过 100 B (根据这里的一些用户,这是由于粒度问题和内务信息。
是否可以根据我需要保留的字节来确定这个空间有多大?
非常感谢。
编辑:我会解释为什么我需要知道。
我想在 GPU 上的大图像上应用卷积算法。为此,由于 GPU 上没有足够的内存来保存它,我需要将图像分成几行并多次调用内核。
实际上,我需要发送 2 个图像,OnlyRead 矩阵和 Results 矩阵。
我想根据可用内存量先验计算我可以发送到设备的最大行数。
第一个 cudaMalloc 成功执行,但在尝试执行第二个 CudaMalloc 时出现问题,因为第一个保留占用的字节数比预期的多。
我现在正在做的是考虑可用内存量比实际少 10%...但这只是一个不知从何而来的神奇数字..
【问题讨论】:
-
This 可能具有指导意义:“驻留在全局内存中或由驱动程序或运行时 API 的内存分配例程之一返回的变量的任何地址始终与至少 256 个字节对齐。”因此,我希望任何分配请求至少“用完”到下一个更高的 256 字节的偶数倍。话虽如此,AFAIK 没有明确指定您的问题的答案,因此试图发现它是什么然后依赖它可能是有风险的。
-
@RobertCrovella 我可以知道为什么是“256 字节的偶数倍”吗?为什么不至少使用 256 的下一个倍数?
-
还有this post 是相关的。
-
对不起,我的意思是一个“整数”倍数。我用“偶数倍数”来指代非分数倍数,但我应该说“整数倍数”或“整数倍数”
-
你为什么想知道?是因为您正在进行许多小分配,并且不想要开销吗?如果是这样,请编写自己的分配器。如果您正在尝试开发依赖于运行时行为的代码,请立即停止并寻求另一种方法。
标签: cuda malloc space granularity