CPU,GPU,DPU,TPU,NPU,BPU等處理器的效能及概念
目錄
- 1.CPU
- 2.GPU
- 3.TPU
- 4.NPU
- 5.ASIC
- 6.BPU(Brain Processing Unit,大腦處理器)
- 7. DPU(Deep learning Processing Unit,即深度學習處理器)
1.CPU
CPU( Central Processing Unit,中央處理器)就是機器的“大腦”,也是佈局謀略、發號施令、控制行動的“總司令官”。
CPU的結構主要包括運算器(ALU,Arithmetic and Logic Unit)、控制單元(CU,Control Unit)、暫存器(Register)、快取記憶體器(Cache)和它們之間通訊的資料、控制及狀態的匯流排。
簡單來說就是:計算單元、控制單元和儲存單元,架構如下圖所示:
從字面上我們也很好理解,計算單元主要執行算術運算、移位等操作以及地址運算和轉換;儲存單元主要用於儲存運算中產生的資料以及指令等;控制單元則對指令譯碼,並且發出為完成每條指令所要執行的各個操作的控制訊號。
所以一條指令在CPU中執行的過程是這樣的:讀取到指令後,通過指令匯流排送到控制器(黃色區域)中進行譯碼,併發出相應的操作控制訊號;然後運算器(綠色區域)按照操作指令對資料進行計算,並通過資料匯流排將得到的資料存入資料快取器(大塊橙色區域)
是不是有點兒複雜?沒關係,這張圖完全不用記住,我們只需要知道,CPU遵循的是馮諾依曼架構,其核心就是:儲存程式,順序執行。
講到這裡,有沒有看出問題,沒錯——在這個結構圖中,負責計算的綠色區域佔的面積似乎太小了,而橙色區域的快取Cache和黃色區域的控制單元佔據了大量空間。
高中化學有句老生常談的話叫:結構決定性質,放在這裡也非常適用。
因為CPU的架構中需要大量的空間去放置儲存單元(橙色部分)和控制單元(黃色部分),相比之下計算單元(綠色部分)只佔據了很小的一部分,所以它在大規模平行計算能力上極受限制,而更擅長於邏輯控制。
另外,因為遵循馮諾依曼架構(儲存程式,順序執行),CPU就像是個一板一眼的管家,人們吩咐的事情它總是一步一步來做。但是隨著人們對更大規模與更快處理速度的需求的增加,這位管家漸漸變得有些力不從心。
於是,大家就想,能不能把多個處理器放在同一塊晶片上,讓它們一起來做事,這樣效率不就提高了嗎?
沒錯,GPU便由此誕生了。
2.GPU
在正式講解GPU之前,我們先來講講上文中提到的一個概念——平行計算。
平行計算(Parallel Computing)是指同時使用多種計算資源解決計算問題的過程,是提高計算機系統計算速度和處理能力的一種有效手段。它的基本思想是用多個處理器來共同求解同一問題,即將被求解的問題分解成若干個部分,各部分均由一個獨立的處理機來平行計算。
平行計算可分為時間上的並行和空間上的並行。
時間上的並行是指流水線技術,比如說工廠生產食品的時候分為四步:清洗-消毒-切割-包裝。
如果不採用流水線,一個食品完成上述四個步驟後,下一個食品才進行處理,耗時且影響效率。但是採用流水線技術,就可以同時處理四個食品。這就是並行演算法中的時間並行,在同一時間啟動兩個或兩個以上的操作,大大提高計算效能。
空間上的並行是指多個處理機併發的執行計算,即通過網路將兩個以上的處理機連線起來,達到同時計算同一個任務的不同部分,或者單個處理機無法解決的大型問題。
比如小李準備在植樹節種三棵樹,如果小李1個人需要6個小時才能完成任務,植樹節當天他叫來了好朋友小紅、小王,三個人同時開始挖坑植樹,2個小時後每個人都完成了一顆植樹任務,這就是並行演算法中的空間並行,將一個大任務分割成多個相同的子任務,來加快問題解決速度。
所以說,如果讓CPU來執行這個種樹任務的話,它就會一棵一棵的種,花上6個小時的時間,但是讓GPU來種樹,就相當於好幾個人同時在種。
GPU全稱為Graphics Processing Unit,中文為圖形處理器,就如它的名字一樣,GPU最初是用在個人電腦、工作站、遊戲機和一些移動裝置(如平板電腦、智慧手機等)上執行繪圖運算工作的微處理器。
為什麼GPU特別擅PSediGY長處理影象資料呢?這是因為影象上的每一個畫素點都有被處理的需要,而且每個畫素點處理的過程和方式都十分相似,也就成了GPU的天然溫床。
GPU簡單架構如下圖所示:
從架構圖我們就能很明顯的看出,GPU的構成相對簡單,有數量眾多的計算單元和超長的流水線,特別適合處理大量的型別統一的資料。
但GPU無法單獨工作,必須由CPU進行控制呼叫才能工作。CPU可單獨作用,處理複雜的邏輯運算和不同的資料型別,但當需要大量的處理型別統一的資料時,則可呼叫GPU進行平行計算。
注:GPU中有很多的運算器ALU和很少的快取cache,快取的目的不是儲存後面需要訪問的資料的,這點和CPU不同,而是為執行緒thread提高服務的。如果有很多執行緒需要訪問同一個相同的資料,快取會合並這些訪問,然後再去訪問dram。
GPU的工作大部分都計算量大,但沒什麼技術含量,而且要重複很多很多次。
借用知乎上某大神的說法,就像你有個工作需要計算幾億次一百以內加減乘除一樣,最好的辦法就是僱上幾十個小學生一起算,一人算一部分,反正這些計算也沒什麼技術含量,純粹體力活而已;而CPU就像老教授,積分微分都會算,就是工資高,一個老教授資頂二十個小學生,你要是富士康你僱哪個?
GPU就是用很多簡單的計算單元去完成大量的計算任務,純粹的人海戰術。這種策略基於一個前提,就是小學生A和小學生B的工作沒有什麼依賴性,是互相獨立的。
但有一點需要強調,雖然GPU是為了影象處理而生的,但是我們通過前面的介紹可以發現,它在結構上並沒有專門為影象服務的部件,只是對CPU的結構進行了優化與調整,所以現在GPU不僅可以在影象處理領域大顯身手,它還被用來科學計算、密碼破解、數值分析,海量資料處理(排序,Map-Reduce等),金融分析等需要大規模平行計算的領域。
所以GPU也可以認為是一種較通用的晶片。
3.TPU
按照上文所述,CPU和GPU都是較為通用的晶片,但是有句老話說得好:萬能工具的效率永遠比不上專用工具。
隨著人們的計算需求越來越專業化,人們希望有晶片可以更加符合自己的專業需求,這時,便產生了ASIC(專用積體電路)的概念。
ASIC是指依產品需求不同而定製化的特殊規格積體電路,由特定使用者要求和特定電子系統的需要而設計、製造。當然這概念不用記,簡單來說就是定製化晶片。
因為ASIC很“專一”,只做一件事,所以它就會比CPU、GPU等能做很多件事的晶片在某件事上做的更好,實現更高的處理速度和更低的能耗。但相應的,ASIC的生產成本也非常高。
而TPU(Tensor Processing Unit,張量處理器)就是谷歌專門為加速深層神經網路運算能力而研發的一款晶片,其實也是一款ASIC。
原來很多的機器學習以及影象處理演算法大部分都跑在GPU與FPGA(半定製化晶片)上面,但這兩種晶片都還是一種通用性晶片,所以在效能與功耗上還是不能更緊密的適配機器學習演算法,而且Google一直堅信偉大的軟體將在偉大的硬體的幫助下更加大放異彩,所以Google便想,我們可不可以做出一款專用機機器學習演算法的專用晶片,TPU便誕生了。
據稱,TPU與同期的CPU和GPU相比,可以提供15-30倍的效能提升,以及30-80倍的效率(效能/瓦特)提升。初代的TPU只能做推理,要依靠Google雲來實時收集資料併產生結果,而訓練過程還需要額外的資源;而第二代TPU既可以用於訓練神經網路,又可以用於推理。
看到這裡你可能會問了,為什麼TPU會在效能上這麼牛逼呢?
嗯,谷歌寫了好幾篇論文和博文來說明這一原因,所以僅在這裡拋磚引玉一下。
如上圖所示,TPU在晶片上使用了高達24MB的區域性記憶體,6MB的累加器記憶體以及用於與主控處理器進行對接的記憶體,總共佔芯片面積的37%(圖中藍色部分)。
這表示谷歌充分意識到了片外記憶體訪問是GPU能效比低的罪魁禍首,因此不惜成本的在晶片上放了巨大的記憶體。相比之下,英偉達同時期的K80只有8MB的片上記憶體,因此需要不斷地去訪問片外DRAM。
另外,TPU的高效能還來源於對於低運算精度的容忍。研究結果表明,低精度運算帶來的演算法準確率損失很小,但是在硬體實現上卻可以帶來巨大的便利,包括功耗更低、速度更快、佔芯片面積更小的運算單元、更小的記憶體頻寬需求等...TPU採用了8位元的低精度運算。
其它更多的資訊可以去翻翻谷歌的論文。
到目前為止,TPU其實已經幹了很多事情了,例如機器學習人工智慧系統RankBrain,它是用來幫助Google處理搜尋結果併為使用者提供更加相關搜尋結果的;還有街景Street View,用來提高地圖與導航的準確性的;當然還有下圍棋的計算機程式AlphaGo!
4.NPU
講到這裡,相信大家對這些所謂的“XPU”的套路已經有了一定了解,我們接著來。
所謂NPU(Neural network Processing Unit), 即神經網路處理器。顧名思義,這傢伙是想用電路模擬人類的神經元和突觸結構啊!
怎麼模仿?那就得先來看看人類的神經結構——生物的神經網路由若干人工神經元結點互聯而成,神經元之間通過突觸兩兩連線,突觸記錄了神經元之間的聯絡。
如果想用電路模仿人類的神經元,就得把每個神經元抽象為一個激勵函式,該函式的輸入由與其相連的神經元的輸出以及連線神經元的突觸共同決定。
為了表達特定的知識,使用者通常需要(通過某些特定的演算法)調整人工神經網路中突觸的取值、網路的拓撲結構等。該過程稱為“學習”。
在學習之後,人工神經網路可通過習得的知識來解決特定的問題。
這時不知道大家有沒有發現問題——原來,由於深度學習的基本操作是神經元和突觸的處理,而傳統的處理器指令集(包括x86和ARM等)是為了進行通用計算髮展起來的,其基本操作為算術操作(加減乘除)和邏輯操作(與或非),往往需要數百甚至上千條指令才能完成一個神經元的處理,深度學習的處理效率不高。
這時就必須另闢蹊徑——突破經典的馮諾伊曼結構!
神經網路中儲存和處理是一體化的,都是通過突觸權重來體現。 而馮諾伊曼結構中,儲存和處理是分離的,分別由儲存器和運算器來實現,二者之間存在巨大的差異。當用現有的基於馮諾伊曼結構的經典計算機(如X86處理器和英偉達GPU)來跑神經網路應用時,就不可避免地受到儲存和處理分離式結構的制約,因而影響效率。這也就是專門針對人工智慧的專業晶片能夠對傳統晶片有一定先天優勢的原因之一。
NPU的典型代表有國內的寒武紀晶片和IBM的TrueNorth。以中國的寒武紀為例,DianNaoYu指令直接面對大規模神經元和突觸的處理,一條指令即可完成一組神經元的處理,並對神經元和突觸資料在晶片上的傳輸提供了一系列專門的支援。
用數字來說話,CPU、GPU與NPU相比,會有百倍以上的效能或能耗比差距——以寒武紀團隊過去和Inria聯合發表的DianNao論文為例——DianNao為單核處理器,主頻為0.98GHz,峰值效能達每秒4520億次神經網路基本運算,65nm工藝下功耗為0.485W,面積3.02平方毫米mm。
文章開頭所說的mate10中所用的麒麟970晶片,就集成了寒武紀的NPU,所以才可以實現所謂的照片優化功能,以及保證你的手機用了很長時間後還能不卡(當然也得真正用了才能知道有沒有宣傳的這麼好)。
PS,中星微電子的“星光智慧一號”雖說對外號稱是NPU,但其實只是DSP,僅支援網路正向運算,無法支援神經網路訓練。
5.ASIC
ASIC(Application Specific Integrated Circuit)是一種為專門目的而設計的積體電路。無法重新,效能高功耗低,但價格昂貴。近年來湧現出的類似TPU、NPU、VPU、BPU等令人眼花繚亂的各種晶片,本質上都屬於ASIC。ASIC不同於 GPU 和 FPGA 的靈活性,定製化的 ASIC 一旦製造完成將不能更改,所以初期成本高、開發週期長的使得進入門檻高。目前,大多是具備 AI 演算法又擅長晶片研發的巨頭參與,如 Google 的 TPU。由於完美適用於神經網路相關演算法,ASIC 在效能和功耗上都要優於 GPU 和 FPGA,TPU1 是傳統 GPU 效能的 14-16 倍,NPU 是 GPU 的 118 倍。寒武紀已釋出對外應用指令集,預計 ASIC 將是未來 AI 晶片的核心。
6.BPU(Brain Processing Unit,大腦處理器)
是由地平線科技提出的嵌入式人工智慧處理器架構。第一代是高斯架構,第二代是伯努利架構,第三代是貝葉斯架構。目前地平線已經設計出了第一代高斯架構,並與英特爾在2017年CES展會上聯合推出了ADAS系統(高階駕駛輔助系統)。
7. DPU(Deep learning Processing Unit,即深度學習處理器)
最早由國內深鑑科技提出,基於Xilinx可重構特性的FPGA晶片,設計專用的深度學習處理單元(可基於已有的邏輯單元,設計並行高效的乘法器及邏輯電路,屬於IP範疇),且抽象出定制化的指令集和編譯器(而非使用OpenCL),從而實現快速的開發與產品迭代。事實上,深鑑提出的DPU屬於半定製化的FPGA。
嵌入式神經網路處理器(NPU)採用“資料驅動平行計算”的架構,特別擅長處理視訊、影象類的海量多媒體資料。
NPU處理器專門為物聯網人工智慧而設計,用於加速神經網路的運算,解決傳統晶片在神經網路運算時效率低下的問題。
在GX8010中,CPU和MCU各有一個NPU,MCU中的NPU相對較小,習慣上稱為SNPU。
NPU處理器包括了乘加、啟用函式、二維資料運算、解壓縮等模組。
乘加模組用於計算矩陣乘加、卷積、點乘等功能,NPU內部有64個MAC,SNPU有32個。
啟用函式模組採用最高12階引數擬合的方式實現神經網路中的啟用函式,NPU內部有6個MAC,SNPU有3個。
二維資料運算模組用於實現對一個平面的運算,如降取樣、平面資料拷貝等,NPU內部有1個MAC,SNhttp://www.cppcns.comPU有1個。
解壓縮模組用於對權重資料的解壓。為了解決物聯網裝置中記憶體頻寬小的特點,在NPU編譯器中會對神經網路中的權重進行壓縮,在幾乎不影響精度的情況下,可以實現6-10倍的壓縮效果。
不,據說每過18天,積體電路領域就會多出一個XPU,直到26個字母被用完。
這被戲稱為AI時代的XPU版摩爾定律。
據不完全統計,已經被用掉的有:
APU -- Accelerated Processing Unit,加速處理器,AMD公司推出加速影象處理晶片產品。
BPU -- Brain Processing Unit,地平線公司主導的嵌入式處理器架構。自動駕駛
CPU -- Central Processing Unit 中央處理器, 目前PC core的主流產品。
DPU -- Deep learning Processing Unit,深度學習處理器,最早由國內深鑑科技提出;另說有Dataflow Processing Unit 資料流處理器, Wave Computing 公司提出的AI架構;Data storage Processing Unit,深圳大普微的智慧固態硬碟處理器。
FPU -- Floating Processing Unit 浮點計算單元,通用處理器中的浮點運算模組。
GPU -- Graphics Processing Unit,圖形處理器,採用多執行緒SIMD架構,為圖形處理而生。
HPU -- Holographics Processing Unit 全息影象處理器, 微軟出品的全息計算晶片與裝置。
IPU --PSediGY Intelligence Processing Unit, Deep Mind投資的Graphcore公司出品的AI處理器產品。
MPU/MCU -- Microprocessor/Micro controller Unit, 微處理器/微控制器,一般用於低計算應用的RISC計算機體系架構產品,如ARM-M系列處理器。
NPU -- Neural Network Processing Unit,神經網路處理器,是基於神經網路演算法與加速的新型處理器總稱,如中科院計算所/寒武紀公司出品的diannao系列。
RPU -- Radio Processing Unit,無線電處理器, Imagination Technologies 公司推出的集合集Wifi/藍芽/FM/處理器為單片的處理器。
TPU -- Te程式設計客棧nsor Processing Unit 張量處理器, Google 公司推出的加速人工智慧演算法的專用處理器。目前一代TPU面向Inference,二代面向訓練。另外,
VPU -- Vector Processing Unit 向量處理器,Intel收購的Movidius公司推出的影象處理與人工智慧的專用晶片的加速計算核心。
WPU -- Wearable Processing Unit, 可穿戴處理器,Ineda Systems公司推出的可穿戴片上系統產品,包含GPU/MIPS CPU等IP。
XPU -- 百度與Xilinx公司在2017年Hotchips大會上釋出的FPGA智慧雲加速,含256核。
ZPU -- Zylin Processing Unit,由挪威Zylin 公司推出的一款32位開源處理器。
當26個字母被用完後,即將出現XXPU,XXXPU,並以更快的速度佔領起名界。
關於CPU,BPU等各種處理器的內容就到這裡啦,有木有突然透徹的感覺呢,更多相關內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!