统一渲染架构与通用计算的降临
当微软DirectX 10发布之后,GPU迎来了史上第一次重大变革,而这次变革的推动者不再是NVIDIA或ATI,而是微软公司。
微软公司认为,传统的分离设计过于僵化,无法让所有的游戏都能够以最高效率运行。这一点应该不难理解,因为任何一个3D渲染画面,其顶点指令与像素指令的比例都是不相同的,但GPU中顶点单元与像素单元的比例却是固定的,这就会导致某些时候顶点单元不够用,像素单元大量闲置,某些时候又反过来,硬件利用效率低下。而游戏开发者为了获得最好的运行性能,也不得不小心翼翼地调整两种渲染指令的比例,微软认为这种情况限制了图形技术的进一步发展。
统一渲染管线具有无以伦比的通用性
为此,微软在设计Xbox360游戏机的时候,就提出统一渲染架构的概念,所谓统一渲染,即GPU中不再有单独的顶端渲染单元和像素渲染单元,而是由一个通用的渲染单元同时完成顶点和像素渲染任务。为了实现这一点,图形指令必须先经过一个通用的解码器、将顶点和像素指令翻译成统一渲染单元可直接执行的渲染微指令,而统一渲染单元其实就是一个高性能的浮点和矢量计算逻辑,它具有通用和可编程属性。相比DirectX 9之前的分离设计,统一渲染架构具有硬件利用效率高以及编程灵活的优点,让3D游戏开发者和GPU设计者都获得解放。ATI在获得Xbox 360合约的时候,便迅速展开了设计,它所拿出的Xenos GPU芯片便首度采用统一渲染架构。
对于这套设计,NVIDIA起初是比较抗拒,它认为传统的分离设计在硬件方面更加高效,但最后看到大势所趋、并且也意识到统一渲染架构所具有的扩展弹性,在G80时代也实现了统一渲染架构。事实证明,NVIDIA才是此套架构最大的受益者。
统一渲染架构固然是微软为提升硬件效率所提出,但它进一步提升了GPU内部运算单元的可编程性,让GPU运行高密集度的通用计算任务就成为可能,这意味着GPU可以打破3D渲染的局限,迈向更为广阔的天地。
1. 2006~2007:NVIDIA GeForce 8击溃Radeon HD 2000
2006年11月,NVIDIA高调推出GeForce 8800 GTX和GeForce 8800 GTS图形处理器,拉开了GeForce 8(开发代号G80)时代的序幕。而NVIDIA也在新一轮的竞争中将AMD-ATI拉下一个季度,后者的R600要等到2007年1月30日方能推向市场。
作为NVIDIA第一代统一渲染架构GPU,G80的硬件规格相当强悍:它拥有128个可执行3D渲染任务及其他可编程指令的流处理器(Stream Processors),内置24个ROP单元,最高支持384位,86.4GB/s带宽的GDDR3显存,晶体管集成度高达6.8亿个,是前一代GeForce 7900的两倍多。G80也因此成为当时集成度最高的半导体芯片,而这些指标也让G80拥有极其优秀的性能。
G80的高集成度意味着成本高昂,NVIDIA为了保证G80能拥有足够高的生产良品率,仅采用台积电90纳米工艺进行制造,它的功耗高达145瓦,显卡长度也因为供电模块的需要达到32厘米。另外为了解决散热需要,G80系列显卡都需要被一块体积硕大的散热器所覆盖,但NVIDIA将风扇噪音控制在很低的水平,即便在高负载状态下也能保证安静运行。
NVIDIA G80芯片集成了6.8亿个晶体管
在内部设计上,G80的128个流处理器被分为8个渲染集群,每个集群都是由16个流处理器(内部再平均分成两组)、4个纹理地址单元以及一个L1缓存构成,这样G80就总共拥有128个流处理器和32个纹理地址单元。流处理器是最基本的计算单元,所有的图形渲染指令(包括顶点、像素和几何指令)都是由流处理器运算并输出。输出的结果会由一个交换器分配给6组ROP光栅处理单元进行处理,每个光栅单元又包含4个ROP,于是G80就拥有24个ROP处理单元。每一组ROP单元都对应一个L2缓存,它与渲染集群中的L1缓存以及显存相连—增加缓存的另一个好处就是可以为通用计算做好了准备。
也是在G80时代,NVIDIA发布了意义重大的CUDA 1.0开发平台。CUDA是一个集成的开发环境,它包括开发语言、编译器以及API。借助CUDA,程序员可以编写出能够为GPU所运行的计算程序。由于GPU拥有并行计算的巨大优势,大量的科学工作者都开始将应用迁移到NVIDIA的CUDA平台,GPU通用加速实现了从理论到现实的第一步,也为NVIDIA开辟了新一片的蓝海。此外,NVIDIA也在这个时候推出基于G80的Tesla高性能计算设备,专门供应超级计算市场。数年以后,Tesla也成功地成为该领域的新标准,超级计算业界普遍都将CPU+GPU的组合作为第一方案,