搞懂GPU為什么比CPU“快”
近幾年深度學(xué)習(xí)在各領(lǐng)域大顯神威,而”GPU加速"也得到了越來(lái)越多的篇幅,似乎任何程序只要放到GPU上運(yùn)行那速度就是杠杠的。GPU代替CPU計(jì)算已成了大勢(shì)所趨?我先告訴你結(jié)論”那是不可能滴“,然后咱們?cè)賮?lái)說(shuō)說(shuō)”GPU為什么比CPU快“。
圖形處理,GPU的源起
GPU是顯卡的計(jì)算單元,就好比CPU是電腦的計(jì)算核心,有時(shí)我們直接就把GPU稱(chēng)為顯卡。顯而易見(jiàn),GPU從誕生之初就是用來(lái)處理圖像的。下面我們講一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明下為什么圖像處理需要用到GPU,而CPU的缺點(diǎn)是什么。
我們講一個(gè)畫(huà)面”立體“,其實(shí)講的是畫(huà)面中對(duì)于光影的運(yùn)用,下圖就是一個(gè)簡(jiǎn)單的”圓“。

當(dāng)我們給這個(gè)圓加上”光影“之后,它就變成了一個(gè)球。我們說(shuō)球要比圓立體的多,這就是光影的作用。

光影的原理很簡(jiǎn)單,你需要想象一個(gè)遠(yuǎn)處的”光“,然后在畫(huà)面上模擬出光照在物體上的明暗變化,計(jì)算機(jī)中這些明暗變化都是通過(guò)”計(jì)算“得到的。編程人員只需要輸入光源的距離、亮度、被照體的位置,然后通過(guò)逐步計(jì)算、光影疊加就能得到圖像中每一個(gè)像素應(yīng)該顯示什么顏色、什么亮度,一個(gè)立體畫(huà)面也就躍然紙上了。
那么現(xiàn)在問(wèn)題來(lái)了,假設(shè)屏幕分辨率為1920*1080,即2073600(207.36萬(wàn))個(gè)像素,游戲中每個(gè)像素都需要根據(jù)光影參數(shù)來(lái)計(jì)算顯示的顏色和明暗。假設(shè)一個(gè)常見(jiàn)的Intel I5 CPU主頻為3.2GHz,即最多每秒可做32億次運(yùn)算。但這里的一次運(yùn)算只是做了一次簡(jiǎn)單的二進(jìn)制加減法或數(shù)據(jù)讀取,一個(gè)像素的光影計(jì)算我們可以假設(shè)需要100次運(yùn)算(關(guān)于CPU的運(yùn)算原理可以看這篇文章https://www.mianbaoban.cn/blog/3887969-407226.html),即CPU一秒約處理3200萬(wàn)次像素運(yùn)算,大概15張圖片,用專(zhuān)業(yè)點(diǎn)的說(shuō)法,這個(gè)游戲流暢度大概是每秒15幀的樣子。
可見(jiàn)使用CPU全力進(jìn)行圖形運(yùn)算是有點(diǎn)吃力的,更何況CPU還要處理很多鍵盤(pán)指令、游戲后臺(tái)計(jì)算等等。是CPU還不夠快嗎?假設(shè)現(xiàn)在速度翻倍,即每秒64億次運(yùn)算似乎也是不夠的。其實(shí)CPU面臨的主要問(wèn)題是,雖然每一次光影計(jì)算都非常簡(jiǎn)單,但經(jīng)不住像素太多啦,還都得排隊(duì)一個(gè)一個(gè)做。然后工程師們想到“其實(shí)任何一個(gè)像素的計(jì)算與其他像素的計(jì)算結(jié)果關(guān)系不大”,那為啥不多整幾個(gè)計(jì)算核心“并行”計(jì)算呢,于是GPU就出現(xiàn)了。
一個(gè)典型的顯卡GTX1060,主頻是1.5GHz大概是Intel I5一半左右,但是它具備1280個(gè)計(jì)算核心。每個(gè)計(jì)算核心每秒可做15億次運(yùn)算,1280個(gè)核心每秒就是19200億次運(yùn)算,那一秒可以處理192億次像素計(jì)算,大概925張圖片,是CPU計(jì)算能力的61倍!但GPU的特性只能應(yīng)用于圖形計(jì)算這種可以并行的任務(wù),若是做普通的串行任務(wù)其速度遠(yuǎn)遠(yuǎn)不如CPU。
核心越多越好?
通過(guò)前面的敘述我們都知道了GPU速度“快于”CPU的奧秘在于它有很多的“核”,那能不能這樣,我們給CPU也裝上1000多個(gè)核,那速度豈不是快到飛起?答案是“不得行”。由于制造工藝的原因,CPU內(nèi)核越多其頻率也就越低。其實(shí)很容易想到,同步10個(gè)人的動(dòng)作和同步1000個(gè)人的動(dòng)作其難度肯定是不一樣的。其次,電腦中大部分的運(yùn)算都是串行的,即下一個(gè)運(yùn)算要等到上一個(gè)運(yùn)算完畢才能繼續(xù),這時(shí)候單次運(yùn)算的速度才是最重要的。
所以相當(dāng)長(zhǎng)時(shí)間以內(nèi),CPU+GPU的搭配才是最佳方案。

?GPU與并行計(jì)算
深度學(xué)習(xí)與圖形處理有一些相通的地方,它需要大量的數(shù)據(jù)來(lái)“訓(xùn)練”模型。比如一個(gè)貓圖識(shí)別AI,你需要提供數(shù)以萬(wàn)計(jì)的貓圖供其“學(xué)習(xí)”。而每一張貓圖的學(xué)習(xí)又與其他貓圖沒(méi)有先后關(guān)系,即你可以同時(shí)并行100、1000張貓圖的學(xué)習(xí),所以GPU在深度學(xué)習(xí)領(lǐng)域大放異彩。