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,难道潜移默化之中它们开始向一个方向靠拢?
简化SP增加其数量 AMD初尝NV式甜头
● AMD:1D+4D架构繁琐又低效,VLIW4诞生
从HD6970开始,AMD在Cayman核心上终于放弃了坚持许久的VILW5流处理器结构,取而代之的是VILW4,即由1D+4D变成了4D。它们最明显的区别就是去掉了体积最大、可同时处理普通整数/浮点操作和超越操作的第五个逻辑流处理器:特殊功能T单元(SFU)。这样每个流处理器单元中可以一次性处理的普通整数/浮点操作数从五个减少到四个,原本SFU负责的指令(如超越指令)可由其中三个流处理器合并起来代替。
从RV600到Tahiti,AMD流处理器单元结构变化
事实上AMD新架构是将流处理器简化了,其中四个指令槽性质相同,编译器不需要考虑它们和SFU的差别,令资源调度更加简单,对图形程序的适应性增强,提高了效能。
HD6970 Cayman核心的流处理器单元结构
以上改进的好处不止于流处理器单元内部,从宏观上看,取消了SFU指令槽之后每个流处理器单元的体积缩小,这样原本占用的芯片面积可以用于集成更多的流处理器单元。HD5870的Cypress有320个流处理器单元,而HD6900的Cayman增加到了384个,核心面积只提高了59mm²,晶体管数量为26.4亿,随之可并行执行的线程数量、纹理单元数量等都相应提高。
CUDA数量暴翻 NVIDIA连这也跟了AMD?
● NVIDIA:CUDA数量暴增不再高频,它还是不是1D MIMD?
如果说AMD将流处理器单元简化并增加数量是借鉴了NVIDIA的CUDA架构,那NVIDIA做了什么呢?从下列图片中我们可以看到,从Fermi架构最初型号GF100到GF104,SM工作组内的CUDA内核以及其它单元配比发生了变化:流处理器更多,指令分派单元更多,纹理单元更多。
虽然GF104只是中高端显卡芯片,可显然NVIDIA在设计它时对原本的Fermi结构做了改进。整个原生芯片只有8个SM,相对应地Polymorph多形体引擎数量也减少一半,但每个SM中包含的ALU和相关组件数量增多。最后理论测试和实践测试都证明,无论是性能发挥还是功耗控制,新的模式更加出色,这便成为后来Kepler架构的雏形。
GTX480和GTX460的SM工作组
即便我们从GF104的成功中预感到什么,但当Kepler揭开面纱时,结果仍然令人吃惊。
GTX680的SMX工作组
Kepler架构的首款芯片——GK104,乍一看结构与GF104几乎一模一样,有8组SM和8个Polymorph引擎。不过这一次,尝到甜头的NVIDIA如同打了鸡血一样,竟然在一个SM中集成了192个流处理器,纹理单元数量也激增到16个,并将这种爆炸式的SM称为SMX。
如此一来,GK104的流处理器总数达到了1536个,这一数字竟然与AMD Cayman核心流处理器的指令槽总数相当(注意是指令槽不是流处理器),是上一代旗舰GTX580的三倍,而纹理单元的数量也一反常态,与HD7970同为128个,是GTX580的双倍。接下来更令人吃惊的是,此架构放弃了从G80时代开始的分频设定,流处理器和其它单元以相同的频率运行。
不知是否有人注意到,以上大刀阔斧的改革中还隐藏着令人困惑的谜团。
首先,GTX580的512个流处理器已将它的功耗和发热逼到了40nm制程的极限,即便GK104采用28nm制程,但无论如何也不至于能在面积减小五分之二的前提下还能将流处理器数量提升至原来的三倍。
其次,谁都知道原生芯片的流处理器数量只和晶体管数目成正比,工艺制程的进步并不能让原有规模的晶体管实现更多相同的流处理器。GK104的晶体管数量只比GF110多了1/6,增加的1000多个流处理器从何而来?
Fermi和Kepler的流处理器单元本质不同,这恐怕是目前唯一合乎逻辑的解释。回想之前提到的NVIDIA和AMD互有借鉴的现象,不禁让人想到NVIDIA是否连SIMD的矢量设计都吸纳了?关于这个问题,只有Kepler的工程师才能给予准确解答,但至今我们未得到这方面的详细资料,似乎官方在回避这一话题。
AMD不给力 NVIDIA中高端显卡变旗舰?
相比Kepler架构方面的疑云重重,这一个谜团轻松有趣,那就是GK104何德何能被冠以旗舰型号GTX680的名称。
● AMD不给力,NVIDIA中高端变旗舰?
在今年年初AMD发布HD7970显卡时,目睹其性能后,NVIDIA的反应一反常态地平静,在市场宣传上几乎没有任何针对动作出现,只是淡淡地说了句:Kepler显卡一定会给大家出乎意料的惊喜。现在,我们确实感受到了这种惊喜,同时也觉察出些许猫腻。
之前NVIDIA代表新架构的旗舰GPU代号均以0收尾,无一例外,如G80、GT200、GF100、GF110;而以4收尾的型号通常是定位于中高端,以性价比为卖点,如GF104、GF114。作为Kepler架构的旗舰产品,GTX680的GPU竟然也是个以4收尾命名的芯片,实在令人诧异,难道NVIDIA原本计划中是把它当中高端卖的吗?
实际上早在GTX680正式发布很早之前就从各种渠道传出Kepler的声音,最常见的版本是:NVIDIA的这次新架构先发布中高端产品,可能是GTX660Ti或GTX670Ti什么的。现在再一琢磨,不能不说这个传言确有几分属实,GK104果真曾打算作为中高端出售。
看GK104芯片实物,DIE上没有相关型号印记,难道真的是因为很晚才确定型号?当然,这些略有隐晦的事情,想得到官方答案无疑为天方夜谭,咱们还是凭借自己的智慧来大胆猜测一下:造成这个结果的原因在AMD。
看了以上成绩对比图,你应该明白了,GTX680各方面性能基本完胜HD7970,正是因为这个原因,让NVIDIA觉得将GK104当做中高端出售实在是“屈才”了。于是决策者灵机一动:既然AMD不给力,我们何不借此大捞一笔?最后原本2000元价位的GK104摇身一变成为3000多元的旗舰堂皇登场了。而Kepler系列真正的大佬——GK100、GK110?,后续正在幕后准备成为更昂贵的奢侈品。否则让一个面积不到300mm²的芯片成为旗舰实在是有违NVIDIA“一贯追求极限”的风格。
若内幕果真如此也是没办法的事情,毕竟竞争规律决定商品价格,与奇说NVIDIA不厚道,不如怪AMD不给力。
网友评论