什么是图形加速卡(一)

原文:http://www.azillionmonkeys.com/qed/accelerator.html

作者:Paul Hsieh


-潘宏 译

-2013年1月

-email: popyy@netease.com

-weibo.com/panhong101


(译注:本文写于2000年左右,很多内容稍显过时。但作为理解GPU发展的历史性、技术性材料,本文真是不可多得)


介绍


本文主要讨论实时图形渲染方面的东西,比如绘制桌面GUI,游戏或者实时模拟、动画。而像射线追踪、图像处理这样的主题我们不会讨论。


图形硬件就是你电脑中用来绘制图形的协处理器。像Windows这样的GUI,如果安装了“显卡驱动程序”,它就可以操纵图形硬件进行渲染,这可比纯软件渲染快得多。如果你这两年购买过Intel芯片的PC,估计里面就有图形加速卡。


图形加速卡通过图元进行渲染,它和x86的CPU同时工作,但性能比后者要高很多。加速卡比CPU快的一个原因在于:它离显存很近,不用非得通过缓慢(相对于显存的速度)的系统总线和芯片组来传递原始像素到显存中。但最主要原因在于,它能和CPU同时工作。也就是说,当CPU正在为接下来的图形命令算坐标的时候,加速卡可能正在为当前图形命令填充多边形。这种分开计算经常被称为负载均衡(Load Balancing)。


操作系统


苹果Macintosh中比较老的内建图形API并不提供这种并发图形操作。其原因在于帧缓冲并没有以某种方式抽象出来。一些流行的软件比如Adobe的Illustractor以及Type Manager会直接存取帧缓冲,也没什么存取仲裁。而使用32位QuickDraw API的Mac应用程序可以使用硬件加速,但效果如何还不能确定。


然而,为了应付Wintel(Windows和Intel)这种双重垄断的机器,苹果最近采取了出人意料的举动——他们已经决定支持OpenGL标准!具体细节我就不得而知了(我觉得只会在Rhapsody/OS X中支持),但造成的影响就是这篇文章也适用于下一代苹果的操作系统,只要系统支持OpenGL。


我最新了解到Linux和BeOS也有支持硬件加速的OpenGL实现(但只是部分显卡)。


但目前对图形加速方案支持最多的,并且积累最多的,还是Windows平台(有时这有点讽刺SGI的管理层)。因此,尽管我们讨论的是通用高性能图形架构,但我们还是基于Windows的图形架构。


下图展示了现代图形架构:




当前图形加速卡质量通过以下这些指标来衡量,包括:屏幕分辨率、刷新能力、TV输出兼容性、视频回放、图像质量、2D GUI图元绘制。但当前都是看它们的3D能力,只支持2D的显卡已不再被重视。关于2D和MPEG视频方面,虽然有趣,但我不会谈得太多。


性能瓶颈


对于要关注图形性能的应用程序,下面是其主要瓶颈:

  • 显存带宽
  • 主机(Host)和显卡的通信
  • 硬件特性和主机模拟
  • 显示器刷新

有意思的是,众所周知,内存上传性能(指从主机到显存方向的数据传输)是很严重的性能瓶颈。Intel已经通过AGP技术“解决”了该问题。然而,经验表明,支持AGP的图形卡并没有因此而表现的更好。


显存带宽


图形性能的最大瓶颈就是显卡输出其结果到显存的速度。然而,传统内存技术虽容易实现并理解,但仍处于SDRAM或者RDRAM的性能水平。过去,像ATI这样的显卡厂商推出过VRAM,这种RAM技术允许每周期多次存取(视频刷新一次,显卡输出一次)。它昂贵、时钟率受限,且实际上并没比DRAM快多少。类似情况是,RDRAM性价比也不高。(MPACT多媒体处理器,Cirrus的Laguna,和几个SGI系统包括Nintendo 64都采用了RAMBUS内存)。


在这种情况下,显卡厂商又怎么敢声称能够提高带宽呢?很简单,RAM将根据多条总线进行分区。在Chromatic MPACT 2架构下,RDRAM被加工为两个插槽,同一个内存指令通过两根总线被发送到两个独立的RDRAM中(你可以看看你的显卡母板)。接着RAM仲裁器把它们的结果合并到一个两倍大小的数据中,这通过将物理内存字节交错排列完成。而内部的数据路径也无需增加,因为仲裁器能够简单地将存取操作进行缓冲。图形处理器本身的时钟频率也随着显存而翻倍,这样它就能以两倍的速度处理内存请求。(当然,实际执行时的内存等待(Latency)时间没变)但这个方法因增加了芯片引脚数而提高了成本,而RDRAM则是一种低引脚数解决方案。


S3、3DFX等公司使用了另外一个策略,就是把显存划分成几个大的、顺序排列的内存库(Bank)。 给定一个图形操作,只要相关的内存对象(Memory Object)分散于这些分区的bank中,该系统在理论上就应该和前面的显存开槽策略具有相同的性能级别。但是,在很多情况下,对于没有针对显存带宽优化过的内存对象,这种任意的分区导致了总显存的使用限制。也导致了图形软件为了使用多bank结构,所增加的额外工作。


上面的那些公司当然不是此技术的先行者。Matrox早就在它们的Millenium 2D显卡中使用了该技术(我不知道Matrox是否用了banking或者开槽技术,但我倾向于认为它肯定用了banking,因为在某些部分,它们似乎有线宽的粒度限制)。实际上,任何声称自己能够超越物理RAM带宽限制的显卡都会使用这两种技术之一。而今可能每个显卡公司都会这么做。


这个技术产生的副作用就是对显卡母板设计的影响,比如显存会被分成多个芯片,你看看你的显卡板子就清楚了。不过这虽增加了母板的复杂度(测试复杂度也增加了),但性能上去了。


BitBoys公司(架构了Pyramid 3D并提出了Glaze3D显卡)提出了一个另类的想法以提高显存带宽。他们简单地内嵌了一个eDRAM并且将芯片内(这种便宜很多)总线加工到512位。他们声称该带宽为9.6GB每秒,这是传统的128位200Mhz方案的3倍。有这种技术,BitBoys似乎应该可以说是稳居行业榜首了。可是,他们的设计后来却并没有实体化,更没有在市场上赢得先机。一些了解他们的硬件设计师建议说,Infineon公司所采用的eDRAM制造过程,完全不适合用于显卡内核制造中的逻辑门电路。


而3D图形的特定领域,纹理缓存,纹理压缩,以及mipmap也都促进了显存带宽的发展。


另一个增加显存带宽的重要技术,就是通过基于块(Tile)的寻址来增加内存访问效率。这种情况下,寻址时,屏幕被分成多个矩形块,而非简单递增地址分量而得到的(y,x)坐标。这种方式的优势在于,访问的内存地址靠得越近,效率就越高(就算是基于banking寻址技术的内存芯片,也利用了“访问内存时倾向于顺序性的”这个事实优势)。被渲染的图元倾向于在笛卡儿坐标尺度上具有局部性,而非在(y,x)坐标对尺度上具有局部性(译注:局部性(Locality)是cache系统术语,是cache有用的理论根据,而tile寻址技术正是利用了这一点)。


这种分块技术对软件来说是透明的。显存仲裁器中的硬件会将块地址实时进行转换,这相当于一个虚拟线性寻址机制。(MPACT使用该技术用于2D渲染,PowerVR也用它,Glaze3D应该也使用了它进行3D渲染)


纹理和像素缓存(Cache)在典型情况下也具有矩形结构,这是因为纹理缓存的访问冗余性不是单向的。(我不知道各种显卡具体是如何实现纹理缓存的,但可以想象出,理想情况下,它们和CPU缓存应该有类似的级别结构)


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页