0

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

是否可以根据我需要保留的字节来确定这个空间有多大?

太感谢了。

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

我想在 GPU 上的巨大图像上应用卷积算法。为此,由于 GPU 上没有足够的内存来保存它,我需要将图像分成几行并多次调用内核。

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

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

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

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

4

1 回答 1

1

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

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

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

于 2014-11-10T04:33:49.623 回答