● 昂贵的自由 浅析MIMD与8800U
GeForce 8800Ultra内建128个Stream Processor,每个SP包含两个ALU(逻辑算术单元):一个MAD(乘加单元)与一个MUL(无符号乘法单元)。双ALU构成了Dual-Issue(双线)体系,据说由于种种原因G80架构中的MUL至尽仍处于“未激活”状态,往往将其忽略。类似于QUAD的设计,128个SP被分为8个大区,由仲裁机构进行调配。GeForce 8800Ultra的每个SP只能进行1D运算,处理能力较弱。
G80架构
为了弥补处理能力上的欠缺,GeForce 8800Ultra具备了庞大的SP数量并让他们运行在高达1500MHz的频率上。G8X采用了类似CPU倍频的设计,使Shader(着色器)与核心部分运行在不同的频率下,这难免会带来高延迟的问题。要维持这样的体系就需要足够强大的仲裁机构,而它正是与MIMD设计相辅相成的。
所谓MIMD即多指令多数据流,它与SIMD(单指令多数据流)对应。对于一个3D模型来讲,它包含4条信息:X,Y,Z轴对应的是坐标数据;W则包含色彩信息。在3D世界中,一套完整的数据实质上是一条“4D数据”。为了配合这种模式,功能单元往往被设计为4D,这样就可以在同一周期内同时处理4条信息。显卡自诞生至今多采用SIMD的设计,但这次nVIDIA“冒天下之大不韪”,居然将G80设计为MIMD架构!
GeForce 8800 Ultra使用了近7亿的晶体管,却只集成了128个SP。其中一个原因是因为它所使用的1D MAIN(全功)ALU设计,128个SP虽然每个处理能力都不强,但至少它们都是有完整处理能力的ALU。要知道制造4个1D MAIN ALU与一个4D MAIN ALU所耗费的晶体管数目是不可同日而语的。MIMD与SIMD在本质上没有区别,两者都可以认为是对方在特殊情况下的存在。MIMD算不上革命或者革新,它被应用到G80之中更多的是nVIDIA取向性的产物。
SIMD在长时间内把持着显卡核心架构的主导权,这样的设计4D ALU有一个好处:单周期内可以同时处理一组完整的“4D数据”。两种SIMD架构的显示核心,要区分其处理能力强弱往往考虑的是诸如浮点运算能力或者吞吐能力之类的指标。SIMD同样也存在着明显的缺陷,那就是在处理不同指令时灵活度不足。一旦遇到非常“别扭”的指令,其效率可能会降低到一个很低的水平。
为了避免这样的状况,往往就只能牺牲程序员的劳动,对其进行烦琐的软件优化。对于这种状况,nVIDIA勇敢的进行了变革。在G80架构中,每处理一条指令,首先由仲裁机构将其拆分成若干条1D指令,然后分配给各个ALU进行处理。
虽每个ALU的处理能力都不强,但这样的分配模式却可以保证每个ALU接近100%的利用率,在处理效率方面无人能及,程序员也可以得到一定程度上的解脱。这时衡量一块显卡的强弱,除了浮点与吞吐能力,我们还必须要考虑它的效率。要实现这样的架构并非易事,庞大的ALU数量、极高的SP频率与强大的仲裁机构都是不可缺少的,而GeForce 8800 Ultra正是最能反应这种设计思想的产物。