国产视频一区在线,日韩三级网,日韩欧美在线观看一区二区,午夜欧美福利视频,国产人妖视频一区二区,久久亚洲精品中文字幕,国产成人午夜高潮毛片

【技術(shù)解析】GPU如何實(shí)現(xiàn)三維渲染及非圖形計(jì)算?

來(lái)源:網(wǎng)絡(luò)

點(diǎn)擊:1044

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞:GPU,圖形芯片,圖形技術(shù)

      謎一樣的GPU

      手機(jī),現(xiàn)在已經(jīng)是人手一部甚至兩部了,餐廳酒吧、地鐵巴士、馬路街邊隨處可見的低頭族大家早就見慣不怪,在飯桌上如果你發(fā)現(xiàn)沒(méi)有人低頭看手機(jī)的話反而會(huì)懷疑自己是不是到了外星球。

      吸引人們對(duì)手機(jī)目不轉(zhuǎn)睛的自然是它顯示的內(nèi)容, 相對(duì)于個(gè)人電腦剛剛問(wèn)世時(shí)候只能呈現(xiàn)有限的文字以及低分辨率的畫面而言,現(xiàn)在的智能手機(jī)已經(jīng)可以在巴掌大的屏幕上做到高達(dá) 3840×2160 的分辨率,能呈現(xiàn)非常豐富的畫面元素。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      臺(tái)式機(jī)和智能手機(jī)雖然存在較大的性能分野,但是兩者間一直在互相借鑒,例如操作系統(tǒng)界面都采用了硬件三維加速來(lái)強(qiáng)化用戶體驗(yàn):豐富元素的表現(xiàn)力以及實(shí)現(xiàn)界面的視覺(jué)擴(kuò)展(例如窗口的旋轉(zhuǎn)切換),而實(shí)現(xiàn)這些三維硬件加速的正是許多手機(jī)、電腦文章報(bào)道中的 GPU,比如說(shuō)Qualcomm(高通)的Adreno、蘋果的PowerVR、ARM的Mali。

      因?yàn)閼?yīng)用上的相似性,移動(dòng)端的GPU和臺(tái)式機(jī)GPU發(fā)展最近這幾年幾乎都是齊頭并進(jìn),理論上如果將移動(dòng)端的GPU放大后也是可以拿到臺(tái)式機(jī)上使用的。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

     ?。∟VIDIA推出的NV10)

      GPU的全稱是 Graphics Processing Unit,也即是圖形處理單元的意思。這個(gè)概念的最早確定是NVIDIA(英偉達(dá))公司在1999年發(fā)布型號(hào)為 GeForce (代號(hào)NV10)的三維芯片時(shí)首次提出,當(dāng)時(shí)的定義是:

      三角形變換能力達(dá)到每秒一千萬(wàn)個(gè)三角形以上的三維芯片。

      時(shí)至今日,當(dāng)年NVIDIA提出的GPU定義相信已經(jīng)很少人記得,GPU這個(gè)名詞因?yàn)槲④汥irectX 7采用而普及,此后 NVIDIA、微軟、ATI(后來(lái)的 AMD)、Intel以及幾乎整個(gè)相關(guān)行業(yè)、媒體大量采用而成為大家非常熟悉的名詞,不管是臺(tái)式機(jī)、服務(wù)器、工作站還是游戲機(jī)、移動(dòng)設(shè)備,它已經(jīng)是無(wú)處不在。

      相較于GPU的定義,GPU 到底是怎么一回事,它是如何實(shí)現(xiàn)三維渲染以及為何后來(lái)可以勝任非圖形計(jì)算,知道的人就更少了,本文嘗試在這方面做一些簡(jiǎn)單的介紹。

      GPU到底是如何實(shí)現(xiàn)三維渲染呢?

      要了解GPU是如何進(jìn)行渲染操作其實(shí)并不難,宏觀角度來(lái)可以將其簡(jiǎn)化為下面的樣子:

      應(yīng)用程序-》幾何處理-》光柵處理

      在圖形處理中,應(yīng)用程序執(zhí)行的相關(guān)操作包括了碰撞偵測(cè)、全局加速算法、動(dòng)畫處理、物理模擬等。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      幾何處理就是對(duì)圖元進(jìn)行處理,所謂圖元是指點(diǎn)、線、面這類幾何體,而光柵化則是將確定了位置、大小和光照的幾何體映射到屏幕空間柵格化后的處理,例如像素著色、貼圖、混合。

      在沒(méi)有圖形芯片(顯卡)之前,幾何處理、光柵處理都是由 CPU 或者 FPU(浮點(diǎn)單元)、SIMD (單指令多數(shù)據(jù))單元協(xié)助來(lái)完成,隨著芯片技術(shù)的進(jìn)步,其中的幾何處理、光柵處理開始逐步放到專門的芯片上執(zhí)行,之后這些專用芯片又被集成到一塊,逐漸形成了現(xiàn)在的 GPU。移動(dòng)處理器同樣經(jīng)歷PC這一過(guò)程,比如說(shuō)高通最早的處理器MSM7225/7625就沒(méi)有集成GPU ,甚至是2D處理都是交由CPU完成。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

     ?。ㄖ悄苁謾C(jī)與PC一樣,經(jīng)歷過(guò)無(wú)GPU時(shí)代)

      應(yīng)用程序把需要進(jìn)行三維渲染或者計(jì)算的數(shù)據(jù)和指令遞交給 GPU,由GPU來(lái)執(zhí)行幾何處理以及光柵處理,這樣的處理方式被稱作流水線(pipeline)。

      采用流水線的方式可以將工作拆分為若干個(gè)處理環(huán)節(jié),也就是所謂的工位(stage)或者功能階段,這些工位本身也可以繼續(xù)拆分成若干部分,也可以實(shí)現(xiàn)(部分的)并行化。

      幾何處理階段需要做些什么啥呢?

      幾何處理階段執(zhí)行的是頂點(diǎn)、多邊形級(jí)別的處理。這一步可以拆解為 5 個(gè)工位或者說(shuō) 5 個(gè)步驟:

      •對(duì)模型及視圖進(jìn)行變換(transform)

      •頂點(diǎn)著色

      •投影

      •裁剪

      •屏幕映射

      模型及視圖的變換

      模型變換

      由于每個(gè)模型都有自己的坐標(biāo),因此在成為屏幕上的畫面對(duì)象之前,模型需要變換為多個(gè)空間或者坐標(biāo)系。

      作為對(duì)象的模型空間(Model Space,或者叫模型自空間)的坐標(biāo)被稱作模型坐標(biāo),在經(jīng)過(guò)坐標(biāo)變換后,模型就會(huì)處于世界坐標(biāo)或者世界空間(World Space)里,也就是確定了該模型在場(chǎng)景中的方向、位置。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      我們?cè)试S在場(chǎng)景中存在多個(gè)模型的拷貝(被稱作引用),這些大小一樣的引用可以在同一個(gè)場(chǎng)景中有不同的位置、方向。

      視圖(Viewport,或者視口)變換

      現(xiàn)在的實(shí)時(shí)渲染場(chǎng)景中包含的對(duì)象(模型)可以有很多個(gè),但是只有被攝像機(jī)(或者說(shuō)觀察者,也即是設(shè)定的視角覆蓋)的區(qū)域才會(huì)被渲染。這個(gè)攝像機(jī)在世界空間里有一個(gè)用來(lái)擺放的位置和面向的方向。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      為了實(shí)現(xiàn)接下來(lái)的投影、裁剪處理,攝像機(jī)和模型都需要進(jìn)行視圖變換這個(gè)操作,目的是將攝像機(jī)放置在坐標(biāo)原點(diǎn)上,使其正對(duì)的方向?yàn)?Z 軸(負(fù)向),Y 軸指向上(上圖是從攝像機(jī)正上方俯視,所以沒(méi)法給出 Y 軸),X 軸指向右。

      頂點(diǎn)著色

      所謂著色就是指確定光照在物料上所呈現(xiàn)效果的操作,這類操作既可能運(yùn)行于幾何階段的模型頂點(diǎn)上,也可能運(yùn)行于光柵階段的各個(gè)像素上,也就是所謂的頂點(diǎn)著色和像素著色。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      在頂點(diǎn)著色的時(shí)候,各個(gè)頂點(diǎn)需要存放若干個(gè)相關(guān)的物料數(shù)據(jù),例如頂點(diǎn)位置、法線、色彩以及其他任何進(jìn)行著色處理計(jì)算相關(guān)的數(shù)字信息。

      頂點(diǎn)著色的計(jì)算結(jié)果(可以是色彩、向量、紋理坐標(biāo)以及任何其他著色數(shù)據(jù))會(huì)被發(fā)送到光柵化階段進(jìn)行插值處理。

      投影

      在完成了著色處理后,渲染系統(tǒng)會(huì)把可視體轉(zhuǎn)換為一個(gè)位于(-1, -1, -1)到(1, 1, 1)的單元立方體(unit-cube)中,這個(gè)立方體被稱作正則觀察體(canonical view volume),使用到的投影方式一般有兩種:平行投影和透視投影。

      前一種主要在 CAD 等軟件中使用,后一種因?yàn)槟M了我們?nèi)祟惖囊曈X(jué)體驗(yàn),所以在游戲或者虛擬現(xiàn)實(shí)中經(jīng)常使用:

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      上圖分別是一部 iPhone 6s Plus 以平行投影和透視投影的方式呈現(xiàn)在屏幕上的效果。

      三角形裁剪

      只有在可視體內(nèi)的圖元會(huì)被傳送到在屏幕上繪制這些圖元的光柵階段,在進(jìn)行裁剪動(dòng)作的時(shí)候,如果圖元有頂點(diǎn)落在可視體之外,裁剪的時(shí)候就會(huì)將可視體之外的這部分剪切掉并且在可視體與圖元相交的位置生成新的頂點(diǎn),而位于立方體外部的舊圖元就會(huì)被拋棄掉。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      屏幕映射

      經(jīng)過(guò)上一步裁剪后的位于可視體內(nèi)的圖元會(huì)被傳遞到屏幕映射階段,此時(shí)的坐標(biāo)信息依然是三維的。圖元的 X、Y 坐標(biāo)被變換到屏幕坐標(biāo)系,屏幕坐標(biāo)再加上 Z 軸坐標(biāo)就被稱作窗口坐標(biāo)。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      我們假定場(chǎng)景要渲染到一個(gè)最小角落坐標(biāo)為(x1, y1)和最大角落坐標(biāo)為 (x2, y2)的窗口中,也就是 x1 《 x2,y1 《 y2。此時(shí),屏幕映射執(zhí)行的是一個(gè)縮放處理后的轉(zhuǎn)換操作。Z 軸坐標(biāo)并不受此操作的影響。

      現(xiàn)在,新的 x 軸、 y 軸坐標(biāo)就是屏幕坐標(biāo),有對(duì)應(yīng)的屏幕像素位置,不再是之前投影處理后的那個(gè)立方體所采用的映像坐標(biāo)系統(tǒng)。

      光柵處理階段要干些什么呢?

      在獲得了經(jīng)過(guò)變換和投影處理的頂點(diǎn)及其相關(guān)聯(lián)的著色信息后,光柵化處理階段的目的就是計(jì)算并設(shè)置好被對(duì)象覆蓋區(qū)域的像素顏色。這個(gè)處理被稱作光柵化或者掃描轉(zhuǎn)換,也就是把二維坐標(biāo)上包含深度(Z 軸)信息和各種相關(guān)著色信息的頂點(diǎn)到屏幕上像素的轉(zhuǎn)換。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      這個(gè)處理階段一般可以拆分為 4 個(gè)工位:

      1、三角形設(shè)定

      2、三角形遍歷

      3、像素著色

      4、輸出合并

      三角形設(shè)定

      這一步會(huì)進(jìn)行三角形表面的微分以及其他關(guān)于三角形表面數(shù)據(jù)的計(jì)算,計(jì)算出來(lái)的數(shù)據(jù)會(huì)被用于掃描轉(zhuǎn)換以及幾何階段所產(chǎn)生的各種著色數(shù)據(jù)的插值處理。在GPU上這一步會(huì)采用固定硬件功能單元來(lái)實(shí)現(xiàn)。

      三角形遍歷

      這一步用作確定像素的中心是否被三角形覆蓋 ,如果該像素被三角形覆蓋的話,就會(huì)生成對(duì)應(yīng)的片元(fragment)。

      查找哪些樣本或者像素是否位于三角形內(nèi)通常被稱作三角形遍歷或者掃描轉(zhuǎn)換。

      每個(gè)三角形對(duì)應(yīng)片元的屬性都是由該三角形的三個(gè)頂點(diǎn)數(shù)據(jù)插值而成,例如片元的深度值以及來(lái)自幾何階段的著色數(shù)據(jù)。

      像素著色

      所有的逐像素(per-pixel)著色計(jì)算都在這一步執(zhí)行,使用的輸入數(shù)據(jù)是之前插值的著色數(shù)據(jù)。像素著色發(fā)送到下一個(gè)工位的計(jì)算的結(jié)果可能是一個(gè)色彩值也可能是多個(gè)色彩值。

      和三角形設(shè)定以及三角形遍歷不同采用固定硬件功能單元不同的是,現(xiàn)在的像素著色都是由可編程的GPU內(nèi)核執(zhí)行。

      在像素著色所依賴的眾多技術(shù)中最為重要的就是貼圖(texturing),所謂貼圖就是把一張或者多張圖片“貼”到對(duì)象上。

      輸出合并

      在這一步執(zhí)行的操作主要是將之前步驟生成的色彩信息進(jìn)行合并形成最終輸出的像素色彩。

      用于存放像素色彩信息的緩存被稱作色彩緩存,一般情況下是以紅、綠、藍(lán)三個(gè)色元的方式存放,此外還有一個(gè)用于存放像素對(duì)應(yīng)深度信息值的深度緩存(一般采用 Z-Buffer)。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      在GPU中實(shí)現(xiàn)這一步的功能單元有幾種叫法,例如 ROP、Output Merger 或者 Back-End。

      在這個(gè)階段,Output Merger 會(huì)根據(jù)深度緩存(depth buffer 或者 Z-buffer)存放的深度信息判斷是否更新色彩緩存中的色彩值。

      例如當(dāng)前像素計(jì)算出來(lái)的深度值(例如是 0.1)比深度緩存中對(duì)應(yīng)像素的值?。ɡ缡?0.2),則表示當(dāng)前像素的三角形比色彩緩存存放的像素所對(duì)應(yīng)的三角形更靠近“攝像頭”,于是GPU會(huì)對(duì)該圖元的色彩進(jìn)行計(jì)算并把新計(jì)算出來(lái)的色彩值和深度值更新到色彩緩存和深度緩存中,否則的話就不會(huì)更新當(dāng)前像素的緩存。

      在整個(gè)場(chǎng)景完成渲染后,色彩緩存中存放的都是從攝像機(jī)視角位置看到的可視圖元色彩值。

      這樣處理的好處是三角形可以使用任意次序來(lái)渲染,但是如果圖元或者說(shuō)三角形是部分透明的話,則必須依照從遠(yuǎn)到近的三角形層次進(jìn)行渲染。這是 Z-Buffer 的主要缺點(diǎn)之一。

      像素除了色彩緩存和深度緩存外,還有其他利用通道或者緩存的技術(shù)來(lái)用于過(guò)濾和捕捉片元(fragmet)信息。

      通常和色彩一起存放于色彩緩存的阿爾法通道(Alpha Channel)包含了每個(gè)像素的相對(duì)不透明值,開發(fā)人員可以在進(jìn)行深度測(cè)試之前對(duì)到來(lái)的片元先執(zhí)行名為阿爾法測(cè)試(Alpha Test)的操作。如果片元的 alpha 值測(cè)試(一般是等于、大于等簡(jiǎn)單的操作)為“假”,那么這個(gè)像素的后續(xù)處理操作就會(huì)被省略掉。這個(gè)操作通常用于確保完全透明的片元不會(huì)對(duì) Z-buffer 構(gòu)成影響。

      此外,還可能會(huì)涉及到名為蠟板緩存(Stencil Buffer)的技術(shù)。Stencil Buffer 作為一個(gè)離屏緩存一般用于存放已渲染圖元的位置,它通常用于進(jìn)行一些特殊效果的處理,例如將一個(gè)“實(shí)心”圓存放到蠟板緩存中,之后配合其他操作,就可以將被覆蓋圖元的色彩值控制為只有在位于這個(gè)實(shí)心圓中的時(shí)候才被呈現(xiàn),相當(dāng)于一個(gè)遮罩的作用。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      以上這些緩存都被統(tǒng)稱為幀緩存,但是在一般情況下,幀緩存特指色彩緩存和深度緩存。由于畫面渲染是需要時(shí)間的,為了保證出到顯示器或者顯示屏的時(shí)候圖元都是已經(jīng)完成渲染的,人們引入了雙緩存技術(shù),渲染中的被稱為后臺(tái)緩存(back buffer),完成渲染的稱作前臺(tái)緩存(front buffer),在后臺(tái)緩存完成渲染后,馬上變成前臺(tái)緩存,而前臺(tái)緩存就切換為后臺(tái)緩存,以此類推。

      片元(fragmet)和像素(pixel)的區(qū)別?

      上文中我們提到了片元和像素,像素是相對(duì)容易理解的,嚴(yán)格來(lái)說(shuō),像素就是對(duì)應(yīng)屏幕上的一個(gè)點(diǎn),它有表示屏幕位置的 x、y 坐標(biāo)以及顏色的紅綠藍(lán)(RGB)值(像素是沒(méi)有 Alpha 通道值的),圖形流水線所作的所有事情都是為了給輸入的圖元計(jì)算在屏幕上像素的顏色。

      那么,片元又是怎么一回事呢?

      在三角形遍歷和輸出合并之間計(jì)算的柵格數(shù)據(jù)就是片元,它們是像素的前身,在遍歷的時(shí)候由頂點(diǎn)內(nèi)插而成。片元除了具備像素的 x、y 坐標(biāo)外,還有表示深度的 z 坐標(biāo)以及頂點(diǎn)的屬性信息(顏色、片元法線、紋理坐標(biāo))。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      正如前面所說(shuō)的,深度坐標(biāo)記錄的是圖元的相對(duì)距離,在深度測(cè)試的時(shí)候被遮蔽(或者阿爾法測(cè)試中為透明)的圖元會(huì)在輸出合并階段被拋棄掉,。

      片元這個(gè)說(shuō)法是 OpenGL 或者大多數(shù)實(shí)時(shí)圖形渲染文獻(xiàn)中的概念,而 D3D 則沒(méi)有這么嚴(yán)格的區(qū)分,片元和像素都統(tǒng)稱為像素。

      我們這里討論的都是以實(shí)時(shí)三角形渲染為例,除此以外還有其他三維渲染流水線形式,例如 micropolygon(微型多邊形)、Voxel(體素) 渲染。

      現(xiàn)在的GPU流水線也是遵照這樣的圖形流水線來(lái)設(shè)計(jì),在一段時(shí)間里,出于成本效益的考慮,GPU 的各個(gè)功能單元都是有專門的電路來(lái)實(shí)現(xiàn)的。

      不過(guò)在新式的GPU中,可編程部分(例如頂點(diǎn)程序、片元程序)由于指令集得以統(tǒng)一,所以都采用了同樣的計(jì)算單元來(lái)跑。

      公認(rèn)必須采用固定功能硬件單元來(lái)實(shí)現(xiàn)的主要是三角形設(shè)置、遍歷以及輸出合并單元,英特爾曾經(jīng)試圖在名為 Larrabee 的GPU項(xiàng)目里將這些工位采用通用單元來(lái)執(zhí)行,但是最終結(jié)果是不了了之,至少說(shuō)明現(xiàn)階段或者在未來(lái)可見的較長(zhǎng)時(shí)期里,三角形設(shè)置/遍歷以及輸出合并的最合理實(shí)現(xiàn)方式還是使用固定功能硬件單元。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      (Intel Larrabee)

      在現(xiàn)實(shí)中GPU并不僅僅是上面討論的三維處理、計(jì)算單元,廣義的GPU還應(yīng)該包括視頻編解碼單元、掃描輸出單元、總線單元、存儲(chǔ)單元,手機(jī)GPU現(xiàn)在都和 CPU、基帶、周邊等單元集成到同一個(gè)芯片里,這樣的芯片被稱作 SoC(片上系統(tǒng)),SoC 并非是手機(jī)獨(dú)有的,在此之前的單片機(jī)(例如洗衣機(jī)等里就有,一般幾塊錢一顆)其實(shí)就是 SoC 的一種實(shí)現(xiàn)方式。

      GPU 在移動(dòng)應(yīng)用中能發(fā)揮的作用

      GPU 最初是為三維游戲加速設(shè)計(jì)的,所以它最拿手的自然是三維游戲加速,現(xiàn)在無(wú)論是安卓、iOS 都有不少三維游戲大作,例如:勞拉 Go、FIFA 系列、真人快打 X、Hitman Sniper、Marvel Future Fight、Godfire: Rise of Promotheus、Over Kill、Implosion、Battle supremacy 等等。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

      除了游戲渲染加速外,智能手機(jī)的操作系統(tǒng)界面也是采用了GPU硬件加速的,例如選單的彈出、桌面平移等。和桌面操作系統(tǒng)使用三維加速相比,移動(dòng)操作系統(tǒng)由于受到屏幕空間小的約束,因此三維加速體驗(yàn)帶來(lái)的空間感拓展是更加不可或缺的。從安卓4.0系統(tǒng)開始,不少用戶就感覺(jué)到系統(tǒng)流暢性大幅度提高正是因?yàn)閺南到y(tǒng)層面上線了GPU硬件加速。

      通用計(jì)算加速原本也是在非移動(dòng)應(yīng)用上的技術(shù),不過(guò)隨著智能手機(jī)的高速發(fā)展,已經(jīng)有了不少開發(fā)人員利用GPU的通用計(jì)算能力來(lái)進(jìn)行一些有意義的加速。

      例如在蘋果機(jī)上有一款名為極拍的 APP,利用蘋果手機(jī)的GPU對(duì)攝像頭拍攝的視頻進(jìn)行實(shí)時(shí)降噪處理,可以將蘋果手機(jī)的夜間視頻達(dá)到單反攝像機(jī)的夜間視頻拍攝效果,這是非常具有實(shí)用意義的。

      另一個(gè)典型是高通驍龍?zhí)幚砥鳎珹TI是最早提倡通用計(jì)算加速的GPU制造商,而Adreno 200 GPU正源自ATI Imageon項(xiàng)目。發(fā)展至今,在高通驍龍820上的Adreno 530已經(jīng)能實(shí)現(xiàn)輔助全景照片合成、幫助“認(rèn)知計(jì)算平臺(tái)”Zeroth識(shí)別物體。

      移動(dòng)圖形芯片的故事(上)GPU是什么鬼?

     ?。?amp;ldquo;認(rèn)知計(jì)算平臺(tái)”Zeroth演示)

      GPU 在這三方面的作用對(duì)我們手機(jī)的日常應(yīng)用產(chǎn)生了直接的影響,許多手機(jī)媒體口頭整天掛著的使用體驗(yàn),其實(shí)都離不開 GPU。

      淺析GPU的常見術(shù)語(yǔ)

      在下篇文章中SIMD、Core、GPU 中的線程、統(tǒng)一著色器、紋理單元這些GPU常見術(shù)語(yǔ)對(duì)一般讀者來(lái)說(shuō)都是相當(dāng)陌生或者容易產(chǎn)生困擾,在此先進(jìn)行淺析。

      SIMD:

      Single Instruction Multiple Data,單指令多數(shù)據(jù)流,目前所有的GPU在基本功能單元層面都屬于SIMD(業(yè)界也接受NVIDIA提出的SIMT——單指令多線程),一般是16路SIMD或者32路 SIMD。

      “內(nèi)核”或者core:

      目前在GPU行業(yè)或者GPU行銷上被嚴(yán)重濫用的名詞,它被用作指代SIMD一條Lane(計(jì)算通道)上的單元集合,里面可能有一個(gè)單周期 32位FMA(積和熔加運(yùn)算)運(yùn)算器、一個(gè)雙周期64位FMA運(yùn)算器等等,GPU廠商把GPU里的SIMD Lane數(shù)加起來(lái)就對(duì)外宣稱有多少個(gè)內(nèi)核。

      這樣的說(shuō)法是否屬于錯(cuò)誤宣傳還真不好說(shuō),因?yàn)槟壳安](méi)有什么法律文件規(guī)定怎樣的集合才算是一個(gè)內(nèi)核。

      不過(guò)對(duì)于計(jì)算機(jī)科學(xué)來(lái)說(shuō),微架構(gòu)里對(duì)內(nèi)核約定俗成的看法是它必須有一個(gè)PC(程序計(jì)算器,它是一個(gè)寄存器,其中存放的一般是指向該內(nèi)核要執(zhí)行的下一條指令的地址)。

      這樣的話,一個(gè)GPU內(nèi)核顯然不能是SIMD單元中的一個(gè)Lane,它的層級(jí)至少應(yīng)該高一級(jí)。

      所以,GPU上相對(duì)嚴(yán)格的“內(nèi)核”概念單元對(duì)應(yīng)的應(yīng)該是類似與AMD GCN的Compute Unite、NVIDIA Maxwell中的SMM、PowerVR Series 6/7的USC等名詞命名的單元集合,在OpenCL中,這個(gè)層級(jí)的單元集合被稱作Compute Unit(計(jì)算單元,簡(jiǎn)稱CU,AMD的GCN微架構(gòu)也采用Compute Unit這個(gè)術(shù)語(yǔ),完全對(duì)應(yīng)OpenCL的Compute Unit),而GPU廠商的行銷術(shù)語(yǔ) “內(nèi)核” 或者“core” 在OpenCL中被稱作Process Element,簡(jiǎn)稱PE。

      GPU中的線程:

      現(xiàn)在的GPU都采用了多層次線程技術(shù),按照硬件開發(fā)商提供的文檔,對(duì)應(yīng)SIMD Lane的被稱作thread(OpenCL中稱作work-item,在圖形渲染的時(shí)候你可以將其看作是屏幕上的一個(gè)像素),是最小的線程單位;

      往上的一層線程單位在新的OpenCL被稱作sub-group,NVIDIA稱作warp 或者thread warp,AMD稱作wavefront,屬于GPU執(zhí)行調(diào)度的最小硬件線程單位。再往上就是workgroup(NVIDIA 稱之為thread block)和NDRange(NVIDIA稱之為Grid,由若干個(gè)workgroup或者thread block組成)。

      Workgroup的對(duì)應(yīng)GPU硬件關(guān)系是Compute Unit,同一時(shí)間里Compute Unit跑的都是一個(gè)workgroup,而Grid則對(duì)應(yīng)GPU的一個(gè)partition(分區(qū),在設(shè)備或者說(shuō)加速器允許的情況下,OpenCL可以把一個(gè)設(shè)備分成若干個(gè)分區(qū)來(lái)使用)。

      你可以把飯粒比作是work-item,而每一口飯則算是一個(gè)sub-group,一碗飯看作是一個(gè) workgroup,飯煲看作是NDRange(sorry,我的比喻未必很恰當(dāng))。

      統(tǒng)一著色器

      在 DX10以后,由于幾何、像素的指令格式一樣,使得幾何和像素處理可以在同樣的單元上執(zhí)行,自此以后臺(tái)式GPU都采用了統(tǒng)一著色器設(shè)計(jì),以確保著色器的利用率提高。

      紋理單元

      紋理單元或者說(shuō)紋理映射單元是GPU中計(jì)算紋理坐標(biāo)和獲得紋理樣本的單元。在繪制某個(gè)對(duì)象的時(shí)候,每個(gè)紋理單元進(jìn)行一個(gè)紋理取樣動(dòng)作,不同的繪制對(duì)象每次的取樣動(dòng)作都可以更改使用的紋理。紋理單元的性能指標(biāo)一般用 TexOps/s 來(lái)表示,表示每秒的紋理操作數(shù),不同的紋理格式和不同的紋理過(guò)濾算法以及硬件實(shí)現(xiàn)、內(nèi)存帶寬都會(huì)對(duì)這個(gè)指標(biāo)產(chǎn)生影響。紋理單元一般和若干個(gè)著色器綁定在一起。

    (審核編輯: 滄海一土)

    聲明:除特別說(shuō)明之外,新聞內(nèi)容及圖片均來(lái)自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請(qǐng)聯(lián)系我們刪除。