1. 程式人生 > >深入理解 CPU 和異構計算晶片 GPU/FPGA/ASIC

深入理解 CPU 和異構計算晶片 GPU/FPGA/ASIC

王玉偉,騰訊TEG架構平臺部平臺開發中心基礎研發組,組長為專家工程師Austingao,專注於為資料中心提供高效的異構加速雲解決方案。目前,FPGA已在騰訊海量圖片處理以及檢測領域已規模上線。

隨著網際網路使用者的快速增長,資料體量的急劇膨脹,資料中心對計算的需求也在迅猛上漲。諸如深度學習線上預測、直播中的視訊轉碼、圖片壓縮解壓縮以及HTTPS加密等各類應用對計算的需求已遠遠超出了傳統CPU處理器的能力所及。摩爾定律失效的今天,關注“新“成員(GPU\FPGA\ASIC)為資料中心帶來的體系架構變革,為業務配上一臺動力十足的發動機。

1 異構計算:WHY

明明CPU用的好好的,為什麼我們要考慮異構計算晶片呢?

隨著網際網路使用者的快速增長,資料體量的急劇膨脹,資料中心對計算的需求也在迅猛上漲。諸如深度學習線上預測、直播中的視訊轉碼、圖片壓縮解壓縮以及HTTPS加密等各類應用對計算的需求已遠遠超出了傳統CPU處理器的能力所及。

歷史上,受益於半導體技術的持續演進,計算機體系結構的吞吐量和系統性能不斷提高,處理器的效能每18個月就能翻倍(眾所周知的“摩爾定律”),使得處理器的效能可以滿足應用軟體的需求。但是,近幾年半導體技術改進達到了物理極限,電路越來越複雜,每一個設計的開發成本高達數百萬美元,數十億美元才能形成新產品投產能力。2016年3月24日,英特爾宣佈正式停用“Tick-Tock”處理器研發模式,未來研發週期將從兩年週期向三年期轉變。至此,摩爾定律對英特爾幾近失效。

一方面處理器效能再無法按照摩爾定律進行增長,另一方面資料增長對計算效能要求超過了按“摩爾定律”增長的速度。處理器本身無法滿足高效能運算(HPC:High Performance Compute)應用軟體的效能需求,導致需求和效能之間出現了缺口(參見圖1)。

一種解決方法是通過硬體加速,採用專用協處理器的異構計算方式來提升處理效能。


圖1:計算需求和計算能力的缺口發展形式

2 異構計算:STANDARDS

通常我們在為業務提供解決方案的時候,部署平臺會有四種選擇 CPU、GPU、FPGA、ASIC。那有什麼標準來評判計算平臺的優劣呢?


圖2:我是法官,標準我說了算

當今理想的協處理器應該是基於硬體的設計,具備三種基本能力。第一是設計能夠提供專門的硬體加速實現各種應用中需要的關鍵處理功能。其次是協處理器設計在效能上非常靈活,使用流水線和並行結構,跟上演算法更新以及效能的需求變化。最後,協處理器能夠為主處理器和系統儲存器提供寬頻、低延遲介面。

除了硬體要求以外,理想的協處理器還應該滿足 HPC 市場的“4P”要求:效能( performance )、效能( productivity )、功耗( power )和價格( price )。

HPC 市場對效能的最低要求是全面加速實現演算法,而不僅僅是某一步驟,並能夠加速實現整個應用軟體。

效能需求來自終端使用者。在現有的計算機系統中,協處理器必須安裝起來很方便,提供簡單的方法來配置系統,加速實現現有的應用軟體。

HPC 市場的功耗需求來自計算系統安裝和使用上的功耗限制。對於大部分使用者,能夠提供給計算機的空間有限。計算系統的功耗越小,那麼可以採取更少的散熱措施來保持計算機不會過熱。因此,低功耗協處理器不但能夠為計算系統提供更低的運轉成本,而且還提高了計算系統的空間利用率。

價格因素在 HPC 市場上顯得越來越重要。十幾年前,某些應用軟體對效能的需求超出了單個處理器能力範圍,這促使人們採用專用體系結構,例如密集並行處理( MPP )和對稱多處理( SMP )等。然而,這類系統要求使用定製處理器單元和專用資料通路,開發和程式設計都非常昂貴。

現在的 HPC 市場拋棄瞭如此昂貴的方法,而是採用價效比更高的叢集計算方法。叢集計算採用商用標準體系結構,例如 Intel 和 AMD;採用工業標準互聯,例如萬兆乙太網和 InfiniBand ;採用標準程式語言,例如執行在低成本Linux作業系統上的 C 語言等。當今的協處理器設計必須能夠平滑整合到商用叢集計算環境中,其成本和在叢集中加入另一個節點大致相當。

瞭解了基本的評判標準之後,我們以當今最火的深度學習為例,從晶片架構、計算效能、功耗、開發難度幾個方面來對幾種不同的晶片進行分析對比。

3.2 晶片計算效能

深度學習的學名又叫深層神經網路(Deep Neural Networks),是從人工神經網路(Artificial Neural Networks)模型發展而來。我們以深度學習作為切入點來分析各個晶片的效能。圖3是神經網路的基本結構,模型中每一層的大量計算是上一層的輸出結果和其對應的權重值這兩個矩陣的乘法運算。


圖3:神經網路基本結構

橫向對比CPU,GPU,FPGA,ASIC計算能力,實際對比的是:

1.硬體晶片的乘加計算能力。

2.為什麼有這樣乘加計算能力?

3.是否可以充分發揮硬體晶片的乘加計算能力?

帶著這三個問題,我們進行硬體晶片的計算能力對比。

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所示,所以導致計算通用性強,可以處理計算複雜度高,但計算效能一般。


圖6:CPU結構

通過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倍。