這裏CPU計算能力用Intel的Haswell架構進行分析,Haswell架構上計算單元有2個FMA(fused multiply-add),每一個FMA能夠對256bit數據在一個時鐘週期中作一次乘運算和一次加運算,因此對應32bit單精度浮點計算能力爲:(256bit/32bit) 2(FMA) 2(乘和加) = 32 SP FLOPs/cycle,即每一個時鐘週期能夠作32個單精度浮點計算。git
CPU峯值浮點計算性能 = CPU核數 CPU頻率 每週期執行的浮點操做數。已Intel的CPU型號E5-2620V3來計算峯值計算能力爲 = 6(CPU核數) 2.4GHz(CPU頻率) 32 SP FLOPs/cycle = 460.8 GFLOPs/s 即每秒460G峯值浮點計算能力。算法
CPU芯片結構是否能夠充分發揮浮點計算能力?CPU的指令執行過程是:取指令 ->指令譯碼 ->指令執行,只有在指令執行的時候,計算單元才發揮做用,這樣取指令和指令譯碼的兩段時間,計算單元是不在工做的,如圖4所示。編程
圖4 CPU指令執行流程服務器
CPU爲了提升指令執行的效率,在當前指令執行過程的時候,預先讀取後面幾條指令,使得指令流水處理,提升指令執行效率,如圖5所示。指令預先讀取並流水執行的前提是指令之間不具備相關性,不能一個指令的如何執行須要等到前面一個指令執行完的結果才能夠獲知。網絡
圖5 CPU指令流水執行架構
CPU做爲通用處理器,兼顧計算和控制,70%晶體管用來構建Cache 還有一部分控制單元,用來處理複雜邏輯和提升指令的執行效率,如圖6所示,因此致使計算通用性強,能夠處理計算複雜度高,但計算性能通常。工具
圖6CPU結構佈局
經過CPU計算性能分析,直接提升計算性能方向爲:增長CPU核數、提升CPU頻率、修改CPU架構增長計算單元FMA(fused multiply-add)個數。這3個方向中,直接增長CPU核數對於計算能力提高最高,可是帶來芯片功耗和價格的增長,由於每一個物理核中只有30%的晶體管是計算單元。提升CPU頻率,提高的空間有限,並且CPU頻率過高會致使芯片出現功耗過大和過熱的問題,所以英特爾等芯片製造商目前走多核化的路線,即限制單個微處理器的主頻,經過集成多個處理器內核來提升處理性能。修改CPU架構增長計算單元FMA個數,目前英特爾按照「Tick-Tock」二年一個週期進行CPU架構調整,從2016年開始放緩至三年,更新迭代週期較長。性能
GPU主要擅長作相似圖像處理的並行計算,所謂的「粗粒度並行(coarse-grain parallelism)」。圖形處理計算的特徵表現爲高密度的計算而計算須要的數據之間較少存在相關性,GPU 提供大量的計算單元(多達幾千個計算單元)和大量的高速內存,能夠同時對不少像素進行並行處理。學習
圖7是GPU的設計結構。GPU的設計出發點在於GPU更適用於計算強度高、多並行的計算。所以,GPU把晶體管更多用於計算單元,而不像CPU用於數據Cache和流程控制器。這樣的設計是由於並行計算時每一個數據單元執行相同程序,不須要繁瑣的流程控制而更須要高計算能力,所以也不須要大的cache容量。
圖7 GPU結構
GPU中一個邏輯控制單元對應多個計算單元,同時要想計算單元充分並行起來,邏輯控制必然不會太複雜,太複雜的邏輯控制沒法發揮計算單元的並行度,例如過多的if…else if…else if… 分支計算就沒法提升計算單元的並行度,因此在GPU中邏輯控制單元也就不須要可以快速處理複雜控制。
這裏GPU計算能力用Nvidia的Tesla K40進行分析,K40包含2880個流處理器(Stream Processor),流處理器就是GPU的計算單元。每一個流處理器包含一個32bit單精度浮點乘和加單元,即每一個時鐘週期能夠作2個單精度浮點計算。GPU峯值浮點計算性能 = 流處理器個數 GPU頻率 每週期執行的浮點操做數。以K40爲例,K40峯值浮點計算性能= 2880(流處理器) 745MHz 2(乘和加) = 4.29T FLOPs/s即每秒4.29T峯值浮點計算能力。
GPU芯片結構是否能夠充分發揮浮點計算能力?GPU同CPU同樣也是指令執行過程:取指令 ->指令譯碼 ->指令執行,只有在指令執行的時候,計算單元才發揮做用。GPU的邏輯控制單元相比CPU簡單,因此要想作到指令流水處理,提升指令執行效率,必然要求處理的算法自己複雜度低,處理的數據之間相互獨立,因此算法自己的串行處理會致使GPU浮點計算能力的顯著下降。
FPGA做爲一種高性能、低功耗的可編程芯片,能夠根據客戶定製來作針對性的算法設計。因此在處理海量數據的時候,FPGA 相比於CPU 和GPU,優點在於:FPGA計算效率更高,FPGA更接近IO。
FPGA不採用指令和軟件,是軟硬件合一的器件。對FPGA進行編程要使用硬件描述語言,硬件描述語言描述的邏輯能夠直接被編譯爲晶體管電路的組合。因此FPGA實際上直接用晶體管電路實現用戶的算法,沒有經過指令系統的翻譯。
FPGA的英文縮寫名翻譯過來,全稱是現場可編程邏輯門陣列,這個名稱已經揭示了FPGA的功能,它就是一堆邏輯門電路的組合,能夠編程,還能夠重複編程。圖8展現了可編程FPGA的內部原理圖。
圖8 FPGA內部結構圖
這裏FPGA計算能力用Xilinx的V7-690T進行分析,V7-690T包含3600個DSP(Digital Signal Processing),DSP就是FPGA的計算單元。每一個DSP能夠在每一個時鐘週期能夠作2個單精度浮點計算(乘和加)。FPGA峯值浮點計算性能 = DSP個數 FPGA頻率 每週期執行的浮點操做數。V7-690T運行頻率已250MHz來計算,V7-690T峯值浮點計算性能 = 3600(DSP個數) 250MHz 2(乘和加)=1.8T FLOPs/s即每秒1.8T峯值浮點計算能力。
FPGA芯片結構是否能夠充分發揮浮點計算能力?FPGA因爲算法是定製的,因此沒有CPU和GPU的取指令和指令譯碼過程,數據流直接根據定製的算法進行固定操做,計算單元在每一個時鐘週期上均可以執行,因此能夠充分發揮浮點計算能力,計算效率高於CPU和GPU。
ASIC是一種專用芯片,與傳統的通用芯片有必定的差別。是爲了某種特定的需求而專門定製的芯片。ASIC芯片的計算能力和計算效率均可以根據算法須要進行定製,因此ASIC與通用芯片相比,具備如下幾個方面的優越性:體積小、功耗低、計算性能高、計算效率高、芯片出貨量越大成本越低。可是缺點也很明顯:算法是固定的,一旦算法變化就可能沒法使用。目前人工智能屬於大爆發時期,大量的算法不斷涌出,遠沒有到算法平穩期,ASIC專用芯片如何作到適應各類算法是個最大的問題,若是以目前CPU和GPU架構來適應各類算法,那ASIC專用芯片就變成了同CPU、GPU同樣的通用芯片,在性能和功耗上就沒有優點了。
咱們來看看FPGA 和 ASIC 的區別。FPGA基本原理是在芯片內集成大量的數字電路基本門電路以及存儲器,而用戶能夠經過燒入 FPGA 配置文件來來定義這些門電路以及存儲器之間的連線。這種燒入不是一次性的,即用戶今天能夠把 FPGA 配置成一個微控制器 MCU,明天能夠編輯配置文件把同一個 FPGA 配置成一個音頻編解碼器。ASIC 則是專用集成電路,一旦設計製造完成後電路就固定了,沒法再改變。
比較 FPGA 和 ASIC 就像比較樂高積木和模型。舉例來講,若是你發現最近星球大戰裏面 Yoda 大師很火,想要作一個 Yoda 大師的玩具賣,你要怎麼辦呢?
有兩種辦法,一種是用樂高積木搭,還有一種是找工廠開模定製。用樂高積木搭的話,只要設計完玩具外形後去買一套樂高積木便可。而找工廠開模的話在設計完玩具外形外你還須要作不少事情,好比玩具的材質是否會散發氣味,玩具在高溫下是否會融化等等,因此用樂高積木來作玩具須要的前期工做比起找工廠開模製做來講要少得多,從設計完成到可以上市所須要的時間用樂高也要快不少。
FPGA 和 ASIC 也是同樣,使用 FPGA 只要寫完 Verilog 代碼就能夠用 FPGA 廠商提供的工具實現硬件加速器了,而要設計 ASIC 則還須要作不少驗證和物理設計 (ESD,Package 等等),須要更多的時間。若是要針對特殊場合(如軍事和工業等對於可靠性要求很高的應用),ASIC 則須要更多時間進行特別設計以知足需求,可是用 FPGA 的話能夠直接買軍工級的高穩定性 FPGA 徹底不影響開發時間。可是,雖然設計時間比較短,可是樂高積木作出來的玩具比起工廠定製的玩具要粗糙(性能差)一些(下圖),畢竟工廠開模是量身定製。
另外,若是出貨量大的話,工廠大規模生產玩具的成本會比用樂高積木作便宜許多。FPGA 和 ASIC 也是如此,在同一時間點上用最好的工藝實現的 ASIC 的加速器的速度會比用一樣工藝 FPGA 作的加速器速度快 5-10 倍,並且一旦量產後 ASIC 的成本會遠遠低於 FPGA 方案。
FPGA 上市速度快, ASIC 上市速度慢,須要大量時間開發,並且一次性成本(光刻掩模製做成本)遠高於 FPGA,可是性能高於 FPGA 且量產後平均成本低於 FPGA。目標市場方面,FPGA 成本較高,因此適合對價格不是很敏感的地方,好比企業應用,軍事和工業電子等等(在這些領域可重配置真的須要)。而 ASIC 因爲低成本則適合消費電子類應用,並且在消費電子中可配置是不是一個僞需求還有待商榷。
咱們看到的市場現狀也是如此:使用 FPGA 作深度學習加速的可能是企業用戶,百度、微軟、IBM 等公司都有專門作 FPGA 的團隊爲服務器加速,而作 FPGA 方案的初創公司 Teradeep 的目標市場也是服務器。而 ASIC 則主要瞄準消費電子,如 Movidius。因爲移動終端屬於消費電子領域,因此將來使用的方案應當是以 ASIC 爲主。
因爲不一樣的芯片生產工藝,對芯片的功耗和性能都有影響,這裏用相同工藝或者接近工藝下進行對比,ASIC芯片尚未商用的芯片出現,Google的TPU也只是本身使用沒有對外提供信息,這裏ASIC芯片用在學術論文發表的《DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning》做爲表明。
從上面的對比來看,能耗比方面:ASIC > FPGA > GPU > CPU,產生這樣結果的根本緣由:對於計算密集型算法,數據的搬移和運算效率越高的能耗比就越高。ASIC和FPGA都是更接近底層IO,因此計算效率高和數據搬移高,可是FPGA有冗餘晶體管和連線,運行頻率低,因此沒有ASIC能耗比高。GPU和CPU都是屬於通用處理器,都須要進行取指令、指令譯碼、指令執行的過程,經過這種方式屏蔽了底層IO的處理,使得軟硬件解耦,但帶來數據的搬移和運算沒法達到更高效率,因此沒有ASIC、FPGA能耗比高。GPU和CPU之間的能耗比的差距,主要在於CPU中晶體管有大部分用在cache和控制邏輯單元,因此CPU相比GPU來講,對於計算密集同時計算複雜度低的算法,有冗餘的晶體管沒法發揮做用,能耗比上CPU低於GPU。
處理器芯片各自長期發展的過程當中,造成了一些使用和市場上鮮明的特色。CPU&GPU領域存在大量的開源軟件和應用軟件,任何新的技術首先會用CPU實現算法,所以CPU編程的資源豐富並且容易得到,開發成本低而開發週期。FPGA的實現採用Verilog/VHDL等底層硬件描述語言實現,須要開發者對FPGA的芯片特性有較爲深刻的瞭解,但其高並行性的特性每每可使業務性能獲得量級的提高;同時FPGA是動態可重配的,當在數據中心部署以後,能夠根據業務形態來配置不一樣的邏輯實現不一樣的硬件加速功能;舉例來說,當前服務器上的FPGA板卡部署的是圖片壓縮邏輯,服務於QQ業務;而此時廣告實時預估須要擴容得到更多的FPGA計算資源,經過簡單的FPGA重配流程,FPGA板卡便可以變身成「新」硬件來服務廣告實時預估,很是適合批量部署。ASIC芯片能夠得到最優的性能,即面積利用率高、速度快、功耗低;可是AISC開發風險極大,須要有足夠大的市場來保證成本價格,並且從研發到市場的時間週期很長,不適合例如深度學習CNN等算法正在快速迭代的領域。
講了這麼多,當遇到業務瓶頸的須要異構計算芯片的時候,你是否可以根據業務特性和芯片特性選擇出合適的芯片呢?
分析完各種芯片特性,接下來,重點來了!
當今的FPGA有很大的性能潛力,支持深度可變的流水線結構,提供大量的並行計算資源,一個時鐘週期內就能夠完成很是複雜的功能。FPGA的可編程能力保證了這種器件可以知足應用軟件的特殊需求,不存在設計定製協處理器的成本或者延遲問題。FPGA是從新可編程的,它能夠在一個芯片中爲多種應用提供很是靈活的定製協處理功能。擁有了FPGA,業務就擁有無限可能。一樣的半導體技術,既能把處理器的性能發揮到極限,也能使FPGA從簡單的膠合邏輯控制器,發展到性能很高的可編程架構。FPGA徹底可以知足HPC市場的「4P」需求。
FPGA的內置存儲器也有很大的性能優點。例如,片內存儲器意味着協處理器邏輯的存儲器訪問帶寬不會受到器件I/O引腳數量的限制。並且,存儲器和運算邏輯緊密結合,再也不須要採用外部高速存儲器緩衝。這樣,也避免了大功耗的緩衝訪問和一致性問題。使用內部存儲器還意味着協處理器不須要其餘的I/O引腳來提升其可訪問存儲器容量,從而簡化了設計。
不少人因爲FPGA的開發難度大以及開發週期較長而對其持有懷疑態度,好消息是HLS以及OpenCL語言愈來愈完善,不少應用直接使用這兩種高級語言就能夠取得較大性能提高。
爲了更好地知足對計算性能的要求,全球的不少大型IT企業都在FPGA的加速硬件上進行了佈局和實踐。
Intel:
Intel決定以167億美圓收購FPGA生產商Altera。Intel預計到2020年,30%以上的服務器CPU芯片將配備一個FPGA協處理器。
IBM:
IBM和Xilinx聯合宣佈開展一項多年戰略協做,在IBM POWER系統上運用Xilinx FPGA加速工做負載處理技術,以打造更高性能、更高能效的數據中心應用。
微軟:
早在2014年,Microsoft就將Altera FPGA運用在其Bing搜索的業務中,使Bing的搜索處理量提高了一倍,搜索時間縮短了29%。2015年,微軟進一步將FPGA運用於深度學習領域。2016年,微軟體系結構頂級會議Micro上發表的《A Cloud-Scale Acceleration Architecture》顯示了其在數據中心體系架構上的勃勃野心。如今,進入微軟數據中心的每個服務器上均帶有一塊FPGA板卡,其基本的架構以下:
論文中涉及到的應用場景包括:
1.網絡加速(例如網絡數據包加解密)
2.本地應用加速(Bing加速、DNN延時敏感性業務加速)
3.支持fpga之間通訊,fpga計算資源池化,提供Hardware-as-a-Service的概念,將FPGA和服務器解耦。
Facebook:
2016年,Facebook也宣稱要同Intel合做用Xeon-FPGA平臺進行數據中心的建設。
百度:
國內百度也推出了FPGA版本的百度大腦,運用到線上服務;FPGA版百度大腦已運用於包括語音識別、廣告點擊率預估模型、DNA序列檢測以及無人車等業務中。據瞭解,應用了該版本百度大腦後,語音在線服務、廣告點擊率預估模型等的計算性能皆提高了3~4倍。
本文轉載自騰雲閣,已得到做者受權。