cuda和cudamalloc分配大内存块失败

cuda和cudamalloc分配大内存块失败,cuda,malloc,Cuda,Malloc,我有一个2Gb内存的GTX570,当我试图通过一个cudamalloc调用分配比804Mb更多的内存时,我遇到了麻烦。有人知道为什么吗?这是我第一次打电话,所以我怀疑这是碎片 没问题: Memory avaliable: Free: 2336116736, Total: 2684026880 requesting 804913152 bytes no error Memory avaliable: Free: 1531199488, Total: 2684026880 requesting 80

我有一个2Gb内存的GTX570,当我试图通过一个cudamalloc调用分配比804Mb更多的内存时,我遇到了麻烦。有人知道为什么吗?这是我第一次打电话,所以我怀疑这是碎片

没问题:

Memory avaliable: Free: 2336116736, Total: 2684026880
requesting 804913152 bytes
no error
Memory avaliable: Free: 1531199488, Total: 2684026880
requesting 804913152 bytes
no error
Memory avaliable: Free: 726286336, Total: 2684026880
问题:

Memory avaliable: Free: 2327601152, Total: 2684026880
requesting 805306368 bytes
out of memory
Memory avaliable: Free: 2327597056, Total: 2684026880
requesting 805306368 bytes
out of memory
Memory avaliable: Free: 2327597056, Total: 2684026880

这是由Windows WDDM子系统施加的限制造成的。可以分配的内存量有一个硬限制,计算如下

MIN ( ( System Memory Size in MB - 512 MB ) / 2, PAGING_BUFFER_SEGMENT_SIZE )
对于桌面窗口,分页缓冲区段大小约为2Gb IIRC。您有两个解决此问题的选项:

  • 获取一张Telsa卡并使用专用的Windows TCC模式驱动程序,该驱动程序将设备的内存管理从WDDM中移除,从而消除限制
  • 为您的GPU计算安装linux或使用支持CUDA的实时发行版。Linux驱动程序对超出设备可用内存容量的内存分配没有限制

  • 发布说明中的“已知问题”一节“Windows”小节第二个项目可能适用:在Windows下使用WDDM驱动程序时,设备分配的最大大小可能会受到系统内存大小的限制。我在Windows 8 x64上运行,内存为12GB,可用空间约为9GB,运行cuda 5。好主意,我也会检查发行说明。嗯,谢谢你指出这一点,看到很多其他人也有同样的问题。然而,拥有大约12GB的系统内存,限制因素应该是分页缓冲区段。如果2GB是一个正确的数字,我的代码应该能够分配比840MB多得多的内存。或者我遗漏了什么?根据公式,应该可以在任何内存超过4.5GB的机器上分配2GB(给定2GB的分页缓冲区\段\大小)。如果你喜欢冒险,你可以将你的卡修改为。