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