XX
Kepler疑云重重 还要从五年前说起
NVIDIA与AMD的新一轮图形性能对决基本已落下帷幕,总的来说,结果是以NVIDIA的GTX680在功耗控制和性能表现方面稍许领先HD7970而收场。尽管PCHOME以及各家媒体同行早已对这两款产品做了详尽的首测,但同时也留下了一些谜团至今未获解析,可能我们永远也没有机会从厂商的工程师那儿套来标准答案,不过笔者觉得我们仍然能以媒体人的敏锐嗅觉猜个八九不离十。
● 谜团源于5年前的决策,NVIDIA和AMD都表示已经受够了
这事儿还得从2006年底说起。当年NVIDIA和AMD的GPU架构模式纷纷跨入统一渲染时代,NVIDIA拿出了基于此设计理念的首款产品——G80,而AMD则是R600。
统一渲染让GPU内部的ALU不再分为顶点渲染和像素渲染,因为这两种工作槽并不会总是同时占满,部分闲置的情况不可避免。而由同一种流处理器担任这两种工作,可以根据不同的任务量随时转换角色,最终获得更好的资源利用率。
虽然NVIDIA和AMD都是奔着统一渲染的理念而去,但在实现方式的细节上却分道扬镳,前者采用了1D MIMD的标量结构,后者则是1D+4D SIMD的矢量结构。简单地来说,NVIDIA的结构是多指令多数据流,每个流处理器,即CUDA核心,各自接收独立的指令一次执行一个1D标量操作。AMD的1D+4D矢量结构则是每个Stream流处理器中有五个指令槽,一次最多可执行一个4D矢量操作。
无论是像素着色还是顶点着色,都是由四个位元数据来确定所要获得的结果。如像素着色是以R/G/B和α坐标来确定颜色;顶点着色是由X/Y/Z/W坐标来确定空间。因此从理论上来讲,AMD的矢量结构更适合游戏中的图形计算。遗憾的是图形计算指令并不总是4D的,也有很多3D、2D乃至1D的运算,这便导致矢量流处理器的一次操作中它的五个指令槽不一定被全部占满,始终无法确保发挥出100%的效能,在许多游戏中表现出性能不稳定。
相比之下,NVIDIA的做法简单直接,驱动程序将所有的图形指令拆分成若干1D指令,再由那些标量流处理器分别接收不同的指令进行操作。尽管一个CUDA核心一次只能发射一个顶点或像素的位元数据,但起码能保证没有ALU闲置,更容易适应各种形式的指令。这种做法让游戏编程者的工作挥洒自如,也使NVIDIA的GPU在通用计算领域极易展开工作。
鱼和熊掌不可兼得,既然每个CUDA核心在一次操作中完成的工作有限,那么为了提高GPU整体性能,NVIDIA不得不采取两个手段:第一,在芯片中集成更多的CUDA核心。于是每一代的产品中,Geforce显卡的CUDA核心数量总是比同定位的Radeon显卡的流处理单元多不少,如GTX480是480个,HD5870只有320个;第二,让CUDA核心以远高于其它组件的频率运行,从Fermi架构开始,这个数值确立为ROP频率的两倍。付出的代价便是数代产品饱受功耗和发热问题的困扰,此项指标几乎一直成为被竞争对手攻击的软肋。
NVIDIA和AMD在统一渲染领域不同方向的探索中各自遭遇了麻烦,也各自获得了成就,相信它们一定时刻关注着彼此的情况,研究彼此的产品。如今看看放在眼前的GTX680和HD7970,难道潜移默化之中它们开始向一个方向靠拢?
网友评论