GPU相關的分享

GPU相關分享

什麼是GPU

圖形處理器(英語:graphics processing unit,縮寫:GPU),又稱顯示核心、視覺處理器、顯示芯片或圖形處理器,是一種專門在個人電腦、工作站、遊戲機和一些移動設備(如平板電腦、智能手機等)上運行繪圖運算工作的微處理器。

GPU和CPU之間的區別和聯繫。為什麼要有GPU?

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

GPU相關的分享

從上圖可以看出:

Cache, local memory: CPU > GPU

Threads(線程數): GPU > CPU

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

SIMD Unit(單指令多數據流,以同步方式,在同一時間內執行同一條指令): GPU > CPU。

GPU相關的分享

CPU有強大的ALU(算術運算單元),它可以在很少的時鐘週期內完成算術計算。

當今的CPU可以達到64bit 雙精度。執行雙精度浮點源算的加法和乘法只需要1~3個時鐘週期。

CPU的時鐘週期的頻率是非常高的,達到1.532~3gigahertz(千兆HZ, 10的9次方).

大的緩存也可以降低延時。保存很多的數據放在緩存裡面,當需要訪問的這些數據,只要在之前訪問過的,如今直接在緩存裡面取即可。

複雜的邏輯控制單元。當程序含有多個分支的時候,它通過提供分支預測的能力來降低延時。

數據轉發。 當一些指令依賴前面的指令結果時,數據轉發的邏輯控制單元決定這些指令在pipeline中的位置並且儘可能快的轉發一個指令的結果給後續的指令。這些動作需要很多的對比電路單元和轉發電路單元。

GPU相關的分享

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來管的。


分享到:


相關文章: