我知道这个WDDM问题只允许分配一定大小的块:
由WDD设备上的cudaMalloc()或cuMemAlloc()创建的单个内存分配的最大大小限制为MIN((系统内存大小,以MB为单位 - 512 MB)/ 2,PAGING_BUFFER_SEGMENT_SIZE)。对于Vista,PAGING_BUFFER_SEGMENT_SIZE约为2 GB。
但我不知道这是不是我的问题。 我写了一个程序,找到可以使用cudaMalloc分配的最大内存块。我在几台机器上运行它,所有的Windows 7都有至少8GB的系统内存。所以我应该总是能够分配PAGING_BUFFER_SEGMENT_SIZE。
好的,特斯拉没问题。在Quadro FX5800上,我可以分配~1.8GB + ~1.8GB + ~0.3GB - 很好。但在大多数GTX上,我只能分配高达~800MB的块。另一方面,在GTX680上,我可以一次性分配所有4GB?我无法看到这种行为背后的任何系统。
如何判断PAGING_BUFFER_SEGMENT_SIZE在某个系统上的值是多少?