GPU為何可處圖形工作?GPU和顯卡有何區(qū)別?
沒有GPU,我們的圖形界面將不復(fù)存在,由此可見GPU的重要性。在上篇文章中,小編對GPU渲染有所介紹。為增進(jìn)大家對GPU的認(rèn)識,本文將對GPU、CPU、顯卡的區(qū)別加以闡述,并講解為何GPU可處理圖形工作。如果你對GPU具有興趣,不妨繼續(xù)往下閱讀哦。
一、GPU與CPU
GPU 是并行編程模型,和CPU的串行編程模型完全不同,導(dǎo)致很多CPU 上優(yōu)秀的算法都無法直接映射到GPU 上,并且GPU的結(jié)構(gòu)相當(dāng)于共享存儲式多處理結(jié)構(gòu),因此在GPU上設(shè)計(jì)的并行程序與CPU 上的串行程序具有很大的差異。
GPU主要采用立方環(huán)境的材質(zhì)貼圖、硬體T&L、頂點(diǎn)混合、凹凸的映射貼圖和紋理壓縮、雙重紋理四像素256 位的渲染引擎等重要技術(shù)。由于圖形渲染任務(wù)具有高度的并行性,因此GPU可以僅僅通過增加并行處理單元和存儲器控制單元便可有效的提高處理能力和存儲器帶寬。
CPU是設(shè)計(jì)用來處理通用任務(wù),因此具有復(fù)雜的控制單元;
而GPU主要用來處理計(jì)算性強(qiáng)而邏輯性不強(qiáng)的計(jì)算任務(wù),GPU中可利用的處理單元可以更多的作為執(zhí)行單元。
因此,相較于CPU,GPU在具備大量重復(fù)數(shù)據(jù)集運(yùn)算和頻繁內(nèi)存訪問等特點(diǎn)的應(yīng)用場景中具有無可比擬的優(yōu)勢。
使用GPU有兩種方式:
一種是開發(fā)的應(yīng)用程序通過通用的圖形庫接口調(diào)用GPU設(shè)備;
另一種是GPU自身提供API編程接口,應(yīng)用程序通過GPU提供的API編程接口直接調(diào)用GPU設(shè)備。
二、GPU 和顯卡的關(guān)系
總的來說,顯卡是顯示卡的簡稱,顯卡是由GPU、顯存等等組成的。
GPU是圖形處理器,一般GPU就是焊接在顯卡上的, 大部分情況下,我們所說GPU就等于指顯卡,但是實(shí)際情況是GPU是顯示卡的“心臟”,是顯卡的一個核心零部件,核心組成部分。它們是“寄生與被寄生”關(guān)系。GPU本身并不能單獨(dú)工作,只有配合上附屬電路和接口,才能工作。這時候,它就變成了顯卡。
也就相當(dāng)于CPU在電腦中的作用,它決定了該顯卡的檔次和大部分性能,現(xiàn)在還沒有出現(xiàn)GPU插在主板上的,因?yàn)镚PU功耗很高,背面電流過大,還是焊接更為可靠。
三、CPU和GPU區(qū)別
CPU和GPU之所以大不相同,是由于其設(shè)計(jì)目標(biāo)的不同,它們分別針對了兩種不同的應(yīng)用場景。CPU需要很強(qiáng)的通用性來處理各種不同的數(shù)據(jù)類型,同時又要邏輯判斷又會引入大量的分支跳轉(zhuǎn)和中斷的處理。這些都使得CPU的內(nèi)部結(jié)構(gòu)異常復(fù)雜。而GPU面對的則是類型高度統(tǒng)一的、相互無依賴的大規(guī)模數(shù)據(jù)和不需要被打斷的純凈的計(jì)算環(huán)境。
于是CPU和GPU就呈現(xiàn)出非常不同的架構(gòu)(示意圖):
圖片來自nVidia CUDA文檔。其中綠色的是計(jì)算單元,橙紅色的是存儲單元,橙黃色的是控制單元。
GPU采用了數(shù)量眾多的計(jì)算單元和超長的流水線,但只有非常簡單的控制邏輯并省去了Cache。而CPU不僅被Cache占據(jù)了大量空間,而且還有有復(fù)雜的控制邏輯和諸多優(yōu)化電路,相比之下計(jì)算能力只是CPU很小的一部分
從上圖可以看出:
Cache, local memory: CPU 》 GPU
Threads(線程數(shù)): GPU 》 CPU
Registers: GPU 》 CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread數(shù)目大,register也必須得跟著很大才行。
SIMD Unit(單指令多數(shù)據(jù)流,以同步方式,在同一時間內(nèi)執(zhí)行同一條指令): GPU 》 CPU。
CPU 基于低延時的設(shè)計(jì):
CPU有強(qiáng)大的ALU(算術(shù)運(yùn)算單元),它可以在很少的時鐘周期內(nèi)完成算術(shù)計(jì)算。
當(dāng)今的CPU可以達(dá)到64bit 雙精度。執(zhí)行雙精度浮點(diǎn)源算的加法和乘法只需要1~3個時鐘周期。
CPU的時鐘周期的頻率是非常高的,達(dá)到1.532~3gigahertz(千兆HZ, 10的9次方)。
大的緩存也可以降低延時。保存很多的數(shù)據(jù)放在緩存里面,當(dāng)需要訪問的這些數(shù)據(jù),只要在之前訪問過的,如今直接在緩存里面取即可。
復(fù)雜的邏輯控制單元。當(dāng)程序含有多個分支的時候,它通過提供分支預(yù)測的能力來降低延時。
數(shù)據(jù)轉(zhuǎn)發(fā)。 當(dāng)一些指令依賴前面的指令結(jié)果時,數(shù)據(jù)轉(zhuǎn)發(fā)的邏輯控制單元決定這些指令在pipeline中的位置并且盡可能快的轉(zhuǎn)發(fā)一個指令的結(jié)果給后續(xù)的指令。這些動作需要很多的對比電路單元和轉(zhuǎn)發(fā)電路單元。
GPU是基于大的吞吐量設(shè)計(jì)。GPU的特點(diǎn)是有很多的ALU和很少的cache. 緩存的目的不是保存后面需要訪問的數(shù)據(jù)的,這點(diǎn)和CPU不同,而是為thread提高服務(wù)的。如果有很多線程需要訪問同一個相同的數(shù)據(jù),緩存會合并這些訪問,然后再去訪問dram(因?yàn)樾枰L問的數(shù)據(jù)保存在dram中而不是cache里面),獲取數(shù)據(jù)后cache會轉(zhuǎn)發(fā)這個數(shù)據(jù)給對應(yīng)的線程,這個時候是數(shù)據(jù)轉(zhuǎn)發(fā)的角色。但是由于需要訪問dram,自然會帶來延時的問題。
GPU的控制單元(左邊黃色區(qū)域塊)可以把多個的訪問合并成少的訪問。
GPU的雖然有dram延時,卻有非常多的ALU和非常多的thread. 為啦平衡內(nèi)存延時的問題,我們可以中充分利用多的ALU的特性達(dá)到一個非常大的吞吐量的效果。盡可能多的分配多的Threads.通常來看GPU ALU會有非常重的pipeline就是因?yàn)檫@樣。
所以與CPU擅長邏輯控制,串行的運(yùn)算。和通用類型數(shù)據(jù)運(yùn)算不同,GPU擅長的是大規(guī)模并發(fā)計(jì)算,這也正是密碼破解等所需要的。所以GPU除了圖像處理,也越來越多的參與到計(jì)算當(dāng)中來。
GPU的工作大部分就是這樣,計(jì)算量大,但沒什么技術(shù)含量,而且要重復(fù)很多很多次。就像你有個工作需要算幾億次一百以內(nèi)加減乘除一樣,最好的辦法就是雇上幾十個小學(xué)生一起算,一人算一部分,反正這些計(jì)算也沒什么技術(shù)含量,純粹體力活而已。而CPU就像老教授,積分微分都會算,就是工資高,一個老教授資頂二十個小學(xué)生,你要是富士康你雇哪個?GPU就是這樣,用很多簡單的計(jì)算單元去完成大量的計(jì)算任務(wù),純粹的人海戰(zhàn)術(shù)。這種策略基于一個前提,就是小學(xué)生A和小學(xué)生B的工作沒有什么依賴性,是互相獨(dú)立的。很多涉及到大量計(jì)算的問題基本都有這種特性,比如你說的破解密碼,挖礦和很多圖形學(xué)的計(jì)算。這些計(jì)算可以分解為多個相同的簡單小任務(wù),每個任務(wù)就可以分給一個小學(xué)生去做。但還有一些任務(wù)涉及到“流”的問題。比如你去相親,雙方看著順眼才能繼續(xù)發(fā)展??偛荒苣氵@邊還沒見面呢,那邊找人把證都給領(lǐng)了。這種比較復(fù)雜的問題都是CPU來做的。
以上便是此次小編帶來的“GPU”相關(guān)內(nèi)容,通過本文,希望大家對GPU、CPU和顯卡具備一定的了解。如果你喜歡本文,不妨持續(xù)關(guān)注我們網(wǎng)站哦!