这是我转的帖子,个人感觉很好,也希望这里的朋友都能看到。。。
N卡和A卡两家架构问题要深究就得写一本书了。下面就简单通俗的介绍一下,方便初学者理解。
在DX9以前的时代,两家的架构主要由像素单元、顶点单元、纹理单元、光栅单元组成,一个渲染流程的所有单元绑在一起组成一条渲染管线,管线越多,性能就越强。而3D游戏的画面以4D指令居多(像素有RGBA,顶点有XYZW),这些单元就被设计成了一次能处理4D指令的处理器,属于指令级并行架构,对于当时的游戏环境来说这种架构效率很高。但到了DX9后期甚至DX10时代,游戏中的1D、2D、3D指令开始频繁混合出现,像素与顶点的渲染比例也有了改变,原先的架构就变得效率低下了,比如一个单元一次能处理4D运算,当碰到1D运算时就只用到4/1的资源,剩下3/4的资源就闲置掉了,相当于效率降低了4倍。而有些游戏的像素渲染量明显多于顶点,那么这些数量比例固定的单元就效率低下了,比如像素单元吃力的时候,顶点可能比较空闲,非常浪费硬件资源。为了解决这个问题,NV和ATI就对各单元的数量比例进行了调整,但都治标不治本。这时候重新设计新的架构成为了必然。结果,从DX10时代起,两家的架构就起了翻天复地的变化。
当两家DX10产品面市后,人们惊奇的发现,竟然是两种不同的架构。
N卡的架构思路很简单,用强大的前端处理器把所有指令拆分成一个个1D指令,而下面所有运算单元都变成了1D单元(流处理器),这些流处理器都能当做像素和顶点单元来使用,这样不管碰到什么类型的指令都能“一拥而上”,完全解决了DX9时代固定单元的弊端。为了保证指令分派的高效率,这些流处理器都分成几大组管理,每一组都具备完整的前后端及缓存单元,每个流处理器都对应独立的控制单元,效率几乎达到100%的理想程度,是标准的线程级并行架构,也是追求高效率的理想架构。
N卡的架构看上去很完美,但缺点也很明显,要想增加运算单元,必需以组为单位进行扩充,这样连带的前后端控制单元、功能单元和缓存都会成正比增加,晶体管消耗严重,所以在相同晶体管数量的情况下,N卡能做的流处理器就相对少很多。在流处理器数量相对少的情况下,处理4D指令时又会显得性能不足(因为要耗费四个流处理器去处理一个指令),所以N卡的流处理器频率都会比核心频率高出一倍以上,以弥补数量上的缺陷,但高频率带来的翻倍流水线又再次消耗了大量晶体管,最终结果就是功耗巨大,制造难度极高。
总结,N卡架构执行效率(硬件资源利用率)极高,灵活性强,在实际应用中容易发挥峰值性能。但运算单元较难堆砌,理论运算能力也受到较大限制。低良品率和功耗问题也一直如影随形。
A卡方面,也是采用通用的1D流处理器做为执行单元,每5个流处理器为一组,每组一次最大可接收一条5D指令(而N卡接收的是1D指令),在前端上就把所有指令打包成一个个5D指令发下去(而N卡是拆分成一个个1D发下去),当接到5D指令后,下面的5个流处理器就可以并行执行,属于指令级并行架构,又被称为5D架构,这样的设计可以实现高指令吞吐。同时控制单元与运算单元可做到分离,流处理器的增加不会牵动其它单元,晶体管消耗较少,所以A卡的流处理器数量一般都能做到N卡的4-5倍,芯片面积反而较小,理论运算能力也远强于N卡,功耗也相对要低一些。
但是,A卡架构的缺点也很明显,虽然理论计算性能强大,但较少的控制单元限制了其指令调度效率,下面流处理器越多,前端压力就越大。一旦碰到混合指令或条件指令的时候,前端就很难实现完整的5D打包,往往变成3D、2D、1D的发下去了,造成每组流处理器只有3、2甚至1个在工作,几乎一半的单元浪费掉了,再加上每个5D包里面可能存在最糟糕的组合(比如有先后关系的指令被包到了一起),常常导致部分指令被踢出去再走一次打包运算的流程。程序要想针对这种架构优化,必需减少混合、条件指令的出现(需要耗费程序员的大量精力),或杜绝(这是不可能的)。所以在软件优化度上A卡也是处于劣势的,常常无法发挥应有性能。
总结,A卡架构优势在于可以方便的扩充运算单元,实现强大的理论运算能力,晶体管消耗较少,功耗容易控制。但流处理器扩充得越多,效率就越低下,对于复杂多变的任务种类适应性不强,如果没有软件上的支持,常常无法发挥应有性能。所以A卡除了需要游戏厂商的支持外,自己也要常常发布针对某款游戏优化的驱动补丁(造成A卡发布半年后,还可通过驱动提升性能的现象)。
小节:两家在DX10架构上走上了完全相反的设计路线,而且都走得很极端。NV选择的线程级并行路线在实际应用中表现出了良好的性能,但这类架构的弊端就是庞大的晶体管规模和制造难度,功耗也很难控制。而AMD对指令级并行架构的信心来自于DX9时代的辉煌,毕竟3D游戏中的4D指令还是占了较大比例,其庞大的运算单元有着很大发挥空间,但指令调度限制较大,效率低下的问日趋严重。如果两家都没有解决自身缺点的办法,那么终有一天会撞到南墙(果然,在DX11后就同时撞上了)
在物理加速技术方面,全球主流的是Havok技术,目前为INTEL所有,平台支持度高,各领域巨头(包括AMD)也都默认对其支持,可以说是最通用的技术,在游戏支持度上占了60%以上市场份额。但该技术偏重CPU处理(少部分可由A卡协处理),性能比较有限,可展现的效果规模较小。
而物理技术的另一股新势力就是AGEIA公司的PhysX技术,硬件上以独立的加速卡形式存在,性能专一且强劲,能够展现更复杂的物理效果,但该技术并不开放,需要购买加速卡才能实现,限制了其支持度。自08年NV收购AGEIA公司后,PhysX技术就变成N卡专属,在DX10以后的N卡中都集成了PhysX物理引擎,但封闭的策略还是没变,要想实现PhysX物理效果,用户必需拥有一块DX10以上级别的N卡,这对于游戏厂商来说是比较冒险的,如果“性能足够”的N卡硬件用户量不足,那么软件厂商就亏大了,加上这类只能由特定硬件实现的技术很难用在多人对战游戏上(因为游戏中所有玩家互动结果和视觉障碍都要绝对一至),所以采用PhysX技术的游戏数量至今也没占到主流,很多厂商宁可对N卡优化,也不支持PhysX技术。不过NV通过强势的营销策略,甚至有些时候是“非常规”的营销,为人所知,市场前景也是被看好的。
总结:在物理加速技术上NV属于剑走偏锋型,企图利用封闭的技术搞垄断排挤(与索尼的储存卡(记忆棒)有点相似),但要排挤主流的INTEL、AMD阵营是极其困难的,毕竟在硬件占有率上INTEL、AMD的CPU就占了97%以上市场,即使是显卡市场也是INTEL占了大头,这种垄断地位极难攀越。结局是否和索尼一样我们不得而知。目前来看,支持PhysX技术的游戏只相当于Havok的三成左右,数量不占优势,而很多初学者把支持物理加速技术和游戏优化的概念搞混了,以为针对N卡优化的游戏就采用PhysX技术,其实这两者没有什么关系,针对N卡优化的游戏虽然较多,但采用PhysX物理技术的游戏是比较少的。这方面两家算是不分胜负,不过在选购上N卡又多了个筹码。
高清解码方面,自蓝光战胜HD-DVD后,市场上高清片源开始增多,但高清影片播放时的解码任务对当时的双核CPU来说是非常吃力的,中端以下CPU全线投降,这时候NV和AMD适时的在DX10架构中加入了高清解码功能,分担几乎所有的CPU工作,让低端CPU也能流畅的播放高清电影。当时高清格式主要有三种,奇怪的是N卡只支持一种格式的完全解码,这就导致N卡玩家在播放别的格式高清影片时CPU还是非常吃力,甚至卡顿;而A卡则支持了双格式解码(剩下一种格式运算量不大,CPU能搞定),这样A卡用户即使在入门级的CPU下也可以流畅播放高清了,CPU还有大量余力干别的事。从此A卡适合看电影的说法就流传下来了。不过N卡到了DX11架构后也支持了双格式解码,解码能力终于可以向AMD看齐,不过这时候CPU已经发展了三四代,入门级CPU都可以应付高清播放,显卡的解码能力已经没那么亮眼了。
图像画质方面,两家理论上并没有区别,因为处理的都是数字信号,只要信号源相同,那么运算结果也都是相同的。最终输出的效果很大程度取决于模拟信号的转换和显示设备的差异(甚至一条数据线都能左右画面的效果),数模转换效果取决于显卡制造商及显示器制造商的用料和设计,同一款核心的显卡,可能因为模块用料的不同而不同,显示器也一样,即使同一款型号,也可能会有电气性能上的差别。而在核心的源头上,由于显卡的本职工作是真实还原色彩,而不是改变色彩,所以两家的设计结果只能是一至的。专业人员更多的是选择专业显示器和专业显卡,这才是保证效果方法。
而在游戏“画质”方面,这里的画质指的是特效的效果,比如光影、抗锯齿、贴图、动态模糊、模拟曝光、异性过滤等等,这些都是依靠相应单元运算得出,两家绝大部分效果都可做到一至,但有些单元设计不同,部分效果也就有些差别了,最明显的是抗锯齿和纹理效果,有些时候可以看到两家显卡在同级的特效下会有些细微的差别,比如降底特效的时候,一家可能还能看到些绿草皮,而另一家可能就剩光秃秃的黄土地了。这种差别可能会让部分玩家误认为是“画质”的差别,其实是与真正的画质(图像品质)无关的。有时候更新一下驱动版本,差别可能就没有了。绝大部分时候,两家都很难看出这些差别,初学者其实无需太在意这些。
在抗锯齿性能方面,通用的是MSAA抗锯齿技术,N卡凭着高效能在前两代一直占着优势,到了第三代,AMD的HD4000系列就把抗锯齿运算从流处理器改到了光删单元,从而大副提升了抗锯齿性能,超越了N卡。到了第五代后,N卡的GF500系列也改到了光删单元,从此两家各有胜负。此外两家也在研发自己的抗锯齿技术,以求游戏厂商能额外采用,NV的CSAA技术画面效果不错,支持度较大(虽然很耗资源),而AMD的CFAA技术则效果不佳(虽然效率很高),前期没有支持度,直到HD6000系列以后CFAA效果才得到改善。(不过为了公平对比,多数媒体在测试时只使用游戏默认支持的MSAA技术,所以两家自己的技术不会影响成绩)
多屏输出方面,是AMD的强项,后期A卡可以做到单卡六屏输出,双卡则支持到恐怖的12屏。加上架构和显存的特性,即使在多屏高分辨率下,性能衰减也比对手要小,是多屏发烧友及多屏游戏玩家的最爱
3D视觉技术方面,前期是N卡占优势,后期是A卡占优,由于A卡3D视觉技术是免费开放的,得到了大量软硬件厂商(眼镜套装、显示器以及游戏)的支持,选择性较高。就技术本身而言,两家原理相同,区别不大。
通用计算方面,虽然通用计算概念是由ATI在X1900XT时代首个提出来的,但ATI一直都不够重视,加上后期A卡DX10架构的软件开发难的问题,导致支持的软件数量少,一直没有起色(虽然其运算性能是无敌的)。而N卡则从GF200系列开始,高度重视通用计算,以打通游戏以外的应用路线,通过架构的针对性设计,以及推出方便的开发套件,让程序员无需学习图形API也能开发出适用的软件,并且支持C++语言,使支持者越来越多。从中国超级计算机天河一号早期采用A卡核心做为计算单元,后期改用N卡核心就可见一斑。
专业图形领域,两家都有相应的专业卡系列,N卡占了大部分专业卡市场份额,导致A卡可选产品较少。但在性能上很难分胜负,两家都有各种等级定位的产品。不过在游戏卡上,A卡曾暴出可以通过特定的驱动配合特定的型号,使几百元的游戏卡瞬间变成几千元的专业卡案例,当时在专业圈里可是大事件,各种改版驱动的求下载也一度火热,不过之后新版本驱动填补了漏洞及显卡的换代,这事也就不了了之了。但A卡适合做图的说法就传了下来,其实在不破解的情况下,两家游戏卡在专业图形上都没有什么性能可言,其性能高低之分在专业卡眼里连零头都不如,所以在游戏卡上谈专业图形,本身没有太大意义。
在驱动程序方面
A卡在ATI时代驱动程序一直受人诟病,ATI常常在驱动没有充分测试的情况下抢先推出新硬件,然后再慢慢完善驱动程序,初期常出现各种兼容性问题,造成A卡发布半年后性能与兼容性才能通过驱动程序恢复正常的现象。而当时的NV却是过于严谨和保守(至今也是这样),虽然驱动完善度很高,但严重拖慢了新品推出的脚步,所谓有利必有弊。
自07年AMD收购ATI后,A卡的驱动程序才终于恢复正常,让人放心了,不过之前ATI搞坏的驱动口碑还需要时间慢慢解决。虽然AMD解决了驱动问题,但新问题又出现了:A卡架构优化难。AMD只能在新游戏发布后慢慢推出针对性优化的驱动,这样A卡通过驱动“提升”性能的现象还是没变,导致首发评测时A卡的成绩常常低于预期,随着时间的推移,排名才发生改变。而N卡在这方面就好了很多,没有毛病可挑。
在双芯卡与多卡互联交火的驱动上,A卡与N卡倒是反了过来,A卡驱动在交火兼容性上完成度非常高,而N卡则常常出现问题,多卡互联的兼容性问题比较严重(多卡丢桢现象也比A卡要多),甚至影响到了双芯卡的发挥,至今也没有得到改善。只能希望未来两家都能取长补短了。
近年情况:
当NV和AMD两种统一渲染架构发展到第四代后(N卡是GF400,A卡是HD5000),极限终于来临,架构的弊端暴走了。N卡为了提升性能,流处理器扩充到512个,GTX480晶体管达到空前规模,功耗发热量已经控制不了,变成史上首个需要屏蔽部分单元(只剩下480个)才能保证良品率的首发高端;而A卡也好不到哪去,HD5870已经把运算单元撑到极限(1600个),计算效率比例降至低谷,无法再扩充。偏偏这时候芯片代工厂台积电却放鸽子取消了32纳米的计划,延后转跳28纳米,在新工艺还没出世的时候,两家的下一代型号只能继续吃40纳米(已经吃了三代了)。
新工艺的优势就是高晶体管密度,可以在芯片面积和功耗不变的情况下扩充单元规模,提升性能推出下一代产品,而现在还用老工艺,计算单元是没法再扩充了,该如何推出更高性能的第五代呢,NV和AMD都绞尽脑汁。
NV的办法就是优化电路设计,使40纳米应用更加成熟,终于开启了GTX480被屏蔽掉的一组SM(32个流处理器),推出相当于GTX480的成熟版和完整版:GTX580。虽然确实提升了一档性能,但这种吃老本的“提升”是治标不治本的,于是GTX560Ti及以下的型号都用了“新”的设计(SM包含的流处理器撑到了48个,用更少的分组管理更多的流处理器),相当于缩减了缓存和控制单元,牺牲通用运算性能和部分效率,从而换取晶体管消耗和功耗的大幅降低,市场反应良好。也就是说,这一代的N卡从旗舰以下的型号都是缩减通用计算性能的“新架构”只有GTX570以上还是延用老架构,新旧核心贯穿整代。从这里已经初现NV改革的方向。
以上是逻辑架构图,不代表实际物理比例(图片来自中关村)
而AMD由于本身工艺就很纯熟,在制造工艺上没有改进的空间,也在架构上做文章:前端处理器变成了两个,相当于增加了控制单元,缩减了运算单元。HD6870以1120个流处理器就胜过了1440个流处理器的HD5850,更接近了1600个流处理器的HD5870,证明这种改进是成功的。不过HD6800系列定位低于上代HD5800系列有点让人奇怪,接下来推出的HD6900系列才让人恍然大悟,原来高端型号的数字提了一个台阶。HD6900系列除了具备双前端处理器,还史无前例的把原先5个流处理器一组改成4个一组(不能再叫5D架构了),降低了前端压力又提升了单元利用率。这样双重改进确实能有效提升效率,连次旗舰的HD6950(1408个流处理)都要强于上代旗舰HD5870(1600个),旗舰HD6970更是接近对手GTX570,稍强于对手GTX480。这一代的A卡从高端HD6800以上都采用了“新架构”,中端以下还是延用老架构(与N卡正好相反)。从这里也看出了AMD改革的方向。
以上是逻辑架构图,不代表实际物理比例
这一代两家都进行了妥协,不再固执的走极端,虽然相对上一代性能提升不多(以前换代都是近翻倍的性能提升),但NV尝到了适当放弃效率和通用计算带来的好处,而AMD也尝到了提升效率的好处,两家开始向对方靠拢了。从某种意义上来说,这都是台积电逼出来的。
(各代核心面积对比)
最新进展:
2012年,第六代来了,台积电的28纳米也可以用了,通过第四代的撞南墙和第五代的变通,两家第六代会有什么更大的变化呢。
先说AMD的最新GCN架构(HD7000系列),多达两千流处理器之巨,但最明显的改变是果然大幅增加了控制单元和缓存的比例,宏观上采用类似N卡的线程级并行,底层上还是采用指令级并行,使晶体管数量达到空前规模(已经有点N卡的味道)。结果表现令人惊喜,效率大幅提升,运算性能更强,通用计算性能也大幅超越以前,彻底改掉了通用计算的老毛病。
不到半年,N卡的最新开谱勒架构(GF600系列)也横空出世,更是戏剧化,果然大幅减少了控制单元,缓存也缩减了,再大幅提升流处理器数量,这样效率虽然比以前降低了,但计算性能却是N卡空前最高的(这有点向A卡靠拢的意味,唯一不同的是NV还是线程级并行)。从实际表现来看,GF600相比HD7000有更强的性能,更低的功耗和更小的芯片面积,算是真正做到了最强。不过价格也不太亲民就是了。
综合来看,两家戏剧性的向对方靠拢,让人不禁遐想世界大同的未来。一直以来A卡都给人小芯片、低功耗的印象,现在角色换过来了,变成N卡小芯片低功耗了。虽然两者在向对方靠拢,但线程级和指令级并行两种架构的界限还是有的,造成了新架构中A卡首次在技术层面上落败,不知道一直扮演着弱者角色的AMD会在未来做出什么样的反击,这很让人期待。
(各代核心面积对比)
结语
总的来说,A卡和N卡在游戏中的表现是各有优劣,在多数游戏测试中都是互有胜负,可以说是平分秋色。而“N卡玩游戏好,A卡看电影好”这种中国式谬论我们还是少听少说为好,否则会极大的限制你技术水平的长进。
N卡和A卡虽然架构有别,但为了与各类软硬件兼容,都是遵循一定的标准进行设计,所以在性能的实现上都是一样的。而单机游戏厂商每一款大作的推出,都是里程碑式的宣传效应,单机游戏厂商的支持倾向也成为了两家必争之地,所以我们常常会在单机游戏大作中轮番看到两家品牌标志。而这个现象则导致了相当数量的初学者进入了一个误区:谁家支持的游戏多,谁的显卡就好。其实事实并没有这么简单,每个卖游戏的厂商眼中永远只有玩家数量,不会傻到为了某一家而放弃另一家,所以即使宣称专为某家显卡优化的游戏,也会给另一家显卡留下相当程度的后路,所以在多数游戏测试中即使两家显卡互有胜负,其差距也不大。
而网络游戏方面,玩家数量就是游戏商的生命,巴不得老爷机的玩家都能玩自己的游戏,所以除了对硬件要求较低以外,对两家显卡的支持更不会有什么区别。
OpenCL篇:
《前文》中有坛友提出OpenCL的内容没有,其实已经讲到了,只不过用了“中文”代替而已,可能感觉没有技术文的那种“神秘范儿”吧,毕竟前文的宗旨是把神秘拉下神坛,而不是故作神秘。
要说OpenCL,就不得不提API,什么是API?程序要想实现某种功能,就要调用系统中的某个函数,而一大堆函数的集合体,人们就称之为API了(中文简称为“程序编程接口”),API提供什么功能,那么依此开发的软件就能展现什么功能。硬件如果兼容某坨API,那么就能兼容依这坨API开发的程序。也就是说,当一坨API被某个领域广泛采用的时候,也就成为了该领域的软硬件发展的技术标准,它的升级也会带动软硬件随之升级(虽然它本体只是一坨函数包)。
在图形领域有两坨主要的API被广泛采用,一坨是DirectX,另一坨就是OpenCL了。
DirectX是微软开发,集成在自家Windows系统中,由于Windows系统的普及性,DirectX就自然而然的成为多媒体(包括游戏)开发的主流API。XP系统集成的DirectX9.0c版本(简称DX9)至今还是主流游戏开发API。XP之后的Vista系统集成了DX10,再之后的Win7系统集成了DX11,目前的Win8系统集成了DX11.1。每一代DX都加入了更先进的仿真技术,使游戏开发者能调用更先进的功能做出画面更逼真的游戏,但同时也对显卡功能、性能有了更高要求。比如微软在DX10上已经不再区分像素和顶点单元,而是定义了通用的运算单元来统一负责,这时候显卡要想兼容这坨DX10,就必需取消像素、顶点单元,设计出统一运算功能的单元来,从而导致当年N卡A卡大换代,管线换成流处理器,开启了DX10时代。
(小提示:系统中集成的DX函数并不是完整的,如果碰到一些调用了冷门函数的游戏,那就需要用户下载安装完整DX包才能正常运行了)。
而图形领域的另一坨主流API,就是大有来头的OpenCL了,由苹果首创,一堆大佬来开发,其开放性成就了众多领域通用的地位,虽然也有用在游戏领域,但更多的是用于专业图形领域及通用计算中,所有专业的2D、3D图像设计软件都对其支持,所以专业图形显卡都必需支持庞大的完整的OpenCL功能。Windows系统虽然没有集成OpenCL这坨死对头,但显卡厂商都在驱动程序中集成了OpenCL包,只要安装了完整版的显卡驱动程序,OpenCL就有了。不过常见的游戏显卡只支持少部分OpenCL功能,驱动程序也只集成了部分OpenCL函数,而不支持的部分只能由CPU进行运算,效率极低,所以在专业图形领域中,再顶级的游戏卡也远弱于入门级专业卡,稳定性也远远不及。相对的,专业卡虽然完美支持OpenCL,却对DirectX极度轻视,几千元的专业卡在游戏上也只相当于几百元游戏卡的性能,兼容性也较差。所以做设计的同学们要注意了,是游戏重要还是工作重要,自己来衡量吧,所谓术业有专攻,这是没办法的。至于两家的专业卡的对比,多年来两家都拼得忽高忽低,但NV占优的时间较长,市场占有率上NV专业卡是占了大头的。就产品本身而言,其实两家都非常专业而优秀,完全能满足各级专业人员的需求,没什么可挑的(套句俗话:专业大师级都不挑,你这水平挑什么?)。
在通用计算方面,由于DirectX的通用计算功能实在羸弱,主流的通用计算还是基于OpenCL的。N卡自DX10以后就开始了通用计算之路,并且走得大刀阔斧,架构中的缓存、双精度浮点单元也是为通用计算而设计(对游戏却没有太多帮助),最关键的是支持了C++语言,推出基于OpenCL的CUDA开发套件,使更多开发者投入到N卡阵营中来。而AMD虽然早在X1900XT性能过剩时代就提出了显卡通用计算的概念,但之后却没有太多发力,架构设计也没有考虑到通用计算的支持,导致周边支持较少,这种情况直到HD7000系列以后才有所改观。
加强通用计算的支持就意味着显卡不止用于图形渲染,还能代替CPU用在其它通用的领域上,看上去有点“不务正业”是吧,但正是由于显卡核心的恐怖计算能力和N、A两家的推动,显卡正慢慢侵占着CPU的领地。NV就是凭着通用计算的能力在科研、医疗、大型计算等领域占了一席之地,一台超级计算机几千上万颗计算芯片里,可能就有几千颗N卡的核心。AMD悔恨之后终于“改过自新”,在HD7000上重新设计了架构,不惜大费晶体管增强通用计算能力。当然,AMD与NV的策略有些区别,AMD由于同时是CPU领域的巨头之一,在自家显卡的通用计算上更多的是倾向于与CPU的极致协作,倡导GPGPU的概念,与只有显卡业务的NV压力是不同的。
对普通玩家来说,显卡通用计算目前只有视频转码、网页加速(IE9支持,IE8、7、6免谈)、文件压缩、解密、图形设计、少部分游戏特效等用途,还没有到非用不可的程度,也就很难理解两家巨头的决策方向了。
也就是说,在《前文》中已经通过专业图形及通用计算两块内容简述了OpenCL,只不过为了减少过多连带解释搞花了初学者的眼睛,也就隐去了这些鸟语。
最新进展及对比篇:
有坛友提出《前文》老架构说得多而新架构说得少,确实如此,因为DX10架构(2006年问世)是现有架构的开端和基础,两家长达5年的换代都是在此基础上改进而来,本质上没有变化,连DX11架构都是如此,而网络上几乎所有的流言和对两家的印象也都从DX9、DX10时期而来,所以有必要把重点放在DX10上。对于最新的DX11.1,如果坛友觉得《前文》还没说得过瘾,那么下面再通俗的介绍一下。
为了便于理解,我们简单引入DX10以后几代发展的历程,也算同时回答了有些坛友指出的“对比较少”的问题:
NV在DX10换代之际开了个好头,果断彻底的抛弃单指令多数据流架构(以下简称SIMD),转投效率更高的多指令多数据流架构(以下简称MIMD),以8800GTX抢先进入DX10时代。而AMD则开了个最烂的头,不但让NV独占DX10市场长达大半年之久,晚了大半年推出的DX10产品(HD2900XT)竟还弱于对手,这让A卡的人气和市场瞬间跌到谷底,跟一年前A卡的DX9辉煌相比有如天壤之别。AMD采用的是改进后的SIMD架构体系,虽然SIMD本质上非常适合图形渲染,但AMD又跳票又弱的烂开场让人们开始怀疑SIMD的性能。在众多分析中,比较合理的说法是A卡在DX10换代时期不幸处在了AA收购调整期,研发与决策受到严重影响。但不管事实如何,这个烂头已成定局。
到第二代后,NV更新了工艺推出GF9000系列,架构与上代不变,连流处理器都没有增加(还是128个),只凭着新工艺提升了一些频率,市场还是很好,看来AMD的弱势让NV非常没有压力。而AMD的HD3000终于赶上了对手第二代的发布时间,开始走小芯片路线,特点是面积小功耗低,方便推出“多核”型号,策略是以单芯占领中高端,再以双芯占领高端(老玩家有没有很眼熟?是的,小芯片单双芯策略并不是AMD独创,而是DX9末期NV为了抗衡ATI单芯的强势而首创的绝招),这一代明显体现了AMD的工艺掌控能力,晶体管密度大幅提升,芯片面积变得非常小。不过这一代A卡架构上也没有改变(还是320个流处理器),同样也只提升了一些频率,所以还是落后于对手。NV轻松之余唯一的紧张感只不过是被突然袭来的双芯HD3870X2逼出了个9800GX2而已。
到了第三代,NV突然暴长计算单元,GTX280达到了240个流处理器,单元做了不少改进,继续稳占最强宝座,同时开始大推自家CUDA通用计算技术,已经透露出侵食CPU领地的野心。不过GTX280的晶体管规模也几乎是上代的两倍,其中相当数量是用在了加强通用计算上,芯片面积和功耗巨大。而这一代的A卡开始了反击,流处理器暴长了两倍多(800个),并且各模块都做了优化改进,芯片面积还是很小,HD4870以不到GTX280一半的芯片面积就实现了80%的性能,证明SIMD其实并没有问题,问题在于设计上,AMD开始缓过劲了。结果小芯片优势尽显,不出所料,双芯HD4870X2横空出世,占了近半年的卡皇宝座,NV最后只能降频降宽的推出双芯GTX295才勉强把HD4870X2赶下来。这一代A卡人气和市场猛增。
第四代,NV过于严谨稳健的策略开始显露弊端,AMD已经走入第四代了NV的第三代GF200系列都还没发布完全,中端GTS250更是只能延用上一代的G92核心来顶替;而AMD趁机从反击的姿态转为进攻,运算单元再次翻倍,HD5870以1600个流处理器猛然占领卡皇地位,是首款支持DX11、也是史上首款以单芯卡身份超越上代顶级双芯卡(GTX295)的卡皇,令人意想不到的是HD5870卡皇还没坐热,双芯HD5970就紧接着炸出来了(这款具备3200个流处理器的卡皇将在之后占据长达一年半的最强地位),完全不留超越的余地。这一代的开场AMD打得确实漂亮,虽然市场占有率还是不如对手,但维稳回升的势头很明显。在AMD第四代几乎铺货完成后,NV的第四代才姗姗到来,核心高达512个流处理器,数量是前代的两倍有余,控制单元和缓存规模史无前例的庞大,明显专为通用计算性能而强化,不过由于规模超出了当时制造工艺水平的极限,只能屏蔽掉一组SM(带32个流处理)才能推出旗舰GTX480,尽管如此,GTX480凭着剩下的480个流处理器也已经可以把HD5870砍下马来,成为最强单芯显卡。但是NV这一代已经无法再做出双芯卡了,功耗发热量已经很难控制(甚至比对手的双芯卡还高),只能放弃最强宝座的争夺。
《前文》说过,这一代两家架构都走到了极限,NV已经到了屏蔽单元发布不完整核心的地步,而AMD虽然表面看上去占了上风,但计算单元的堆砌已经到了极限,再堆下去不但性能提升有限,小芯片的优势也荡然无存。所以两家都在苦思出路。
到了第五代,《前文》已经做了详细介绍,由于台积电放鸽子,两家只能继续延用40纳米工艺,被迫做了少量妥协。NV开始适当缩减通用计算性能,明显降低了晶体管消耗和功耗发热量,而AMD也适当缩减了计算单元增加了控制单元,效率明显提升。两家都在这一代向对方迈了一小步。
(各代旗舰核心面积对比)
到了第六代(重点来了),AMD于2011年底抢先推出HD7000系列,这是首款采用28纳米工艺、PCI-E3.0接口、DX11.1技术的显卡,最大的亮点就是AMD设计了全新的GCN架构,放弃了使用多年的5D-4D(SIMD)架构。从官方介绍即可看出设计的思路,就是MIMD与SIMD的混合。下面看看AMD是如何实现的:
宏观上,整个运算部分由32个MIMD的“大核心”组成(而当时最强单芯GTX580只相当于16个);每个“大核心”其实又是由4个SIMD的“小核心”组成;而每个“小核心”的本体其实就是16个流处理器,整体形成了32X4X16=2048个流处理器的庞大规模。也就是说,在宏观指令调度上它实现了N卡的高效率和方便编程的特性,在底层上它又具备A卡的高指令吞吐和恐怖计算性能,可以说是史无前例的混合式设计。并且不再打包指令,也不像N卡那样拆分,而是原封不动的通吃,这也是4个“16D小核心”为一组的原因。加上所有单元共享768K二级缓存(和GTX580一样),每层“核心”又具备独享缓存,形成了庞大的多层缓存规模(以前的A卡是没有的),再配合增强的双精度浮点单元,使通用计算性能得到大幅增强并超越对手,至此再无死角。
但是,这些改进必需依托庞大的晶体管数量支撑,并且要想实现MIMD的高效率,线程调度工作必需像N卡那样放到硬件上实行(之前的A卡偏重软件实行,虽然减少了晶体管消耗,但却对驱动依赖极高)这在晶体管消耗上也是相当“可观”的,最终HD7970达到了史无前例的43亿晶体管规模。好在这是基于28纳米下的挥霍,芯片面积反而比上代HD6970要小一些,功耗也没有夸张。需要注意的是,虽然HD7970游戏性能是当时单芯最强,但其架构的多数改进都是针对通用计算而去的,这些设计极耗晶体管又对游戏性能没有太大帮助,说明AMD终于也醒悟了,和NV一样坚定通用计算就是显卡未来的发展方向。HD7970在当时被媒体冠以最球最快的GPU,人气高涨,N卡市场份额险些被A卡超越。
(上图可看出A卡近代变化明显,从HD6000的双前端4D到HD7000的MIMD+SIMD混合)
NV方面,终于半年内也推出了万众期待的第六代核心GTX680(GK104),28纳米,依旧采用MIMD架构,并且依旧是GPC、SM多层多组管理体系,明显不同的是,GTX680每组SM包含的流处理器撑到了192个!(之前GTX580每组SM只管32个,即使是“新架构”的GTX560TI也只撑到48个),SM管辖的流处理器越多,那么在相同流处理器数量下需要的SM分组就越少,连带的控制单元、缓存也就少得多,可有效的减少晶体管消耗和功耗,但是相应的,由于SM管理的流处理器暴增,控制单元压力也随之暴长,指令调度效率会受到很大影响(这就是GF600的384个流处理器只相当于GF500的128个性能的原因),因此GTX680每组SM的控制单元都做了优化改进,数量也是翻了两倍以上,以约3倍的效率提升来应付6倍的流处理器提升,总算把SM效率控制在了一个“应该合理”的范围内。不过,GTX680和GTX560TI一样做到了8组SM,总数就是8X192=1536个流处理器,运算能力翻了几倍,流处理器也终于可以取消翻倍频率的设计,明显降低了功耗和部分晶体管消耗,核心频率也终于突破了1Ghz大关。另外,显存控制器也做了“增强和缩减”,增强的是对高频显存的支持,缩减的是控制器的数量(4个64bit控制器组成了仅256bit的位宽规格),更少的显存控制器可以减少晶体管和功耗的开销(A卡一直是这么做的),加上指令调度的部分工作放到了软件端,虽然对驱动和编程有了更高依赖,但却可以明显减少晶体管消耗,功耗也再次得到控制(有点A卡的味道)。最终,GTX680晶体管控制在了35.4亿,芯片面积终于比A卡小了,功耗也更低,性能却强于对手HD7970,成为真正意义上的最强。
至于GTX680的缺点,由于没有更强的参照物做为对比,无法得出结论,就像当初每一代的最强核心发布,我们都认为它是“完美”的,但之后被更强的核心超越时,我们才知道原来还可以这样改进,原来它的缺点是这个等等等等。所以要等这个结论,可能是明年了。我们唯一知道的是,GTX680架构的设计是基于第4代GTX460及第5代GTX560TI的尝试性设计而得出,效率与计算的比例目前看来还是“完美”的,但今后肯定会有更合理的比例来超越它,我们拭目以待。
(N卡近代的架构体系没有明显改变,重点在SM管理的流处理器数量上做文章,从32个到48个再到目前的192个,以及随之强化的SM控制单元)
关于GTX680的命名,其实还是有点意思的,本来GK104并不是定位在旗舰的核心,从之前的GF104(GTX460)和GF114(GTX560TI)可以看出,同属4字辈的GK104也应该是相同的定位,型号也应该是GTX660TI之类的更合理,现在却命名为GTX680,看来原因只有一个:对手的旗舰HD7970性能没有达到预期。就像当初AMD也碰到了此类问题,HD6800系列本来是要命名为主流HD6700系列的,谁知道性能超过预期,接近了上代最高端HD5870,为了避免造成真空带,最后只能“升级”为HD6800,把高端改为HD6900了。GK104的出现,说明NV其实还有真正的高端没有放出,代号应该为GK100之类完全追求高性能、极致通用计算性能、功耗也较高的旗舰核心,看来只能在AMD放出HD8000以后才能看到了(在官方没有发布确切消息之前,以上只能是猜测,初学者不用当真)。
在GTX680发布三个月后,AMD发布了高频版的HD7970GHZ,核心/显存频率接近GTX680达到1000/6000MHZ,在相同频率下性能稍强于GTX680,说明架构还是可圈可点的,不过功耗却高了几十W,效能比明显不足,GTX680完全也可以提升频率来赶超,而且提升空间还要大一些,所以HD7970GHZ版的意义不在于超越,而在于抗衡。
两家的第六代其它功能特性:
之前A卡多屏输出的优势项目还是继续保持,不但支持六屏输出,还突破了三路音视频独立的屏障,并且支持了不同尺寸分辨率屏幕的弹性组建,技术更上一层楼;而N卡终于做到3屏输出和3屏3D视觉输出,超越了自己,但相比对手还明显不足。
在自家抗锯齿技术上,NV推出了最新的TXAA技术,虽然还没有游戏支持,但其效果和效率的比值很高,发展前景很大,A卡在这方面虽然也在发展,但相比之下还有所欠缺。
在高清解码上,两家都提升了解码引擎,功能更强,效率更高,但还是那句话,目前的入门级CPU都可以轻松搞定高清了,软解码画质还更好,显卡的硬解码功能已经没那么亮眼了
DX11性能方面,两家从第4代就开始支持DX11(A卡是HD5000,N卡是GF400)
虽然A卡支持了完整的DX11功能特性,但由于只有一个多形体引擎,导致对DX11其中一个特性(曲面细分)性能不足,这样在碰到采用过多曲面细分技术的DX11游戏时,性能就会受到严重影响,虽然众多DX11游戏中“曲面细分”效果比重大的几乎没有,但将来大量采用还是有可能的,所以A卡的这个弱项一开始就受人诟病。于是到HD6800系列后,A卡的双前端处理器也同时带来了两个多形体引擎,曲面细分性能可达到上代的两倍,但相比对手还是较弱。到了HD7000系列后,多形体引擎还是没有增加,不过却做了优化改进,效率翻倍,达到之前四倍以上的性能,尽管如此,还是稍弱于对手。看来目前的游戏让AMD不太重视这个项目。
NV方面,从GF400开始就在每组SM中集成了多形体引擎,GTX580凭着16组SM就具备了16个多形体引擎(虽然单个引擎功能与A卡不能比较,但16个并行的效率还是非常可观的),所以N卡这方面一直占有优势。不过有一点是需要注意的,N卡越往低端,SM就越少,连带的多形体引擎也就越少,而A卡则几乎是整个系列前端都一样,除了HD6800系列以上有两个多形体引擎外,其它都没有差别,所以越往下,两家的曲面细分性能差距就越小,到最后反而是A卡占优了。
当然,DX11游戏数量本来就不多,大量采用曲面细分效果的更是极少,而且无一例外的都是显卡杀手,中低端显卡基本是全灭的,造成了两个现象:
1。大多数玩家无法体验到曲面细分效果带来的影响,也无法感受到显卡这项性能的差别
2。多数曲面细分性能的测试都是N卡占优(因为这些游戏只有高端顶级显卡能应付,而在高端上N卡的曲面细分是强于A卡的)
所以,目前游戏环境对这方面影响不明显,当未来普及曲面细分后,两家显卡也肯定会做出相应的改进。
至此《N卡与A卡的区别》篇已经完结,下一次对比可能要在5年之后了,到时会以现在的28纳米架构为开端,再看看5年之战的精彩。
结语:
N卡与A卡的大讨论“自古”就有,未来也不会结束,我们提倡更大的讨论,同时也提倡讨论的内容走向更理性和正确的方向。
喜欢某个品牌其实无可厚非,但为了支撑这个“喜欢”而去找各种支撑的理由和传播不科学的言论,就不应该了。就像某些喜欢苹果的用户,找了一堆“质量好、研发成本高”等无知的理由来支持这个高价,不但让自己喜欢的品牌掉价,还暴露出自己“喜欢”的肤浅。我们不禁要吐槽:你至少要了解自己喜欢的东西才讲话吧!
喜欢是不需要理由的,你若喜欢一个东西,一句“我喜欢”就可以了,不需要找一堆莫需有的理由来证明它的好,你唯一要做的就是真正了解它的优点和缺点,并勇敢的直视别的品牌的优点,
你还记得吗,那个最初让你选择这个品牌的原因,尽管可能是某个“高手”的推荐,尽管今天你已经明白那些推荐的理由是多么无知和愚蠢,但是你放弃了吗,你还需要那些理由来支撑吗?
如果有人问我支持N卡还是A卡,我只会给他讲一句废话:“两个我都支持”,“为什么呢?”,硬要找一个理由的话,那只能是:“因为这两个站在全球图形领域最顶峰的品牌,都是出自华人之手。”
|