2012年8月14日 星期二

認識 GTX 690 雙核巨獸架構篇:單卡雙核介紹、多重GPU的7種運算模式

source: T客邦 tandee 發表於 2012年8月13日 08:00 http://www.techbang.com/posts/10358-under-the-single-pcb-dual-gpu-how-do-multi-gpu-run-7-read-operation-mode-computer-king-95-issues-cover-story-part-1

270d6269520c0130d9376e48a2a54a9d要撐高效能,最快的方法就是「堆疊」。不論是堆疊SP(Stream Processor,串流處理器),或是堆疊GPU(Graphics Processing Unit,圖形處理器、繪圖處理器)都能達到快速提升效能的結果。而GTX 690就是用內部SLI的方式,嵌2個GPU在顯卡上,藉此提升運算效能,而未來AMD即將推出的HD 7990也是使用相同設計。

完全看懂GTX690

  • 認識 GTX 690 雙核巨獸:架構篇
  • 認識 GTX 690 雙核巨獸:效能篇(敬請期待)

快速目錄:

單卡雙核12年前就有

早在1998年,3dfx就曾讓PCI介面的Voodoo 2(巫毒卡)支援SLI,是世界上第一張能「串連」的遊戲卡。到了AGP時代之後,由於主機板只有1條AGP介面,無法繼續透過SLI串連。此時3dfx有個異想天開的想法,在PCB(Printed Circuit Board,印刷電路板)焊上2個GPU,用內部SLI的方式增加效能,而這張卡就是3dfx在2000年推出的末代產品Voodoo 5 5500。
只用2個GPU似乎還不夠,當初還設計出採用四核心架構的Voodoo 5 6000,不過同年3dfx就被NVIDIA收購,而這張Voodoo 5 6000自然也就無疾而終。據稱目前全世界只剩下約50張工程版Voodoo 5 6000,這也成為硬體收藏家的夢幻逸品,SLI直到PCI-E介面出現後,NVIDIA才讓它重新登上舞台,此時的代表顯卡是GeForce 6800 Ultra。

關鍵字:SLI

SLI是Scalable Link Interface的縮寫,中文為可擴充連接介面,用於連接2張以上的顯示卡,藉此提升運算效能。該技術最早是由3dfx研發,最初使用於PCI介面的Voodoo 2。AGP介面推出後,受限於主機板介面數量,發展性大受限制。2004年PCI-E推出後,SLI才重回顯示卡市場。

雙核心就是1+1

同樣是雙核心,顯卡跟處理器的設計方式就不太相同,前者是2個獨立GPU,經過SLI或CrossFire等串連方式協同運算;後者則是1個CPU內包括2個運算核心,透過指令分派達到增加運算的目的。概念上來說類似,但是設計方式並不相同,最明顯的差異就是顯卡有2個晶片,而現在的處理器只會有1個晶片。GTX 690就類似Intel第一代的雙核心處理器Core 2 Quad Q6600,用2顆Core 2 Duo E6600構成一樣,只不過GTX 690的die size(核心面積)與PCB大一點罷了。

單PCB成主流

從硬體設計來說,雙核心顯卡有幾個發展階段,約略在GeForce 7900GX2、7950GX2、9800GX2與GTX 295那段時期,受限於散熱器解熱能力以及GPU發熱量,此時期NVIDIA採用雙PCB設計。最初像7900GX2、7950GX2,是採用雙PCB雙散熱架構,簡單來說就是主卡與從卡(輸出影像者為主卡)都有獨立的散熱器。優點是設計簡單,只要將2張高階卡稍作修改就能製成所謂雙核心顯卡。
而到了9800GX2與GTX 295時期,散熱器有能力同時負荷2個GPU的廢熱,且為了美觀著想,因此這時期的雙核顯卡就像漢堡一樣,用麵包(PCB)把牛肉(散熱器)夾起來。
近幾年由於GPU發熱量降低,加上均熱板(Vapor Chamber)等散熱技術加持,因此單片PCB上焊上2個GPU也沒問題,就像最初的Voodoo 5一樣,只用單PCB搭配均熱板散熱器就能運作。GTX 690也是採用單PCB設計,GPU、供電模組、記憶體顆粒呈現對稱排列,與GTX 590相比架構差異不大。

新款PLX橋接晶片

由於採對稱排列,因此GPU位於PCB左右兩側,比較特別的地方是中央有個橋接晶片,用以橋接2個GPU與PCI-E介面。此晶片採用支援PCI-E 3.0的PLX PEX 8747,而非GTX 590時期的NVIDIA NF200(亦即BR04)。PEX 8747共有48條PCI-E通道,最多可拆分5個傳輸埠(Port)。在GTX 690上,PEX 8747是以3個傳輸埠,每個傳輸埠16條PCI-E通道的模式運作。
由於GTX 600系列與Ivy Bridge開始支援PCI-E 3.0,讓PCI-E 3.0逐漸成為標準配備。先前NF200只支援PCI-E 2.0,因此改用支援PCI-E 3.0的橋接晶片,藉此達到新介面應有的速度與頻寬。這顆晶片也將被用於Z77主機板,用以擴增PCI-E 3.0不足的通道數量。

PCI-E 2.0頻寬就夠

或許有人會問,如果在PCI-E 2.0的主機板上,跑GTX 690這類PCI-E 3.0又是雙核心的顯卡,PCI-E 2.0頻寬是否會過於吃緊?根據先前GTX 680與HD 7970的測試,可發現PCI-E 2.0與PCI-E 3.0頻寬並不影響效能表現。也就是說,高階單核卡無法到達PCI-E 2.0頻寬上限,用PCI-E 3.0並不會比較強。
在PCI-E 2.0環境測試,GTX 690效能為GTX 680的110~180%不等,可看出GTX 690並未出現效能瓶頸,可推測PCI-E 2.0頻寬足以使用,否則應該會讓效能「卡」在某個數值,而無法達到接近180%的效能表現。
若玩家使用Z77、X79之前的PCI-E 2.0主機板,想要換上GTX 690可以不用猶豫,PCI-E 2.0頻寬仍夠使用,效能不會比較差。不算缺點的缺點就是,PCI-E 2.0的爽度比較低,而且即將淘汰。
先前許多人猜測GTX 690會使用GK 110核心,後來事實證明使用的仍是降頻的GK 104。而傳說中的GK 110,則是意外在GTC 2012(GPU Technology Conference)出現。GK 110具備15組SMX核心,應該會應用在下一代也就是GTX 800系列上,官方則表示實際產品SMX則可能會是13~14組。由於TDP等限制,有些人猜測GK 110原生架構可能是16組SMX,情況與GF 100、GF 110相似。GK 110共計有2880個CUDA Core,若在架構未修改、時脈相等的情況下,最佳理論效能可能達到GK 104的187.5%。

3dfx

3dfx Interactive在1994年成立,主要產品是顯示卡與GPU,全盛時期是1996年,是當時顯卡市場的霸主。1998年後受到產品推出時程延宕、與SEGA、微軟合作破裂等影響,財務狀況逐漸走下坡。最後在2000年被NVIDIA收購,其中SLI與Voodoo卡堪稱顯卡發展史上重要里程碑。
▲Voodoo是3dfx最具代表性的產品,也就是俗稱的巫毒卡,Voodoo共計有5代,以及Voodoo Rush等產品。其中Voodoo 5為多晶片設計,Voodoo 5 5500為雙核心設計,Voodoo 5 6000則是四核心,圖即為Voodoo 5 6000。

橋接晶片

橋接晶片的類型很多,像是早期用於PCI-E轉AGP訊號的NVIDIA HSI-A4也是其中之一。雙核心顯卡的橋接晶片主要用於溝通GPU與PCI-E,才能達到單卡SLI的效果,該圖為HD 4670的PCI-E轉AGP橋接晶片。


多重GPU的7種運算模式

不論AMDNVIDIA,做出顯卡只算完成了一半,最重要的是讓2個甚至更多的GPU協同運算,而且繪圖不會出錯才是關鍵。多重GPU技術發展至今超過10年,不過受限於價格,應用面與技術面成長相對有限。

顯卡有分主從卡

多重GPU技術種類相當多,應用於遊戲領域的大約3~4種,另外還有數種較冷門的運算方式,整理了7種運算方式,來看看多重GPU到底為什麼強?是怎麼整合訊號?
不論何種運算模式,都不離指令分配範疇,差異只是在於「怎麼分」跟「分什麼」。假設以2張顯卡來說,連接螢幕用於影像輸出的是「主卡」,而另一張則是「從卡」。運作時各GPU會獨自處理收到的指令,處理完畢後將儲存影像資訊的Framebuffer複製到主卡上,由主卡將訊號傳遞出去。由於複製、傳遞這個過程會產生延遲,加上部分運算模式的天生缺陷,造成多重GPU容易發生Micro Stuttering現象。

AFR的Micro Stuttering障礙

為什麼只有AFR會造成Micro Stuttering現象?主因是指令與訊號傳遞延遲。AFR採用Frame交替運算,從卡(GPU B)運算完畢後需將資料傳遞回GPU A進行整合再輸出,指令從GPU A傳給GPU B會造成延遲(假設2ms),而GPU B傳給GPU A又會出現,因此會發現Frame 1到Frame 2時間很長,而Frame 2到Frame 3卻又很短,這就是Micro Stuttering。
假設單GPU運算下Frame間距為20ms,而雙GPU在AFR環境下卻有可能是間距18ms與6ms。以效能論,AFR每個Frame間距較短,單位時間的幀數會比較高,效能自然表現比較好。
Micro Stuttering會造成2個嚴重的問題,首先是Frame間距不同,對於人類而言,眼睛容易注意到表現差的部分,也就是18ms的那段。原本20ms的間距變成18ms,對人類感覺而言可能只有提升10%效能,但是FPS的效能數字卻遠高於這個值。
其次對於3D遊戲而言,Frame跟3D物件會有連動性,也就是說物件的移動量跟Frame是有關係的。若以上述例子來說,實際Frame間距是18ms與6ms,但是遊戲可能會造成誤判,因為理論上不應該存在Micro Stuttering造成的時間差,系統會以最佳理論值12ms、12ms下去計算。那18ms、6ms跟12ms、12ms分別快50%跟慢50%,這時候就會看到3D物件的移動量出錯,從肉眼來看原本平順的遊戲就會有抖動的現象。

模式一:AFR

AFR是Alternate Frame Rendering的簡稱,中文可譯為交替框架渲染。顧名思義就是將遊戲的Frame(幀)分為奇數與偶數幀,並依序將奇數交由GPU A負責運算,而偶數交給GPU B運算。好處是2個GPU的負載比較平衡,能讓散熱與運算效率達到最高。
然而AFR也不是只有優點,最大的缺點就是Micro Stuttering。會讓遊戲效能提升,但是人的視覺體感反而覺得影像「卡卡的」。目前雙GPU的顯卡或串連模式,預設幾乎都是採用AFR模式,因為它「理論」上表現最好。至於3個以上的多重GPU,則可能採用AFR of SFR模式。
▲AFR將Frame分割成奇數與偶數,分別有GPU A與GPU B運算。好處是相鄰的Frame運算量都差不多,不會有SFR分配不均的問題。

模式二:SFR

第二種則是SFR模式,SFR是Split Frame Rendering的縮寫,中文為分割框架渲染。將畫面分割為上下或左右,分別由GPU A與GPU B運算。先來說這種運算方式的缺點,就是運算量不平衡,最明顯的就是上下分割的模式。假設以第一人稱射擊遊戲來說,幾乎所有的物件都集中在下方,導致負責運算下方的GPU負載較高,而負責上方也就是天空的GPU幾乎沒有負載。
聰明一點的驅動,會將上下切割成大小不等的區塊,以平衡運算量,不過這會提升驅動程式編譯的困難度,而且無法完全改善負載的問題。至於好處方面,除了不會出現Micro Stuttering現象,再來就是記憶體使用量較低,因為GPU只需要運算一半的畫面。
▲不同於AFR以Frame區分,SFR切割的是每個Frame,最常見是將其分割成上下部分,分別由不同的GPU處理。優點是記憶體使用量較少,缺點則是分配不均。

模式三:AFR of SFR

看到這裡,應該會有人想把上述2種運算方式混在一起,或許能解決負載與Micro Stuttering的現象。的確是有AFR of SFR的混合模式,大多應用於超過2個GPU的多重GPU環境。
假設有4個GPU,運算方式是將Frame分為奇數與偶數,奇數的Frame再使用SFR技術切割,分別由GPU A與GPU B運算。同理偶數Frame一樣用SFR切割,再給GPU C與GPU D運算。雙卡的串連模式大多以AFR或SFR為主,多卡則是AFR+SFR模式,其餘模式較少運用於遊戲領域。
▲AFR of SFR常用於4個GPU的環境,結合AFR與SFR的特性,將Frame內還有奇數偶數Frame都做切割。每2個Frame時間內,單一GPU只需要運算半個Frame的計算量。


模式四:tile-based

這種運算方式早先由AMD所提出,大多以「tile-based」來稱呼它,tile指的是瓦片,而tile-based就是像瓦片排列。白話的翻譯就是棋盤式切割,運算時會將Frame切割成方格,再將方格分配給GPU運算。
它的技術相當類似SFR,只不過切割的區塊更多也更零碎,有助於平衡GPU負載。由於是切割Frame,因此也不會有AFR的Micro Stuttering現象,只不過這種運算方式過於複雜,除AMD曾經提過之外,後期是否有真正執行仍是未知數。理論上tile-based技術能解決Micro Stuttering現象,對平衡負載也有一定作用。
tile-based就是棋盤切割,比起SFR的切割方式更為徹底。3dfx時代切割方式則是依照掃描線分配,方式類似tile-based與SFR。

模式五:object-based

Object指的是物件,而object-based就是透過分離物件的方式,進行指令的分配。舉例來說,畫面中有張桌子,桌上有個蘋果。指令分配後的結果,可能是GPU A處理桌腳跟蘋果,而GPU B處理桌面。在object-based模式下物件是可被拆解的,就像例子中的桌子拆成桌面跟桌腳,或是背景與物件分別由不同GPU負責。
分割物件後理論上可由不同廠牌、架構、等級的GPU協同運算。之前NVIDIA的CompleX scene scaling engine(複合場景縮放引擎,就是以前的NVScale)有提到相關技術,後來Lucid也有類似技術。不過object-based的運算模式相當複雜,大多只存在技術文件裡面。
object-based是將Frame內的物件完全打散,交由不同GPU負責。也因為打散的緣故,Lucid甚至還能結合完全不同的GPU進行整合。

模式六:SLI-AA

相較於前幾種運算模式,SLI-AA偏重的是畫質的提升,而非增強效能或流暢度。NVIDIA使用的叫做SLI-AA,AMD則是CrossFire-AA,運作原理都相同,目的是堆疊AA(Anti-Aliasing,反鋸齒)強度。AA運作時,會在每個像素(Pixel)設置採樣點(Sampling),而採樣點的多寡就是AA的運作倍率,例如設置2個採樣點就是2倍AA,4個就是4倍依此類推。
假設2個GPU運作SLI-AA模式時,可分別處理4倍AA特效,運算完畢後再交由主卡整合成8倍AA的影像。借由分配的方式可讓特效能力提升,假設單GPU最高只能執行32倍AA,若整合4個GPU就能堆疊出128倍AA,現階段128倍是最高上限。這種運算方式著重於質而非量,但是對遊戲而言,超過8倍AA之後就很難用肉眼辨識畫質差異,因此實用度並不高。
▲透過SLI-AA能夠快速突破AA上限,但是對遊戲而言,超過8倍AA畫質就難以提升。比起高倍率反鋸齒,使用效率更好的採樣模式,還是提升畫質的最有效方式。
除了這種模式,NVIDIA還曾推出分割物理特效的運算方式。例如拿張GTX 680當主卡,配上GTX 560Ti當從卡。主卡仍然是做原本要做的事,而從卡只專心運算PhysX特效的部分,可減少主卡核心負擔。由於並非SLI模式,因此不需要安裝橋接器。不過硬體建置費用還是太高,不如買張高階卡就好,只適合有多餘顯卡的玩家。

模式七:SLI Multi View

最後的是應用於NVIDIA Quadro系列繪圖卡上,在多螢幕環境下,若影像在A螢幕就由GPU A負責運算,反之則由GPU B運算。這種功能對於CAD(Computer Aided Design,電腦輔助設計)較有幫助,目前仍未應用於遊戲領域。

關鍵字:CAD

CAD是Computer Aided Design電腦輔助設計的縮寫,常用於工業繪圖環境,利用電腦模擬商品的外型、結構、顏色與質感。在CAD領域中,繪圖卡比遊戲卡強的地方在於3D物件的精確度與效能,物件較多時旋轉不易破圖,且運算效能較高。圖片為使用CAD繪製的機械圖形。(圖片來源:Wikipedia)

理論不等於實際表現

看完7種運算模式,應該可以知道多重GPU運算方式相當多種,而且沒有完美的運算方式。理論上表現好的處理方式,在實際運作上可能會有意想不到的問題,就像是AFR的Micro Stuttering現象。然而多重GPU雖然稱不上完美,但是仍是堆疊效能的最有效途徑,加上許多現象與缺點不見得肉眼能分辨出來,因此雙核心顯卡不是一無是處。了解運算方式後,接著就來看GTX 690效能表現是不是真的這麼好?AFR在運算上有沒有問題?

延伸閱讀:




沒有留言: