400-638-8808
|
微信公眾號




穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無阻

協(xié)同辦公 資源管理

超大郵件 超級功能

智能反垃圾郵件技術
易管理 免維護

在GPU出現(xiàn)以前,顯卡和CPU的關系有點像“主仆”,簡單地說這時的顯卡就是畫筆,根據(jù)各種有CPU發(fā)出的指令和數(shù)據(jù)進行著色,材質(zhì)的填充、渲染、輸出等。
較早的娛樂用的3D顯卡又稱“3D加速卡”,由于大部分坐標處理的工作及光影特效需要由CPU親自處理,占用了CPU太多的運算時間,從而造成整體畫面不能非常流暢地表現(xiàn)出來。
例如,渲染一個復雜的三維場景,需要在一秒內(nèi)處理幾千萬個三角形頂點和光柵化幾十億的像素。早期的3D游戲,顯卡只是為屏幕上顯示像素提供一個緩存,所有的圖形處理都是由CPU單獨完成。圖形渲染適合并行處理,擅長于執(zhí)行串行工作的CPU實際上難以勝任這項任務。所以,那時在PC上實時生成的三維圖像都很粗糙。不過在某種意義上,當時的圖形繪制倒是完全可編程的,只是由CPU來擔綱此項重任,速度上實在是達不到要求。
隨著時間的推移,CPU進行各種光影運算的速度變得越來越無法滿足游戲開發(fā)商的要求,更多多邊形以及特效的應用榨干了幾乎所有的CPU性能,矛盾產(chǎn)生了······
GPU的誕生
NVIDIA公司在1999年8月31日發(fā)布GeForce 256圖形處理芯片時首先提出GPU的概念。
GPU之所以被稱為圖形處理器,最主要的原因是因為它可以進行幾乎全部與計算機圖形有關的數(shù)據(jù)運算,而這些在過去是CPU的專利。
目前,計算機圖形學正處于前所未有的發(fā)展時期。近年來,GPU技術以令人驚異的速度在發(fā)展。渲染速率每6個月就翻一番。性能自99年,多年來翻番了十倍百倍,也就是(2的10次方比2)提高了上千倍!與此同時,不僅性能得到了提高,計算質(zhì)量和圖形編程的靈活性也逐漸得以改善。
以前,PC和計算機工作站只有圖形加速器,沒有圖形處理器(GPU),而圖形加速器只能簡單的加速圖形渲染。而GPU取代了圖形加速器之后,我們就應該摒棄圖形加速器的舊觀念。
GPU的結構
GPU全稱是Graphic Processing Unit--圖形處理器,其最大的作用就是進行各種繪制計算機圖形所需的運算,包括頂點設置、光影、像素操作等。GPU實際上是一組圖形函數(shù)的集合,而這些函數(shù)由硬件實現(xiàn)。以前,這些工作都是有CPU配合特定軟件進行的,GPU從某種意義上講就是為了在圖形處理過程中充當主角而出現(xiàn)的。
一個簡單的GPU結構示意圖包含一塊標準的GPU主要包括2D Engine、3D Engine、VideoProcessing Engine、FSAA Engine、顯存管理單元等。其中,3D運算中起決定作用的是3DEngine,這是現(xiàn)代3D顯卡的靈魂,也是區(qū)別GPU等級的重要標志。3DEngine在各公司的產(chǎn)品中都是宣傳攻勢的重點照顧對象,名字一個比一個響,像NVIDIA的nFjnjtFX系列、CineFX系列,AMD的SmoothVision系列。一個3DEngine通常包含著T&L單元、VertexProeessingEngine、SetupEngine、PiexlShader等部分。
GPU的工作原理
GPU中數(shù)據(jù)的處理流程

GPU流程示意圖
現(xiàn)在讓我們來看看第二代GPU是如何完整處理一個畫面的吧!首先,來自CPU的各種物理參數(shù)進入GPU,Vertex shader將對頂點數(shù)據(jù)進行基本的判斷。如果沒有需要處理的Vertex 效果,則頂點數(shù)據(jù)直接進入T&L Unit 進行傳統(tǒng)的T&L操作以節(jié)約時間提高效率。如果需要處理各種Vertex 效果,則Vertex shader將先對各種Vertex Programs的指令進行運算,一般的Vertex Programs中往往包含了過去轉換、剪切、光照運算等所需要實現(xiàn)的效果,故經(jīng)由Vertex shader處理的效果一般不需要再進行T&L操作。另外,當遇到涉及到曲面鑲嵌(把曲面,比如弓形轉換成為多邊形或三角形)的場合時。CPU可以直接將數(shù)據(jù)交給Vertex shader進行處理。
另外,在DireetX的Transform過程中,Vertex shader可以完成Z值的剔除,也就是Back Face Culling――陰面隱去。這就意味粉除了視野以外的頂點,視野內(nèi)坡前面項點遮住的頂點也會被一并剪除,這大大減輕了需要進行操作的頂點數(shù)目。
接下來,經(jīng)由VertexShader處理完成的各種數(shù)據(jù)將流入SetupEngine,在這里,運算單元將進行三角形的設置工作,這是整個繪圖過程中最重要的一個步驟,Setup Engine甚至直接影響著一塊GPU的執(zhí)行效能。三角形的設置過程是由一個個多邊形組成的,或者是用更好的三角形代替原來的三角形。在三維圖象中可能會有些三角形被它前面的三角形擋住,但是在這個階段3D芯片還不知道哪些三角形會被擋住,所以三角形建立單元接收到是一個個由3個頂點組成的完整三角形。三角形的每個角(或頂點)都有對應的X軸、Y軸、Z軸坐標值,這些坐標值確定了它們在3D景物中的位置。同時,三角形的設置也確定了像素填充的范圍。,至此,VertexShader的工作就完成了。
過去[第一代],設置好的三角形本來應該帶著各自所有的參數(shù)進入像素流水線內(nèi)進行紋理填充和演染,但現(xiàn)在則不同,在填充之前我們還播要進行PiexlShader的操作。其實,PieXIShader并非獨立存在的,它位于紋理填充單元之后,數(shù)據(jù)流入像紊流水線后先進入紋理填充單元進行紋理填充,然后便是Piex!Shader單元,經(jīng)由PiexlShader單元進行各種處理運算之后再進入像素填充單元進行具體的粉色,再經(jīng)由霧化等操作后,一個完整的畫面就算完成了。值得注意的是,第二代GPU中普遮引入了獨立的顯示數(shù)據(jù)管理機制,它們位于VertexShader、SetuPEngine以及像素流水線之間,負資數(shù)據(jù)更有效率地傳輸和組合、各種無效值的剔除、數(shù)據(jù)的壓縮以及寄存器的管理等工作,這個單元的出現(xiàn)對整個GPU工作效率的保證起到了至關重要的作用。
簡而言之,GPU的圖形(處理)流水線完成如下的工作:(并不一定是按照如下順序)
頂點處理:這階段GPU讀取描述3D圖形外觀的頂點數(shù)據(jù)并根據(jù)頂點數(shù)據(jù)確定3D圖形的形狀及位置關系,建立起3D圖形的骨架。在支持DX系列規(guī)格的GPU中,這些工作由硬件實現(xiàn)的Vertex Shader(定點著色器)完成。
光柵化計算:顯示器實際顯示的圖像是由像素組成的,我們需要將上面生成的圖形上的點和線通過一定的算法轉換到相應的像素點。把一個矢量圖形轉換為一系列像素點的過程就稱為光柵化。例如,一條數(shù)學表示的斜線段,最終被轉化成階梯狀的連續(xù)像素點。
紋理帖圖:頂點單元生成的多邊形只構成了3D物體的輪廓,而紋理映射(texture mapping)工作完成對多變形表面的帖圖,通俗的說,就是將多邊形的表面貼上相應的圖片,從而生成“真實”的圖形。TMU(Texture mapping unit)即是用來完成此項工作。
像素處理:這階段(在對每個像素進行光柵化處理期間)GPU完成對像素的計算和處理,從而確定每個像素的最終屬性。在支持DX8和DX9規(guī)格的GPU中,這些工作由硬件實現(xiàn)的Pixel Shader(像素著色器)完成。
最終輸出:由ROP(光柵化引擎)最終完成像素的輸出,1幀渲染完畢后,被送到顯存幀緩沖區(qū)。
總結:GPU的工作通俗的來說就是完成3D圖形的生成,將圖形映射到相應的像素點上,對每個像素進行計算確定最終顏色并完成輸出。
CPU與GPU的數(shù)據(jù)處理關系
如今的顯卡圖形,單單從圖象的生成來說大概需要下面四個步驟:
1、Homogeneouscoordinates(齊次坐標)
2、Shadingmodels(陰影建模)
3、Z-Buffering(Z-緩沖)
4、Texture-Mapping(材質(zhì)貼圖)
在這些步驟中,顯示部分(GPU)只負責完成第三、四步,而前兩個步驟主要是依靠 CPU 來完成。而且,這還僅僅只是3D圖象的生成,還沒有包括圖形中復雜的AI運算。場景切換運算等等……無疑,這些元素還需要CPU去完成。
接下來,讓我們簡單的看一下CPU和GPU之間的數(shù)據(jù)是如何交互的。
首先從硬盤中讀取模型, CPU分類后將多邊形信息交給GPU,GPU再時時處理成屏幕上可見的多邊形,但是沒有紋理只有線框。
模型出來后,GPU將模型數(shù)據(jù)放進顯存,顯卡同時也為模型貼材質(zhì),給模型上顏色。CPU相應從顯存中獲取多邊形的信息。然后CPU計算光照后產(chǎn)生的影子的輪廓。等CPU計算出后,顯卡的工作又有了,那就是為影子中填充深的顏色
這一點要注意的是,無論多牛的顯卡,光影都是CPU計算的,GPU只有2個工作,1多邊形生成。2為多邊形上顏色。
傳統(tǒng)GPU指令的執(zhí)行
傳統(tǒng)的GPU基于SIMD的架構。SIMD即SingleInstruction Multiple Data,單指令多數(shù)據(jù)。其實這很好理解,傳統(tǒng)的VS和PS中的ALU(算術邏輯單元,通常每個VS或PS中都會有一個ALU,但這不是一定的)都能夠在一個周期內(nèi)(即同時)完成對矢量4個通道的運算。比如執(zhí)行一條4D指令,PS或VS中的ALU對指令對應定點和像素的4個屬性數(shù)據(jù)都進行了相應的計算。這便是SIMD的由來。這種ALU我們暫且稱它為4DALU。
需要注意的是,4D SIMD架構雖然很適合處理4D指令,但遇到1D指令的時候效率便會降為原來的1/4。此時ALU 3/4的資源都被閑置。為了提高PS VS執(zhí)行1D 2D 3D指令時的資源利用率,DirectX9時代的GPU通常采用1D+3D或2D+2DALU。這便是Co-issue技術。這種ALU對4D指令的計算時仍然效能與傳統(tǒng)的ALU相同,但當遇到1D 2D 3D指令時效率則會高不少,例如如下指令:
ADD R0.xyz , R0,R1 //此指令是將R0,R1矢量的x,y,z值相加 結果賦值給R0
ADD R3.x , R2,R3 //此指令是將R2 R3矢量的w值相加 結果賦值給R3
對于傳統(tǒng)的4D ALU,顯然需要兩個周期才能完成,第一個周期ALU利用率75% ,第二個周期利用率25%。而對于1D+3D的ALU,這兩條指令可以融合為一條4D指令,因而只需要一個周期便可以完成,ALU利用率100%。 當然,即使采用co-issue,ALU利用率也不可能總達到100%,這涉及到指令并行的相關性等問題,而且,更直觀的,上述兩條指令顯然不能被2D+2DALU一周期完成,而且同樣,兩條2D指令也不能被1D+3DALU一周期完成。傳統(tǒng)GPU在對非4D指令的處理顯然不是很靈活。
GPU的多線程及并行計算
GPU的功能更新很迅速,平均每一年多便有新一代的GPU誕生,運算速度也越來越快。GPU的運算速度如此之快,主要得益于GPU是對圖形實時渲染量身定制的,具有兩點主要特征:超長流水線與并行計算。
多線程機制
GPU的執(zhí)行速度很快,但是當運行從內(nèi)存中獲取紋理數(shù)據(jù)這樣的指令時(由于內(nèi)存訪問是瓶頸,此操作比較緩慢),整個流水線便出現(xiàn)長時間停頓。在CPU內(nèi)部,使用多級Cache來提高訪問內(nèi)存的速度。GPU中也使用Cache,不過Cache命中率不高,只用Cache解決不了這個問題。所以,為了保持流水線保持忙碌,GPU的設計者使用了多線程機制(multi-threading)。當像素著色器針對某個像素的線程A遇到存取紋理的指令時,GPU會馬上切換到另外一個線程B,對另一個像素進行處理。等到紋理從內(nèi)存中取回時,可再切換到線程A。
例如:如果裝配一臺汽車需要,10個時間單元,將它分成10個流水線階段,每個階段分配一個時間單元,那么一條裝配線每一個時間單元就可以生產(chǎn)一輛汽車。顯然流水線模式的生產(chǎn)在理想狀況下要比串行方式快了十倍。
但是使用這種方法有一個前提,線程A與線程B沒有數(shù)據(jù)依賴性,也就是說兩線程之間無需通訊。如果線程B需要線程A提供某些數(shù)據(jù),那么即使切換到線程B,線程B仍是無法運行,流水線還是處于空閑狀態(tài)。不過幸運的是,圖形渲染本質(zhì)上是一個并行任務。

并行計算
無論是CPU送給GPU的頂點數(shù)據(jù),還是GPU光柵生成器產(chǎn)生的像素數(shù)據(jù)都是互不相關的,可以并行地獨立處理。而且頂點數(shù)據(jù)(xyzw),像素數(shù)據(jù)(RGBA)一般都用四元數(shù)表示,適合于并行計算。在GPU中專門設置了SIMD指令來處理向量,一次可同時處理四路數(shù)據(jù)。SIMD指令使用起來非常簡潔。此外,紋理片要么只能讀取,要么只能寫入,不允許可讀可寫,從而解決了存貯器訪問的讀寫沖突。GPU這種對內(nèi)存使用的約束也進一步保證了并行處理的順利完成。
為了進一步提高并行度,可以增加流水線的條數(shù)。在GPU中,有多達16組像素著色器流水線,6組頂點著色器流水線。多條流水線可以在單一控制部件的集中控制下運行,也可以獨立運行。在單指令多數(shù)據(jù)流(SIMD)的結構中,GPU通過單指令多數(shù)據(jù)(SIMD)指令類型來支持數(shù)據(jù)并行計算。在單指令多數(shù)據(jù)流的結構中,單一控制部件向每條流水線分派指令,同樣的指令被所有處理部件同時執(zhí)行。例如NVIDIA顯卡中包含有14組多處理器(MultiProcessor),每組處理器有8個處理單元(Processor),但每組多處理器只包含一個指令單元(InstruetionUnit)。

另外一種控制結構是多指令多數(shù)據(jù)流(MIMD),每條流水線都能夠獨立于其他流水線執(zhí)行不同的程序。顯卡的頂點著色器流水線使用MIMD方式控制,像素著色器流水線使用SIMD結構。MIMD能比較有效率地執(zhí)行分支程序,而SIMD體系結構運行條件語句時會造成很低的資源利用率。不過SIMD需要硬件少,這是一個優(yōu)勢。
CPU中大部分晶體管主要用于構建控制電路(象分支預測等)和Cache,只有少部分的晶體管來完成實際的運算工作。而GPU的控制相對簡單,而且對Cache的需求小,所以大部分晶體管可以組成各類專用電路、多條流水線,使得GPU的計算速度有了突破性的飛躍,擁有了驚人的處理浮點運算的能力,F(xiàn)在CPU的技術進步正在慢于摩爾定律,而GPU(視頻卡上的圖形處理器)的運行速度已超過摩爾定律,每6個月其性能加倍。
GPU未來的展望
GPU能否包辦一切
無論是電影畫面的離線渲染、地球物理學數(shù)據(jù)處理,還是水庫建模,這些運算原本都應該由CPU完成,那么 GPU有沒有可能包辦一切呢?
答案是肯定的。DirectX新技術和統(tǒng)一Shader架構的出現(xiàn),讓GPU在可編程性上有了大幅度的提升。不僅如此,飛速發(fā)展的制造工藝令 GPU 可以整合更多的晶體管,實現(xiàn)更多的功能。目前的GPU,已經(jīng)可以幫助CPU進行對高清視頻的完全硬解碼,雖然是通過加入了專門的處理單元,但其意義已經(jīng)足以說明 GPU在未來的計算領域,將會有一番大作為,位置從CPU的從屬,轉變?yōu)橹鲗А?/p>
GPU時代即將到來
隨著 CUDA 的進一步開發(fā)和完善,GPU 的運算能力也將得到進一步的強化。目前的 CUDA和GPU的配合還處于起步階段,正在真正的民用市場逐步起步。而且,利用GPU進行高性能計算的門檻很低,只要有一片 Quadro或 GeForce 系列顯卡,就能夠進行高性能計算,一些研究人員也已經(jīng)開始使用CUDA,利用 GPU數(shù)倍于CPU的浮點運算能力,進行各種各樣的科學模擬、運算。CUDA 的推出對于通用計算領域無疑是一個革命性的改變,而 GPU 的實際功能也會隨著CUDA 的完善而變革。也許在不遠的將來,因為CUDA的存在,CPU的運算功能將會不斷淡化,GPU的時代即將到來。
【后記】
CPU第一個整合的就是專門用來加速浮點運算的協(xié)處理器,此后歷代SSE指令集也都是為了加強CPU的SIMD(單指令多數(shù)據(jù)流)浮點運算性能。而GPU打從一開始就被設計成為了SIMD架構(至今Cypress也還是這種架構),擁有恐怖浮點運算能力的處理器。當今GPU的浮點運算能力更是達到多核CPU的幾十倍甚至上百倍!
CPU永遠都趕不上GPU的發(fā)展速度,因此最適合進行浮點運算的顯然是GPU,CPU繼續(xù)擴充核心數(shù)目已經(jīng)變得毫無意義,因此整個業(yè)界都在想方設法的發(fā)掘GPU的潛能,將所有的并行計算任務都轉移到GPU上面來。即便是Intel也看到了GPU廣闊的前景,因此著手研發(fā)GPU。
GPU從誕生至今一步步走來,就是在不斷蠶食著原本屬于CPU的功能,或者說是幫助CPU減負、去處理哪些CPU并不擅長的任務。比如最開始的T&L(坐標轉換與光源)、VCD\DVD\HD\BD視頻解碼、物理加速、幾何著色。而今后和未來,GPU將奪走一項CPU最重要的功能——并行計算、高精度浮點運算。
AMD和Intel都已推出CPU整合GPU的產(chǎn)品,不管是膠水還是原生的解決方案,其目的并不是為了消滅顯卡和GPU,而是通過內(nèi)置的GPU為CPU提供強大的浮點運算能力。但由于制造工藝所限,被CPU所整合的GPU不是集成卡就是中低端,只能滿足基本需求。所以想要更強大的性能和并行計算性能的話,專為浮點運算而設計的新一代架構的GPU產(chǎn)品,才是最明智的選擇。
所以說,CPU和GPU,誰也不可能取代誰,雙方是互補的關系,只有CPU和GPU協(xié)同運算,各自去處理最擅長的任務,才能發(fā)揮出計算機最強的效能。CPU會整合GPU的,但僅限中低端產(chǎn)品;GPU會取代CPU進行浮點運算的,但它仍然需要CPU來運行操作系統(tǒng)并控制整個計算機。只有當制造工藝發(fā)達到一定程度時才有可能將CPU和GPU完美融合在一起,到時候是CPU整合GPU還是GPU整合CPU都很難說,但誰被誰整合已經(jīng)不重要了。
本文來源:啃芝士
需要人工智能服務器、AI服務器、GPU服務器、FPGA云服務器等詳詢天下數(shù)據(jù)客服電話400-638-8808 官網(wǎng):m.51huadong.com。
天下數(shù)據(jù)手機站 關于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務器、美國服務器、海外云主機、海外vps主機租用托管以及服務器解決方案-做天下最好的IDC服務商
《中華人民共和國增值電信業(yè)務經(jīng)營許可證》 ISP證:粵ICP備07026347號
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運營)聯(lián)合版權
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號建安商業(yè)大廈7樓
7×24小時服務熱線:4006388808香港服務電話:+852 67031102
本網(wǎng)站的域名注冊業(yè)務代理北京新網(wǎng)數(shù)碼信息技術有限公司的產(chǎn)品