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