在電腦界,大家常會引用摩爾定律:每12~24個月,晶片的複雜度和效能就會成長一倍。但顯示晶片(Graphic Processing Unit,GPU)是少數能超越摩爾定律的零組件。若以浮點運算能力來評斷GPU的效能,GeForce 6800 Ultra是54 GFlops,GeForce 7800 GTX是165 GFlops,GeForce 8800 GTX就已經超過500 GFlops,在這三顆GPU所間隔的短短兩年半中,GPU效能就翻了將近10倍。附帶一提,現在蠻熱門的Intel Core 2 Duo Q6600的GFlops大約是30左右。
註:1 GFlops,就是每秒有10億的浮點運算指令,Giga Floation point Operation Per Second。
註:嚴格來說,Voodoo一代不能算是顯示卡,因為它沒有2D核心,只能顯示3D畫面,2D的部分必須還有另一張顯示卡,Voodoo1和Voodoo2都是3D附加卡的型態,但它們少數的特例,所以我不管了,也不去寫拗口的3D加速卡,通通都叫顯示卡吧!
當然,用GFlops來衡量CPU既不公平也不準確,因為CPU和GPU是完全相對的存在。在接下來的章節中,我們會仔細談顯示卡的架構,什麼是DirectX?Shader在幹嘛?遊戲和顯示卡怎麼相輔相成,擺脫十年以前的2D黑暗期,造就這十年來的3D爆炸性成長。我們先從最簡單的開始....
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-17e94496eb08d887b16f383c076424b7.jpg)
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-0ca0080baffc5d48367710f90d44696a.jpg)
這十年來顯示卡改變多大?1997年我們只能勉強跑GLQuake(Quake的OpenGL加速版,算是第一套展現Voodoo能力的遊戲。透明水,有看到嗎!?),2007年我們已經可以玩畫面接近相片擬真的Crysis。
顯示卡的外觀
顯示卡是一個小型的完整系統,它有自己核心晶片、記憶體、電源輸入和散熱模組,我們先以一般人最常用的顯示卡為例做介紹:
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-82ac195af872d068309f385155088a63.jpg)
啊....拿錯了,一般人用這種卡就見鬼了。
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-c639056d8a2914859b161f8a0ad21fd9.png)
一般用的顯示卡大約像這樣,我把幾個重點部分標號出來。
1.傳輸介面
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-9833b30349e06aaa3d497657ac363001.jpg)
這一長條金手指是顯示卡輸出輸入資料的地方,圖中的卡是PCI-Express x16介面,大家或許也有聽過AGP(Accelerated Graphics Port,加速繪圖埠),甚至現在還有人死不放棄。最早的3D卡是用PCI介面,但大量讀取的資料很快就撐爆PCI介面,當時只好先用AGP應急。但AGP是一對一的埠,而非通用的匯流排,限制頗多,所以在三四年前顯示卡開始轉換到PCI-Express 1.1,這是由數量不等的通道組合成的匯流排,PCI-E x16就表示組合16條通道,每一條的頻寬是雙向每秒500MB。在今年底,PCI-E 2.0的顯示卡將會出現,傳輸頻寬會加倍,這是為了把要運算的資料搬進顯示卡中,並把運算結果回傳出來。
2.視訊輸出
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-8887cf10676215978b8f93e272282bd7.jpg)
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-1df1a8b7980ac610716d2580d8c24e1c.jpg)
顯示卡是連接各種顯示器輸出畫面,位於顯示卡後端的就是這些輸出接頭,相信大家都分的出來DVI(白色)和D-Sub(藍色)接頭,這是電腦最常用的兩種接頭。其中DVI是純數位資料,比D-Sub的類比傳輸有更好的穩定性和清晰度,加上現在流行的LCD也是數位對應顯示,用DVI才能達到最佳效果。現在就算最差的顯示卡都至少有一個DVI,稍好一點的就會有兩個DVI,或是特殊的Dual-Link DVI。Dual-Link DVI可以輸出比一般Single-Link DVI更高的解析度,最高達3840x2400,一般DVI只到1920x1200。除了DVI,現在顯示卡也開始具備HDMI輸出,未來甚至有DisplayPort等更先進的輸出方式。
HDMI算是可以傳輸SPDIF音訊的DVI,在視訊方面幾乎跟DVI一模一樣(差別只在HDMI可以另外傳輸色差訊號),DisplayPort的話太新了,還沒有實際產品,我也不太了解,希望高手指教。除這些電腦用的端子,一般顯示卡還有九針的多功能視訊輸出(圓孔的那個),可轉接成AV、S、色差端子。
3.電源處理
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-e0e9c6d2a751a9a09d7da86a343a6321.jpg)
這些柱狀物和線圈是電容和電感,顯示卡也是要吃電的,電容和電感可以穩定電源,避免突然過高或過低的電壓造成當機,甚至傷到硬體,跟主機板上的電容電感的用意是完全相同的。一般顯示卡都是由PCI-Express插槽直接供電,最高75W,這種卡的電源處理就會集中在插槽附近,但像上面那張圖的高階卡,耗電量超過75W就要另外插電,通常在卡的末端會有這種PCI-Express的6pin電源插孔,可額外再輸入75W。這種要外接電源的卡,電源模組的部分就會集中到電源插頭附近,在散熱器後面那一塊全部都是做電源處理的。
依卡的高中低階不同,低階的通常不用外接電源,最高階的則可能會有兩個6pin電源,甚至用上PCI-Express 2.0新規格的8pin電源,一個就可供電150W。當然,會吃到這麼多電的卡,在世代交替淘汰之前,價格絕不會低於一萬元。
4.散熱模組
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-5b52b3d45afa622549ceebb4a0864fdc.jpg)
就跟CPU一樣,GPU也會發熱,也有自己的TDP規範,要讓GPU能穩定運作,顯示卡上的散熱模組必須消散掉GPU所產生的廢熱。至於要怎麼把廢熱排掉就是各廠商的創意了,要用巨型風扇加鋁鰭導風罩散熱、或是純被動散熱片避免風扇噪音等等,只要符合TDP的規範就可以了。而GPU的高中低階就等於發熱量的多寡,也就等於散熱器的大小,加上高階卡的線路也比較複雜,因此顯示卡的高中低階通常會反應在外觀上,上圖就是四種常見的尺寸,從最長的10吋,到最小的Low Profile。
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-e727aca82c12db9e13b08d31108ebdbc.png)
散熱器主要都是針對GPU,拆下來之後就會露出顯示卡的核心晶片GPU,旁邊八顆則是輔助GPU的顯示記憶體。他們的關係就跟CPU和系統記憶體一模一樣,GPU做運算,記憶體則儲存GPU所需的一切資料。看佈線就知道,所有的記憶體都通往GPU,所以GPU有內建記憶體控制器。
5.GPU核心
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-aa7eb6e0824331dc626f3c7012f42d91.jpg)
十年以前,顯示卡的核心都只負責2D顯示,但2D沒幾年就已經發展到頂點了,在那之後都是著重在3D運算能力,近幾年則另外再加上影片的解碼播放加速。GPU跟CPU一樣也是半導體製程,製程方式雖然不同,但同樣會隨著時代進步縮小製程以降低成本,目前最新的是65奈米,年底左右會有55奈米。GPU一樣是靠電晶體來運算3D,但因為CPU和GPU本質上差異極大,所以GPU很容易就出現超大量的電晶體,至少都是CPU的兩三倍以上,正中央那顆就是GPU的die晶粒,不過因為製程、晶片特性等種種因素,GPU的時脈不易拉高,今年大約可以突破800MHz而已。
6.顯示記憶體
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-1517786ef7618b80a023e3c428344879.jpg)
做為GPU的暫存空間,儲存正要處理或已經處理完的資料。就跟系統記憶體一樣,容量和時脈也是影響效能的兩大因素,但這都已經無關2D顯示了,就像前面說的,2D顯示已經發展到頂點了,顯示記憶體早就遠遠超過2D顯示所需。現在容量和時脈完完全全是針對3D遊戲,遊戲的資料量愈大,顯示卡就需要愈大的記憶體來儲存資料;顯示晶片的處理速度愈快,就需要時脈愈高的記憶體來快速進出GPU。依顯示卡的高中低階不同,容量從32MB~768MB不等,突破1GB是遲早的事,時脈則從400MHz~2000MHz以上都有。
顯示卡的基本運作原理
現在顯示卡的玩家端應用不外兩大宗:3D遊戲和影片播放,3D繪圖和影片壓縮格式的專有名詞很多,乍看真的眼花撩亂,但這裡我們先把視角拉高一點,從最遠的地方來看顯示卡的運作,其實不管是3D繪圖、影片加速、甚至是更先進的GPGPU,都脫離不了以下要講的流程。
![[小惡魔的電腦教室] 4-1.認識顯示卡](http://attach.mobile01.com/attach/200709/mobile01-7e50205c5649ca4f220754bf24a63c14.png)
顯示卡的基本運作流程,直到驅動程式為止都是CPU在運算,因此CPU的效能也會影響顯示卡的效能,如果前端太慢,顯示卡都在等資料、餵不飽,就會造成效能瓶頸。
在DOS之後,應用軟體就很少再直接存取硬體,因為直接存取硬體會影響作業系統的穩定性,在多工OS下尤其重要,便免使用者手賤把系統搞掛。而且直接存取的話,軟體和硬體的設計都很不方便,因為軟體得想辦法支援個別硬體,就像早期的DOS遊戲那樣,每套遊戲都得手動針對不同的硬體做支援,顯示卡、搖桿、音效卡什麼的,硬體一多就快起笑了。業界急需一個共通的中介標準,於是微軟制定了第一代DirectX,這是一種「應用程式介面」(API,Application Programming Interface)夾在軟硬體之間,雖然多了第三者會減損效能,但換來的方便性是絕對值得的,其中Direct3D是針對顯示卡的3D繪圖API,是DirectX最重要的一部分,其他還有DirectSound、DirectInput負責聲音和週邊。
DirectX
DirectX是顯示卡和遊戲共同支援的標準,遊戲以DirectX的語法來寫,顯示卡將DirectX的語法轉變成3D畫面,兩者就有統一的標準,不再需要個別支援,可降低開發難度,而且執行結果有一致性,不管用什麼硬體,只要都支援DirectX,跑出來的畫面理論上都要一樣。除了DirectX之外,OpenGL也是另一個繪圖API,通常用於專業的3D繪圖領域,但也有少部分PC遊戲使用(遊樂器則除了Xbox,大多是用OpenGL),OpenGL的歷史比DirectX久,但因為Windows的內建優勢、原生支援硬體加速、更新速度快,在遊戲應用上DirectX比OpenGL強勢多了。
雖然顯示卡一定得支援DirectX,但實際GPU晶片線路要怎麼設計則是各家廠商的創意,就像x86 CPU不能直接執行x86指令,得透過內部的解碼器轉換,GPU也不能直接執行DirectX的指令,中間還得透過驅動程式,這也是為什麼顯示卡的驅動程式超級重要,因為它得解譯DirectX的指令,轉換成GPU看得懂的機器語言(Machine Code),驅動程式會直接影響顯示卡的效能和功能。
DXVA
影片的部分也就不難懂了,API換成DXVA(DirectX Video Acceleration),播放軟體的影片解碼器下達DXVA指令,再透過驅動程式解譯交給GPU運算,我們就有了影片硬體加速。跟DirectX相同的道理,要支援硬體加速,解碼器、驅動程式和顯示晶片都要支援DXVA才能啟動,缺一不可。
以上就是GPU非常基本的運作原理,詳細的3D運作流程、宣傳過度的DirectX 10、GPU硬體規格、影片加速的原理、驅動程式等等,會在後面的文章中一一介紹,歡迎來到華麗又迷人的電腦影像世界!