深入講解CPU與GPU到底有什么區(qū)別?
CPU的故事我們聊得比較多了,之前也發(fā)布過很多關(guān)于CPU的文章,因此這里重點(diǎn)聊聊GPU。
教授 vs 小學(xué)生
你可以簡單的將CPU理解為學(xué)識淵博的教授,什么都精通,而GPU則是一堆小學(xué)生,只會(huì)簡單的算數(shù)運(yùn)算,可即使教授再神通廣大,也不能一秒鐘內(nèi)計(jì)算出500次加減法,因此對簡單重復(fù)的計(jì)算來說單單一個(gè)教授敵不過數(shù)量眾多的小學(xué)生 ,在進(jìn)行簡單的算數(shù)運(yùn)算這件事上,500個(gè)小學(xué)生(并發(fā))可以輕而易舉打敗教授。

因此我們可以看到,CPU和GPU的最大不同在于架構(gòu),CPU適用于廣泛的應(yīng)用場景(學(xué)識淵博),可以執(zhí)行任意程序,而GPU則專為多任務(wù)而生,并發(fā)能力強(qiáng),具體來講就是多核,一般的CPU有2核、4核、8核等,而GPU則可能會(huì)有成百上千核:

可以看到,CPU內(nèi)部cache以及控制部分占據(jù)了很大一部分片上面積,因此計(jì)算單元占比很少,再來看看GPU,GPU只有很簡單的控制單元,剩下的大部分都被計(jì)算單元占據(jù),因此CPU的核數(shù)有限,而GPU則輕松堆出上千核:

只不過CPU中每個(gè)核的能力好比教授,而GPU的每個(gè)核的能力好比一個(gè)小學(xué)生。
你可能會(huì)想,為什么GPU需要這么奇怪的架構(gòu)呢?
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ??


為什么GPU需要這么多核心?
想一想計(jì)算機(jī)上的一張圖是怎么表示的?無非就是屏幕上的一個(gè)個(gè)像素:

我們需要為每個(gè)像素進(jìn)行計(jì)算,而且是相同的運(yùn)算 ,就好比剛才例子中的小學(xué)生計(jì)算計(jì)加法一樣,注意,對于屏幕來說一般會(huì)有上百萬個(gè)像素,如果我們要串行的為每一個(gè)像素進(jìn)行運(yùn)算效率就太低了,因此我們可以讓GPU中的每一個(gè)核心去為相應(yīng)的像素進(jìn)行計(jì)算,由于GPU中有很多核心,因此并行計(jì)算可以大幅提高速度。
現(xiàn)在你應(yīng)該明白為什么GPU要這樣工作了吧。
除了GPU的核心數(shù)比較多之外,GPU的工作方式也比較奇怪。
奇怪的工作方式
對CPU來說,不同的核心可以執(zhí)行不同的機(jī)器指令,coreA在運(yùn)行word線程的同時(shí)coreB上可以運(yùn)行瀏覽器線程,這就是所謂的多指令多數(shù)據(jù),MIMD,(Multiple Instruction, Multiple Data)。
而GPU則不同,GPU上的這些核心必須整齊劃一的運(yùn)行相同的機(jī)器指令 ,只是可以操作不同的數(shù)據(jù),這就好比這些小學(xué)生在某個(gè)時(shí)刻必須都進(jìn)行加法計(jì)算,不同的地方在于有的小學(xué)生可能需要計(jì)算1+1,有的要計(jì)算2+6等等,變化的地方僅在于操作數(shù),這就是所謂的單指令多數(shù)據(jù),SIMD,(Single Instruction, Multiple Data)。
因此我們可以看到GPU的工作方式和CPU是截然不同的。
除了這種工作方式之外,GPU的指令集還非常簡單,不像CPU這種復(fù)雜的處理器,如果你去看CPU的編程手冊就會(huì)發(fā)現(xiàn),CPU負(fù)責(zé)的事情非常多:中斷處理、內(nèi)存管理、IO等等,這些對于GPU來說都是不存在的,可以看到GPU的定位非常簡單,就是純計(jì)算,GPU絕不是用來取代CPU的,CPU只是把一些GPU非常擅長的事情交給它,GPU僅僅是用來分擔(dān)CPU工作的配角。
CPU和GPU是這樣配合工作的:

GPU擅長什么
比較適合GPU的計(jì)算場景是這樣的:1)計(jì)算簡單;2)重復(fù)計(jì)算,因此如果你的計(jì)算場景和這里的圖像渲染相似那么使用GPU就很合理了。
因此對于圖形圖像計(jì)算、天氣預(yù)報(bào)以及神經(jīng)網(wǎng)絡(luò)等都適用于GPU,哦對了,GPU還適合用來挖礦。
好啦,這個(gè)話題今天就到這里,希望這篇對大家理解GPU有所幫助。
