3.2.1 CPU計算能力分析
這里CPU計算能力用Intel的Haswell架構進行分析,Haswell架構上計算單元有2個FMA(fused multiply-add),每個FMA可以對256bit數據在一個時鍾周期中做一次乘運算和一次加運算,所以對應32bit單精度浮點計算能力為:(256bit/32bit) 2(FMA) 2(乘和加) = 32 SP FLOPs/cycle,即每個時鍾周期可以做32個單精度浮點計算。
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年開始放緩至三年,更新迭代周期較長。
3.2.2 GPU計算能力分析
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浮點計算能力的顯著降低。
3.2.3 FPGA計算能力分析
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。
3.2.4 ASIC計算能力分析
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 為主。
3.3平台性能和功耗比較
由於不同的芯片生產工藝,對芯片的功耗和性能都有影響,這里用相同工藝或者接近工藝下進行對比,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。
4 總結與展望
處理器芯片各自長期發展的過程中,形成了一些使用和市場上鮮明的特點。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倍。
本文轉載自騰雲閣,已獲得作者授權。