VRAM已满时会发生什么?

man*_*ils 5 memory graphics memory-management data-transfer vram

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

我们已经知道,当系统RAM已满时,操作系统会使用交换/虚拟内存,那么当涉及VRAM时,交换相当于什么?它们会退回到系统RAM或硬盘上吗?

我认为回退到系统RAM是合理的,但是从我的经验来看,视频游戏在视频存储空间不足时会严重落后(典型FPS的1/20),这使我怀疑它们正在使用系统RAM,因为我认为RAM不会使游戏滞后这么慢。

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

Spe*_*tre 5

  1. 交换实际上是在 RAM 上完成的

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

  2. RAM 本身并不慢(仍然更慢),但连接到它的总线却很慢。

    当将系统内存交换到交换文件时,内存交换会在需要时发生(更改应用程序的焦点、打开新文件/表等),这并不常见,但如果您的VRAM不足,那么您就会遇到麻烦,因为通常大多数情况下每个帧中都使用 gfx 数据。

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

    256M x 2 x 20 = 10 GB/s read
    256M x 2 x 20 = 10 GB/s write
    
    Run Code Online (Sandbox Code Playgroud)

    根据内存控制器和架构,粗略需要 20GB/s 的带宽。您可以在一定程度上同时进行读/写,因此理论上总计可以接近 10GB/s,但对于仅 256MB 的块来说,这仍然是一个巨大的数字。数据看这里:

    我当时的设置内存写入速度仅为 5GB/s 左右,远低于此类任务所需的内存传输速率