显存带宽的意义]
显存带宽是指GPU与显存之间的数据传输速率,它以字节/秒为单位。
当显示卡在进行像素渲染时,都需要从显存的不同缓冲区中读写数据。这些缓冲区中有的放置描述像素ARGB(阿尔法通道,红,绿,蓝)元素的颜色数据,有的放置像素Z值(用来描述像素的深度或者说可见性的数据)。基本的渲染过程是:计算一个像素的的颜色值,从颜色和Z缓冲区中对应该像素的存储位置读取颜色值和Z值,然后计算出这个像素新的颜色值和Z值,计算中可能还需要与像素原来的颜色进行混合或者合成处理(这个计算还和Z值以及Alpha值有关)。一旦新的像素颜色和Z值计算完成后,新的数据就需要写回到内存中。也就是说进行一次基本的渲染操作,每个像素被渲染一次的话,就需要传送(读取32bit 颜色 + 读取32bit Z + 写入32bit 颜色 + 写入32bit Z)=128bit,即16个字节。
材质贴图和深度复杂性会使每个像素渲染所需要的带宽加倍。当前大部分游戏都使用了多重贴图(在每个像素上应用两层或者更多的纹理)以及双线性或者三线性过滤来达到丰富的图象细节和逼真度。纹理数据也是从同时放有像素颜色和Z缓冲区的内存中读取。为了了解纹理读取所需带宽的近似值,我们可以假设每个像素应用了两层纹理,同时还采用了三线性过滤,每个像素的每个纹理在三线性过滤时会使用8个纹理样本,每个样本都是32bit。这样,每个像素一次会读取:32bit×8(纹理样本数量)×2(纹理层数量)=512bit,即64个字节的纹理数据。而又因为所有的GPU都会采用某种形式的高速纹理缓存,倘若高速缓存可以将必须从外部显示内存读取的纹理数据量平均减少一半(具体的情况相当复杂而且是随时变化的,不过这个假设基本上还是合理的),那么我们可以认为在双纹理和采用三线性过滤的情况下,每个像素进行渲染的时候都会从显示内存中读取平均(64字节/2)=32个字节的数据。
所以在1024×768×32的显示模式下,进行像素渲染时每一帧需要的数据传输量 = 水平分辨率×垂直分辨率×(基本渲染数据读写+纹理数据读取)=1024×768×(16+32)=38MB。如果帧刷新速度为60帧/秒,则显存带宽需求为38MB×60=2.3 GB/s。而这仅仅是像素渲染所需的带宽,要是使用更高的分辨率、更高的刷新率和打开全屏抗锯齿、各异性向过滤时,带宽的消耗将更惊人!
由此可见,只有足够大的显存带宽才能带来更精细(高分辨率)、色彩更逼真(32位真彩)、和更流畅(高刷新速度)的3D画面!
显存带宽跟显示卡的显存速度和显存架构有关,其计算公式为:显存带宽=显存工作频率×显存位宽/ 8,因此,在工作频率一定的情况下,显存位宽的大小决定了显存带宽的大小。显存位宽(bit)即一个时钟周期传送数据的位数,位数越大,传输效率越高。
比如GeForce FX 5200,官方默认的显存工作频率为400MHz,而显存位宽则有128bit和64bit两种规格,所以显存位宽为128bit的GeForce FX 5200的显存带宽=400×128/8=6.4GB/s,而显存位宽为64bit的GeForce FX 5200的显存带宽=400×64/8=3.2GB/s。也就是说从理论上来讲,显存位宽为64bit的GeForce FX 5200的显卡性能只是显存位宽为128bit的GeForce FX 5200的一半!但由于FX 5200只是属于低端核心,在“价钱第一”的低端市场里只要使用64bit的显卡价钱足够便宜,其跟128bit的性能差距也就显得没有那么重要了。而无独有偶,目前的显卡市场还存在着一款使用中高端核心,却只有64bit显存带宽的显卡——Radeon 9600 SE。它使用了和目前ATI的中高端主力Radeon 9600系列相同的RV350核心,与Radeon 9600标准版最大的区别就在显存位宽上,而频率则同为325/400MHz,所以显存带宽分别为3.2GB/s和6.4GB/s。那么它对128bit的低端芯片显卡的优势在哪?劣势在哪?
我们还是让实际测试来告诉大家答案吧。