實(shí)時(shí)渲染(第四版)_第3章|GPU并行架構(gòu)及著色器(上)

這一章節(jié)主要講述了GPU硬件的發(fā)展歷程却紧,GPU流水管線以及GPU各種著色器的作用及其適用性(由于本章涉及要很多概念上以及專業(yè)術(shù)語的翻譯,有的地方可能沒有理解到位而導(dǎo)致錯(cuò)誤突照,希望大家能夠幫忙指出迂苛,這也是一個(gè)互相進(jìn)步的過程)。
這一章的篇幅略長念祭,這里分為兩篇介紹:上篇主要介紹GPU并行架構(gòu)以及GPU流水管線的各階段可操作程度;下篇主要介紹各著色器的特點(diǎn)及作用碍侦。

數(shù)據(jù)并行架構(gòu)

CPU與GPU對(duì)于處理延遲的不同策略:

CPU:有多重處理器粱坤,大部分CPU芯片包含本地緩存隶糕,內(nèi)存中存放了需要使用的數(shù)據(jù)。以及其他的技術(shù):預(yù)分支站玄,指令重排枚驻,寄存器重命名、緩存預(yù)取等株旷。

GPU:有一個(gè)大的處理器組再登,稱為著色器內(nèi)核,通常有上千個(gè)晾剖。GPU是流處理器锉矢,依次有序的處理相似數(shù)據(jù)集。由于這種相似性(例如齿尽,一系列頂點(diǎn)或者像素)沽损,GPU可以大規(guī)模并行的方式處理數(shù)據(jù)。相鄰數(shù)據(jù)之間保持獨(dú)立雕什,這樣才可以完全并行處理缠俺,不需要等待另一個(gè)處理器的結(jié)果。

原文有一個(gè)GPU架構(gòu)的贷岸,很生動(dòng)的例子:
假設(shè)一個(gè)網(wǎng)格有2000個(gè)像素需要被渲染壹士,以及有一個(gè)最弱的GPU,每次只能執(zhí)行一個(gè)像素偿警。
他開始執(zhí)行第1個(gè)像素躏救,對(duì)寄存器中的值進(jìn)行一系列算法操作(寄存器是本地的,因此可以快速訪問螟蒸,因此不會(huì)發(fā)生延遲)盒使。接下來他需要訪問一張紋理資源,這是一個(gè)獨(dú)立的資源七嫌,并且訪問紋理可能涉及到一些其他的內(nèi)容少办,這時(shí)間,處理器等待訪問紋理的數(shù)據(jù)诵原,什么也做不了英妓,就產(chǎn)生了延遲。想象一下2000個(gè)像素處理完绍赛,延遲有多大蔓纠。
此時(shí)為了使GPU變得更快,給每個(gè)片元一段本地寄存器儲(chǔ)存空間吗蚌。當(dāng)?shù)谝粋€(gè)像素執(zhí)行到訪問紋理腿倚,就記錄下當(dāng)前像素的屬性,以及當(dāng)前執(zhí)行的指令蚯妇,然后開始處理第二個(gè)像素敷燎,依次處理到2000個(gè)像素暂筝。這時(shí)轉(zhuǎn)回到第一個(gè)像素,他的紋理數(shù)據(jù)正好返回懈叹,則執(zhí)行后續(xù)操作乖杠,然后是第二個(gè)像素,直到2000個(gè)像素全部執(zhí)行完畢澄成。這樣看來,單個(gè)像素的執(zhí)行時(shí)間變長了畏吓,但是整體處理的時(shí)間將大大減少墨状。

接下來有幾個(gè)概念:
SIMD: single instruction, multiple data,單一指令菲饼,多重?cái)?shù)據(jù)肾砂。固定數(shù)量的著色器程序同步執(zhí)行同一邏輯。

線程:2000個(gè)片元宏悦,每個(gè)片元的處理稱為一個(gè)線程镐确。此處線程不同于CPU的線程,他包括一部分將數(shù)據(jù)傳送給著色器的內(nèi)存饼煞,以及供著色器執(zhí)行的寄存器空間源葫。

線程束:使用同樣著色器程序的線程組成的組。

例如:要執(zhí)行2000個(gè)線程砖瞧。英偉達(dá)的GPU一個(gè)線程束支持32個(gè)線程息堂。因此就需要62.5個(gè)線程束。每個(gè)線程束的執(zhí)行與單個(gè)GPU例子相同块促。第一個(gè)線程束執(zhí)行荣堰,其中32個(gè)線程同步執(zhí)行同一邏輯,32個(gè)線程會(huì)同時(shí)遇到訪問內(nèi)存的延遲的情況竭翠,因此整個(gè)線程束會(huì)停掉振坚,轉(zhuǎn)向第二個(gè)線程束。直到所有線程束執(zhí)行完畢斋扰,此時(shí)轉(zhuǎn)向第一個(gè)線程束渡八,其訪問內(nèi)存的數(shù)據(jù)返回,那么他開始繼續(xù)執(zhí)行邏輯褥实。過程如圖所示(圖片源自原書):


1.png

接下來會(huì)引出兩個(gè)問題:
其一:寄存器使用的數(shù)量呀狼。每個(gè)線程都需要一段寄存器。但是需要的寄存器越多损离,可以執(zhí)行的線程越少哥艇,那么線程束就越少。線程束的不足僻澎,就會(huì)引發(fā)上述訪問內(nèi)存的延遲貌踏。
其二:動(dòng)態(tài)分支:由if和循環(huán)引起的十饥。同一線程束中32個(gè)線程是同步處理同一邏輯,如果遇到分支祖乳,32個(gè)線程都只取其中一個(gè)分支的結(jié)果逗堵,那么另一個(gè)分支則不會(huì)執(zhí)行。一旦其中一個(gè)線程所需結(jié)果不同眷昆,那么32個(gè)線程同時(shí)會(huì)把兩個(gè)流程執(zhí)行一遍蜒秤,然后各取所需,這也叫線程發(fā)散亚斋。

GPU流水管線

先上圖:


2.png

依據(jù)可操作性作媚,各步驟涂上了不同的顏色。
綠色是完全可編程模塊:頂點(diǎn)著色器帅刊,曲面細(xì)分著色器纸泡,幾何著色器,像素著色器赖瞒;
黃色是不可編程但是高度可配置的模塊:屏幕映射階段女揭,合并階段
藍(lán)色是固定執(zhí)行模塊:裁剪栏饮,三角形設(shè)置和遍歷

頂點(diǎn)著色器是完全可編程的階段吧兔,是用來實(shí)現(xiàn)幾何階段。幾何著色器主要用來操作圖元上的頂點(diǎn)抡爹,也可以用來執(zhí)行每圖元著色操作掩驱,銷毀圖元,創(chuàng)建圖元等冬竟。曲面細(xì)分著色器和幾何著色器是可選的欧穴,也并不是所有的GPU都支持這些著色器,尤其是移動(dòng)平臺(tái)泵殴。

裁剪涮帘,三角形設(shè)置和三角形遍歷階段是固定執(zhí)行階段。屏幕映射受窗口和視口所影響笑诅。像素階段是完全可編程的階段调缨。盡管合并階段不是可編程的,但是他是高度可配置的吆你,可以設(shè)置執(zhí)行的各種操作弦叶。合并階段主要是負(fù)責(zé)顏色,深度緩沖區(qū)妇多,混合伤哺,模板緩沖區(qū)以及其他緩沖區(qū)數(shù)據(jù)的更新。

著色器以及圖形API的發(fā)展

直接上圖:


3.png

這一部分主要講了dx和opengl的一路發(fā)展歷程,篇幅也很長立莉,這里就不在贅述绢彤,有興趣可以翻翻原書。從圖中就可以看出蜓耻,短短二十幾年茫舶,圖形學(xué)發(fā)展迅速,從最初的固定渲染管線刹淌,到現(xiàn)在的可編程渲染管線饶氏,將來可能發(fā)展為更高度自由的可編程性。也可以看出芦鳍,未來的圖形學(xué)將有不可預(yù)估的可能性嚷往。

小結(jié):

知識(shí)點(diǎn):對(duì)GPU架構(gòu)的實(shí)現(xiàn)有所了解,尤其是線程及線程束的執(zhí)行機(jī)制。對(duì)目前階段的GPU流水階段各階段的可操作程度有所掌握。下一篇文章將著重介紹各種著色器的特點(diǎn)剃根。
參考資料:Real-Time-Rendering-4th

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愕掏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子趋急,更是在濱河造成了極大的恐慌喝峦,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呜达,死亡現(xiàn)場(chǎng)離奇詭異谣蠢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)查近,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門眉踱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人霜威,你說我怎么就攤上這事谈喳。” “怎么了戈泼?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵婿禽,是天一觀的道長。 經(jīng)常有香客問我大猛,道長扭倾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任挽绩,我火速辦了婚禮膛壹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己恢筝,他們只是感情好哀卫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撬槽,像睡著了一般此改。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侄柔,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天共啃,我揣著相機(jī)與錄音,去河邊找鬼暂题。 笑死移剪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的薪者。 我是一名探鬼主播纵苛,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼言津!你這毒婦竟也來了攻人?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤悬槽,失蹤者是張志新(化名)和其女友劉穎怀吻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體初婆,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蓬坡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磅叛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屑咳。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宪躯,靈堂內(nèi)的尸體忽然破棺而出乔宿,到底是詐尸還是另有隱情,我是刑警寧澤访雪,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布详瑞,位于F島的核電站,受9級(jí)特大地震影響臣缀,放射性物質(zhì)發(fā)生泄漏坝橡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一精置、第九天 我趴在偏房一處隱蔽的房頂上張望计寇。 院中可真熱鬧,春花似錦、人聲如沸番宁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝶押。三九已至踱蠢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棋电,已是汗流浹背茎截。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赶盔,地道東北人企锌。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像于未,于是被迫代替她去往敵國和親撕攒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344