我知道有这个 WDDM 问题只允许分配块到一定大小:
由 WDDM 设备上的 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 在某个系统上的值是多少?