【零基礎】搞懂GPU為什么比CPU“快”


一、前言

  近幾年深度學習在各領域大顯神威,而”GPU加速"也得到了越來越多的篇幅,似乎任何程序只要放到GPU上運行那速度就是杠杠的。GPU代替CPU計算已成了大勢所趨?我先告訴你結論”那是不可能滴“,然后咱們再來說說”GPU為什么比CPU快“。
二、圖形處理,GPU的源起

  GPU是顯卡的計算單元,就好比CPU是電腦的計算核心,有時我們直接就把GPU稱為顯卡。顯而易見,GPU從誕生之初就是用來處理圖像的。下面我們講一個簡單的例子來說明下為什么圖像處理需要用到GPU,而CPU的缺點是什么。

  我們講一個畫面”立體“,其實講的是畫面中對於光影的運用,下圖就是一個簡單的”圓“。

  當我們給這個圓加上”光影“之后,它就變成了一個球。我們說球要比圓立體的多,這就是光影的作用。

  光影的原理很簡單,你需要想象一個遠處的”光“,然后在畫面上模擬出光照在物體上的明暗變化,計算機中這些明暗變化都是通過”計算“得到的。編程人員只需要輸入光源的距離、亮度、被照體的位置,然后通過逐步計算、光影疊加就能得到圖像中每一個像素應該顯示什么顏色、什么亮度,一個立體畫面也就躍然紙上了。

  那么現在問題來了,假設屏幕分辨率為1920*1080,即2073600(207.36萬)個像素,游戲中每個像素都需要根據光影參數來計算顯示的顏色和明暗。假設一個常見的Inter I5 CPU主頻為3.2GHz,即最多每秒可做32億次運算。但這里的一次運算只是做了一次簡單的二進制加減法或數據讀取,一個像素的光影計算我們可以假設需要100次運算(關於CPU的運算原理可以看這篇文章https://www.mianbaoban.cn/blog/3887969-407226.html),即CPU一秒約處理3200萬次像素運算,大概15張圖片,用專業點的說法,這個游戲流暢度大概是每秒15幀的樣子。

  可見使用CPU全力進行圖形運算是有點吃力的,更何況CPU還要處理很多鍵盤指令、游戲后台計算等等。是CPU還不夠快嗎?假設現在速度翻倍,即每秒64億次運算似乎也是不夠的。其實CPU面臨的主要問題是,雖然每一次光影計算都非常簡單,但經不住像素太多啦,還都得排隊一個一個做。然后工程師們想到“其實任何一個像素的計算與其他像素的計算結果關系不大”,那為啥不多整幾個計算核心“並行”計算呢,於是GPU就出現了。

  一個典型的顯卡GTX1060,主頻是1.5GHz大概是Inter I5一半左右,但是它具備1280個計算核心。每個計算核心每秒可做15億次運算,1280個核心每秒就是19200億次運算,那一秒可以處理192億次像素計算,大概925張圖片,是CPU計算能力的61倍!但GPU的特性只能應用於圖形計算這種可以並行的任務,若是做普通的串行任務其速度遠遠不如CPU。

三、核心越多越好?

  通過前面的敘述我們都知道了GPU速度“快於”CPU的奧秘在於它有很多的“核”,那能不能這樣,我們給CPU也裝上1000多個核,那速度豈不是快到飛起?答案是“不得行”。由於制造工藝的原因,CPU內核越多其頻率也就越低。其實很容易想到,同步10個人的動作和同步1000個人的動作其難度肯定是不一樣的。其次,電腦中大部分的運算都是串行的,即下一個運算要等到上一個運算完畢才能繼續,這時候單次運算的速度才是最重要的。

  所以相當長時間以內,CPU+GPU的搭配才是最佳方案。

 四、GPU與並行計算

  深度學習與圖形處理有一些相通的地方,它需要大量的數據來“訓練”模型。比如一個貓圖識別AI,你需要提供數以萬計的貓圖供其“學習”。而每一張貓圖的學習又與其他貓圖沒有先后關系,即你可以同時並行100、1000張貓圖的學習,所以GPU在深度學習領域大放異彩。

  實際上GPU編程一直是近年來的熱點,作為高效程序員又怎么能不了解一二呢?CUDA是NVIDIA推出的並行計算框架,它囊括了GPU並行計算中所有你需要的組件,只需要簡單安裝(當然你電腦得是N卡)就可以在C代碼中使用它提供的接口進行GPU編程了,當然對於非從業人員來說了解下相關知識也是極好的。

  現在關注公眾號“零基礎愛學習”回復“GPU”就能獲得下面的資料:

  1、GPU高性能編程CUDA實戰(中英文版+實例源碼)

  2、GPGPU編程技術  從GLSL、CUDA到OpenCL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM