3

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

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

4

1 回答 1

3

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

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

于 2013-06-03T20:38:22.303 回答