Above 4G Decoding、Re-Size BAR与Drawcall

之前蘑菇在本博客交流群里问“Above 4G Decoding”是否有必要开启,我百度搜了一圈也没找到明白人。花了一些时间谷歌查资料,试图理清关系。

Drawcall 与 Re-Size BAR

在现代主板中,你可能会见到一个 Above 4G Decoding 选项(常有类似 Crypto Currency mining 的描述)。在该选项的附近,会有一个 Re-Size BAR Support 选项。

要理解这些选项的作用,首先需要了解 Re-Size BAR 是做什么用的。

AMD 在 Radeon 6000 发布会上提到了一项技术:AMD Smart Access Memory,对于该技术,大多数国内媒体只是说一句“免费提高显卡性能”就草草了事,没有解释“提高性能”的原理。实际上,在 AMD 发布的视频中,已经详细解释了该项技术实现了什么目标。

要理解该技术,首先需要了解 GPU 与 CPU 通信方式及 Drawcall 概念。众所周知,现代显卡拥有自己的供电、GPU、显存(下文称 VRAM)等,而显卡与 CPU 间通信使用印刷在主板上的 PCIe 线路进行。

搞游戏开发的同学,对于 Drawcall 这个词汇并不陌生。Drawcall 就是 CPU 通知 GPU 渲染一次画面。CPU 与 GPU 并行工作,CPU 往命令缓冲区不断地发送命令,而 GPU 从中取出命令执行, Drawcall 就是其中一种命令。

Drawcall 命令发送前,CPU 需要把渲染所需要的数据以及状态等准备好,否则 GPU 就是巧妇难为无米之炊。准备渲染数据时,需要将网格、顶点、法线、纹理等从系统内存(RAM)拷贝到显存(VRAM)中,此拷贝为数据拷贝,非指针传递(仅考虑独立显卡,不考虑核芯显卡、主机平台的统一寻址)。

对于此次数据拷贝两端(CPU 与独立显卡 GPU)来说,他们的寻址空间与存储实体是不同的。一般情况下,VRAM 对于 CPU 来说是不可见的,那么 CPU 如何将数据拷贝到显存呢?一般的解决方法是将 VRAM 的一部分(例如 256MiB)映射到 CPU 的地址空间下,此时 CPU 拥有对这部分 VRAM 的读写权限

CPU 向共享的 256MiB VRAM 中写入渲染数据,之后再向命令缓冲区写入渲染命令。GPU 从命令缓冲区中取命令,从共享的 VRAM 中取数据,之后进行渲染流水线操作。

上文中提到了一个存储单位:256 MiB,没错,虽然你有 8 GiB 以上的 VRAM,但它大部分是 GPU 专用的。运行时 GPU 会将贴图等资源从 VRAM 共享区移动到 GPU 专用 VRAM 中,同时GPU 还会在专用 VRAM 中存储一些临时状态、绘制结果(特定 VRAM 划分为屏幕缓冲区)等。

Smart Access Memory 技术就是使得 CPU 可以访问全部 VRAM,而不仅仅是 256 MiB 共享 VRAM。数据拷贝开销是很大的,而 GPU 流水线渲染速度又很快,如果数据跟不上,无法发出 Drawcall 命令,导致 GPU 空载,系统性能就受到了限制,因此单次拷贝的数据量当然是越多越好。

当然,拷贝数据的效率不仅与可访问的 VRAM 大小有关,还和二者之间的带宽有关,所以 Smart Access Memory 经常和 PCIe 4.0 一起出现(虽然目前 PCIe 3.0 * 16 都吃不满)。

回过头来说 Re-Size BAR 是啥呢?它和 AMD 的 SAM 其实是一个东西,只不过 AMD 起了个好听的名字而已。对于 AMD GPU 与 NVidia GPU 来说,其最新的产品都支持 Re-Size BAR 技术。

Above 4G Decoding 是啥

上文我们知道对于现代 GPU 与 CPU 来说,CPU 有能力访问全部 VRAM,但是又有一个老生常谈的问题:32 位与 64 位访问寻址问题。

虽然技术上 CPU 可以访问全部的 VRAM 了,但是对于超过 4GiB 显存的显卡来说,如果仅使用 32 地址来映射 VRAM 地址,则最多只能映射 4GiB,这无疑是不合理的。

开启 Above 4G Decoding 后,对于 64 位 PCIe 设备来说,可以映射超过 4GiB 的地址空间。为了使 Re-Size BAR 发挥作用,我们需要将该项开启,启用芯片组 64 位兼容寻址。

开启此项后,可能会导致 RAM 占用增加,不难想象一种情况:不开启的情况下,单次在 RAM 中准备的数据少于 4GiB。开启此项后,在某些情况下,我们在 RAM 中准备了大于 4GiB 的数据准备喂给 VRAM,而这就导致 RAM 占用增加。

对于多 GPU (一般大于 4 卡)计算哈希碰撞(挖矿)的场合,也需要开启此项,否则有可能认不到显卡,这也是该选项常有“Crypto Currency mining”描述的原因。

对于一些特殊的 PCIe 设备(例如圆钢的某些采集卡),也需要开启此项。

引用资料

1.[参考资料] 【知乎】 Xinzhao GPU存储体系
2.[参考资料] 【gameunion.tv】 Rinocrosser What is Above 4G Decoding

梓喵出没博客(azimiao.com)版权所有,转载请注明链接:https://www.azimiao.com/8255.html
欢迎加入梓喵出没博客交流群:313732000

我来吐槽

*

*

0位绅士参与评论

  1. 蘑菇10-13 16:53 回复

    我一个亮机卡不配开 🙂

  2. LuoboPapa10-13 21:17 回复

    感谢站长分享的”Friends” 🙂