各位大牛,请教一个问题:
在设备上用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版主,看看得认真看一下官方的文档了。
不客气的,经常翻一翻手册,或者搜一下手册是个好习惯,大有裨益。
欢迎您常来论坛,祝您编码顺利~