2014-11-08 55 views
-1

当我使用cudaMalloc(100)时,它保留了100多个B(根据一些用户在这里,这是由于粒度问题和家务管理信息造成的)有没有办法知道cudaMalloc要保留多少空间?

是否有可能确定这个空间有多大将基于字节I需要保留

谢谢你这么多

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

我想申请在GPU上的巨大图像卷积算法来做到这一点。 ,因为GPU上没有足够的内存来保存它,所以我需要分割b中的图像行的多次调用内核几次。

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

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

第一个cudaMalloc成功执行,但是在尝试执行第二个CudaMalloc时出现问题,因为第一个预留占用了比预期更多的Bytes。

我在做什么,现在正在考虑的可用内存数量比它是什么少10%......但是这仅仅是从哪儿来一个神奇的数字..

+5

[This](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#device-memory-accesses)可能是有益的:“任何驻留在全球的变量的地址内存或由驱动程序或运行时API的内存分配例程之一返回的内存总是至少与256字节对齐。“因此,我希望任何分配请求至少“用尽”到下一个更高的256个字节的倍数。话虽如此,AFAIK对你的问题的答案没有明确说明,所以试图发现它是什么,然后依赖它可能是有风险的。 – 2014-11-08 17:53:24

+1

@RobertCrovella我知道为什么“甚至是256个字节的倍数”?为什么不至少使用256的下一个倍数? – Farzad 2014-11-08 18:01:38

+0

此[此帖子](http://stackoverflow.com/questions/14082964/cuda-alignment-256bytes-seriously)是相关的。 – Farzad 2014-11-08 18:01:59

回答

1

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

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

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

相关问题