设备上的内存分配问题

各位大牛,请教一个问题:
在设备上用malloc申请内存有限制吗?我的显卡内存1GB,可是当申请几M内存时,就返回空指针怎么回事?

LZ您好,这个是有限制的,kernel内malloc的大小不能超过global memory中一个固定大小的堆的容量。

不过您可以使用以下两条命令去查询和修改该默认堆的容量。
‣ cudaDeviceGetLimit(size_t* size, cudaLimitMallocHeapSize)
‣ cudaDeviceSetLimit(cudaLimitMallocHeapSize, size_t size)

以及默认情况下,该堆的大小为8MB。

您可以在CUDA C Programming Guide B.17章节找到详细的介绍。

祝您好运!

以及补充说明一下,大容量的内存申请,建议使用cudaMalloc()系列函数在host端申请。
kernel内申请空间只是作为一个补充。

大致如此,祝您编码顺利~

好的,非常感谢ice版主,看看得认真看一下官方的文档了。

不客气的,经常翻一翻手册,或者搜一下手册是个好习惯,大有裨益。

欢迎您常来论坛,祝您编码顺利~