Cuda 页面锁定主机内存分配的最大大小是多少?

Cuda 页面锁定主机内存分配的最大大小是多少?,cuda,Cuda,我在64位Ubuntu13.04上运行CUDA 5.0,它有一个NVIDIA GTS 250,有1GB内存和NVIDIA驱动程序319.17。我在计算中使用的数据集太大,卡本身无法容纳,因此我尝试使用带有cudaHostAllocMapped标志的cudaHostAllocMapped在主机系统上分配页面锁定内存。我使用的数据大小约为18GB,主机有24GB的RAM。我的问题是,每当我试图在任何数量的块中分配超过4GB的页面锁定内存时,都会出现“内存不足”错误。使用标准的Cmalloc我可以一次

我在64位Ubuntu13.04上运行CUDA 5.0,它有一个NVIDIA GTS 250,有1GB内存和NVIDIA驱动程序319.17。我在计算中使用的数据集太大,卡本身无法容纳,因此我尝试使用带有
cudaHostAllocMapped
标志的
cudaHostAllocMapped
在主机系统上分配页面锁定内存。我使用的数据大小约为18GB,主机有24GB的RAM。我的问题是,每当我试图在任何数量的块中分配超过4GB的页面锁定内存时,都会出现“内存不足”错误。使用标准的C
malloc
我可以一次性分配整个18GB,但是如果我尝试使用
cudahosterregister
映射它,我仍然被限制在4GB


CUDA中页面锁定分配的最大大小是多少?这是我的系统中的问题还是硬件、驱动程序或CUDA版本设置的限制?有没有办法分配这样一个可以映射到GPU的大型阵列?

SM 1.x类硬件仅支持32位寻址。如果删除
cudaHostMapped
标志(以及
cudasetdevicelags()
中的
cudaDeviceMapHost
标志),您可能能够分配超过4GB的固定内存。这将使您能够使用异步内存拷贝将数据传入和传出GPU内存


但要映射超过4G的内存,您需要在64位平台上使用SM 2.x或更高版本。

我不认为CUDA对4GB设置了任意限制。我不确定你的情况有什么问题。我可以说Ubuntu 13.04不是,但我不知道这是否重要。我在RHEL 5.5上编译并运行了它,服务器上有48GB的系统内存,我能够成功地分配8GB和16GB的映射固定内存。@RobertCrovella:GTS 250是一个compute 1.1设备-它只有32位地址空间。这不会限制映射分配的大小吗?我相信@Talonmes给出了正确的答案。如前所述,“线性内存存在于计算能力为1.x的设备的32位地址空间和较高计算能力的设备的40位地址空间中”。因此,在您的cc 1.x设备上,主机映射分配(必须出现在此线性内存空间中)受到32位(4GB)地址空间的限制。我在测试中使用的是cc 2.0设备,这就是为什么我有一个更高的限制。我读到CUDA 2.2取消了对固定内存的4 GB限制,但我没有意识到设备本身也有类似的限制。当我订购的新显卡到达并(希望)解决我的问题时,我会确认@talonmies的回答是正确的。