為什么數(shù)據(jù)中心使用FPGA越來(lái)越多?

電子說(shuō)
佚名
  PGA基本特點(diǎn) (1)采用FPGA設(shè)計(jì)ASIC電路(專(zhuān)用集成電路),用戶(hù)不需要投片生產(chǎn),就能得到合用的芯片。 (2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。 (3)FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳...

  PGA基本特點(diǎn)

(1)采用FPGA設(shè)計(jì)ASIC電路(專(zhuān)用集成電路),用戶(hù)不需要投片生產(chǎn),就能得到合用的芯片。

(2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。

(3)FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。

(4)FPGA是ASIC電路中設(shè)計(jì)周期最短、開(kāi)發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。

(5)FPGA采用高速CMOS工藝,功耗低,可以與CMOS、TTL電平兼容。

FPGA三大優(yōu)勢(shì)

優(yōu)勢(shì)一:更大的并行度

這個(gè)主要是通過(guò)并發(fā)和流水兩種技術(shù)實(shí)現(xiàn)。A:并發(fā)是指重復(fù)分配計(jì)算資源,使得多個(gè)模塊之間可以同時(shí)獨(dú)立進(jìn)行計(jì)算。這一點(diǎn)與現(xiàn)在的多核和SIMD技術(shù)相似。但相對(duì)與SIMD技術(shù),F(xiàn)PGA的并發(fā)可以在不同邏輯功能之間進(jìn)行,而不局限于同時(shí)執(zhí)行相同的功能。舉個(gè)簡(jiǎn)單例子說(shuō)就是使用SIMD可以同時(shí)執(zhí)行多個(gè)加法,而FPGA可以同時(shí)執(zhí)行多個(gè)加法和乘法和任何你能設(shè)計(jì)出來(lái)的邏輯。

B:流水是通過(guò)將任務(wù)分段,段與段之間同時(shí)執(zhí)行。其實(shí)這一點(diǎn)和CPU相似,只是CPU是指令間的流水而FPGA是任務(wù)間流水或者可以說(shuō)是線(xiàn)程間流水。

優(yōu)勢(shì)二:可定制

FPGA內(nèi)部通過(guò)LookupTable實(shí)現(xiàn)邏輯,可以簡(jiǎn)單理解為是硬件電路??啥ㄖ浦傅氖窃谫Y源允許范圍內(nèi),用戶(hù)可實(shí)現(xiàn)自己的邏輯電路。通常情況下任務(wù)在硬件電路上跑是比在軟件上快的,比如要比較一個(gè)64位數(shù)高32位和低32位的大小,在CPU下需要2條區(qū)數(shù)指令,兩條位與指令,一條移位指令一條比較指令和一條寫(xiě)回指令,而在FPGA下只要一個(gè)比較器就行了。

優(yōu)勢(shì)三:可重構(gòu)

可重構(gòu)指的是FPGA內(nèi)部的邏輯可根據(jù)需求改變,減少開(kāi)發(fā)成本。同時(shí),使用FPGA復(fù)用資源比使用多個(gè)固定的ASIC模塊為服務(wù)器省下更多的空間。

FPGA工作原理

FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(xiàn)(Interconnect)三個(gè)部分。現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)是可編程器件,與傳統(tǒng)邏輯電路和門(mén)陣列(如PAL,GAL及CPLD器件)相比,F(xiàn)PGA具有不同的結(jié)構(gòu)。FPGA利用小型查找表(16×1RAM)來(lái)實(shí)現(xiàn)組合邏輯,每個(gè)查找表連接到一個(gè)D觸發(fā)器的輸入端,觸發(fā)器再來(lái)驅(qū)動(dòng)其他邏輯電路或驅(qū)動(dòng)I/O,由此構(gòu)成了既可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線(xiàn)互相連接或連接到I/O模塊。FPGA的邏輯是通過(guò)向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù)來(lái)實(shí)現(xiàn)的,存儲(chǔ)在存儲(chǔ)器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實(shí)現(xiàn)的功能,F(xiàn)PGA允許無(wú)限次的編程。

FPGA典型應(yīng)用領(lǐng)域

一、數(shù)據(jù)采集和接口邏輯領(lǐng)域

1.FPGA在數(shù)據(jù)采集領(lǐng)域的應(yīng)用

由于自然界的信號(hào)大部分是模擬信號(hào),因此一般的信號(hào)處理系統(tǒng)中都要包括數(shù)據(jù)的采集功能。通常的實(shí)現(xiàn)方法是利用A/D轉(zhuǎn)換器將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)后,送給處理器,比如利用單片機(jī)(MCU)或者數(shù)字信號(hào)處理器(DSP)進(jìn)行運(yùn)算和處理。

對(duì)于低速的A/D和D/A轉(zhuǎn)換器,可以采用標(biāo)準(zhǔn)的SPI接口來(lái)與MCU或者DSP通信。但是,高速的A/D和D/A轉(zhuǎn)換芯片,比如視頻Decoder或者Encoder,不能與通用的MCU或者DSP直接接口。在這種場(chǎng)合下,F(xiàn)PGA可以完成數(shù)據(jù)采集的粘合邏輯功能。

2.FPGA在邏輯接口領(lǐng)域的應(yīng)用

在實(shí)際的產(chǎn)品設(shè)計(jì)中,很多情況下需要與PC機(jī)進(jìn)行數(shù)據(jù)通信。比如,將采集到的數(shù)據(jù)送給PC機(jī)處理,或者將處理后的結(jié)果傳給PC機(jī)進(jìn)行顯示等。PC機(jī)與外部系統(tǒng)通信的接口比較豐富,如ISA、PCI、PCIExpress、PS/2、USB等。

傳統(tǒng)的設(shè)計(jì)中往往需要專(zhuān)用的接口芯片,比如PCI接口芯片。如果需要的接口比較多,就需要較多的外圍芯片,體積、功耗都比較大。采用FPGA的方案后,接口邏輯都可以在FPGA內(nèi)部來(lái)實(shí)現(xiàn)了,大大簡(jiǎn)化了外圍電路的設(shè)計(jì)。

在現(xiàn)代電子產(chǎn)品設(shè)計(jì)中,存儲(chǔ)器得到了廣泛的應(yīng)用,例如SDRAM、SRAM、Flash等。這些存儲(chǔ)器都有各自的特點(diǎn)和用途,合理地選擇儲(chǔ)存器類(lèi)型可以實(shí)現(xiàn)產(chǎn)品的最佳性?xún)r(jià)比。由于FPGA的功能可以完全自己設(shè)計(jì),因此可以實(shí)現(xiàn)各種存儲(chǔ)接口的控制器。

3.FPGA在電平接口領(lǐng)域的應(yīng)用

除了TTL、COMS接口電平之外,LVDS、HSTL、GTL/GTL+、SSTL等新的電平標(biāo)準(zhǔn)逐漸被很多電子產(chǎn)品采用。比如,液晶屏驅(qū)動(dòng)接口一般都是LVDS接口,數(shù)字I/O一般是LVTTL電平,DDRSDRAM電平一般是HSTL的。

在這樣的混合電平環(huán)境里面,如果用傳統(tǒng)的電平轉(zhuǎn)換器件實(shí)現(xiàn)接口會(huì)導(dǎo)致電路復(fù)雜性提高。利用FPGA支持多電平共存的特性,可以大大簡(jiǎn)化設(shè)計(jì)方案,降低設(shè)計(jì)風(fēng)險(xiǎn)。

二、高性能數(shù)字信號(hào)處理領(lǐng)域

無(wú)線(xiàn)通信、軟件無(wú)線(xiàn)電、高清影像編輯和處理等領(lǐng)域,對(duì)信號(hào)處理所需要的計(jì)算量提出了極高的要求。傳統(tǒng)的解決方案一般是采用多片DSP并聯(lián)構(gòu)成多處理器系統(tǒng)來(lái)滿(mǎn)足需求。

但是多處理器系統(tǒng)帶來(lái)的主要問(wèn)題是設(shè)計(jì)復(fù)雜度和系統(tǒng)功耗都大幅度提升,系統(tǒng)穩(wěn)定性受到影響。FPGA支持并行計(jì)算,而且密度和性能都在不斷提高,已經(jīng)可以在很多領(lǐng)域替代傳統(tǒng)的多DSP解決方案。

例如,實(shí)現(xiàn)高清視頻編碼算法H.264。采用TI公司1GHz主頻的DSP芯片需要4顆芯片,而采用Altera的StratixIIEP2S130芯片只需要一顆就可以完成相同的任務(wù)。FPGA的實(shí)現(xiàn)流程和ASIC芯片的前端設(shè)計(jì)相似,有利于導(dǎo)入芯片的后端設(shè)計(jì)。

三、其他應(yīng)用領(lǐng)域

除了上面一些應(yīng)用領(lǐng)域外,F(xiàn)PGA在其他領(lǐng)域同樣具有廣泛的應(yīng)用。

(1)汽車(chē)電子領(lǐng)域,如網(wǎng)關(guān)控制器/車(chē)用PC機(jī)、遠(yuǎn)程信息處理系統(tǒng)。

(2)軍事領(lǐng)域,如安全通信、雷達(dá)和聲納、電子戰(zhàn)。

(3)測(cè)試和測(cè)量領(lǐng)域,如通信測(cè)試和監(jiān)測(cè)、半導(dǎo)體自動(dòng)測(cè)試設(shè)備、通用儀表。

(4)消費(fèi)產(chǎn)品領(lǐng)域,如顯示器|、投影儀、數(shù)字電視和機(jī)頂盒、家庭網(wǎng)絡(luò)。

(5)醫(yī)療領(lǐng)域,如軟件無(wú)線(xiàn)電、電療|、生命科學(xué)。

眾所周知,通用處理器(CPU)的摩爾定律已入暮年,而機(jī)器學(xué)習(xí)和Web服務(wù)的規(guī)模卻在指數(shù)級(jí)增長(zhǎng)。人們使用定制硬件來(lái)加速常見(jiàn)的計(jì)算任務(wù),然而日新月異的行業(yè)又要求這些定制的硬件可被重新編程來(lái)執(zhí)行新類(lèi)型的計(jì)算任務(wù)。

FPGA(FieldProgrammableGateArray)正是一種硬件可重構(gòu)的體系結(jié)構(gòu),常年來(lái)被用作專(zhuān)用芯片(ASIC)的小批量替代品,然而近年來(lái)在微軟、百度等公司的數(shù)據(jù)中心大規(guī)模部署,以同時(shí)提供強(qiáng)大的計(jì)算能力和足夠的靈活性。

FPGA為什么快?「都是同行襯托得好」。CPU、GPU都屬于馮·諾依曼結(jié)構(gòu),指令譯碼執(zhí)行、共享內(nèi)存。FPGA之所以比CPU甚至GPU能效高,本質(zhì)上是無(wú)指令、無(wú)需共享內(nèi)存的體系結(jié)構(gòu)帶來(lái)的福利。

馮氏結(jié)構(gòu)中,由于執(zhí)行單元(如CPU核)可能執(zhí)行任意指令,就需要有指令存儲(chǔ)器、譯碼器、各種指令的運(yùn)算器、分支跳轉(zhuǎn)處理邏輯。由于指令流的控制邏輯復(fù)雜,不可能有太多條獨(dú)立的指令流,因此GPU使用SIMD(單指令流多數(shù)據(jù)流)來(lái)讓多個(gè)執(zhí)行單元以同樣的步調(diào)處理不同的數(shù)據(jù),CPU也支持SIMD指令。而FPGA每個(gè)邏輯單元的功能在重編程(燒寫(xiě))時(shí)就已經(jīng)確定,不需要指令。

馮氏結(jié)構(gòu)中使用內(nèi)存有兩種作用。一是保存狀態(tài),二是在執(zhí)行單元間通信。由于內(nèi)存是共享的,就需要做訪(fǎng)問(wèn)仲裁;為了利用訪(fǎng)問(wèn)局部性,每個(gè)執(zhí)行單元有一個(gè)私有的緩存,這就要維持執(zhí)行部件間緩存的一致性。對(duì)于保存狀態(tài)的需求,F(xiàn)PGA中的寄存器和片上內(nèi)存(BRAM)是屬于各自的控制邏輯的,無(wú)需不必要的仲裁和緩存。對(duì)于通信的需求,F(xiàn)PGA每個(gè)邏輯單元與周?chē)壿媶卧倪B接在重編程(燒寫(xiě))時(shí)就已經(jīng)確定,并不需要通過(guò)共享內(nèi)存來(lái)通信。

說(shuō)了這么多三千英尺高度的話(huà),F(xiàn)PGA實(shí)際的表現(xiàn)如何呢?我們分別來(lái)看計(jì)算密集型任務(wù)和通信密集型任務(wù)。

計(jì)算密集型任務(wù)的例子包括矩陣運(yùn)算、圖像處理、機(jī)器學(xué)習(xí)、壓縮、非對(duì)稱(chēng)加密、Bing搜索的排序等。這類(lèi)任務(wù)一般是CPU把任務(wù)卸載(offload)給FPGA去執(zhí)行。對(duì)這類(lèi)任務(wù),目前我們正在用的Altera(似乎應(yīng)該叫Intel了,我還是習(xí)慣叫Altera……)StratixVFPGA的整數(shù)乘法運(yùn)算性能與20核的CPU基本相當(dāng),浮點(diǎn)乘法運(yùn)算性能與8核的CPU基本相當(dāng),而比GPU低一個(gè)數(shù)量級(jí)。我們即將用上的下一代FPGA,Stratix10,將配備更多的乘法器和硬件浮點(diǎn)運(yùn)算部件,從而理論上可達(dá)到與現(xiàn)在的頂級(jí)GPU計(jì)算卡旗鼓相當(dāng)?shù)挠?jì)算能力。

FPGA的整數(shù)乘法運(yùn)算能力(估計(jì)值,不使用DSP,根據(jù)邏輯資源占用量估計(jì))

FPGA的浮點(diǎn)乘法運(yùn)算能力(估計(jì)值,float16用軟核,float32用硬核)

在數(shù)據(jù)中心,F(xiàn)PGA相比GPU的核心優(yōu)勢(shì)在于延遲。像Bing搜索排序這樣的任務(wù),要盡可能快地返回搜索結(jié)果,就需要盡可能降低每一步的延遲。如果使用GPU來(lái)加速,要想充分利用GPU的計(jì)算能力,batchsize就不能太小,延遲將高達(dá)毫秒量級(jí)。使用FPGA來(lái)加速的話(huà),只需要微秒級(jí)的PCIe延遲(我們現(xiàn)在的FPGA是作為一塊PCIe加速卡)。未來(lái)Intel推出通過(guò)QPI連接的Xeon+FPGA之后,CPU和FPGA之間的延遲更可以降到100納秒以下,跟訪(fǎng)問(wèn)主存沒(méi)什么區(qū)別了。

FPGA為什么比GPU的延遲低這么多?這本質(zhì)上是體系結(jié)構(gòu)的區(qū)別。FPGA同時(shí)擁有流水線(xiàn)并行和數(shù)據(jù)并行,而GPU幾乎只有數(shù)據(jù)并行(流水線(xiàn)深度受限)。例如處理一個(gè)數(shù)據(jù)包有10個(gè)步驟,F(xiàn)PGA可以搭建一個(gè)10級(jí)流水線(xiàn),流水線(xiàn)的不同級(jí)在處理不同的數(shù)據(jù)包,每個(gè)數(shù)據(jù)包流經(jīng)10級(jí)之后處理完成。每處理完成一個(gè)數(shù)據(jù)包,就能馬上輸出。而GPU的數(shù)據(jù)并行方法是做10個(gè)計(jì)算單元,每個(gè)計(jì)算單元也在處理不同的數(shù)據(jù)包,然而所有的計(jì)算單元必須按照統(tǒng)一的步調(diào),做相同的事情(SIMD,SingleInstructionMultipleData)。這就要求10個(gè)數(shù)據(jù)包必須一起輸入、一起輸出,輸入輸出的延遲增加了。當(dāng)任務(wù)是逐個(gè)而非成批到達(dá)的時(shí)候,流水線(xiàn)并行比數(shù)據(jù)并行可實(shí)現(xiàn)更低的延遲。因此對(duì)流式計(jì)算的任務(wù),F(xiàn)PGA比GPU天生有延遲方面的優(yōu)勢(shì)。

計(jì)算密集型任務(wù),CPU、GPU、FPGA、ASIC的數(shù)量級(jí)比較(以16位整數(shù)乘法為例,數(shù)字僅為數(shù)量級(jí)的估計(jì)

ASIC專(zhuān)用芯片在吞吐量、延遲和功耗三方面都無(wú)可指摘,但微軟并沒(méi)有采用,出于兩個(gè)原因:

數(shù)據(jù)中心的計(jì)算任務(wù)是靈活多變的,而ASIC研發(fā)成本高、周期長(zhǎng)。好不容易大規(guī)模部署了一批某種神經(jīng)網(wǎng)絡(luò)的加速卡,結(jié)果另一種神經(jīng)網(wǎng)絡(luò)更火了,錢(qián)就白費(fèi)了。FPGA只需要幾百毫秒就可以更新邏輯功能。FPGA的靈活性可以保護(hù)投資,事實(shí)上,微軟現(xiàn)在的FPGA玩法與最初的設(shè)想大不相同。

數(shù)據(jù)中心是租給不同的租戶(hù)使用的,如果有的機(jī)器上有神經(jīng)網(wǎng)絡(luò)加速卡,有的機(jī)器上有Bing搜索加速卡,有的機(jī)器上有網(wǎng)絡(luò)虛擬化加速卡,任務(wù)的調(diào)度和服務(wù)器的運(yùn)維會(huì)很麻煩。使用FPGA可以保持?jǐn)?shù)據(jù)中心的同構(gòu)性。

接下來(lái)看通信密集型任務(wù)。相比計(jì)算密集型任務(wù),通信密集型任務(wù)對(duì)每個(gè)輸入數(shù)據(jù)的處理不甚復(fù)雜,基本上簡(jiǎn)單算算就輸出了,這時(shí)通信往往會(huì)成為瓶頸。對(duì)稱(chēng)加密、防火墻、網(wǎng)絡(luò)虛擬化都是通信密集型的例子。

通信密集型任務(wù),CPU、GPU、FPGA、ASIC的數(shù)量級(jí)比較(以64字節(jié)網(wǎng)絡(luò)數(shù)據(jù)包處理為例,數(shù)字僅為數(shù)量級(jí)的估計(jì))

對(duì)通信密集型任務(wù),F(xiàn)PGA相比CPU、GPU的優(yōu)勢(shì)就更大了。從吞吐量上講,F(xiàn)PGA上的收發(fā)器可以直接接上40Gbps甚至100Gbps的網(wǎng)線(xiàn),以線(xiàn)速處理任意大小的數(shù)據(jù)包;而CPU需要從網(wǎng)卡把數(shù)據(jù)包收上來(lái)才能處理,很多網(wǎng)卡是不能線(xiàn)速處理64字節(jié)的小數(shù)據(jù)包的。盡管可以通過(guò)插多塊網(wǎng)卡來(lái)達(dá)到高性能,但CPU和主板支持的PCIe插槽數(shù)量往往有限,而且網(wǎng)卡、交換機(jī)本身也價(jià)格不菲。

從延遲上講,網(wǎng)卡把數(shù)據(jù)包收到CPU,CPU再發(fā)給網(wǎng)卡,即使使用DPDK這樣高性能的數(shù)據(jù)包處理框架,延遲也有4~5微秒。更嚴(yán)重的問(wèn)題是,通用CPU的延遲不夠穩(wěn)定。例如當(dāng)負(fù)載較高時(shí),轉(zhuǎn)發(fā)延遲可能升到幾十微秒甚至更高(如下圖所示);現(xiàn)代操作系統(tǒng)中的時(shí)鐘中斷和任務(wù)調(diào)度也增加了延遲的不確定性。

雖然GPU也可以高性能處理數(shù)據(jù)包,但GPU是沒(méi)有網(wǎng)口的,意味著需要首先把數(shù)據(jù)包由網(wǎng)卡收上來(lái),再讓GPU去做處理。這樣吞吐量受到CPU和/或網(wǎng)卡的限制。GPU本身的延遲就更不必說(shuō)了。

那么為什么不把這些網(wǎng)絡(luò)功能做進(jìn)網(wǎng)卡,或者使用可編程交換機(jī)呢?ASIC的靈活性仍然是硬傷。盡管目前有越來(lái)越強(qiáng)大的可編程交換機(jī)芯片,比如支持P4語(yǔ)言的Tofino,ASIC仍然不能做復(fù)雜的有狀態(tài)處理,比如某種自定義的加密算法。

綜上,在數(shù)據(jù)中心里FPGA的主要優(yōu)勢(shì)是穩(wěn)定又極低的延遲,適用于流式的計(jì)算密集型任務(wù)和通信密集型任務(wù)。

THEEND

最新評(píng)論(評(píng)論僅代表用戶(hù)觀點(diǎn))

更多
暫無(wú)評(píng)論