GTX680架構解析 GPU版開普勒三大定律
泡泡網顯卡頻道3月22日 “什么?GTX680的流處理器數量是1536個?而且GTX680的流處理器與核心同頻率,不再是兩倍了?這規格簡直和HD6970一模一樣!AMD的HD7970剛開始學習NVIDIA的架構,現在NVIDIA的GTX680又學AMD了,你們這是要鬧哪樣啊?”
相信很多人聽到GTX680的規格時,都會產生這樣一種想法。在GTX680發布之前,各種小道消息不脛而走之時,筆者也很納悶,NVIDIA的Kepler架構到底發生了什么樣的變化?難不成N/A雙方真的要互相學習、取長補短?
在新一代GTX680發布前夕,NVIDIA召開了多場技術講座,NVIDIA總部的專家為全球各大媒體編輯詳細解讀了新一代Kepler(開普勒)架構的技術特性,筆者經過深入學習研究之后,今天就為大家揭開謎底——新一代GPU圖形架構到底誰更先進?
NVIDIA和AMD的GPU架構相關名詞解讀:
1. NVIDIA喜歡用物理學家的名字來為GPU架構命名,從DX10開始第一代叫做Tesla(特斯拉)、第二代是Fermi(費米)、第三代是Kepler(開普勒)、第四代是Maxwell(麥克斯韋),這些科學家的大名是如雷貫耳,就不做解釋了。
2. Kepler(開普勒)是NVIDIA新一代的GPU架構代號,基于開普勒架構第一顆GPU的代號是GK104,基于GK104核心的首款顯卡是GeForce GTX 680。
3. AMD以前GPU代號和NVIDIA一樣也是字母+數字,但從DX11時代開始GPU的代號用單詞來命名,比如HD5000系列的架構代號是EverGreen(常青樹),高端HD5870核心代號Cypress(柏樹)、中端HD5770核心代號Juniper(杜松);
HD6000的架構代號是North Island(北方群島),高端HD6970核心代號Cayman(開曼群島),中端HD6870核心代號Barts(圣巴特,加勒比海某小島);
HD7000的架構代號是Sourth Island(南方群島),高端HD7970核心代號Tahiti(大溪地),中端HD7870核心代號Pitcairn(南太平洋某英屬群島),主流HD7770核心代號Cape Verde(佛得角,非洲最南邊島國)。
今年一月份,在AMD發布HD7970時,我們曾詳細的分析過AMD代號為南方群島的“Graphics Core Next”架構。這是AMD收購ATI之后的近5年來第一次對GPU架構進行“傷筋動骨”的“手術”,而架構調整的核心內容則是為并行計算優化設計,我們發現AMD的GCN架構與NVIDIA的GPU有很多相似之處。
當時筆者曾感慨:“在流處理器部分,終于不用費勁的把AMD和NVIDIA GPU架構分開介紹了,因為GCN與SM已經沒有本質區別了。剩下的只是緩存容量、流處理器簇的數量、線程調度機制的問題,雙方根據實際應用自然會有不同的判斷,自家的前后兩代產品也會對這些數量和排列組合進行微調。AMD向NVIDIA的架構靠攏,證明了他這么多年來確實是在錯誤的道路上越走越遠,還好浪子回頭金不換,這次GCN架構簡直就是大躍進!”
促使AMD做出革命性改進的一大原因,就是從R600開始SIMD(單指令多數據流)VILW(超長指令集)的效率問題,AMD的GPU固然擁有恐怖的浮點運算能力,但很多時候都不能完全發揮出來,由此導致游戲性能和計算性能都要大打折扣。此后的四代產品雖然在R600的基礎上修修補補,但始終未能從根本上解決問題。
AMD承認,從VLIW到GCN是GPU的革命,這次革命NVIDIA幾年前就完成了
NVIDIA的GPU從G80時代開始,其MIMD(多指令多數據流)一直以高效能而著稱,但也存在一個讓人頭疼的問題——GPU流處理器數量較少、浮點運算能力太低,這同樣限制了N卡在游戲以及計算方面的實際性能。
AMD的SIMD架構可以用較少的晶體管造出龐大數量的流處理器、擁有恐怖的理論浮點運算能力;而NVIDIA的MIMD架構必須使用更多的晶體管制造出看似比較少的流處理器,理論浮點運算能力相差很遠。雙方走的都是極端路線,AMD以數量彌補效率的不足,而NVIDIA以效率彌補數量的劣勢。
6年前從G80和R600開始,NVIDIA和AMD在GPU架構上分道揚鑣,這么多年經歷了風風雨雨之后,發現極左或極右路線都有各自的局限性,修正主義治標不治本,唯有走中間路線才是正道!不過中間路線也有不同的走法,有些人還是偏左、有些人還是偏右……
從GPU外圍模塊來看,AMD的Tahiti和上代Cayman相比變化不大,只是強化了曲面細分單元,加入了雙異步計算引擎而已。
HD6970代號為Cayman的GPU核心架構圖
HD7970代號為Tahiti的GPU核心架構圖
最大的改變來自于流處理器部分,原有的SIMD引擎不見了,取而代之的是GCN陣列,那SIMD引擎與GCN陣列有什么本質區別呢?
Cayman擁有20個SIMD引擎,每個SIMD引擎內部包括16個這樣的4D矢量運算單元
Tahiti擁有32個GCN陣列,每個GCN陣列里面包括4個SIMD-16單元
Tahiti的每個GCN陣列里面包括4個SIMD單元,每個SIMD單元內部包括16個1D標量運算單元。這樣的話Cayman的SIMD引擎是16x4=64個流處理器,而Tahiti的GCN陣列是4x16=64個流處理器,總數量雖然沒有變化,但架構上是截然相反的設計——Tahiti相對于Cayman來說革命性的改變就是把4D矢量運算單元改成了1D標量運算單元!
但是,GCN架構與NVIDIA的CUDA架構還是有明顯的區別,那就是GCN里面包括了4個SIMD-16單元,標量流處理器被硬性拆分為4個小組,而NVIDIA的SM則沒有這種設計,所有流處理器都一視同仁。
盡管AMD的架構在向NVIDIA靠攏,但雙方還是有明顯區別,而且NVIDIA也在不斷的改變。至于NVIDIA和AMD歷代產品架構上的變化,之前多篇文章中都已經交代過了,這里就不再重復,我們通過這個簡單的數字變化,來了解一下:

先看看AMD方面,從R600一直到Cypress,可以說一直在堆SIMD,動輒翻倍,架構沒有任何變化;從Cypress到Cayman變化也不大,只是把矢量單元從5D改為4D;從Cayman到Tahiti可以說是質變,SIMD被GCN取代,4D矢量運算單元改為1D標量運算單元。
而NVIDIA方面,則是不停的對GPU的GPC、SM、CUDA核心等配比進行微調,在微調的過程中經歷了兩次突變:第一次是GT200到GF100,首次引出了GPC(圖形處理器集群)的概念,GPC數量減少但SM數以及流處理器數量增加不少;第二次就是現在了,從GF100到GK104,SM數量減少,但流處理器數量暴增!
改變是為了適應形式的變化,解決此前出現的一些問題,那NVIDIA的架構有什么問題呢?此前我們多次提到過,雖然NVIDIA的GPU在效能方面占盡優勢,但也不是完美無缺的——NVIDIA最大的劣勢就是流處理器數量較少,導致理論浮點運算能力較低。當然這只是表面現象,其背后的本質則是MIMD(多指令多數據流)的架構,相當一部分比例的晶體管消耗在了指令發射端和控制邏輯單元上面,所以流處理器數量始終低于對手。
GF110和GK104芯片對比圖
為了保證GPU性能持續增長,NVIDIA必須耗費更多的晶體管、制造出更大的GPU核心,而這些都需要先進的、成熟的半導體制造工藝的支持。NVIDIA之所以在GF100(GTX480)時代落敗,并非架構或者研發端出了什么問題(GF110/GTX580的成功可以證明),而是核心太大導致40nm工藝無法支撐,良率低下漏電流難以控制,最終導致核心不完整且功耗巨大。如此一來,NVIDIA原有的架構嚴重受制于制造工藝,并非可持續發展之路。
為此,NVIDIA將芯片架構逐步轉向了SIMT的模式,即Single Instruction Multiple Threads(單指令多線程),SIMT有別與AMD的SIMD,SIMT的好處就是無需開發者費力把數據湊成合適的矢量長度,并且SIMT允許每個線程有不同的分支。 純粹使用SIMD不能并行的執行有條件跳轉的函數,很顯然條件跳轉會根據輸入數據不同在不同的線程中有不同表現,這個只有利用SIMT才能做到。
SIMT在硬件部分的結構還是要比SIMD復雜一些,NVIDIA還是更注重效率一些,所以NVIDIA的流處理器數量還是要比AMD少,但差距已經沒以前那么夸張了。
基于效能和計算能力方面的考慮,NVIDIA與AMD不約而同的改變了架構,NVIDIA雖然還是采用SIMT架構,但也借鑒了AMD“較老”的SIMD架構之作法,降低控制邏輯單元和指令發射器的比例,用較少的邏輯單元去控制更多的CUDA核心。于是一組SM當中容納了192個核心的壯舉就變成了現實!
通過上面這個示意圖就看的很清楚了,CUDA核心的縮小主要歸功于28nm工藝的使用,而如此之多的CUDA核心,與之搭配的控制邏輯單元面積反而縮小了,NVIDIA強化運算單元削減控制單元的意圖就很明顯了。
Fermi的硬件相關性檢查變為Kepler的軟件預解碼
此時相信有人會問,降低控制單元的比例那是不是意味著NVIDIA賴以成名的高效率架構將會一去不復返了?理論上來說效率肯定會有損失,但實際上并沒有想象中的那么嚴重。NVIDIA發現線程的調度有一定的規律性,編譯器所發出的條件指令可以被預測到,此前這部分工作是由專門的硬件單元來完成的,而現在可以用簡單的程序來取代,這樣就能節約不少的晶體管。
隨意在開普勒中NVIDIA將一大部分指令派發和控制的操作交給了軟件(驅動)來處理。而且GPU的架構并沒有本質上的改變,只是結構和規模以及控制方式發生了變化,只要驅動支持到位,與游戲開發商保持緊密的合作,效率損失必然會降到最低——事實上NVIDIA著名的The Way策略就是干這一行的!
The Way(游戲之道)計劃可以保證NVIDA的GPU架構與游戲完美兼容
這方面NVIDIA與AMD的思路和目的是相同的,但最終體現在架構上還是有所區別。NVIDIA的架構被稱為SIMT(Single Instruction Multiple Threads,單指令多線程),NVIDIA并不像AMD那樣把多少個運算單元捆綁為一組,而是以線程為單位自由分配,控制邏輯單元會根據線程的任務量和SM內部CUDA運算單元的負載來決定調動多少個CUDA核心進行計算,這一過程完全是動態的。
但不可忽視的是,軟件預解碼雖然大大節約了GPU的晶體管開銷,讓流處理器數量和運算能力大增,但對驅動和游戲優化提出了更高的要求,這種情況伴隨著AMD度過了好多年,現在NVIDIA也要面對相同的問題了,希望他能做得更好一些。
全新的Kepler相比上代的Fermi架構改變了什么,看架構圖就很清楚了:

Fermi GF100/GF110核心架構圖
Kepler GK104核心架構圖
GK104相比GF110,整體架構沒有大的改變,GPU(圖形處理器集群)維持4個,顯存控制器從6個64bit(384bit)減至4個64bit(256bit),總線接口升級至PCIE 3.0。剩下的就是SM方面的改變了:
GF100和GF104的SM架構圖
這里之所以要把GF104這顆中端核心的SM架構圖也列出來,是因為GF104相比高端的GF100核心做了一些細小的改動,這些改動也被沿用到了GK104當中。另外從核心代號上來看,GK104其實就是用來取代GF104的,而取代GF100的核心另有他人。
GK104的SMX架構圖
NVIDIA把GK104的SM(不可分割的流處理器集群)稱為SMX,原因就是暴增的CUDA核心數量。但實際上其結構與上代的SM沒有本質區別,不同的只是各部分單元的數量和比例而已。具體的區別逐個列出來進行對比:

1. NVIDIA現在把流處理器稱為CUDA核心;
2. SFU(Special Function Units,特殊功能單元)是比CUDA核心更強的額外運算單元,可用于執行抽象的指令,例如正弦、余弦、倒數和平方根,圖形插值指令也在SFU上執行;
3. Warp是并行線程調度器,每一個Warp都可以調度SM內部的所有CUDA核心或者SFU;
4. Dispatch Unit是指令分派單元,分則將Warp線程中的指令按照順序和相關性分配給不同的CUDA核心或SFU處理;
5. LD/ST就是載入/存儲單元,可以為每個線程存儲運算源地址與路徑,方便隨時隨地的從緩存或顯存中存取數據;
6. TMU是紋理單元,用來處理紋理和陰影貼圖、屏幕空間環境光遮蔽等圖形后期處理;
通過以上數據對比不難看出,GK104暴力增加CUDA核心數量的同時,SFU和TMU這兩個與圖形或計算息息相關處理單元也同比增加,但是指令分配單元和線程調度器還有載入/存儲單元的占比都減半了。這也就是前文中提到過的削減邏輯控制單元的策略,此時如何保證把指令和線程填滿一個CUDA核心,將是一個難題。
除了CUDA核心數量大增之外,開普勒架構還有個很明顯的改變,那就是CUDA核心的頻率不再是GPU頻率的兩倍,現在整顆GPU所有單元的工作頻率都是相同的,GTX680的默認頻率達到了1GHz!
NVIDIA的上代產品,比如GTX560Ti,一些AIC的超頻版本默認核心頻率可達900MHz,CUDA頻率是1800MHz。按理說如果新一代架構改變不是很大的話,在28nm的幫助下核心頻率到1GHz沒有問題,那CUDA頻率應該可以到2GHz才對。而現在的情況則是CUDA的頻率“被減半了”。
NVIDIA官方對CUDA與核心同頻的解釋是——功耗原因,為了盡可能的控制GTX680的功耗,不再讓CUDA工作在兩倍頻率下。
對于這種解釋,筆者并不理解,如果CUDA頻率真能工作在2GHz下,性能提升兩倍,此時功耗增長兩倍又如何?如此增加功耗是值得的,并不影響GTX680顯卡的“每瓦性能”。
所以,筆者猜測此次CUDA與核心同頻,應該有別的原因,以下猜測純屬虛構,大家隨便看看不要當真:
原因一:此次NVIDIA對SMX的結構進行了大幅度的調整,除了控制邏輯單元削減外,過于密集CUDA單元結構也發生了一些變化,導致CUDA單元或控制邏輯單元上不了更高的頻率,所以現在就和AMD一樣同頻了;
原因二:保留實力。NVIDIA官方發言人在AMD發布HD7970之后曾表示:AMD GCN架構“南方群島”核心的表現并沒有超出NVIDIA的預期,一切盡在掌握之中。而Kepler架構則將比南方群島要強出許多,因為本來NVIDIA為新架構設計的對手是AMD更強的新產品,但實際上南島并未達到NVIDIA的設想性能。
原因三:確實是功耗問題,強行讓CUDA工作在雙倍頻率下對GPU的電路設計提出了很高的要求,28nm新工藝目前可能還尚未完全吃透,上高頻有一定的難度。
雖然CUDA頻率達不到兩倍,但NVIDIA通過加入類似Intel睿頻的技術,一定程度上提高了工作頻率,性能也同比增長,而且高于預期,或者說是對手不如預期。
我們先來回顧一下顯存控制器的發展史:
NVIDIA:G80(384bit)-G92(256bit)-GT200(512bit)-GF100(384bit)
AMD:R600(512bit)-RV670(256bit)-RV770(256bit)-Cypress(256bit)-Cayman(256bit)-Tahiti(384bit)
384bit顯存應該是高端顯卡的標配
● GK104核心為什么只有256bit顯存?
大家應該注意到了,NVIDIA近年來的高端顯卡,很少有256bit顯存的設計,現在就連AMD都升級到384bit顯存,256bit已經很難在躋身為高端,為什么NVIDIA新一代的GTX680居然降級到了256bit?
答案在其核心代號上面,GK104的定位就是取代GF104/GF114,它并非是NVIDIA最高端的GPU,顯存方面自然不會用最高端的配置。
● GTX680顯存頻率彌補位寬不足,首次達到6GHz!
另外,之前我們反復提到過,AMD從HD4870開始第一次使用GDDR5顯存,GDDR5的標準幾乎可以說是AMD的人一手制定的,AMD歷代GPU憑借GDDR5超高頻率的優勢,以較低的顯存位寬很好的控制了成本。

而NVIDIA從GTX480開始也使用了GDDR5顯存,但頻率一直都上不去,GTX400和GTX500系列顯卡的顯存頻率一直在4000MHz上下徘徊。NVIDIA的顯卡在GPU頻率方面超頻能力還不錯,但顯存的超頻空間幾乎沒有,即便有液氮的助力也無濟于事。
現在,隨著開普勒的發布,NVIDIA在顯存頻率上面終于反超AMD,重新設計的顯存控制器突破了頻率的桎梏,瞬間從4000MHz飆升至6000MHz,帶寬提升達50%之多,這個幅度就相當于把256bit免費升級至384bit,顯存帶寬不再是瓶頸了。
最后再來看看開普勒架構在其它方面的改進:
● 多形體引擎2.0:
從GTX480開始,NVIDIA就宣稱只有自己“做對了DX11”,因為GF100核心擁有多達16個多形體引擎,每個多形體引擎內部都有獨立的曲面細分單元,而HD5870整顆Cypress核心只有1個曲面細分單元。通過專項測試來看,GTX480的曲面細分和幾何性能都遙遙領先于HD5870。
AMD方面當然也意識到了孽弱的曲面細分性能是個瓶頸,一方面強調“曲面沒必要分太細”,另一方面也在新一代產品中不斷的加強曲面細分性能。根據AMD官方的說法,HD6870通過雙超線程分配處理器將中等程度的曲面細分性能提高了2倍;HD6970通過雙圖形引擎又提升了2倍;而HD7970則重新設計了曲面細分單元,在所有等級下都可以達到HD6970的4倍!最終HD7970的曲面細分能力相比HD5870提升了10倍左右!
在AMD不斷更新架構的同時,NVIDIA的DX11 GPU沒有變化(GF110和GF100是一樣的),顯然HD7970的曲面細分性能已經超越了GTX580。這次該NVIDIA著急了。
在開普勒架構中,我們看到了多形體引擎2.0版,結構上沒有什么變化,但處理能力翻倍了。NVIDIA稱,Kepler的多形體引擎在同頻率下的性能是Fermi的兩倍,而且新引擎在重度曲面細分情況下的效率更高,性能損失更小。
DX11理論曲面性能性能測試,橫軸為細分級別
值得注意的是,GK104只有8個多形體引擎,而GF110有16個多形體引擎,但最終GTX680的曲面細分性能比GTX580還要強,看來單個引擎的效能確實翻倍了,超出那部分的性能應該是高達1GHz頻率的貢獻。
可以看出,NVIDIA的曲面細分單元在重度細分模式下的效率更好一些,低級別模式下HD7970并不差還略占優勢,但級別越高差距就越大。根據目前DX11游戲的發展趨勢來看,“曲面沒必要分太細”的說法已經過時,不然AMD也就成倍的增加曲面細分性能了,未來的DX11游戲會加入高精度曲面細分引擎,屆時N卡的優勢會得到體現。
● 更快的高速緩存:
GK104的緩存設計與GF100沒有區別,都是一級緩存、一級紋理緩存、二級緩存這樣的層級設計,而且緩存容量的配比也沒有變化,但因為模塊化設計的關系,總容量有所減少。
緩存架構讓各流水線之間可以高效地通信,減少了顯存讀寫操作
GK104的每個SMX當中配有64KB的Shared Memory/L1,GK104總共擁有8個SMX,所以一級緩存的總容量是512KB。
GK104的每個光柵單元/64bit顯存控制器配有128KB的L2,GK104總共有4個64bit顯存控制器,所以二級緩存的總容量也是512KB。
與GF100的1MB一級緩存、768KB的二級緩存相比,GK104的緩存容量確實小了很多,這個可以通過芯片透視圖明顯的看出。
雖然緩存容量變小了,但速度快了很多,NVIDIA強調GK104的L2帶寬比GF110增加了73%,其中改進的算法提高了30%的緩存命中率,另外的43%則是得益于高達1GHz的核心頻率。此外,原子操作的吞吐量也大增3.5倍,尤其是單一共享地址的原子操作可提升11.7倍之多!
● 更多的紋理單元:
GK104的每個SMX內部擁有16個紋理單元,8個SMX總計128個紋理單元;GF110的每個SM內部擁有4個紋理單元,16個SM總計64個紋理單元;可以看出GK104這次大幅增加CUDA核心數量的同時,也沒有忘記紋理單元。
除了數量翻倍之外,紋理存取的限制也放開了,以前因為DX11 API的限制,GPU最多只能對128個紋理進行操作,而現在GK104可以使用超過100萬像素的紋理貼圖,而且可以并行的對多個紋理同時操作,在使用超大紋理時的CPU占用率大幅下降。但由于微軟DirectX API的限制,目前GK104的這些特性還只能在OpenGL API中體現,未來版本的DirectX可能會加入支持。
長篇大論的分析相信大家看得都很累,最后我們將Tahiti與GK104這兩顆GPU的所有規格都列出來,進行全方位的對比:

下面就通過數據分析一下架構的特性:
1. GK104的晶體管數比GF110減少了,但流處理器數量達到了三倍,NVIDIA改進架構、提高浮點運算的努力效果顯著。但是,同為1536個流處理器,GK104的晶體管數要遠大于Cayman核心,這就證明了SIMT還是要比SIMD更消耗晶體管;
2. GTX680的核心與顯存頻率都創新高,但是TDP卻不到200W,這都要歸功于它小核心的設計、以及不再使用雙倍CUDA頻率的作法,NVIDIA控制功耗的作法成效顯著;
3. Tahiti的晶體管數是GK104的1.22倍,流處理器數量是1.33倍,這兩個數字差距不是很大,N/A雙方自DX10時代以來頭一次達到了相似的晶體管利用率;
4. 從Cayman到Tahiti,AMD用了1.63倍的晶體管數才讓流處理器數量達到了原來的1.33倍;從GF110到GK104,NVIDIA減少了晶體管數量卻讓流處理器達到原來的三倍;可以看出雙方都在向對方的架構靠攏,目的只有一個,就是提高GPU的運算效能;
通過之前的測試數據來看,AMD的GCN架構相比上代確實提高了GPU的效能。而NVIDIA方面,通過我們的測試來看,GTX680的性能也是遠超GTX580。
在核心面積、晶體管數量、功耗、流處理器數量、顯存容量、顯存位寬得各方面都不占優勢(唯一的優勢就是頻率)的情況下,GTX680的綜合性能能夠超越HD7970,Kepler與南方群島的架構孰優孰劣,相信大家已經心里有數了。
GTX680詳細的評測,請看《開普勒秒殺GCN!新卡皇GTX680首發評測》■<
關注我們


