CPU(中央處理器)和GPU(影像處理器)的區別
GPU和CPU是什麼?
CPU:中央處理器(英文Central Processing Unit)是一臺計算機的運算核心和控制核心。CPU、內部儲存器和輸入/輸出裝置是電子計算機三大核心部件。其功能主要是解釋計算機指令以及處理計算機軟體中的資料。
CPU
GPU:英文全稱Graphic Processing Unit,中文翻譯為“圖形處理器”。一個專門的圖形核心處理器。GPU是顯示卡的“大腦”,決定了該顯示卡的檔次和大部分效能,同時也是2D顯示卡和3D顯示卡的區別依據。2D顯示晶片在處理3D影像和特效時主要依賴CPU的處理能力,稱為“軟加速”。3D顯示晶片是將三維影像和特效處理功能集中在顯示晶片內,也即所謂的“硬體加速”功能。
GPU
顯示卡
GPU(Graphics Processing Unit,圖形處理器)又被稱作顯示核心、視覺處理器、顯示晶片,是一種專為並行處理而設計的微型處理器,非常擅長處理大量簡單任務,包括圖形和影片渲染。GPU能應用在桌上型電腦、膝上型電腦、工作站、遊戲機、嵌入式裝置、資料中心等各種需要渲染圖形或高效能運算的場景。
在生活中,我們普遍把GPU叫成顯示卡。不過事實上,GPU和顯示卡在術語上有細微差別,GPU指的是負責處理各種任務的那顆晶片,顯示卡指的是把GPU晶片、視訊記憶體、介面等集合在一起的那張板卡。
GPU根據接入系統的方式分為整合型GPU(Integrated GPU,iGPU)和離散型GPU(Discrete GPU ,dGPU)兩種,前者就是我們日常所說的整合顯示卡/核芯顯示卡,後者就是我們日常所說的獨立顯示卡,兩種型別GPU均有各自的特點和使用場景。
整合型GPU中,GPU被嵌在CPU旁邊,且無單獨的記憶體組用於圖形/影片,會與CPU共享系統記憶體。由於整合型GPU內建於處理器中,通常功耗更低,產生的熱量更少,從而延長了電池續航時間。
離散型GPU則完全以獨立板卡出現,通常被連線在PCI高速插槽內,就像主機板包含CPU一樣。離散型GPU除包含GPU晶片以外,還包括允許GPU執行並連線到系統其餘部分所需的大量元件。離散型GPU有自己的專用記憶體,同時也擁有自己的記憶體源和電源,因此其效能比整合型GPU更高。但由於與處理器晶片分離,因此會消耗更多功率併產生大量熱量。
從專用到通用再到融合
現代的GPU擁有兩大功能,一是充當強大的圖形引擎,二是用作高度並行的可程式設計處理器,處理各種神經網路或機器學習任務。
圖形計算是GPU的拿手絕活。當我們拖動滑鼠時,GPU將需要顯示的圖形內容計算後呈現在螢幕上;當我們開啟播放器觀看電影時,GPU將壓縮後的影片資訊解碼為原始資料;當我們玩遊戲時,GPU將遊戲畫面計算並生成出來。輕點滑鼠的背後,是複雜的處理過程,包括頂點讀入、頂點渲染、圖元裝配、光柵化、畫素渲染等。
圖形GPU廣泛應用於遊戲、影像處理和加密貨幣等場景,關注影像學的幀數、渲染逼真度、真實場景對映度等引數指標。
GPU與CPU有什麼區別?
CPU和GPU之所以大不相同,是由於其設計目標的不同,它們分別針對了兩種不同的應用場景。主要區別如下。
CPU需要很強的通用性來處理各種不同的資料型別,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的內部結構異常複雜。而GPU面對的則是型別高度統一的、相互無依賴的大規模資料和不需要被打斷的純淨的計算環境。
於是CPU和GPU就呈現出非常不同的架構。
其中上圖中綠色的是計算單元,橙紅色的是儲存單元,橙黃色的是控制單元。
GPU採用了數量眾多的計算單元和超長的流水線,但只有非常簡單的控制邏輯並省去了Cache。而CPU不僅被Cache佔據了大量空間,而且還有有複雜的控制邏輯和諸多最佳化電路,相比之下計算能力只是CPU很小的一部分。
CPU 基於低延時的設計:
CPU有強大的ALU(算術運算單元),它可以在很少的時鐘週期內完成算術計算。
當今的CPU可以達到64bit 雙精度。執行雙精度浮點源算的加法和乘法只需要1~3個時鐘週期。CPU的時鐘週期的頻率是非常高的,達到1.532~3gigahertz(千兆HZ, 10的9次方).大的快取也可以降低延時。儲存很多的資料放在快取裡面,當需要訪問的這些資料,只要在之前訪問過的,如今直接在快取裡面取即可。
複雜的邏輯控制單元。當程式含有多個分支的時候,它透過提供分支預測的能力來降低延時。資料轉發。 當一些指令依賴前面的指令結果時,資料轉發的邏輯控制單元決定這些指令在pipeline中的位置並且儘可能快的轉發一個指令的結果給後續的指令。這些動作需要很多的對比電路單元和轉發電路單元。
GPU是基於大的吞吐量設計。
GPU的特點是有很多的ALU和很少的cache. 快取的目的不是儲存後面需要訪問的資料的,這點和CPU不同,而是為thread提高服務的。如果有很多執行緒需要訪問同一個相同的資料,快取會合並這些訪問,然後再去訪問dram(因為需要訪問的資料儲存在dram中而不是cache裡面),獲取資料後cache會轉發這個資料給對應的執行緒,這個時候是資料轉發的角色。但是由於需要訪問dram,自然會帶來延時的問題。
GPU的控制單元(左邊黃色區域塊)可以把多個的訪問合併成少的訪問。
GPU的雖然有dram延時,卻有非常多的ALU和非常多的thread. 為了平衡記憶體延時的問題,我們可以充分利用多的ALU的特性達到一個非常大的吞吐量的效果。儘可能多的分配多的Threads.通常來看GPU ALU會有非常重的pipeline就是因為這樣。所以與CPU擅長邏輯控制,序列的運算。和通用型別資料運算不同,GPU擅長的是大規模併發計算,這也正是密碼破解等所需要的。所以GPU除了影像處理,也越來越多的參與到計算當中來。
上面說的有點專業化,接下來就簡單說一下,他們兩個到底差在哪?
CPU(Central Processing Unit)是電腦最主要的部件,他的主要功能是解釋計算機指令以及處理計算機軟體中的資料,說白了就是做指揮工作,統籌各方面。CPU相當於整個電腦的心臟,而GPU相當於顯示卡的心臟。
普通的處理器CPU差不多雙核心四執行緒,目前市面上最高階的桌面處理器i9-7980XE(RMB1.5萬)不過十八核心三十六執行緒。GPU則不同,就拿普通的2000塊的遊戲顯示卡RX 480來說,RX480的GPU晶片計算單元劃分為36個CU計算核心,每個CU核心又包含了64個流處理器計算核心,所以總共就是36X64=2304個流處理器計算核心。
CPU相對於GPU就像老教授和小學生,拿i9-7980XE和RX480舉個例子,出一套小學數學試卷,老教授剛做一道題,兩千多名學生一人一題早就交卷子了。如果套高數卷子,老教授做完學生們一道也不會做。
訓練神經網路GPU優於CPU
很多個簡單的工作,交給GPU顯然更適合。
其實在早期,神經網路都是用CPU訓練的。即使現在,像TensorFlow這樣的流行框架也支援在CPU上執行。那麼,既然CPU和GPU都可以訓練神經網路,為什麼一般用GPU訓練神經網路?很簡單,因為GPU比CPU快很多。比如,Victor Dibia(IBM研究院Research Staff Member)基於Tensorflow框架訓練了一個實時檢測手部的網路。
訓練這樣一個神經網路要花多久?CPU上大約要12天,而GPU上則是5小時。(我們這裡不討論具體的型號,關鍵是兩者的比例。CPU和GPU的差距太大了)。
而且,實際上這個神經網路的訓練時間已經透過遷移學習縮短了。遷移學習指直接拿訓練好的影像分類的模型來用,只是重新訓練最後一層或幾層網路以檢測手部,所以能快很多。那如果從頭開始訓練的話(有的時候沒有現成的模型可供遷移),可能要幾周甚至幾個月。這還是GPU的情況。
按照上面的比例,換算成CPU,那基本上就太慢太慢,慢到不現實的程度。GPU之所以比CPU快好多,主要是因為,從運算的角度來看,神經網路主要是由大量的浮點矩陣構成的。而現代的神經網路,可能有幾千到幾百萬的浮點矩陣(所謂深度學習),因此需要很大的記憶體頻寬來訪問這些海量的浮點矩陣。而GPU的記憶體頻寬比CPU高很多。比如Intel的Core i9-7980XE記憶體頻寬約為57GB/s,而NVIDIA的Tesla P100頻寬高達900GB/s。
使用神經網路訓練,一個最大的問題就是訓練速度的問題,特別是對於深度學習而言,過多的引數會消耗很多的時間,在神經網路訓練過程中,運算最多的是關於矩陣的運算,這個時候就正好用到了GPU,GPU本來是用來處理圖形的,但是因為其處理矩陣計算的高效性就運用到了深度學習之中。