| 5 | 1/1 | 返回列表 |
| 查看: 1834 | 回復(fù): 10 | |||
| 當(dāng)前主題已經(jīng)存檔。 | |||
| 當(dāng)前只顯示滿足指定條件的回帖,點擊這里查看本話題的所有回帖 | |||
yalefield金蟲 (文壇精英)
老漢一枚
|
[交流]
【分享】GPU為什么跑得快 [轉(zhuǎn)載]
|
||
|
去年底、今年初,老漢有兩篇關(guān)于GPU的帖子。 GPU文獻1篇:http://www.gaoyang168.com/bbs/viewthread.php?tid=702923 談?wù)凣PU吧:http://www.gaoyang168.com/bbs/viewthread.php?tid=672463 這里再轉(zhuǎn)載一篇: 作者:佚名 計算機能以每秒數(shù)十幀的速率,根據(jù)當(dāng)前的三維景物實時生成三維動畫。你所看到的圖像會隨著你視點的變化而即時改變,使人產(chǎn)生“身臨其境”的感覺。高的幀率可以得到更流暢的畫面。一般來說30fps就是可以接受的,但是將幀速增加至60fps則可以明顯提升交互感。這與計算機影視制作不同,電影特效可以通過很多臺工作站,花幾十個小時繪制出長度僅為幾秒的高質(zhì)量畫面,并不強調(diào)實時性。 渲染一個復(fù)雜的三維場景,需要在一秒內(nèi)處理幾千萬個三角形頂點和光柵化幾十億的像素。早期的3D游戲,顯卡只是為屏幕上顯示像素提供一個緩存,所有的圖形處理都是由CPU單獨完成。 圖形渲染適合并行處理,擅長于執(zhí)行串行工作的CPU實際上難以勝任這項任務(wù)。所以,那時在PC上實時生成的三維圖像都很粗糙。不過在某種意義上,當(dāng)時的圖形繪制倒是完全可編程的,只是由CPU來擔(dān)綱此項重任,速度上實在是達不到要求。 直到1995年,PC機領(lǐng)域第一款GPU (Graphical Processing Unit) 3dfx Voodoo出來以后,游戲的速度、畫質(zhì)才取得了一個飛躍。 3dfx Voodoo有兩個主要的特征:深度緩沖區(qū)(z-buffer)和紋理映射(texture mapping)。z-buffer執(zhí)行“隱藏面消除”這一工作,這樣可以避免渲染“不可視”的無效像素。利用紋理映射功能則可以十分逼真地表達物體表面細節(jié)。 1999年,第二代GPU (Nvidia GeForce256,GeForce 2和ATI Radeon 7500)包括了圖形的幾何變換與光照計算功能(T&L)。而在此之前T&L都是由CPU完成的,這對CPU來說是很復(fù)雜的計算。 第二代GPU解決了系統(tǒng)的一個瓶頸,減輕了CPU的負荷,速度明顯提高了。但是由于是固定的渲染流水線,缺乏靈活性,束縛了開發(fā)人員的創(chuàng)造性。 2001年,NIVIDA公司的GeForce 3首先引入了可編程的頂點著色器(Vertex Shader)單元。 2002年,可編程的像素著色器(Pixel Shader)單元也加入了GPU (見圖1)。 在繪制時,GPU首先接收CPU以三角形頂點形式的發(fā)送的幾何數(shù)據(jù)。然后由可編程的頂點著色器單元進行處理,完成幾何變換與頂點屬性計算等功能。接著,這些三維空間的三角形由一個固定功能的光柵生成器轉(zhuǎn)換為二維屏幕上的像素。每個像素的最終顏色值都通過運行在像素著色器上的小程序運算而得。目前三維游戲借助于GPU,已經(jīng)能夠?qū)崟r生成十分細膩、逼真的畫面。 [ Last edited by xuefei06 on 2008-12-30 at 00:03 ] |
金蟲 (文壇精英)
老漢一枚
金蟲 (文壇精英)
老漢一枚
|
GPU的功能更新很迅速,平均每一年多便有新一代的GPU誕生,運算速度也越來越快。 2004年推出的GPU Nvidia GeForce 6800 Ultra可達到峰值40 Gigaflops( 1 GigaFLOPS=1秒鐘進行10億次的浮點運算) 2005年發(fā)布的 Nvidia GeForce 7800 GTX更是將峰值提高至令人驚訝的169 Gigaflops。而Intel 3GHz Pentium 4采用SSE指令集也只能達到6 Gigaflops(見圖2)。 GPU的運算速度如此之快,主要得益于GPU是對圖形實時渲染量身定制的,具有兩點主要特征:超長流水線與并行計算。 GPU、CPU浮點運算速度對比圖: |
金蟲 (文壇精英)
老漢一枚
|
流水線技術(shù)與工廠里的裝配線在原理上類似。 如果裝配一臺汽車需要10個時間單元,將它分成10個流水線階段,每個階段分配一個時間單元,那么一條裝配線每一個時間單元就可以生產(chǎn)一輛汽車。顯然流水線模式的生產(chǎn)在理想狀況下要比串行方式快了十倍。 從這個例子中,可以看出為了提高流水線的速度,可以將任務(wù)劃分成更小的單元,這樣流水線的級數(shù)就增加了。CPU的設(shè)計中就使用了流水線原理,奔騰IV就有20級的流水線。但是流水線級數(shù)越多,一條指令從開始進入流水線到最后被執(zhí)行完畢這之間的延遲間隔會相當(dāng)大。換句話說,當(dāng)流水線級數(shù)過多時,控制臺發(fā)出一條指令,會經(jīng)過很長時間才會真正生效,這不適用于快速反應(yīng)要求很高的場合。 打個比方,當(dāng)用消防水龍頭救火時,正常情況下打開閥門開關(guān)幾秒后水便噴射出來,立刻可用來撲滅火災(zāi)。但是如果延遲了十幾分鐘,才有水流出,即使這時水流速度(吞吐量)還是很快,不過這時火災(zāi)就會造成更大的損失了。 CPU的設(shè)計目標是不僅要有很高的吞吐量,還要求很小的延遲,這是CPU并不采用過多流水線級數(shù)的原因之一。另外流水線只有在滿載時,才能發(fā)揮出最佳效率來。由于CPU執(zhí)行的代碼中有很多分支語句,因此長流水線需要用有效的技術(shù)來預(yù)測分支,盡量保持流水線在滿負荷狀態(tài)。但是一旦預(yù)測分支失敗,就會清除流水線中滯留的大量無用指令,同時將新指令流重新注入流水線。但是如果流水線階段過多的話,充滿整個流水線就需要很長的時間,這樣使流水線保持滿載的機會不多,速度反而下降了。所以權(quán)衡利弊,CPU不會使用深度流水線。 但是GPU卻采用了幾百級的流水線,比如GeForce 3的流水線有800個階段。 是什么原因,GPU的應(yīng)用為何可以忍受這么大的延遲呢?假設(shè)以每秒50幀的速率顯示畫面,那么只要求每幀在20ms以內(nèi)生成就行。而GeForce 3的時鐘頻率是200MHz(每個時鐘周期是5ns),5ns * 800 = 4μs < 20ms。所以對GPU來說這一些延遲根本不成問題,而且GPU中執(zhí)行的Shader程序中,分支語句用的很少(在早期的GPU中,甚至不提供動態(tài)的分支語句)。因此,GPU的流水線深度變大后,利大于弊,大大提升了整體性能。 GPU的執(zhí)行速度很快,但是當(dāng)運行從內(nèi)存中獲取紋理數(shù)據(jù)這樣的指令時(由于內(nèi)存訪問是瓶頸,此操作比較緩慢),整個流水線便出現(xiàn)長時間停頓。在CPU內(nèi)部,使用多級Cache來提高訪問內(nèi)存的速度。GPU中也使用Cache,不過Cache命中率不高,只用Cache解決不了這個問題。所以,為了保持流水線保持忙碌,GPU的設(shè)計者使用了多線程機制(multi-threading),見圖3。 當(dāng)像素著色器針對某個像素的線程A遇到存取紋理的指令時,GPU會馬上切換到另外一個線程B,對另一個像素進行處理。等到紋理從內(nèi)存中取回時,可再切換到線程A。但是使用這種方法有一個前提,線程A與線程B沒有數(shù)據(jù)依賴性,也就是說兩線程之間無需通訊。如果線程B需要線程A提供某些數(shù)據(jù),那么即使切換到線程B,線程B仍是無法運行,流水線還是處于空閑狀態(tài)。不過幸運的是,圖形渲染本質(zhì)上是一個并行任務(wù)。 無論是CPU送給GPU的頂點數(shù)據(jù),還是GPU光柵生成器產(chǎn)生的像素數(shù)據(jù)都是互不相關(guān)的,可以并行地獨立處理。而且頂點數(shù)據(jù)(xyzw),像素數(shù)據(jù)(RGBA)一般都用四元數(shù)表示,適合于并行計算。在GPU中專門設(shè)置了SIMD指令來處理向量,一次可同時處理四路數(shù)據(jù)。SIMD指令使用起來非常簡潔,可以看一個頂點矩陣變換的例子(見下代碼)。此外,紋理片要么只能讀取,要么只能寫入,不允許可讀可寫,從而解決了存貯器訪問的讀寫沖突。GPU這種對內(nèi)存使用的約束也進一步保證了并行處理的順利完成。 GPU中的多線程機制: |
金蟲 (文壇精英)
老漢一枚
|
為了進一步提高并行度,可以增加流水線的條數(shù)。 在GeForce 6800 Ultra中,有多達16組像素著色器流水線, 6組頂點著色器流水線。多條流水線可以在單一控制部件的集中控制下運行,也可以獨立運行。在單指令多數(shù)據(jù)流(SIMD)的結(jié)構(gòu)中,單一控制部件向每條流水線分派指令,同樣的指令被所有處理部件同時執(zhí)行。 另外一種控制結(jié)構(gòu)是多指令多數(shù)據(jù)流(MIMD),每條流水線都能夠獨立于其他流水線執(zhí)行不同的程序。GeForce 6800 Ultra的頂點著色器流水線使用MIMD方式控制,像素著色器流水線使用SIMD結(jié)構(gòu)。MIMD能比較有效率地執(zhí)行分支程序,而SIMD體系結(jié)構(gòu)運行條件語句時會造成很低的資源利用率。不過SIMD需要硬件少,這是一個優(yōu)勢。 CPU中大部分晶體管主要用于構(gòu)建控制電路(象分支預(yù)測等)和Cache,只有少部分的晶體管來完成實際的運算工作。而GPU的控制相對簡單,而且對Cache的需求小,所以大部分晶體管可以組成各類專用電路、多條流水線,使得GPU的計算速度有了突破性的飛躍,擁有了驚人的處理浮點運算的能力。 現(xiàn)在CPU的技術(shù)進步正在慢于摩爾定律,而GPU(視頻卡上的圖形處理器)的運行速度已超過摩爾定律,每6個月其性能加倍。 雖然GPU最初專門是為圖形渲染設(shè)計的,但是GPU還可以有效地執(zhí)行多種通用計算,從線性代數(shù)和信號處理到數(shù)值仿真等等。有的專家甚至認為GPU將進入計算的主流。過去,學(xué)生們在課堂學(xué)習(xí)計算機體系結(jié)構(gòu)時,聽老師講解各類并行計算機時,仿佛覺得這些東西都是科學(xué)家才使用的尖端產(chǎn)品?捎趾卧氲,現(xiàn)在并行計算機(GPU) 就在我們的普通PC電腦內(nèi),觸手可及。 主要參考文獻: [ Last edited by yalefield on 2008-4-26 at 02:37 ] |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 348求調(diào)劑 +5 | 小懶蟲不懶了 2026-03-28 | 5/250 |
|
|---|---|---|---|---|
|
[考研] 085600 材料與化工 329分求調(diào)劑 +11 | Mr. Z 2026-03-25 | 11/550 |
|
|
[考研] 356求調(diào)劑 +3 | gysy?s?a 2026-03-28 | 3/150 |
|
|
[考研] 346求調(diào)劑 一志愿070303有機化學(xué) +3 | 蘿卜燉青菜 2026-03-28 | 3/150 |
|
|
[考研] 311求調(diào)劑 +9 | lin0039 2026-03-26 | 9/450 |
|
|
[考研] 265求調(diào)劑 +8 | 小木蟲085600 2026-03-27 | 8/400 |
|
|
[考研]
|
18419759900 2026-03-25 | 8/400 |
|
|
[考研] 化學(xué)308分求調(diào)劑 +8 | 你好明天你好 2026-03-23 | 9/450 |
|
|
[考研] 348求調(diào)劑 +4 | 小懶蟲不懶了 2026-03-27 | 5/250 |
|
|
[考研] 求調(diào)劑 +3 | 劉柯@ 2026-03-24 | 4/200 |
|
|
[考研] 081200-11408-276學(xué)碩求調(diào)劑 +4 | 崔wj 2026-03-26 | 4/200 |
|
|
[考研] 調(diào)劑求收留 +7 | 果然有我 2026-03-26 | 7/350 |
|
|
[考研]
|
平樂樂樂 2026-03-26 | 4/200 |
|
|
[考研] 081700 調(diào)劑 267分 +11 | 迷人的哈哈 2026-03-23 | 11/550 |
|
|
[考研] 生物技術(shù)與工程 +3 | 1294608413 2026-03-25 | 4/200 |
|
|
[考研] 300分,材料,求調(diào)劑,英一數(shù)二 +5 | 超贊的 2026-03-24 | 5/250 |
|
|
[考研] 材料專碩找調(diào)劑 +5 | 哈哈哈吼吼吼哈 2026-03-23 | 5/250 |
|
|
[考研] 一志愿河北工業(yè)大學(xué)0817化工278分求調(diào)劑 +7 | jhybd 2026-03-23 | 12/600 |
|
|
[考研] 接收2026碩士調(diào)劑(學(xué)碩+專碩) +4 | allen-yin 2026-03-23 | 6/300 |
|
|
[考研] 求老師收我 +3 | zzh16938784 2026-03-23 | 3/150 |
|