当 VRAM 已满时会发生什么?

What happens when VRAM is full?

我想知道当前 nvidia/AMD 处理 VRAM 资源分配的实现。

我们已经知道操作系统在系统 RAM 已满时使用 swap/virtual 内存,那么当涉及到 VRAM 时,交换相当于什么?他们回退到系统 RAM 还是硬盘?

我认为回退到系统 RAM 是合理的,但根据我的经验,视频游戏在视频内存不足时会严重延迟(典型 FPS 的 1/20)space,这让我怀疑他们正在使用系统 RAM,因为我认为系统 RAM 并没有慢到让游戏延迟那么多。

简而言之,我想知道目前的实现是什么,导致游戏在内存不足的情况下卡顿的最大瓶颈是什么。

  1. 真正对 RAM 进行了交换

    如果有足够的 RAM 可以交换。由于速度慢,无法切换到文件,请参阅下一个项目符号

  2. 它自己的 RAM 并没有那么慢(仍然更慢)但是连接到它的总线是

    当交换系统内存到交换文件时,内存交换在需要时发生(改变应用程序的焦点,打开新的 file/table,...)这不是那么频繁,但如果你不在 VRAM 那么你就有麻烦了,因为通常大部分 gfx 数据都用在每一帧中。

    这会导致每帧交换,因此您需要经常复制非常大的数据块,例如交换 256MB 20fps 会导致:

    256M x 2 x 20 = 10 GB/s read
    256M x 2 x 20 = 10 GB/s write
    

    粗调需要 20GB/s 的带宽,具体取决于内存控制器和架构 您可以同时 read/write 达到一定程度,因此理论上您总共可以获得接近 10GB/s 的带宽,但仍然如此只有 256MB 数据块的巨大数字看这里:

    • Cache size estimation on your system?

    我当时的设置只有大约 5GB/s 的内存写入速度,这远不及此类任务所需的内存传输速率