CPU與GPU到底有什么區(qū)別?你知道嗎?
?大家好,我是小風哥,今天簡單聊聊CPU與GPU。
CPU的故事我們聊得比較多了,之前也發(fā)布過很多關于CPU的文章,因此這里重點聊聊GPU。
教授 vs 小學生
你可以簡單的將CPU理解為學識淵博的教授,什么都精通,而GPU則是一堆小學生,只會簡單的算數(shù)運算,可即使教授再神通廣大,也不能一秒鐘內(nèi)計算出500次加減法,因此對簡單重復的計算來說單單一個教授敵不過數(shù)量眾多的小學生,在進行簡單的算數(shù)運算這件事上,500個小學生(并發(fā))可以輕而易舉打敗教授。
因此我們可以看到,CPU和GPU的最大不同在于架構,CPU適用于廣泛的應用場景(學識淵博),可以執(zhí)行任意程序,而GPU則專為多任務而生,并發(fā)能力強,具體來講就是多核,一般的CPU有2核、4核、8核等,而GPU則可能會有成百上千核:
可以看到,CPU內(nèi)部cache以及控制部分占據(jù)了很大一部分片上面積,因此計算單元占比很少,再來看看GPU,GPU只有很簡單的控制單元,剩下的大部分都被計算單元占據(jù),因此CPU的核數(shù)有限,而GPU則輕松堆出上千核:
只不過CPU中每個核的能力好比教授,而GPU的每個核的能力好比一個小學生。你可能會想,為什么GPU需要這么奇怪的架構呢?
為什么GPU需要這么多核心?
想一想計算機上的一張圖是怎么表示的?無非就是屏幕上的一個個像素:
我們需要為每個像素進行計算,而且是相同的運算,就好比剛才例子中的小學生計算計加法一樣,注意,對于屏幕來說一般會有上百萬個像素,如果我們要串行的為每一個像素進行運算效率就太低了,因此我們可以讓GPU中的每一個核心去為相應的像素進行計算,由于GPU中有很多核心,因此并行計算可以大幅提高速度?,F(xiàn)在你應該明白為什么GPU要這樣工作了吧。除了GPU的核心數(shù)比較多之外,GPU的工作方式也比較奇怪。
奇怪的工作方式
對CPU來說,不同的核心可以執(zhí)行不同的機器指令,coreA在運行word線程的同時coreB上可以運行瀏覽器線程,這就是所謂的多指令多數(shù)據(jù),MIMD,(Multiple Instruction, Multiple Data)。
而GPU則不同,GPU上的這些核心必須整齊劃一的運行相同的機器指令,只是可以操作不同的數(shù)據(jù),這就好比這些小學生在某個時刻必須都進行加法計算,不同的地方在于有的小學生可能需要計算1+1,有的要計算2+6等等,變化的地方僅在于操作數(shù),這就是所謂的單指令多數(shù)據(jù),SIMD,(Single Instruction, Multiple Data)。
因此我們可以看到GPU的工作方式和CPU是截然不同的。
除了這種工作方式之外,GPU的指令集還非常簡單,不像CPU這種復雜的處理器,如果你去看CPU的編程手冊就會發(fā)現(xiàn),CPU負責的事情非常多:中斷處理、內(nèi)存管理、IO等等,這些對于GPU來說都是不存在的,可以看到GPU的定位非常簡單,就是純計算,GPU絕不是用來取代CPU的,CPU只是把一些GPU非常擅長的事情交給它,GPU僅僅是用來分擔CPU工作的配角。CPU和GPU是這樣配合工作的:
GPU擅長什么
比較適合GPU的計算場景是這樣的:1)計算簡單;2)重復計算,因此如果你的計算場景和這里的圖像渲染相似那么使用GPU就很合理了。因此對于圖形圖像計算、天氣預報以及神經(jīng)網(wǎng)絡等都適用于GPU,哦對了,GPU還適合用來挖礦。好啦,這個話題今天就到這里,希望這篇對大家理解GPU有所幫助。?