我在64位Ubuntu 13.04上运行CUDA 5.0,NVIDIA GTS 250具有1 GB内存和NVIDIA驱动程序319.17。我在计算中使用的数据集太大而无法放在卡本身上,因此我尝试使用带有cudaHostAlloc
标志的cudaHostAllocMapped
在主机系统上分配页锁定内存。我使用的数据大小约为18 GB,主机有24 GB的RAM。我的问题是,每当我尝试分配超过4 GB的页面锁定内存时,在任意数量的块中,我都会遇到“内存不足”错误。使用标准C malloc
,我可以一次性分配整个18 GB,但如果我尝试使用cudaHostRegister
映射它,我仍然限制为4 GB。
CUDA中页锁定分配的最大大小是多少?这是我系统中的问题还是由硬件,驱动程序或CUDA版本设置的限制?有没有办法分配这样一个可以为GPU映射的大型数组?
答案 0 :(得分:3)
SM 1.x类硬件仅支持32位寻址。如果从cudaHostMapped
移除cudaDeviceMapHost
标志(以及cudaSetDeviceFlags()
标志),您可能可以分配超过4GB的固定内存。这将使您能够使用异步内存副本将数据传入和传出GPU内存。
但是要映射超过4G的内存,你需要在64位平台上使用SM 2.x或更高版本。