硬件童话——讲述显卡自己的故事(下)
电脑学堂
上期大家认识了显卡家族的各成员,了解了我们的大脑——显示核心的结构,这一期我们就一起来看看显卡的另一个重要组成部分——显存,再顺便为大家讲讲显卡支持的“DirectX”、“OpenGL”等API。
认识显存
1.显存的作用
以前说过我们的大脑要处理的数据非常多,在这些数据中,既有“原料”(系统发出的各种指令、纹理、贴图及材质等),也有“半成品”、“成品”(已经处理好的数据)。
我们的大脑在处理数据时,并不是一口气就能够将所有的数据全部处理完,它还需要一个与之配套的“临时仓库”。虽然内存就是这样一个“临时仓库”,但是,内存主要是为整个系统服务的,如果将这些数据全部暂存在内存中,那么内存就会不堪重负。
为了解决这个问题,研发人员为我们的大脑单独配备了一个“临时仓库”,使用了DRAM芯片作为存储介质。因为这些存储芯片集成在我们的身体中,因此便称之为“显存”。
显示核心配合了显存之后,其工作效率大大提高——可以将很多数据暂存在显存中,而不必将所有的数据都暂存在内存中。




2.显存的分类
显存颗粒其实和内存颗粒差不多,从类型上来看,目前我们所使用的显存主要有DDR、GDDR2、GDDR3等三种类型。
(1)DDR显存
DDR显存就是DDR SDRAM,也就是采用了DDR(Double Data Rate)技术的SDRAM。DDR是目前的主流显存,绝大部分中端、低端显卡都配备这种显存。
(2)GDDR2显存
GDDR2显存就是DDR2 SDRAM。由于DDR SDRAM的核心频率已经很高,再提高其频率成本太高。为了满足显示核心对显存带宽的要求,人们在一些高端显卡上使用GDDR2显存。GDDR2显存的核心频率和时钟频率已经不一样了,由于GDDR2采用了 “数据预取”技术,在相同的核心频率下,GDDR2达到了两倍于DDR的带宽水平。
提示:由于GDDR2显存的成本相对较高,再加上发热量仍然比较大,虽然与那些高端显示核心在性能上“门当户对”,但还是逃不出被淘汰的命运。如今的高端显卡都开始采用GDDR3显存。
(3)GDDR3显存
GDDR2显存最初用在Radeon 9800 Pro等高端显卡上,但很快就被淘汰了。在GDDR2的基础上发展起来了GDDR3,其主要着眼点是为了提高时钟频率。不过,GDDR3虽然发展自GDDR2,但是两者还是存在较大的差异,GDDR3虽然和GDDR2工作电压相同,却能降低一半的功耗,发热量由此得到控制。
由于拥有比GDDR2更高的频率、更低的发热量及功耗,如今高端显卡都开始配备GDDR3显存。利用现有技术,已经能生产出频率高达1.4GHz的GDDR3显存。目前,GDDR3颗粒已经能够批量生产,三星是目前主要量产GDDR3颗粒的厂商,它供应给显卡厂商的GDDR3颗粒主要有四种型号,显存工作频率从1.0GHz到1.4GHz。
三星目前量产的GDDR3颗粒类型表

3.显存的封装
(1)TSOP封装
TSOP封装是一种比较廉价的封装,很多中低端显卡所用的显存都会采用这种封装形式。
(2)BGA封装
从外观上来看,BGA封装的显存颗粒体形较小,大部分高端显存所用的是一种叫做mBGA的封装方式,一些高频率的DDR显存采用的就是这种封装,GDDR2、GDDR3则全部采用这种封装方式。


4.深入了解显存
(1)显存带宽的重要性
显示核心与显存之间的数据交换速度就是显存的带宽。如果带宽不够,则2D处理器及3D引擎就会处在一种“吃不饱”,同时“货物运不出去”的尴尬状态。
显存带宽的大小与显存的工作频率及显存的位宽有关:显存的工作频率越高、显存位宽越大,带宽越大。显存控制器就像连通显存与显卡核心的 “桥梁”,如果“桥梁”的宽度(显存位宽)不够,也会影响数据的传输速度。
显存带宽的计算方法是:带宽=工作频率×显存位宽/8。例如显存的位宽是128bit,显存工作频率为500MHz,那么显存带宽就是:500MHz×128bit÷8=8000MB/s。
单个显存控制器的位宽大都是64bit,为了提高显存带宽,如今的显卡都会集成2个或4个显存控制器。例如高端的Radeon X800显卡,显卡核心内置4个64bit的显存控制器来并行处理,如此一来,总的显存位宽就达到了256bit。
目前显卡的显存位宽主要有128bit和256bit两种,部分低端产品是64bit。有些厂商为了降低成本,有时会缩减显存的位宽,例如本来核心需要搭配的显存位宽是128bit,但实际显存位宽却只有64bit。
(2)显存容量对性能的影响
显存容量指的是我们身体上所有显存颗粒的容量之和。显存就像一个存放数据的大仓库,相对显存带宽而言,显存容量对显卡性能的影响要小得多。一般来说,只要显存总容量达到128MB,就能够满足绝大部分应用需要。一般情况下,128MB还是256MB显存,对显卡性能的影响很小,只是在高分辨率下会有一定性能差异。对于中低端显卡而言,64MB显存完全能够满足实际需要。128bit、64MB的显存对显卡性能的帮助要远高于64bit、128MB的显存。

小技巧
快速估算显卡的显存位宽
mBGA封装的显存颗粒一般都是32bit的产品,因此如果一块显卡上有4颗mBGA封装的显存,那么总位宽就是128bit,8颗就是256bit。


TSOP封装的显存颗粒一般都是16bit的产品,因此如果一块显卡上有4颗TSOP封装的显存,那么总的显存位宽就是64bit,如果有8颗就是128bit。
提示:上述识别方法只是经验之谈,并不保证适用于所有显卡。最好结合显存颗粒的标示来识别,此外也可以借助检测软件来检测。
了解显卡的API
所谓API,也就是“应用程序接口”,有了它,游戏开发人员和显卡核心设计人员就可以根据API的指导规范来设计产品,让产品的兼容性、通用性更好。
目前我们所使用的3D显卡主要面向游戏应用,在开发3D游戏时,如果没有相应的开发指导规范,那么整个游戏软件、3D显卡市场将会非常混乱。早期的3D游戏,游戏开发人员必须针对不同的显示核心来编写一些不同的额外代码,以便让游戏在这些显卡上都能获得满意的性能。
针对这种情况,微软提出了一个名为“DirectX”的通用API,这是目前最主流的API,目前最新的版本是DirectX9.0c。2003年流行的《古墓丽影-黑暗天使》就是DirectX9游戏的代表,它大量采用了Pixel Shader 2.0着色技术。而2004年的年度大作《半条命2》更是目前应用DirectX9的巅峰之作。

除了DirectX这种API之外,常用的3D API还有OpenGL。OpenGL是“Open Graphics Lib”的缩写,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后来OpenGL成为工业标准。2001年8月ARB批准了1.1版本的OpenGL,最新版规范是OpenGL 2.0。

目前绝大部分显卡都支持1.4或1.5版的OpenGL API。相对DirectX,基于OpenGL开发的3D游戏较少,但也有不少大作,例如DOOM3等。
提示:一款游戏的画面是否精美,虽然与采用的3D API有很大关系,但也不是绝对的。游戏开发人员一般会尽量采用最低的DirectX来开发出尽可能精美的画面,这样可以吸引更多的低端用户。此外,对DirectX版本的支持体现的是显示核心的内在能力,实际的效果还与显卡的像素填充率、顶点处理能力有很大关系。例如GeForce FX 5200是一款低端产品,它支持DirectX9,但是用该显卡来运行支持DirectX9的游戏,其效果就惨不忍睹。