王者之间的较量,R300 VS NV30深度
体系结构分析:
类似,在极度缺乏NV30 PS体系结构的情况下,笔者咬牙苦钻nVIDIA所发布和泄露出来的若干NV30技术规范:包括幻灯片、白皮书和源程序,终于也发现了NV30体系结构的若干蛛丝马迹。相信不会令读者失望的!什么?枯燥乏味,让人昏昏欲睡,读不下去了?shit, 太不给面子了。提个醒,最好还是捧捧场,否则你就会错过本文最值得浏览的内容了。我们还是先来看看R300的PS体系结构吧:
R300像素处理引擎的结构
R300同样是业界第一个拥有8条并行渲染流水线的消费类图形加速器,上一代GPU的流行结构是4条。这就意味着R300有潜力在每时钟周期输出两倍的像素数量。
然而,这里有一点需要特别注意,那就是每条流水线仅仅只有一个纹理单元,要知道上一台GPU,包括NV2x/R200,所流行采用的结构是2个纹理单元。
R300像素着色器结构
DX9规范要求,在一个渲染流程(Rendering Pass, 简称Pass)中,每个像素可以采样最多16个纹理。由于R300每条流水线仅拥有一个纹理单元,所以只能够通过循环方式多次利用纹理单元实现这一要求:第一个纹理在一个时钟周期被取样后,结果储存在采样阶段寄存器中,接下来是下一个时钟周期读取第二个纹理,这个过程被重复16次。在R300中,纹理可以是下列情况的任意组合:自由应用二线性、三线性或者各向异性过滤的一维、二维或三维纹理。可以看出R300支持的纹理采样和过滤方式非常灵活和强大。
我们从上图还可以看出,R300的像素流水线每时钟周期能够同时执行三条指令:一条纹理检索、一条纹理地址操作和一条颜色操作。与R300的VS结构采用向量处理器和标量处理器并列结构的原因类似,ATi认为,像素着色程序通常由这些操作混合组成,R300的这种结构在像素着色操作过程中效率最高。
尽管nVIDIA对自己NV30的体系结构百般遮掩,但是为了在没有实际产品与R300对抗的情况下,为了吸引住人们的眼球,不得不一而再,再而三的透露一些NV30相关的一些技术规范、文档、幻灯片和白皮书,这就为我们分析NV30的PS体系机构带来了线索。下图就是来自NV30的幻灯片:
在这里,我们很惊讶的发现,NV30保留了寄存器合并单元,而不是采用指令模拟执行。这是一条很重要的信息,一方面这为旧有的采用OpenGL NV扩展的应用程序提供了最大兼容性和最高的执行效率;同时,也为在NV30上优化像素着色程序提供了新的途径。毕竟寄存器合并单元的执行效率要高于指令。不过有利有弊,着色程序的这种优化方式理论上有可能在未来的GPU上反倒降低执行效率。原因吗,自己想想吧。
众多nVIDIA公布的NV30幻灯片都明白无误的指出了NV30采用了数量多达16的纹理单元,但是具体的像素渲染流水线的数量却好像处于云山雾海。很多人想当然的认为,为了对付R300,NV30(应该)拥有8条渲染流水线。还有人根据计算机原理采用2进值,在进行逻辑单元设计时,数量采用2的指数倍效率更高,所以NV30肯定采用的是8条(2的三次方)流水线。当然,更有人认为既然采用了16个纹理单元,那么流水线肯定采用的是能够被16整除的方案:2, 4, 8, 16,这里当然最可能的方案就是8了。
NV30的片断纹理化和上色结构
事实上,这些说法都有一定道理。更重要的依据在于:前一阵子网上传言,据说来自代工厂商台基电(TSMC)内部员工为自己鸣不平,NV30芯片制作进度之所以严重滞后,不是由于TSMC 0.13微米制作工艺有问题,而是nVIDIA在获知竞争对手采用了8条流水线设计后,临时更改了原本6条流水线的设计方案,而改为8条。这条消息应该不吃空穴来风,因此,NV30采用8条流水线的可能性很大(>80%)。
然而,与16个纹理单元一样,8条渲染流水线设计也不是笔者想要论述的重点。通过仔细研究NV30幻灯片语句里面的微言大义,在加上最新公布的NV30 OpenGL规范,笔者终于得出了最后结论:NV30在像素渲染流水线上很可能采用了革命性体系结构,NV30的纹理单元与像素渲染流水线脱钩了,每条像素渲染流水线都可以访问所有的16个纹理单元(可能性>90%)。原因很简单,nVIDIA公开宣称,在NV30像素着色程序里,可以对16个纹理单元访问无穷多次(>1000),呵呵。恐怕nVIDIA想不到这里会泄露天机。
这种革命性结构可以大大提高采用多纹理的现代3D游戏的像素渲染效率,采用单纹理的游戏早就成老古董了。而且,为了获得更好和更真实的渲染效果,采用越来愈多的纹理进行渲染已经成为趋势。所需要的纹理越多,这种结构的优势就越明显。需要提一句,这种体系结构度对于驱动程序的优化提出了更高的要求,不过,好在nVIDIA拥有最棒的驱动程序开发小组,这是业界几乎公认的事实。
因此,现在我们可以得出结论了:如果NV30拥有8条像素流水线结构,则理论上讲,每时钟周期上,与R300相比,NV30在像素处理器体系结构中取得了近乎完全的胜利:像素填充率(8:8),更有意义的图元(Texel)填充率(8:16)。这还没有考虑NV30在执行像素着色指令理论上拥有的更高效率。<