当 GPU 内存不够时会发生什么?

当 GPU 内存不够时会发生什么?

假设我有一个带 1GB 内存的 GPU,但我的应用程序需要 2GB 的显卡内存,那么当我运行该程序时会发生什么?应用程序会从 RAM 中获取内存吗?它如何处理显存不足的问题?

由于某种原因,我仍然能够运行该应用程序,并注意到该过程system.exe占用了相当多的内存(~800 MB),不确定这是否与视频内存不足有关,或者存在其他问题。

答案1

现代 GPU 将运行混合模式,其中驱动程序/GPU 开始通过 PCIe 总线从系统 RAM 传输纹理数据,以弥补“缺失”的 RAM。由于系统 RAM 比 GDDR5 慢 3-5 倍,且延迟更高,因此耗尽“VRAM”会导致应用程序速度变慢,FPS 损失严重。

但是,性能将受到 PCIe 带宽(6 GB/s)的限制。

使用 CUDA 工具包 (v2.2+) 进行编程时,这称为零拷贝

对于好奇其工作原理的人来说,这是它的代码。

float *a_h, *a_map;
cudaGetDeviceProperties(&prop, 0); 
if (!prop.canMapHostMemory) 
    exit(0); 
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc(&a_h, nBytes, cudaHostAllocMapped);
cudaHostGetDevicePointer(&a_map, a_h, 0);
kernel<<<gridSize, blockSize>>>(a_map);

更多详情请阅读:http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#ixzz3nEbijjQZ

答案2

当我运行该程序时会发生什么?

它将使用系统可用的 100% VRAM。它要么可以正常工作,因为它也被设计为使用系统内存,要么因为 VRAM 不足,它可能会以意想不到的方式运行。

该应用程序是否占用 RAM 内存?

如果应用程序需要 2GB 的 VRAM,那么拥有更多的系统内存实际上并没有什么帮助,除非应用程序就是为此设计的。

如何处理显存不足的问题?

这完全取决于应用程序作者选择实施的实施方式。

相关内容