CPU/GPU/TPU/NPU...XPU都是什麼鬼

目錄

 

CPU

GPU

TPU

NPU

BPU

DPU

其他 XPU


現在這年代,技術日新月異,物聯網、人工智能、深度學習等概念遍地開花,各類芯片名詞GPU, TPU, NPU,DPU層出不窮......它們都是什麼鬼?與CPU又是什麼關係?搞不懂這些知識,買手機的時候都沒法在妹子面前裝B了呢。

這是“物小白系列”的第1篇文章

“親愛的,聽說HW最新發布了Mate 10,裏面有個叫什麼NPU的,聽起來很厲害,這是什麼東西啊?”

“呃……就是人工智能處理器吧?”

“什麼是人工智能處理器?和CPU有啥區別?和GPU有啥區別?不都帶個PU嗎?”

“呃……”

現在這年代,技術日新月異,物聯網、人工智能、深度學習等概念遍地開花,各類芯片名詞GPU, TPU, NPU,DPU,層出不窮......它們都是什麼鬼?與CPU又是什麼關係?搞不懂這些知識,買手機的時候都沒法在妹子面前裝B了呢。

所以,今天我們就來通俗易懂的科普一下這些所謂的“XPU”!

CPU

CPU( Central Processing Unit, 中央處理器)就是機器的“大腦”,也是佈局謀略、發號施令、控制行動的“總司令官”。

CPU的結構主要包括運算器(ALU, Arithmetic and Logic Unit)、控制單元(CU, Control Unit)、寄存器(Register)、高速緩存器(Cache)和它們之間通訊的數據、控制及狀態的總線。

簡單來說就是:計算單元、控制單元和存儲單元,架構如下圖所示:

圖:CPU微架構示意圖

什麼?架構記不住?來,我們換種表示方法:

圖:CPU微架構示意圖(改)

嗯,大概就是這個意思。

從字面上我們也很好理解,計算單元主要執行算術運算、移位等操作以及地址運算和轉換;存儲單元主要用於保存運算中產生的數據以及指令等;控制單元則對指令譯碼,並且發出爲完成每條指令所要執行的各個操作的控制信號。

所以一條指令在CPU中執行的過程是這樣的:讀取到指令後,通過指令總線送到控制器(黃色區域)中進行譯碼,併發出相應的操作控制信號;然後運算器(綠色區域)按照操作指令對數據進行計算,並通過數據總線將得到的數據存入數據緩存器(大塊橙色區域)。過程如下圖所示:

圖:CPU執行指令圖

是不是有點兒複雜?沒關係,這張圖完全不用記住,我們只需要知道,CPU遵循的是馮諾依曼架構,其核心就是:存儲程序,順序執行。

講到這裏,有沒有看出問題,沒錯——在這個結構圖中,責計算的綠色區域佔的面積似乎太小了,而橙色區域的緩存Cache和黃色區域的控制單元佔據了大量空間。

高中化學有句老生常談的話叫:結構決定性質,放在這裏也非常適用。

因爲CPU的架構中需要大量的空間去放置存儲單元(橙色部分)控制單元(黃色部分),相比之下計算單元(綠色部分)只佔據了很小的一部分,所以它在大規模並行計算能力上極受限制,而更擅長於邏輯控制。

另外,因爲遵循馮諾依曼架構(存儲程序,順序執行),CPU就像是個一板一眼的管家,人們吩咐的事情它總是一步一步來做。但是隨着人們對更大規模與更快處理速度的需求的增加,這位管家漸漸變得有些力不從心。

於是,大家就想,能不能把多個處理器放在同一塊芯片上,讓它們一起來做事,這樣效率不就提高了嗎?

沒錯,GPU便由此誕生了。

GPU

在正式講解GPU之前,我們先來講講上文中提到的一個概念——並行計算。

並行計算(Parallel Computing)是指同時使用多種計算資源解決計算問題的過程,是提高計算機系統計算速度和處理能力的一種有效手段。它的基本思想是用多個處理器來共同求解同一問題,即將被求解的問題分解成若干個部分,各部分均由一個獨立的處理機來並行計算。

並行計算可分爲時間上的並行空間上的並行

時間上的並行是指流水線技術,比如說工廠生產食品的時候分爲四步:清洗-消毒-切割-包裝。

如果不採用流水線,一個食品完成上述四個步驟後,下一個食品才進行處理,耗時且影響效率。但是採用流水線技術,就可以同時處理四個食品。這就是並行算法中的時間並行,在同一時間啓動兩個或兩個以上的操作,大大提高計算性能。

圖:流水線示意圖

空間上的並行是指多個處理機併發的執行計算,即通過網絡將兩個以上的處理機連接起來,達到同時計算同一個任務的不同部分,或者單個處理機無法解決的大型問題。

比如小李準備在植樹節種三棵樹,如果小李1個人需要6個小時才能完成任務,植樹節當天他叫來了好朋友小紅、小王,三個人同時開始挖坑植樹,2個小時後每個人都完成了一顆植樹任務,這就是並行算法中的空間並行,將一個大任務分割成多個相同的子任務,來加快問題解決速度。

所以說,如果讓CPU來執行這個種樹任務的話,它就會一棵一棵的種,花上6個小時的時間,但是讓GPU來種樹,就相當於好幾個人同時在種。

GPU全稱爲Graphics Processing Unit,中文爲圖形處理器,就如它的名字一樣,GPU最初是用在個人電腦、工作站、遊戲機和一些移動設備(如平板電腦、智能手機等)上運行繪圖運算工作的微處理器。

爲什麼GPU特別擅長處理圖像數據呢?這是因爲圖像上的每一個像素點都有被處理的需要,而且每個像素點處理的過程和方式都十分相似,也就成了GPU的天然溫牀。

GPU簡單架構如下圖所示:

圖:GPU微架構示意圖

從架構圖我們就能很明顯的看出,GPU的構成相對簡單,有數量衆多的計算單元和超長的流水線,特別適合處理大量的類型統一的數據。

但GPU無法單獨工作,必須由CPU進行控制調用才能工作。CPU可單獨作用,處理複雜的邏輯運算和不同的數據類型,但當需要大量的處理類型統一的數據時,則可調用GPU進行並行計算。

注:GPU中有很多的運算器ALU和很少的緩存cache,緩存的目的不是保存後面需要訪問的數據的,這點和CPU不同,而是爲線程thread提高服務的。如果有很多線程需要訪問同一個相同的數據,緩存會合並這些訪問,然後再去訪問dram。

再把CPU和GPU兩者放在一張圖上看下對比,就非常一目瞭然了。

GPU的工作大部分都計算量大,但沒什麼技術含量,而且要重複很多很多次。

借用知乎上某大神的說法,就像你有個工作需要計算幾億次一百以內加減乘除一樣,最好的辦法就是僱上幾十個小學生一起算,一人算一部分,反正這些計算也沒什麼技術含量,純粹體力活而已;而CPU就像老教授,積分微分都會算,就是工資高,一個老教授資頂二十個小學生,你要是富士康你僱哪個?

GPU就是用很多簡單的計算單元去完成大量的計算任務,純粹的人海戰術。這種策略基於一個前提,就是小學生A和小學生B的工作沒有什麼依賴性,是互相獨立的。

但有一點需要強調,雖然GPU是爲了圖像處理而生的,但是我們通過前面的介紹可以發現,它在結構上並沒有專門爲圖像服務的部件,只是對CPU的結構進行了優化與調整,所以現在GPU不僅可以在圖像處理領域大顯身手,它還被用來科學計算、密碼破解、數值分析,海量數據處理(排序,Map-Reduce等),金融分析等需要大規模並行計算的領域。

所以GPU也可以認爲是一種較通用的芯片。

TPU

按照上文所述,CPU和GPU都是較爲通用的芯片,但是有句老話說得好:萬能工具的效率永遠比不上專用工具。

隨着人們的計算需求越來越專業化,人們希望有芯片可以更加符合自己的專業需求,這時,便產生了ASIC(專用集成電路)的概念。

ASIC是指依產品需求不同而定製化的特殊規格集成電路,由特定使用者要求和特定電子系統的需要而設計、製造。當然這概念不用記,簡單來說就是定製化芯片。

因爲ASIC很“專一”,只做一件事,所以它就會比CPU、GPU等能做很多件事的芯片在某件事上做的更好,實現更高的處理速度和更低的能耗。但相應的,ASIC的生產成本也非常高。

TPU(Tensor Processing Unit, 張量處理器)就是谷歌專門爲加速深層神經網絡運算能力而研發的一款芯片,其實也是一款ASIC。

圖:谷歌第二代TPU

一般公司是很難承擔爲深度學習開發專門ASIC芯片的成本和風險的,但谷歌是誰,人家會差錢嗎?

咳咳,開玩笑。更重要的原因是谷歌提供的很多服務,包括谷歌圖像搜索、谷歌照片、谷歌雲視覺API、谷歌翻譯等產品和服務都需要用到深度神經網絡。基於谷歌自身龐大的體量,開發一種專門的芯片開始具備規模化應用(大量分攤研發成本)的可能。

如此看來,TPU登上歷史舞臺也順理成章了。

原來很多的機器學習以及圖像處理算法大部分都跑在GPU與FPGA(半定製化芯片)上面,但這兩種芯片都還是一種通用性芯片,所以在效能與功耗上還是不能更緊密的適配機器學習算法,而且Google一直堅信偉大的軟件將在偉大的硬件的幫助下更加大放異彩,所以Google便想,我們可不可以做出一款專用機機器學習算法的專用芯片,TPU便誕生了。

據稱,TPU與同期的CPU和GPU相比,可以提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。初代的TPU只能做推理,要依靠Google雲來實時收集數據併產生結果,而訓練過程還需要額外的資源;而第二代TPU既可以用於訓練神經網絡,又可以用於推理。

看到這裏你可能會問了,爲什麼TPU會在性能上這麼牛逼呢?

嗯,谷歌寫了好幾篇論文和博文來說明這一原因,所以僅在這裏拋磚引玉一下。

圖:TPU 各模塊的框圖

圖:TPU芯片佈局圖

如上圖所示,TPU在芯片上使用了高達24MB的局部內存,6MB的累加器內存以及用於與主控處理器進行對接的內存,總共佔芯片面積的37%(圖中藍色部分)。

這表示谷歌充分意識到了片外內存訪問是GPU能效比低的罪魁禍首,因此不惜成本的在芯片上放了巨大的內存。相比之下,英偉達同時期的K80只有8MB的片上內存,因此需要不斷地去訪問片外DRAM。

另外,TPU的高性能還來源於對於低運算精度的容忍。研究結果表明,低精度運算帶來的算法準確率損失很小,但是在硬件實現上卻可以帶來巨大的便利,包括功耗更低、速度更快、佔芯片面積更小的運算單元、更小的內存帶寬需求等...TPU採用了8比特的低精度運算。

其它更多的信息可以去翻翻谷歌的論文。

到目前爲止,TPU其實已經幹了很多事情了,例如機器學習人工智能系統RankBrain,它是用來幫助Google處理搜索結果併爲用戶提供更加相關搜索結果的;還有街景Street View,用來提高地圖與導航的準確性的;當然還有下圍棋的計算機程序AlphaGo!

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,僅支持網絡正向運算,無法支持神經網絡訓練。

在以上這些知識的基礎上,我們再來理解BPU和DPU就更容易了。

BPU

BPU(Brain Processing Unit,大腦處理器)是由地平線科技提出的嵌入式人工智能處理器架構。第一代是高斯架構,第二代是伯努利架構,第三代是貝葉斯架構。目前地平線已經設計出了第一代高斯架構,並與英特爾在2017年CES展會上聯合推出了ADAS系統(高級駕駛輔助系統)。

DPU

DPU(Deep learning Processing Unit, 即深度學習處理器)最早由國內深鑑科技提出,基於Xilinx可重構特性的FPGA芯片,設計專用的深度學習處理單元(可基於已有的邏輯單元,設計並行高效的乘法器及邏輯電路,屬於IP範疇),且抽象出定制化的指令集和編譯器(而非使用OpenCL),從而實現快速的開發與產品迭代。事實上,深鑑提出的DPU屬於半定製化的FPGA。

其他 XPU

你以爲到這裏就完了嗎?

不,據說每過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 -- 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 -- Tensor 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,並以更快的速度佔領起名界。

你說嚇不嚇人?

到這裏,相信諸位也對這些XPU的概念有了初步的認識。

可你以爲給妹子講了這些後就能成功討得美人歡心嗎?

太天真了!

妹子詢問你類似問題的本質都只有一個:別BB了,快去下單給我買回來!

 

轉載:https://www.sohu.com/a/200698604_160923

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章