摘要: 本文將帶領入門讀者瞭解CPU,GPU,FPGA,ASIC和異構計算的一些基本概念和優缺點,但願幫助入門者和愛好者創建基本的芯片概念算法
人工智能有三要素:算法,計算力,數據。咱們今天主要來說講計算力。編程
計算力歸根結底由底層芯片提供。按照計算芯片的組成方式,能夠分紅:
同構計算:使用相同類型指令集和體系架構的計算單元組成系統的計算方式。
異構計算:使用不一樣類型指令集和體系架構的計算單元組成系統的計算方式。常見的計算單元類別包括CPU、GPU、ASIC、FPGA等。緩存
咱們從CPU開始,講一個小故事來幫助你理解一切。安全
有一個大廚(CPU),能作各類菜(兼容性好),可是某些大量重複的動做(例如切菜)明顯減慢了他作菜的速度。原來客人都點炒青菜,拌黃瓜之類的,大廚本身還算能勝任,可是最近(大數據時代到來),客人要求高了不少,開始點各類大菜(大量數據複雜處理)。架構
大廚力不從心,因而老闆須要找個幫手(協處理器)來幫助他,好比在切菜方面,這個幫手能夠同時處理不少菜品(並行處理),並且速度很快(低延時)。但願在合理的分工協做下,廚房能知足新的需求。編程語言
在以前餐廳的例子裏,大廚CPU能靈活控制整個作菜流程,更偏向一個控制者,但不少場景下並非最好的執行者。CPU做爲通用處理器,也是更偏重支持控制流數據。CPU每一個物理核中大部分的硬件資源被作成了控制電路和緩存,用來提升指令兼容性和效率。只有小部分是真正用來計算的邏輯運算單元(ALU)。在這樣的架構下,CPU能兼容大量指令,可是實際的計算效率並不高。性能
並且,CPU這個大廚很健忘,每作完一步都要去看看菜譜,甚至健忘到切菜每切一刀,都要去看看下一刀怎麼切。實際運行中,CPU的代碼都存在Memory這個「菜譜」中,須要通過取指令,譯碼,而後才能執行指令。在這個流程中,取指令,譯碼會開銷額外的時間,下降了數據處理速度。
大數據
有人會說,爲啥再也不僱個大廚(雙核),這樣組成一個同構廚房系統很差嗎?固然能夠,由於以前的芯片結構貌似就是這樣迭代的。可是或許有如下缺陷沒法避免:阿里雲
老闆對這個幫手也是精心挑選的,主要體如今:人工智能
GPU和CPU都屬於通用處理器,可是卻有不一樣的架構。若是把CPU大廚形容爲「頭腦發達(控制電路多),四肢簡單(計算電路少)」,那麼GPU幫廚正好相反。在GPU中,硬件資源被大量用做邏輯運算單元(ALU),小部分用做控制電路。這爲大規模的數據並行處理提供了基礎。其實,這個幫手在特定工做中遠遠超過了師傅(切菜洗菜超級快),大廚能夠放心地把算法簡單、重複性高、須要大量並行操做的工做交給它。
可是CPU支持的控制複雜度較低。當你要求笨笨的GPU把全部菜都切絲,它必定完成得又快又好,可是你告訴它:「土豆切絲,洋蔥切片,南瓜雕花……」它就沒有那麼高效了。這是由於,複雜的控制流程會產生大量的分支(如編程語言中的case和if else),而GPU中一個控制單元要負責好幾個計算單元。因此,若是要最大程度地使用GPU,勢必要求控制分支越少越好。
另外,GPU有CPU大廚的共同毛病:健忘(須要從Memory讀取指令),這帶來了一系列問題(如功耗大,基於指令系統,要譯碼)。
若是給ASIC牌料理機制定一句廣告語,我以爲是:最快速度,最低能效,您廚房的最強幫手。
咱們先來看看爲何ASIC像「料理機」。由於它擺脫了指令系統,沒有了「健忘」問題,全部功能都固化了交付給客戶,更像一臺廚房機器。ASIC的中文全稱是「特殊訂製集成電路」。它是訂製的,也意味着不須要去糾結CPU和GPU怎樣分配控制資源和計算資源的問題了,想怎麼分配就怎麼分配。
編程語言越接近底層硬件,運行速度越快。ASIC的設計是直接用軟件思惟搭建硬件電路,全部的設計是直接建築在物理硬件(門電路)上的。因此,ASIC不須要取指令和譯碼,每一個時間單位都能專一於數據處理或者傳輸,大大提升了效能。直接設計的硬件結構也讓數據處理管線真正實現,每一級的處理結果能直接用於下一級的輸入,無縫鏈接。在必定規則下(好比必定芯片面積和佈線規則下),並行通道能夠最大化疊加。在功耗方面,由於硬件利用的最大化,是全部協處理器裏最小的。
那麼厲害的ASIC,看來咱們的最佳方案必定是它了吧,問題來了:ASIC料理機哪裏能買到呢?對不起,哪裏都買不到,剛剛說了只能訂製。這個過程很漫長,帶來的風險天然很大。更重要的是,CPU大廚在拿到專屬料理機後,若是忽然有一天想把功能更新一下,好比原來土豆切絲,如今想切土豆片了。很抱歉,只能再訂製一次。
FPGA也是料理機,也沒有指令系統。和ASIC同樣:它的設計也是直接建築在物理硬件上。這樣的結構就已經註定了FPGA在大量數據處理時的優點。事實上,它幾乎具備ASIC的全部優勢,速度功耗也遠遠優於通用處理器,可是和ASIC對比,還稍微差一點,例如:功耗大一點,速度慢一點,一樣芯片面積下能實現的功能弱一點。不過,FPGA卻有一個巨大優點。
FPGA,中文全稱「現場可編程門級列陣」。對比ASIC,有三個字無比耀眼:可編程。可編程意味着可改變。今天切土豆絲,明天切土豆片,都沒有問題了,不須要進行芯片從新訂製,靈活性堪比通用處理器。對比ASIC的研發流程,FPGA開發能夠快速試錯迭代,縮短了開發時間。其實,在半導體界,FPGA有「萬能芯片」的美譽,它以可編程和靈活的直接基於硬件訂製兩大法寶,在衆多應用場景中有着重要地位。
FPGA的主要問題在開發。FPGA料理機交付客戶時實際上是一個空機器,裏面什麼功能都沒有,須要客戶根據本身的需求一點點搭建。這個難度不低,主要緣由是:異構算法的開發人員大部分是軟件人員,缺少對FPGA結構和數字電路的瞭解,編程語言也不統一(CPU端是C、C++等等,FPGA端是VHDL、Verilog)。目前解決這個問題的方法是OpenCL和HLS(High Level Synthesis)技術,支持直接把C、C++代碼編譯成Verilog,雖然目前轉化效果仍然有待提升,可是隨着這些技術的成熟,相信FPGA會站上異構計算的舞臺中央。
小結一下,本文帶領你們掃盲了一下CPU,GPU,ASIC,FPGA的一些基本概念和優缺點。在人工智能不斷髮展的今天,成本,功耗,靈活性,易用性都被提上了需求單。若是你也想體驗一下異構計算的高效,能夠試着購買一下阿里雲的CPU+GPU和CPU+FPGA的實例方案。另外附上一些相關文章,讓大神們繼續帶你飛。