cudaMalloc函数分配显存是否有硬性的大小限制?

最近在编程中发现cudaMalloc函数允许分配的显存大小貌似要明显小于空闲的显存。
float* jb_gpu,
size_t a1,a2;
a1=new size_t[1];
a2=new size_t[1];
cudaMemGetInfo(a1, a2); (a1[0]=2629562368,a2[0]=3181838336)
cudaStatus=cudaMalloc((void
) &jb_gpu, a1[0]/2);
cudaMalloc函数分配了一半的空闲显存,但cudaStatus显示分配失败。
后来用不同的大小测试了以下,发现cudaMalloc函数允许分配的显存大小为768 M不到的样子。
查了查编程手册貌似没有提到这个事。

LZ您好,我刚才简单测试了在我的卡上一次malloc很大的一段空间。
我的卡为 GTX 470,显存大约1.25GB,我单次malloc 1GB空间,运行正常。

截图如下(亦有GPU-Z监控)
[attach]2995[/attach]

[attach]2996[/attach]

所以您说的不能malloc到768MB左右以上的空间的现象,在我这里并没有重现。

上述测试结果供LZ参考。

祝您编码愉快~

[attach]2997[/attach]

为啥一样的代码我的就不行啊。这个和驱动有关吗,我用的驱动比较老了,貌似是270.81的。

您好,我的驱动是306.94这个版本的,系统是WIN7 64bit,CUDA Toolkit 5.0 。

建议您尝试更新一下显卡驱动,然后再试试看。

祝您早日解决问题!

换了驱动就好了,前一阵那个嵌套循环内部无法同步的问题也解决了。CUDA受驱动的影响真大啊!

感谢LZ反馈此结果,并恭喜LZ开启 “BUG退散,风轻云淡”成就!

来说说我的情况:之前做openGL也遇到了只能开辟700多MB存储空间的问题,最后发现是需要将win32改为x64。不过cuda貌似没有这个问题。

恭喜楼主解决问题,另外注意一点,一次cudaMalloc的大小受Windows 操作系统限制
。The maximum size of a single memory allocation created by cudaMalloc or cuMemAlloc on WDDM devices is limited to:
MIN ( ( System Memory Size in MB - 512 MB ) / 2, PAGING_BUFFER_SEGMENT_SIZE )
For Vista, PAGING_BUFFER_SEGMENT_SIZE is approximately 2GB.