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

标签 cuda

我在 64 位 Ubuntu 13.04 上运行 CUDA 5.0,NVIDIA GTS 250 具有 1 GB 内存和 NVIDIA 驱动程序 319.17。我在计算中使用的数据集太大,卡本身无法容纳,因此我尝试使用 cudaHostAlloccudaHostAllocMapped 在主机系统上分配页面锁定内存 标志。我使用的数据大小约为 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/

相关文章:

cuda - 并行处理伪代码以在GPU上工作:克服未对齐的内存访问

c++ - 在不使用任何库的情况下为大量 float 生成快速校验和?

c++ - 使用 CUDA Driver API VS2012 时未解析的外部符号

cuda - 如何选择带有 CUDA 的 GPU?

c++ - nsight eclipse 中的 CUFFT_ALLOC_FAILED 错误

CUDA:cudaEventElapsedTime 返回设备未就绪错误

matlab - 使用 CUDA 在 GPU 上并行克罗内克张量积

c++ - GPUTimer 作为一个单独的类

c - cublas 应该被 atlas 超越吗?

c++ - CUDA 设备端代码中的 C/C++ "inline"关键字