高階卡只要雙 6pin?是的,你沒看錯。GTX 680 頂著 28nm 光環,電力效率大幅提升。Kepler 是不是 Fermi 3.0?能否打爆雙核卡? NVIDIA 新任卡王完全解析,看下去就知道。
今年GPU相當有看頭,不論是早先AMD推出的GCN(Graphics Core Next)架構,或是NVIDIA前一陣子發表的Kepler(克卜勒)核心,在效能、功耗與新技術方面,都令人感到驚艷。
這得歸功於新製程加持,透過28nm製程,Kepler這次能大量堆疊CUDA Core(即為Stream Processor,串流處理器),總量達到1536個,是Fermi時期的3倍,電力效率可達原本的2倍。加上TXAA、GPU Boost與Adaptive VSync(自適性垂直同步)等技術,讓Kepler相當值得期待。
若要說今年 AMD 與 NVIDIA 的最大改變,筆者認為是使用28nm新製程。過去從65nm升級55nm,或是從55nm跨到40nm,效能與功耗上都有相當大的進步。更換製程所帶來的影響不下於修改架構,因此這次NVIDIA即便沒有大幅修改架構,但憑藉著28nm與新增的多項技術,仍有相當大的可看性。
最明顯的差異就是電力效率大幅提升,單位耗電量所帶來的效能比之前高了1~2倍,這點不論在AMD或NVIDIA的官方文件內都有刻意強調。且製程精進之後,同樣的核心面積可塞下更多的電晶體。從Kepler上可看到,在架構沒有大幅修正的前提下,我們可將GF 100與GK 104的CUDA Core視為相似的設計。CUDA Core數量從GF 100時期的512個提升到GK 104的1536個,足足變成3倍,透過核心堆疊自然可讓效能大幅提升。
▲假設Fermi與Kepler在相同環境中,Fermi的Shader時脈為Kepler的2倍,而Kepler的CUDA Core數量是Fermi的2倍,可得到右方的結果。從理論上而言,Kepler核心面積約為Fermi的1.8倍,但是運算相同的資料量,電力只需要耗費Fermi的90%。若從運算方面分析,單位面積下Kepler只需要Fermi約50%的功耗就能完成相同的運算。
Keywords:製程
製程(Manufacture Process)指的是半導體的製作工藝,一般所指的28nm等長度單位,是用於表示半導體內讓電子通過的電晶體管寬度。當製程精進時,能讓電晶體管的寬度縮減,單位面積內可容納更多的電晶體。但製程仍有其極限,不可能無限縮小。矽原子半徑約為0.111nm(奈米),製程再精進也難以突破這個物理限制,加上漏電與量子穿隧效應等問題,這幾年內可能就會碰到瓶頸。
依照慣例NVIDIA近期的開發代號都以科學家為主,前兩代是Fermi,而這次換成了德國天文學家Kepler,核心型號亦從原本的GF(GeForce Fermi)改為GK(GeForce Kepler)。如果你期待在Kepler身上,看到AMD GCN架構那樣大刀闊斧的改造,Kepler可能要會讓你失望。Kepler仍是Fermi架構的延伸與最佳化,透過新製程擴充CUDA Core的數量,基礎架構與Fermi相當神似。
▲效能強化,規模略增:SMX是Kepler的基礎架構,核心為8個SMX所組成。從架構圖來看,設計與Fermi的SM相當,差異在於CUDA Core數量從32個增加到192個,且為了強化指令調派,內建4組Warp Scheduler,數量是Fermi核心的2倍。Raster Engine(光柵引擎),則是2個SMX共用1組,也就是每個GPC(Graphics Processing Cluster)內建1組,核心內的總數與前代相同。
從架構面來看,Kepler最明顯的改變就是SM(Stream Multiprocessor)內CUDA Core數量從32個變成192個,名稱則改為SMX。其中X所代表的意思,就官方的說法概念類似「Extreme」,故用SMX代表強化過的SM單元。除了CUDA Core數量增加外,另外SFU(Special Function Unit,特殊運算單元)的數量也大幅增加。原本每個SM內只有4個SFU,現在則大幅增加到32個。SFU的作用是負責處理三角函數、指數運算等工作,因此可預期Kepler理論運算效能將超越Fermi。
這次的SMX是NVIDIA第四代設計,早期G70仍使用VS(Vertex Shader,頂點著色引擎)與PS(Pixel Shader,像素著色引擎),此時採用的是4D向量架構。到了G80之後,由於DirectX 10在API內提供了Unified Shader(統一著色引擎、統一著色器),整合了VS與PS,這也就是後來的Stream Processor(後來NVIDIA又將其改名為CUDA Core)。G80時將CUDA Core、材質過濾單元、材質存取、暫存區等組成SM單元,這就是第一代SM架構。
G92承襲G80架構,兩者都被歸類在第一代SM,第二代則是GT 200核心,此時SM架構仍不算大幅改變。直到Fermi,GF 100與GF 110核心在SM內加入更多硬體架構,像是PolyMorph Engine(多形體引擎),此為第三代SM架構。現在Kepler的SMX架構中,仍具備PolyMorph Engine與Raster Engine,SMX與SM最大的差異仍在於CUDA Core數量、Warp Scheduler(Warp排程器)等單元數量,簡單來說就是內容增加、效率提升但是沒有新加料。
除了SMX架構修改之外,Kepler內在最大的改變就是取消以往核心、Shader的分頻機制。以前在G71時代開始嘗試Shader分頻技術,當時Shader時脈僅比核心時脈(Core Clock)高出數十MHz,直到G80才徹底近入分頻時代,到了GT 200之後,核心與Shader時脈才將時脈比例固定為1:2。
▲這張圖片代表了Fermi與Kepler在指令調度上的差異,以往Fermi偏重硬體式調度,而Kepler則偏重軟體。軟硬體調度各有其優缺點,並不會完全採用硬體或軟體,只是比重上的增減。軟體調度上比硬體更為靈活,因此在Kepler上NVIDIA選擇較高的比重以軟體執行。
分頻設計對於當時的NVIDIA好處是很明顯的,能夠以較少的運算資源換取大量的吞吐量,搭配Co-Issue技術,讓NVIDIA保住Shader運算量的底限。以至於G80甚至後期的GF110,都能用較少的CUDA Core數量來取得運算上的抗衡能力。節省出來的電晶體,更可用來配置其他硬體單元,這些都是分頻所帶來的效益。
Shader分頻這麼好,幹麻要放棄?分頻好歸好,但是仍是雙面刃。最主要的因素是分頻後的Shader時脈過高,會提早壓迫到核心與技術所能承受的時脈上限,讓GPU的溫度與發展都受到限制。以實際上來說,會造成核心發熱量不均,會影響其他硬體的效能。並迫使其他硬體單元以較低的時脈運作,破壞了整個GPU運算流水線的平衡。因此Kepler回歸同頻機制,也讓Kepler有較大的時脈提升空間,把核心時脈一舉推到1006MHz。
(後面還有:Kepler:2倍速的運算架構)
GeForce GTX 690 地表最快顯卡,基礎性能測試搶先報
NVIDIA GeForce GTX 670 解禁實測:誰說高階卡一定要30cm?
GIGABYTE GV-N680OC-2GD:GTX 680 顯卡、預設就有超頻
先前提到,受到新製程的影響,Kepler核心能塞下更多的硬體單元,並且電力效率能表現更好。雖說大多數的設計與Fermi差異不大,但是我們還是來看看Kepler跟Fermi的幾個關鍵架構如何運作。
PolyMorph Engine也就是多形體引擎,是NVIDIA在Fermi架構中新增的硬體單元。在Kepler架構中,PolyMorph Engine雖然進化到2.0版本,但是數量、作用、架構都與先前無異,而在效率方面,官方數據指出將會有2倍的效能。筆者認為這跟GF 100、GF 110的情況相似,更改或修正的部分是較為底層的設計,也就是當時官方所謂「電晶體層面的修正」,因此會有效能上的提升,而無架構方面的改變。
PolyMorph Engine的作用是什麼?它包含Vertex Fetch(頂點預取)、Tessellator(Tessellation產生器)、Viewport Transform(視口轉換)、Attribute Setup(屬性建立)與Stream Output(數據流輸出)共5個階段。
▲Kepler與Fermi架構相當相似,最大的差異在於SMX架構大幅擴增,且支援PCI-E 3.0控制器。至於在SMX內,像是PolyMorph Engine升級到2.0版,不過就算是官方也只有表示電力效率有所提升。筆者認為,Kepler的價值反而是GPU Boost、Adaptive VSync等新功能,比起效能更值得期待。
PolyMorph Engine的運作首先從緩衝區預取頂點,在SM內進行頂點跟像素運算,並在這個階段計算Tessellation的參數。接著第二步是透過Tessellator輸出新的頂點,而先前提到的Tessellation參數就是用於確認Tessellation的強度,強度越高頂點越多,所形成的圖形表面也就越逼真。
第二步中的頂點確認後會傳送給Domain Shader(區域著色引擎,簡稱DS)跟Geometry Shader(幾何著色引擎,簡稱GS)進行運算。DS將根據Hull Shader(外殼著色引擎,簡稱HS)加上Tessellator給予的數據,生成最終的3D模組頂點。這個階段完成後,通常還會透過Displacement Mapping(位移貼圖),讓Tessellation生成的圖形表面不會只有平面與稜角,白話來說就是更有立體感跟凹凸感。
再來第三步就是Viewport Transform字面上的視口轉換以及視角校正,完成後則是Attribute Setup,會將這些頂點屬性轉換為方程式,最後Stream Output則是將這些數據傳送到記憶體內,接著讓Raster Engine來處理。
▲PolyMorph Engine包括5個運算階段,每個階段完畢都會由SM內的單元進行運算,完畢後再傳回PolyMorph Engine,所有階段都完畢後,轉給Raster Engine處理下一步。
關鍵字:Tessellation
Tessellation原意是鑲嵌,大多翻譯為細分曲面(subdivision surface)、平面填充或密鋪。在支援DirectX 11的顯卡上,因為Tessellator而具備「無中生有」的能力,可讓原本的3D模組產生更多三角形。用白話來說就是一種讓多邊形細分為碎片的方法,藉此獲得更細緻的物體表面。
以往的3D模組,若使用大量多邊形,會增加程式設計的時間,並消耗顯卡效能;若使用的多邊形數量不夠,又會讓模組看起來稜稜角角,感覺會假假的。透過Tessellation技術,GPU能自行生成更多的三角形來填滿原先的框架,就像讓原先的模組貼了細緻的表皮。
▲以圖中的海浪為例,設計時只要先做出果凍般的框架,使用時只要開啟Tessellation,GPU就會自行生成多邊形,讓海洋的浪濤跟陰影顯現出來。不過光只有Tessellation仍不足夠,再配合Displacement Mapping效果會更好。
由於PolyMorph Engine的加入,尤其是距離3D模組十分近的時候,Tessellator無中生有了許多三角形。為了避免Raster成為效能上的瓶頸,於是每個GPC都內建1組Raster Engine,且這4組Raster Engine可平行運算,能提高運算效率。那麼Raster Engine的工作到底是什麼?用最簡單的話來說,就是「把3D世界變成2D影像」,更直觀地來說就像是拍照。不過Kepler的Raster Engine數量並沒有增加,會不會造成運算上的瓶頸?還要經過測試才知道。
Tips:3D與透視技法
Raster Engine的工作是透過方程式,將3D頂點座標變換成2D頂點座標,成為沒有Z軸的影像。這過程類似西方寫實派繪畫的透視技法,讓你即使在2D螢幕前面,也能保有有3D的立體感。不過Raster Engine處理的這個過程更具破壞性,有些人會將這個3D轉2D這過程賦予另外一個名詞,也就是Transform。
PolyMorph Engine運算完畢後,數據接著由Raster Engine處理。Raster Engine只有3個階段,分別是Edge Setup(邊緣建立)、Rasterizer(光柵器)和Z-Cull(Z座標剔除)。Raster Engine運作方式不難理解,首先在Edge Setup階段,頂點位置被取出,並處理三角形邊緣。最重要的是,在這個階段中,必須要將視角中看不到、不需要再視角顯示的頂點與三角形剔除。
例如在大象背面有隻看不到的老鼠,雖然在3D空間中它是存在的,但是受到視角的限制,老鼠在2D螢幕中並不存在。因此可省略運算老鼠的模組,以提升運算效率。每個Edge Setup單元,能夠在1個周期內處理1個點、1條線,或是1個三角形。
接著在Rasterizer運作的過程中,會計算每個方程式的像素覆蓋率,如果開啟反鋸齒功能,則會在這個階段計算覆蓋率以進行反鋸齒採樣。最後在著色之前,Z-Cull會擷取Pixel Tile(像素磚),將已經運算完畢的Pixel Tile與處理中的Pixel Tile進行空間深度比對,將位於其他Pixel Tile背面的Pixel Tile刪除(也就是螢幕中不可見的部分),避免進入著色器浪費運算效能。
▲我們從當年Fermi的平行運算圖來看,大量核心配合Giga Thread快速轉換執行緒,運算效率高於一般多核心電腦。即使到了Kepler時期,這個方向與架構仍未有改變,而且透過部署更多的核心,運算效率可望向上提升。
CUDA Core會接受來自Warp Scheduler的命令,以便執行某個執行緒(Thread)。在SMX中,共有4組Warp Scheduler與192個CUDA Core,一次最多可執行192個執行緒,而這192個被挑到的執行緒就叫做Warp。
而Warp Scheduler的作用顧名思義就是進行Warp排程,能按照每個Warp可能佔用的資源進行排程並最佳化,避免造成核心資源的閒置或阻塞。舉例來說,SMX內有32個SFU,此時有個執行緒需要使用SFU進行運算,為了避免阻塞所以它不會被排入下一道指令,Warp Scheduler會先行處理順位較後面,且不需要透過SFU運算的執行緒。
先前在Fermi時代,最多可同時執行512個執行緒,到了Kepler時代,因為CUDA Core數量增加,同時間最多會有1536個執行緒。這個數量聽起來說多不多,說少也不少,但是處理排程不會這麼簡單,即便是Fermi核心只需處理512個執行緒,但是在平行運算時,使用者可能預先開了上百萬個執行緒在等待,例如在跑Folding@home。
▲Raster Engine所要處理的就是這3個階段,用比較簡單的話來說明,就是把3D變2D,然後把被遮蔽的物件剔除,以減少資源的消耗。
GPU內的核心幾乎永遠都有新的工作,而不會閒置,但是在執行緒與執行緒間是否能快速切換就是影響效能的關鍵,而這快速切換的關鍵就是Giga Thread Engine。GPU在平行運算方面的另一個優勢,就是執行緒間的切換較快。一般CPU切換執行緒約需數百微秒,但是在Giga Thread Engine運作下,GPU轉換執行緒只要25微秒,對於大量執行緒的切換而言,這點「小小」的時間差會造成明顯的效能差距。
Keywords:Displacement Mapping
Displacement Mapping(位移貼圖)可儲存紋理的高度資訊,當應用於平面時,此技術可以讓平面中的頂點,依照高度資訊向上或向下位移。簡單來說,想把平面的石板雕刻出峽谷般的紋理,透過Displacement Mapping就能位移石板上的頂點,藉由頂點的移動塑造出峽谷。
這技術存在已久,但是到了DirectX 11才開始普及,原因在於Displacement Mapping需要大量的頂點才能發揮作用。例如上述的石板若只有10個頂點,自然無法形成理想的的峽谷。只有具備大量的頂點,才能夠成細緻的貼圖。以實務上來說,透過Tessllation生成的大量頂點,才能造出細緻的貼圖。
(後面還有:Kepler:4大軟硬體新技術)
看完架構可能有些讀者會有些失望,這不是跟Fermi差不多嗎?平心而論,Fermi歷經GF 100與GF 110的磨練已經相當成熟,且在GPGPU運算上仍勝AMD一籌,實在沒有更換架構的需要。因此Kepler延續Fermi的多數設計,也是意料中的情況。不過在架構之外,NVIDIA也新增了軟硬體方面的新技術,尤其是GPU Boost、Adaptive VSync都是很簡單的概念,但是帶來的效益卻十分明顯,也是Kepler的另一個亮點。
Kepler新增4個新技術,其中GPU Boost從字面上來看,不難看出是GPU超頻的功能。其實說穿了就是Intel用的Turbo Boost,或是AMD的Turbo Core技術,只是角色從CPU換到了GPU。GPU Boost可在GPU負載與功耗較低時,開啟自動超頻功能。
GTX 680具備Base Clock(基本時脈)與Boost Clock(提升時脈),前者是任何遊戲或軟體都能達到的時脈,在GTX 680上則是1006MHz。後者則是所謂自動超頻時脈,得視運作環境的功耗與負載而定,而且不提供任何時脈上的保證,白話來說就是不保超。若Power Target(目標功耗)較高,則有較大的自動超頻空間,反之則會維持Base Clock。
那GPU Boost是硬體還是軟體控制?官方曾說:「GPU Boost is not based on profile」,這表明了GPU Boost並非只是透過設定檔自動超頻。更精確地說,GPU Boost是透過PCB的監控晶片分析供電狀態,並決定是否應該提升核心時脈。這部分是採用硬體架構,即使不裝額外的監控軟體也能支援。但是受限於監控晶片,因此無法透過驅動或BIOS升級讓舊卡支援GPU Boost,且無法強制關閉,是比較可惜之處。
其次,GPU Boost也能透過軟體控制,像是EVGA推出的PrecisionX,就能調整Power Target的數值,藉此提升Boost Clock。在Power Target設定中,預設是100%,代表官方預設的175W耗電量。透過軟體最高可提升到132%,也就是約225W,這個數值代表PCI-E與2個6pin電源所能提供的最高電量,若不修改供電模組最大上限就是132%、225W。
在不同的環境下,時脈與電壓會隨負載動態變化而非定值。若提高Power Target設定,就能增加時脈的超頻空間。不過Boost Clock並非絕對值,官方無法給予保證能提升的數值,以編輯部測試而言,最高會提升到1110MHz。
▲GPU Boost實戰:閒置時脈(Idle Clock)
▲GPU Boost實戰:基本時脈(Base Clock)
▲GPU Boost實戰:提升時脈(Boost Clock)
TDP在NVIDIA官方定義中指的是Thermal Design Power,也就是熱設計功耗。是指GPU在最高負載中所發出的「熱」,單位是W。有些人認為Kepler的GPU Boost的超頻數值是基於TDP而定,但是向官方求證後的結果,並非如此,GPU Boost主要取決於供電量(Power Target)的多寡,而非TDP。
那GPU Boost到底能超到多少?在預設情況下,對於電力負載在70~90%左右的遊戲,時脈大多能提升到1110MHz,提升幅度約為11%。以自動超頻的幅度來說,算是相當高。
關鍵字:TDP
TDP是Thermal Design Power,也就是熱設計功耗的縮寫。用於表示GPU在最高負載下所產生的熱能,計算單位跟功耗相同都是W(瓦特,每秒產生1焦耳能量)。TDP目的在於給予散熱器廠商核心最高發熱的參考數值,用於設計適合該核心的散熱器。由於採用W做為計算單位,很多人會將TDP與耗電量混淆,這2個數值實際上定義不同,不能將TDP視為耗電量。
第二個有趣的功能是Adaptive VSync(自適性垂直同步),這也是個很簡單的概念,但是卻能達到不錯的效果。以往開啟垂直同步為的是避免螢幕撕裂(Tearing),但是開啟後若碰到某些負載增加的場景,又會讓螢幕從60幀瞬間掉到30幀,造成畫面明顯的停頓。
Adaptive VSync主要的功能,就是減緩這停頓(老外稱之為Stutter,也就是口吃)的情況。相信很多人都有這樣的經驗,當場景從極遠處快速拉到極近處,在某個點FPS會大幅滑落,透過這種方式就能減緩這頓挫感。實作的方式也很簡單,就是當FPS低於60時,GPU會快速關閉垂直同步功能,讓FPS瞬間提升用以抵銷Stutter帶來的FPS衰減。當FPS到60時,就再度開啟垂直同步功能,避免發生影像撕裂。
從這張曲線比較複雜的那張圖看起,藍綠色代表關閉垂直同步的FPS表現,可看到曲線雖然有高低起伏,但是曲線仍算平順。以人的視覺來說,感覺不太出來FPS的改變。而黃色的水平與垂直線,則是代表開啟垂直同步的FPS表現,當影像中突然有大量頂點需要運算時,就會發生FPS大幅衰減的情況,也就是圖片中紅色的Stutter區塊。
Adaptive VSync後能擷取兩者的優點,若FPS高於60幀則開啟垂直同步,避免GPU提供過量的影像造成撕裂(Tearing)。若FPS低於60幀,則會關閉垂直同步,提高GPU運算量,降低Stutter造成的影像停頓。
關鍵字:垂直同步(Vertical Synchronization)
LCD的每個影像都是由掃瞄線垂直、水平掃瞄組成,其中垂直訊號是指從螢幕頂端掃到底端。性能過強的GPU會無限制地繪製影像,送到螢幕中等待顯示,當開啟垂直同步後,掃瞄線到達底端時,才會通知GPU可以繪製下一張圖片。若沒有垂直同步,GPU提供影像的速率高於螢幕更新率,會造成影像撕裂(Tearing),簡單來說就是前面的圖還沒貼完,下一張就來了。在圖片與圖片之間,就會造成影像的斷層,開啟垂直同步能避免這個問題。(圖片來源:Wikipedia)
反鋸齒(Anti-Aliasing,簡稱AA)一直是高階顯卡的重要課題,雖然FXAA(Fast Approximate Anti-Aliasing)才沒出現多久,現在又來了新的TXAA讓人有些摸不著頭緒。TXAA是MSAA的強化版本,共有TXAA 1與TXAA 2等級可選,TXAA 2的反鋸齒效果高於TXAA 1。
若與MSAA相比,不論TXAA 1或TXAA 2反鋸齒品質都比8倍MSAA高。且TXAA 1只有2倍MSAA的效能衰減幅度,而TXAA 2只有4倍MSAA的效能衰減。簡單來說,TXAA比先前的MSAA效果更好,而且對於效能的耗損也更低。
TXAA得要遊戲支援才能開啟,目前預計有EPIC、Unreal Technology、Crytek等廠商預計支援該技術。至於在先前的FXAA部分,已經將功能內建於NVIDIA控制面板內,即使遊戲不支援一樣能強制開啟FXAA,且還能搭配其餘反鋸齒技術執行。
3D模組中只要不是水平或垂直線就會產生鋸齒,而以往常用的MSAA(Multisample Anti-Aliasing,多重採樣反鋸齒)過於耗費效能。現在TXAA表現高於8倍MSAA,又只要4倍或2倍MSAA的效能,只要遊戲廠商肯買單,勢必會成為未來趨勢之一。圖中可看到,TXAA的細節表現略高於8倍MSAA,與未開啟之前差距也很明顯。
以往Fermi最令玩家詬病的就是無法單卡三螢幕輸出,Kepler徹底解決了這個問題,最高可支援4螢幕輸出,且能搭配3D Vision Surround技術,建構立體多螢幕。此外,以往延伸桌面中,被螢幕邊框遮蔽的部分,能透過驅動程式進行邊框校正(Bezel Correction),讓多螢幕遊戲時的影像更完整。
Kepler首發型號雖然是GTX 680,但是核心代號卻是GK 104而非GK 100或GK 110。或許有人會說這是NVIDIA的障眼法,故意混淆視聽。筆者認為,GK 104的設計與定位應該更適合用在GTX 670身上,Kepler最高階核心不應該是GK 104,因為它表現出太多餘力,沒有以往高階核心逼極限效能的感覺。
28nm製程讓核心溫度低、耗電量少、效能也不錯,有不少提升的空間。至少就目前GTX 680的表現來看,除了價位見仁見智之外,堪稱完美的頂級卡,沒有明顯的缺點可挑,可見核心的效能還沒被完全壓榨出來。我們可以期待不久之後,可能會有更高階的GTX 685或是雙核心GTX 690。