CPU 和 GPU 的區別是什麼?


看了好多,覺得下面這個介紹才是我想要的以及能看明白的,轉載自:
1.2CPU和GPU的設計區別

CPU和GPU之所以大不相同,是由於其設計目標的不同,它們分別針對了兩種不同的應用場景。CPU需要很強的通用性來處理各種不同的數據類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的內部結構異常複雜。而GPU面對的則是類型高度統一的、相互無依賴的大規模數據和不需要被打斷的純凈的計算環境。

  於是CPU和GPU就呈現出非常不同的架構(示意圖):

  圖片來自nVidia CUDA文檔。其中綠色的是計算單元,橙紅色的是存儲單元,橙黃色的是控制單元。

GPU採用了數量眾多的計算單元和超長的流水線,但只有非常簡單的控制邏輯並省去了Cache。而CPU不僅被Cache佔據了大量空間,而且還有有複雜的控制邏輯和諸多優化電路,相比之下計算能力只是CPU很小的一部分

  從上圖可以看出:

Cache, local memory: CPU &> GPU

Threads(線程數): GPU &> CPU

Registers: GPU &> CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread數目大,register也必須得跟著很大才行。

SIMD Unit(單指令多數據流,以同步方式,在同一時間內執行同一條指令): GPU &> 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除了圖像處理,也越來越多的參與到計算當中來。

GPU的工作大部分就是這樣,計算量大,但沒什麼技術含量,而且要重複很多很多次。就像你有個工作需要算幾億次一百以內加減乘除一樣,最好的辦法就是雇上幾十個小學生一起算,一人算一部分,反正這些計算也沒什麼技術含量,純粹體力活而已。而CPU就像老教授,積分微分都會算,就是工資高,一個老教授資頂二十個小學生,你要是富士康你雇哪個?GPU就是這樣,用很多簡單的計算單元去完成大量的計算任務,純粹的人海戰術。這種策略基於一個前提,就是小學生A和小學生B的工作沒有什麼依賴性,是互相獨立的。很多涉及到大量計算的問題基本都有這種特性,比如你說的破解密碼,挖礦和很多圖形學的計算。這些計算可以分解為多個相同的簡單小任務,每個任務就可以分給一個小學生去做。但還有一些任務涉及到「流」的問題。比如你去相親,雙方看著順眼才能繼續發展。總不能你這邊還沒見面呢,那邊找人把證都給領了。這種比較複雜的問題都是CPU來做的。

  總而言之,CPU和GPU因為最初用來處理的任務就不同,所以設計上有不小的區別。而某些任務和GPU最初用來解決的問題比較相似,所以用GPU來算了。GPU的運算速度取決於雇了多少小學生,CPU的運算速度取決於請了多麼厲害的教授。教授處理複雜任務的能力是碾壓小學生的,但是對於沒那麼複雜的任務,還是頂不住人多。當然現在的GPU也能做一些稍微複雜的工作了,相當於升級成初中生高中生的水平。但還需要CPU來把數據喂到嘴邊才能開始幹活,究竟還是靠CPU來管的。

什麼類型的程序適合在GPU上運行?

  (1)計算密集型的程序。所謂計算密集型(Compute-intensive)的程序,就是其大部分運行時間花在了寄存器運算上,寄存器的速度和處理器的速度相當,從寄存器讀寫數據幾乎沒有延時。可以做一下對比,讀內存的延遲大概是幾百個時鐘周期;讀硬碟的速度就不說了,即便是SSD, 也實在是太慢了。

  (2)易於並行的程序。GPU其實是一種SIMD(Single Instruction Multiple Data)架構, 他有成百上千個核,每一個核在同一時間最好能做同樣的事情。


首先需要解釋CPU和GPU這兩個縮寫分別代表什麼。CPU即中央處理器,GPU即圖形處理器。其次,要解釋兩者的區別,要先明白兩者的相同之處:兩者都有匯流排和外界聯繫,有自己的緩存體系,以及數字和邏輯運算單元。一句話,兩者都為了完成計算任務而設計。
兩者的區別在於存在於片內的緩存體系和數字邏輯運算單元的結構差異:CPU雖然有多核,但總數沒有超過兩位數,每個核都有足夠大的緩存和足夠多的數字和邏輯運算單元,並輔助有很多加速分支判斷甚至更複雜的邏輯判斷的硬體;GPU的核數遠超CPU,被稱為眾核(NVIDIA Fermi有512個核)。每個核擁有的緩存大小相對小,數字邏輯運算單元也少而簡單(GPU初始時在浮點計算上一直弱於CPU)。從結果上導致CPU擅長處理具有複雜計算步驟和複雜數據依賴的計算任務,如分散式計算,數據壓縮,人工智慧,物理模擬,以及其他很多很多計算任務等。GPU由於歷史原因,是為了視頻遊戲而產生的(至今其主要驅動力還是不斷增長的視頻遊戲市場),在三維遊戲中常常出現的一類操作是對海量數據進行相同的操作,如:對每一個頂點進行同樣的坐標變換,對每一個頂點按照同樣的光照模型計算顏色值。GPU的眾核架構非常適合把同樣的指令流並行發送到眾核上,採用不同的輸入數據執行。在2003-2004年左右,圖形學之外的領域專家開始注意到GPU與眾不同的計算能力,開始嘗試把GPU用於通用計算(即GPGPU)。之後NVIDIA發布了CUDA,AMD和Apple等公司也發布了OpenCL,GPU開始在通用計算領域得到廣泛應用,包括:數值分析,海量數據處理(排序,Map-Reduce等),金融分析等等。
簡而言之,當程序員為CPU編寫程序時,他們傾向於利用複雜的邏輯結構優化演算法從而減少計算任務的運行時間,即Latency。當程序員為GPU編寫程序時,則利用其處理海量數據的優勢,通過提高總的數據吞吐量(Throughput)來掩蓋Lantency。目前,CPU和GPU的區別正在逐漸縮小,因為GPU也在處理不規則任務和線程間通信方面有了長足的進步。另外,功耗問題對於GPU比CPU更嚴重。
總的來講,GPU和CPU的區別是個很大的話題,甚至可以花一個學期用32個學時十幾次講座來講,所以如果提問者有更具體的問題,可以進一步提出。我會在我的知識範圍內嘗試回答。


CPU 力氣大啥P事都能幹,還要協調。
GPU 上面那傢伙的小弟,老大讓他處理圖形,這方面處理簡單,但是量大,老大雖然能處理,可是老大只有那麼幾個兄弟,所以不如交給小弟處理了,小弟兄弟多,有數百至數千個,而且是專門只干這行和只能幹這行。


當你操作電腦的時候,為了完成某項工作,需要電腦幫你工作,就像計算某個題目那樣。
計算題目,理解題目並且整理出解題的步驟以及解法,那是CPU的事情。
但是解題的過程需要用到的眾多計算,則需要一幫不需要很高邏輯理解力的計算者完成,他們只需要負責其中很簡單但是數量又很大的簡單運算就行了,最後他們把各自運算的結果交出來給CPU整理,那麼這群計算者就是GPU。
這就是一個博士帶著100個小學生的意思了


一個是通用計算,一個是專用計算。
CPU主要負責操作系統和應用程序,GPU主要負責跟顯示相關的數據處理,GPU的活CPU一般都可以干,但是效率低下,現在也有GPGPU,可以干點CPU的活。


GPU是顯示卡的「心臟」,也就相當於CPU在電腦中的作用,它決定了該顯卡的檔次和大部分性能,同時也是2D顯示卡和3D顯示卡的區別依據。2D 顯示晶元在處理3D圖像和特效時主要依賴CPU的處理能力,稱為「軟加速」。3D顯示晶元是將三維圖像和特效處理功能集中在顯示晶元內,也即所謂的「硬體加速」功能。顯示晶元通常是顯示卡上最大的晶元(也是引腳最多的)。GPU使顯卡減少了對CPU的依賴,並進行部分原本CPU的工作,尤其是在3D圖形處理時。GPU所採用的核心技術有硬體TL、立方環境材質貼圖和頂點混合、紋理壓縮和凹凸映射貼圖、雙重紋理四像素256位渲染引擎等,而硬體 TL技術可以說是GPU的標誌。


GPU 能夠從硬體上支持TL(TransformandLighting,多邊形轉換與光源處理)的顯示晶元,因為TL是3D渲染中的一個重要部分,其作用是計算多邊形的3D位置和處理動態光線效果,也可以稱為「幾何處理」。一個好的TL單元,可以提供細緻的3D物體和高級的光線特效;只不過大多數PC中,TL的大部分運算是交由CPU處理的(這就也就是所謂的軟體TL),由於CPU的任務繁多,除了 TL之外,還要做內存管理、輸入響應等非3D圖形處理工作,因此在實際運算的時候性能會大打折扣,常常出現顯卡等待CPU數據的情況,其運算速度遠跟不上今天複雜三維遊戲的要求。即使CPU的工作頻率超過1GHz或更高,對它的幫助也不大,由於這是PC本身設計造成的問題,與CPU的速度無太大關係。

主要作用


今天,GPU已經不再局限於3D圖形處理了,GPU通用計算技術發展已經引起業界不少的關注,事實也證明在浮點運算、並行計算等部分計算方面,GPU 可以提供數十倍乃至於上百倍於CPU的性能,如此強悍的「新星」難免會讓CPU廠商老大英特爾為未來而緊張,NVIDIA和英特爾也經常為CPU和GPU 誰更重要而展開口水戰。GPU通用計算方面的標準目前有 OPEN CL、CUDA、ATI STREAM。其中,OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的並行編程的開放式、免費標準,也是一個統一的編程環境,便於軟體開發人員為高性能計算伺服器、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用於多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP) 等其他並行處理器,在遊戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景,AMD-ATI、NVIDIA現在的產品都支持OPEN CL。 NVIDIA公司在1999年發布GeForce 256圖形處理晶元時首先提出GPU的概念。從此NV顯卡的芯就用這個新名字GPU來稱呼。GPU使顯卡減少了對CPU的依賴,並進行部分原本CPU的工作,尤其是在3D圖形處理時。GPU所採用的核心技術有硬體TL、立方環境材質貼圖和頂點混合、紋理壓縮和凹凸映射貼圖、雙重紋理四像素256 位渲染引擎等,而硬體TL技術可以說是GPU的標誌。


工作原理

簡單說GPU就是能夠從硬體上支持TL(Transform and Lighting,多邊形轉換與光源處理)的顯示晶元,因為TL是3D渲染中的一個重要部分,其作用是計算多邊形的3D位置和處理動態光線效果,也可以稱為「幾何處理」。一個好的TL單元,可以提供細緻的3D物體和高級的光線特效;只不過大多數PC中,TL的大部分運算是交由CPU處理的(這就也就是所謂的軟體TL),由於CPU的任務繁多,除了TL之外,還要做內存管理、輸入響應等非3D圖形處理工作,因此在實際運算的時候性能會大打折扣,常常出現顯卡等待CPU數據的情況,其運算速度遠跟不上今天複雜三維遊戲的要求。即使CPU的工作頻率超過 1GHz或更高,對它的幫助也不大,由於這是PC本身設計造成的問題,與CPU的速度無太大關係。

GPU與DSP區別


GPU在幾個主要方面有別於DSP(Digital Signal Processing,簡稱DSP(數字信號處理)架構。其所有計算均使用浮點演算法,而且目前還沒有位或整數運算指令。此外,由於GPU專為圖像處理設計,因此存儲系統實際上是一個二維的分段存儲空間,包括一個區段號(從中讀取圖像)和二維地址(圖像中的X、Y坐標)。此外,沒有任何間接寫指令。輸出寫地址由光柵處理器確定,而且不能由程序改變。這對於自然分布在存儲器之中的演算法而言是極大的挑戰。最後一點,不同碎片的處理過程間不允許通信。實際上,碎片處理器是一個SIMD數據並行執行單元,在所有碎片中獨立執行代碼。


儘管有上述約束,但是GPU還是可以有效地執行多種運算,從線性代數和信號處理到數值模擬。雖然概念簡單,但新用戶在使用GPU計算時還是會感到迷惑,因為GPU需要專有的圖形知識。這種情況下,一些軟體工具可以提供幫助。兩種高級描影語言CG和HLSL能夠讓用戶編寫類似C的代碼,隨後編譯成碎片程序彙編語言。Brook是專為GPU計算設計,且不需要圖形知識的高級語言。因此對第一次使用GPU進行開發的工作人員而言,它可以算是一個很好的起點。Brook是C語言的延伸,整合了可以直接映射到 GPU的簡單數據並行編程構造。經 GPU存儲和操作的數據被形象地比喻成「流」(stream),類似於標準C中的數組。核心(Kernel)是在流上操作的函數。在一系列輸入流上調用一個核心函數意味著在流元素上實施了隱含的循環,即對每一個流元素調用核心體。Brook還提供了約簡機制,例如對一個流中所有的元素進行和、最大值或乘積計算。Brook還完全隱藏了圖形API的所有細節,並把GPU中類似二維存儲器系統這樣許多用戶不熟悉的部分進行了虛擬化處理。用Brook編寫的應用程序包括線性代數子程序、快速傅立葉轉換、光線追蹤和圖像處理。利用ATI的X800XT和Nvidia的GeForce 6800 Ultra型GPU,在相同高速緩存、SSE彙編優化Pentium 4執行條件下,許多此類應用的速度提升高達7倍之多。


對GPU計算感興趣的用戶努力將演算法映射到圖形基本元素。類似Brook這樣的高級編程語言的問世使編程新手也能夠很容易就掌握GPU的性能優勢。訪問GPU計算功能的便利性也使得GPU的演變將繼續下去,不僅僅作為繪製引擎,而是會成為個人電腦的主要計算引擎。


GPU和CPU的區別是什麼?


要解釋兩者的區別,要先明白兩者的相同之處:兩者都有匯流排和外界聯繫,有自己的緩存體系,以及數字和邏輯運算單元。一句話,兩者都為了完成計算任務而設計。


兩者的區別在於存在於片內的緩存體系和數字邏輯運算單元的結構差異:CPU雖然有多核,但總數沒有超過兩位數,每個核都有足夠大的緩存和足夠多的數字和邏輯運算單元,並輔助有很多加速分支判斷甚至更複雜的邏輯判斷的硬體;GPU的核數遠超CPU,被稱為眾核(NVIDIA Fermi有512個核)。每個核擁有的緩存大小相對小,數字邏輯運算單元也少而簡單(GPU初始時在浮點計算上一直弱於CPU)。從結果上導致CPU擅長處理具有複雜計算步驟和複雜數據依賴的計算任務,如分散式計算,數據壓縮,人工智慧,物理模擬,以及其他很多很多計算任務等。GPU由於歷史原因,是為了視頻遊戲而產生的(至今其主要驅動力還是不斷增長的視頻遊戲市場),在三維遊戲中常常出現的一類操作是對海量數據進行相同的操作,如:對每一個頂點進行同樣的坐標變換,對每一個頂點按照同樣的光照模型計算顏色值。GPU的眾核架構非常適合把同樣的指令流並行發送到眾核上,採用不同的輸入數據執行。在 2003-2004年左右,圖形學之外的領域專家開始注意到GPU與眾不同的計算能力,開始嘗試把GPU用於通用計算(即GPGPU)。之後NVIDIA 發布了CUDA,AMD和Apple等公司也發布了OpenCL,GPU開始在通用計算領域得到廣泛應用,包括:數值分析,海量數據處理(排序,Map- Reduce等),金融分析等等。


簡而言之,當程序員為CPU編寫程序時,他們傾向於利用複雜的邏輯結構優化演算法從而減少計算任務的運行時間,即Latency。當程序員為GPU編寫程序時,則利用其處理海量數據的優勢,通過提高總的數據吞吐量(Throughput)來掩蓋 Lantency。目前,CPU和GPU的區別正在逐漸縮小,因為GPU也在處理不規則任務和線程間通信方面有了長足的進步。另外,功耗問題對於GPU比 CPU更嚴重。


總的來講,GPU和CPU的區別是個很大的話題,甚至可以花一個學期用32個學時十幾次講座來講。


在對比CPU與GPU的時候,現在很多人喜歡用小學生和老教授的例子來進行類比,然而這種類比方式是非常不恰當。
GPU的SFU單元很早就實現了特殊功能指令,包括sin/cos、2^x、log、1/x,並且他是通過提供硬體加速來實現的。
反觀CPU,x86可能在早起對這些特殊指令進行了支持。但是追求高主頻與細粒度流水(RISC,CISC-&>μop)後,主流處理器很少(POWER可能還有)再支持這種複雜指令了。
如果真要帶入這個例子,GPU應該是老教授,通過複雜的最小逼近的二次插值來計算各種特殊指令;CPU反而是小學生,將一條複雜指令分解成20條代表小學生的μop,然後仍然通過細分的流水來計算最終的結果。

下面這個圖可以更合適的反應CPU與GPU的差別:

Ghorpade J, Parande J, Kulkarni M, et al. GPGPU processing in CUDA architecture[J]. arXiv preprint arXiv:1202.4347, 2012.


看視頻:Mythbusters Demo GPU versus CPU視頻封面Mythbusters Demo GPU versus CPU—在線播放—優酷網,視頻高清在線觀看視頻


gpu與cpu的本質區別是前者擁有為視頻運算專門設計的運算單元: 光柵單元和紋理填充單元。除了這兩個,兩者並無本質區別。


只是功能劃分和按照功能進行了增強,無本質區別。非要找區別,那就是運算能力吧。
另外:
1,cpu的核早就有超過兩位數的了,這不是區別之一。
2,對於樓上巴拉巴拉講了一堆無關區別東西的也能獲得這麼多票,感到XXXX。


CPU和GPU之所以大不相同,是由於其設計目標的不同,它們分別針對了兩種不同的應用場景。CPU需要很強的通用性來處理各種不同的數據類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的內部結構異常複雜。 3D圖形,通常意義的CPU其實也可以做GPU做的事,但是它沒有為3D圖形處理做專門的優化,指令集也不適合用於3D計算。


CPU一般由邏輯運算單元、控制單元和存儲單元組成。在邏輯運算和控制單元中包括一些寄存器,這些寄存器用於CPU在處理數據過程中數據的暫時保存。   
CPU雖然有多核,但總數沒有超過兩位數,每個核都有足夠大的緩存;CPU有足夠多的數字和邏輯運算單元,並輔助有很多加速分支判斷甚至更複雜的邏輯判斷的硬體。
cpu擁有超強的邏輯能力。CPU擅長處理具有複雜計算步驟和複雜數據依賴的計算任務,如分散式計算,數據壓縮,人工智慧,物理模擬,以及其他很多很多計算任務等
GPU全稱Graphic Processing Unit中文名為:圖形處理器   
GPU能夠從硬體上支持TL(TransformandLighting,多邊形轉換與光源處理)的顯示晶元,因為TL是3D渲染中的一個重要部分,其作用是計算多邊形的3D位置和處理動態光線效果,也可以稱為「幾何處理」。一個好的TL單元,可以提供細緻的3D物體和高級的光線特效;只不過大多數PC中,TL的大部分運算是交由CPU處理的(這也就是所謂的軟體TL),由於CPU的任務繁多,除了TL之外,還要做內存管理、輸入響應等非3D圖形處理工作,因此在實際運算的時候性能會大打折扣,常常出現顯卡等待CPU數據的情況,其運算速度遠跟不上今天複雜三維遊戲的要求。
即使CPU的工作頻率超過3GHz或更高,對它的幫助也不大,由於這是PC本身設計造成的問題,與CPU的速度無太大關係。  
gpu是作為一個附屬型處理器出現存在的,它主要處理計算機中與圖形計算有關的工作。   
GPU的核數遠超CPU,被稱為眾核,但每個核擁有的緩存大小相對小。
GPU的數字邏輯運算單元也少而簡單(GPU初始時在浮點計算上一直弱於CPU)。
gpu擁有超高的運算速度。GPU擅長於圖像處理,所以gpu主要是用在圖像、視頻遊戲等領域。GPU的功耗遠遠超過CPU


視頻封面Mythbusters Demo GPU versus CPU—在線播放—優酷網,視頻高清在線觀看視頻


CPU是一個諸葛亮;
GPU是四個臭裨將。

行軍打仗出鬼點子,「三個臭裨將,頂一個諸葛亮」;

治理國家內務,制定法律,發展民生,提高物流(木牛流馬),現代化武裝(諸葛連弩)等等,這些事還是諸葛亮去做,或者「一萬個臭裨將接近一個諸葛亮」,又或者「三個內務官,頂一個諸葛亮」。

純粹的圖形數據運算,就是行軍打仗。
包含點邏輯推斷的運算,就是治理國家了。

(假設)朝廷里丞相是最大的,但是手底下也有文武百官。文武百官可能總有很多領域的工作上比丞相有能力,但是最後拍板「老子就是要打曹賊,誰攔我都不好使」,寫《出師表》的,基本上還是丞相。


簡單的可以這樣說,現代意義上的GPU其實CPU的一種,是一種特殊用途的CPU,比較善於處理3D圖形,通常意義的CPU其實也可以做GPU做的事,但是它沒有為3D圖形處理做專門的優化,指令集也不適合用於3D計算。
這麼說吧,如果只是用Office,上網或者一些常規應用,理論上說GPU也可以做到,但是CPU在這方面完爆GPU。


都是用來計算的,但是CPU用來計算奧數,GPU用來計算簡單點的數學問題。GPU可用於深度學習,深度學習就是在一大推同質的數據上產生想要的簡單結果,深度學習邏輯上並不難但是工作量大,需要GPU的吞吐量


說簡單點,就是適用不同的應用,各自適用的特點如下:
gpu:數量大,計算簡單,重複多次
cpu :數量不那麼大,計算複雜,重複性低
符合哪個特點的應用就選擇哪個
應用運行時可以指定其使用哪個

至於硬體內部的晶元結構不用談論,除非你是硬體設計工程師


gpu的alu多


剛好在學習GPU編程,歡迎在搞GPU編程的交流

在 NVIDIA的CUDA 官方文檔看到的:

CUDA Toolkit Documentation


打個比方,CPU相當於大學教授,GPU相當於一群小學生


推薦閱讀:

TAG:中央處理器CPU | 圖形處理器GPU |