GPU是個(gè)什么樣的概念

聽到GPU,多數(shù)人肯定會(huì)聯(lián)想的CPU,那里還是單核的時(shí)代,每條指令都是順序執(zhí)行。相比CPU,很多人可能聽說(shuō)過(guò)一個(gè)比喻:GPU是一群小學(xué)生,扎堆算加減法;CPU是一個(gè)老教授,能解微積分。

先上一張老生常談的圖吧,說(shuō)起這個(gè)問(wèn)題需要長(zhǎng)篇大論解釋CPU和GPU本身區(qū)別或者GPU浮點(diǎn)為什么比CPU高?
那么,先拋一個(gè)簡(jiǎn)單明了的答案:CPU和GPU本身設(shè)計(jì)方式和運(yùn)算目的不同導(dǎo)致了這種差距,那么我來(lái)細(xì)說(shuō)一下。

CPU和GPU設(shè)計(jì)上大概有什么不同:

1:CPU中大部分(大概70%)晶體管用來(lái)構(gòu)建Cache還有一部分控制單元,負(fù)責(zé)邏輯算數(shù)的部分并不多;而GPU整個(gè)就是一個(gè)龐大的計(jì)算陣列(包括alu和shader填充),我們知道GPU大致分為3d setup和流計(jì)算兩個(gè)部分,而GPGPU就是用流計(jì)算來(lái)做大量密集型運(yùn)算,比如linpack這種求解大規(guī)模稠密線性方程組。GPU中負(fù)責(zé)邏輯算數(shù)的部分要遠(yuǎn)遠(yuǎn)大于CPU因此在邏輯運(yùn)算上當(dāng)然就比CPU強(qiáng)太多

2:GPU對(duì)Cache的依賴比CPU小,因?yàn)镚PU用的是高速度總線;其次GPU的數(shù)據(jù)具有高度對(duì)齊性以及不符合局部化假設(shè)、比CPU更深的pipeline執(zhí)行還有一點(diǎn)就是很少把數(shù)據(jù)寫回。
但是CPU不同,它非常需要Cache,有無(wú)Cache的CPU差距可以是極大的。其實(shí)Cache是人類如今對(duì)于硅工藝的一種“妥協(xié)”——我們總是希望擁有一個(gè)存儲(chǔ)器它的CPU比肩或者接近于CPU同時(shí)又可以在容量上做大。但目前硅工藝限制了這個(gè)“天馬行空”的幻想,因此,人類不得已做出了Cache這個(gè)片上存儲(chǔ)器,它的速度的確是最快的,位于存儲(chǔ)器體系結(jié)構(gòu)的最高層,但它也是容量最小的。它可以擴(kuò)大,但是進(jìn)步很小,至于原因其中大概是2點(diǎn):1:Cache是構(gòu)建于CPU內(nèi)部,需要考慮面積;2:需要權(quán)衡利弊,比如l1不能無(wú)限做大是因?yàn)楸旧碇铝τ跒镃PU提供一個(gè)快速的數(shù)據(jù)遞交,而l1如果做大那么命中時(shí)間增加以及延遲開銷的影響來(lái)說(shuō)這就是非常大的弊端了。

為什么CPU需求Cache?上面說(shuō)的已經(jīng)透露了一些,CPU需要處理不同類型的數(shù)據(jù)更是需要存儲(chǔ)器的配合來(lái)執(zhí)行l(wèi)oad/store指令,所以,我們通過(guò)在CPU內(nèi)部構(gòu)建一個(gè)Cache作為片上存儲(chǔ)器配合DRAM、ROM整個(gè)存儲(chǔ)器體系結(jié)構(gòu)為配合CPU處理load/store指令;還有一點(diǎn)是CPU的總線速度非常落后。

3:還有一點(diǎn)就是核心的不同。CPU的核心內(nèi)部因?yàn)橛写罅緾ache所以一個(gè)邏輯核心普遍是比GPU中的Stream Processors大的,GPU中的SP就是簡(jiǎn)單的核心但是CPU不同,在core的設(shè)計(jì)上CPU是比GPU復(fù)雜的多。

CPU和GPU計(jì)算目的的不同:

1:如上就可以看出來(lái)。CPU本身設(shè)計(jì)初衷適合串行,而GPU則是適合大規(guī)模并行。CPU所作的工作是極度復(fù)雜的,處理的指令之間有復(fù)雜的邏輯關(guān)系,比如Dependence還有branch Instruction等等,這些都是GPU做不來(lái)的。

2:GPU需要做的工作在復(fù)雜度上遠(yuǎn)不如CPU,GPU需要處理的數(shù)據(jù)之間沒(méi)有任何的Dependence,所以它們可以并行執(zhí)行,比如Vertex和Pixel兩種數(shù)據(jù)處理都運(yùn)行獨(dú)立數(shù)據(jù)產(chǎn)生獨(dú)立結(jié)果因此可以達(dá)到高度并行。換句話來(lái)說(shuō),GPU因?yàn)樵O(shè)計(jì)問(wèn)題天生適合大規(guī)模SIMT/SIMD運(yùn)算方式。它就是一個(gè)針對(duì)向量計(jì)算進(jìn)行高度并行并且以數(shù)據(jù)流作為處理單元的處理機(jī)這樣在對(duì)數(shù)據(jù)流的處理上可以獲得很高的效率。

如上是大致說(shuō)出了GPU比CPU在alu計(jì)算上的關(guān)鍵所在,那么我前面說(shuō)過(guò)了,GPU主要是兩部分:一部分是3d setup;一部分是負(fù)責(zé)密集型流計(jì)算的。后者是屬于可編程的,那么GPGPU正是利用OpenCL、CUDA這些專用非圖形接口API讓流計(jì)算的部分來(lái)解決非圖形問(wèn)題,比如流體模擬、爆炸等等這些適合大規(guī)模密集型運(yùn)算的工作。

如上,在GPU通用計(jì)算上GPU比CPU強(qiáng)的原因無(wú)外乎就是:因?yàn)楦灸康牡牟煌a(chǎn)生了不同設(shè)計(jì)因而導(dǎo)致各自計(jì)算方向不同所以產(chǎn)生了這樣的差距。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容