Electronic Joint Business

Solution for E-Business

Linux 图形系统和 AMD R600 显卡编程(4)——AMD显卡显存管理机制

显存可以分为两部分,一部分是显卡自带的内存称为 VRAM 内存,另外一部分则是系统主存称为 GTT 内存(Graphics Translation Table,GTT 和后面的 GART 含义相同,都是指显卡的页表,GTT 内存可以就理解为需要建立 GPU 页表的显存)。在嵌入式系统或者集成显卡上,显卡通常是不自带显存的,而是完全使用系统内存。通常显卡上的显存访存速度数倍于系统内存,因而许多数据如果是放在显卡自带显存上,其速度将明显高于使用系统内存的情况(比如纹理,OpenGL 中分普通纹理和常驻纹理)。 某些内容是必须放在 VRAM 中的,比如最终用于显示的“帧缓存”,以及后面说的页表 GART (Graphics Addres Remapping Table),另外有一些比如后面将介绍的命令环缓冲区(Ring Buffer)是要放在 GTT 内存中的。另一方面,VRAM 内存是有限的,如果 VRAM 内存使用完了,则必须将一些数据放入 GTT 内存中。 通常 GTT 内存是按需分配的,而且是给设备使用的,比如 radeon r600 显卡最多可以使用 512M 系统内存( Linux 内核中是这样设置的),一次性分配 512M 连续的给设备用的内存在 linux 系统中是不可能成功的,而且即使可以成功,有相当多的内存是会被浪费掉的。按照按需分配的原则,使用多少就从系统内存中分配多少,这样得到的 GTT 内存在内存中肯定是不连续的。GPU 同时需要使用 VRAM 内存和 GTT 内存,最简单的方法就是将这两片内存统一编址(这类似 RISC 机器上 IO 和 […]

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.