《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > FPGA將代替CPU?一文揭秘FPGA的現(xiàn)在與未來之路

FPGA將代替CPU?一文揭秘FPGA的現(xiàn)在與未來之路

2019-09-29
關(guān)鍵詞: FPGA CPU

  最近幾年,FPGA這個(gè)概念越來越多地出現(xiàn)。

  例如,比特幣挖礦,就有使用基于FPGA的礦機(jī)。還有,之前微軟表示,將在數(shù)據(jù)中心里,使用FPGA“代替”CPU等等。

  其實(shí),對(duì)于專業(yè)人士來說,F(xiàn)PGA并不陌生,它一直都被廣泛使用。但是,大部分人還不是太了解它,對(duì)它有很多疑問——FPGA到底是什么?為什么要使用它?相比 CPU、GPU、ASIC(專用芯片),F(xiàn)PGA有什么特點(diǎn)?……

  今天,帶著這一系列的問題,我們一起來——揭秘FPGA。

  一、為什么使用 FPGA?

  眾所周知,通用處理器(CPU)的摩爾定律已入暮年,而機(jī)器學(xué)習(xí)和 Web 服務(wù)的規(guī)模卻在指數(shù)級(jí)增長(zhǎng)。

  人們使用定制硬件來加速常見的計(jì)算任務(wù),然而日新月異的行業(yè)又要求這些定制的硬件可被重新編程來執(zhí)行新類型的計(jì)算任務(wù)。

  FPGA 正是一種硬件可重構(gòu)的體系結(jié)構(gòu)。它的英文全稱是Field Programmable Gate Array,中文名是現(xiàn)場(chǎng)可編程門陣列。

  FPGA常年來被用作專用芯片(ASIC)的小批量替代品,然而近年來在微軟、百度等公司的數(shù)據(jù)中心大規(guī)模部署,以同時(shí)提供強(qiáng)大的計(jì)算能力和足夠的靈活性。

  不同體系結(jié)構(gòu)性能和靈活性的比較

640.webp (29).jpg

  FPGA 為什么快?「都是同行襯托得好」。

  CPU、GPU 都屬于馮·諾依曼結(jié)構(gòu),指令譯碼執(zhí)行、共享內(nèi)存。FPGA 之所以比 CPU 甚至 GPU 能效高,本質(zhì)上是無指令、無需共享內(nèi)存的體系結(jié)構(gòu)帶來的福利。

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

  而 FPGA 每個(gè)邏輯單元的功能在重編程(燒寫)時(shí)就已經(jīng)確定,不需要指令。

  馮氏結(jié)構(gòu)中使用內(nèi)存有兩種作用。一是保存狀態(tài),二是在執(zhí)行單元間通信。

  由于內(nèi)存是共享的,就需要做訪問仲裁;為了利用訪問局部性,每個(gè)執(zhí)行單元有一個(gè)私有的緩存,這就要維持執(zhí)行部件間緩存的一致性。

  對(duì)于保存狀態(tài)的需求,F(xiàn)PGA 中的寄存器和片上內(nèi)存(BRAM)是屬于各自的控制邏輯的,無需不必要的仲裁和緩存。

  對(duì)于通信的需求,F(xiàn)PGA 每個(gè)邏輯單元與周圍邏輯單元的連接在重編程(燒寫)時(shí)就已經(jīng)確定,并不需要通過共享內(nèi)存來通信。

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

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

640.webp (28).jpg

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

640.webp (27).jpg

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

  在數(shù)據(jù)中心,F(xiàn)PGA 相比 GPU 的核心優(yōu)勢(shì)在于延遲。

  像 Bing 搜索排序這樣的任務(wù),要盡可能快地返回搜索結(jié)果,就需要盡可能降低每一步的延遲。

  如果使用 GPU 來加速,要想充分利用 GPU 的計(jì)算能力,batch size 就不能太小,延遲將高達(dá)毫秒量級(jí)。

  使用 FPGA 來加速的話,只需要微秒級(jí)的 PCIe 延遲(我們現(xiàn)在的 FPGA 是作為一塊 PCIe 加速卡)。

  未來 Intel 推出通過 QPI 連接的 Xeon + FPGA 之后,CPU 和 FPGA 之間的延遲更可以降到 100 納秒以下,跟訪問主存沒什么區(qū)別了。

  FPGA 為什么比 GPU 的延遲低這么多?

  這本質(zhì)上是體系結(jié)構(gòu)的區(qū)別。

  FPGA 同時(shí)擁有流水線并行和數(shù)據(jù)并行,而 GPU 幾乎只有數(shù)據(jù)并行(流水線深度受限)。

  例如處理一個(gè)數(shù)據(jù)包有 10 個(gè)步驟,F(xiàn)PGA 可以搭建一個(gè) 10 級(jí)流水線,流水線的不同級(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,Single Instruction Multiple Data)。這就要求 10 個(gè)數(shù)據(jù)包必須一起輸入、一起輸出,輸入輸出的延遲增加了。

  當(dāng)任務(wù)是逐個(gè)而非成批到達(dá)的時(shí)候,流水線并行比數(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ì)

640.webp (26).jpg

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

  接下來看通信密集型任務(wù)。

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

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

640.webp (25).jpg

  對(duì)通信密集型任務(wù),F(xiàn)PGA 相比 CPU、GPU 的優(yōu)勢(shì)就更大了。

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

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

640.webp (24).jpg

  ClickNP(FPGA)與 Dell S6000 交換機(jī)(商用交換機(jī)芯片)、Click+DPDK(CPU)和 Linux(CPU)的轉(zhuǎn)發(fā)延遲比較,error bar 表示 5% 和 95%。

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

  那么為什么不把這些網(wǎng)絡(luò)功能做進(jìn)網(wǎng)卡,或者使用可編程交換機(jī)呢?ASIC 的靈活性仍然是硬傷。

  盡管目前有越來越強(qiáng)大的可編程交換機(jī)芯片,比如支持 P4 語言的 Tofino,ASIC 仍然不能做復(fù)雜的有狀態(tài)處理,比如某種自定義的加密算法。

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

  二、微軟部署 FPGA 的實(shí)踐

  2016 年 9 月,《連線》(Wired)雜志發(fā)表了一篇《微軟把未來押注在 FPGA 上》的報(bào)道 [3],講述了 Catapult 項(xiàng)目的前世今生。

  緊接著,Catapult 項(xiàng)目的老大 Doug Burger 在 Ignite 2016 大會(huì)上與微軟 CEO Satya Nadella 一起做了 FPGA 加速機(jī)器翻譯的演示。

  演示的總計(jì)算能力是 103 萬 T ops,也就是 1.03 Exa-op,相當(dāng)于 10 萬塊頂級(jí) GPU 計(jì)算卡。一塊 FPGA(加上板上內(nèi)存和網(wǎng)絡(luò)接口等)的功耗大約是 30 W,僅增加了整個(gè)服務(wù)器功耗的十分之一。

640.webp (23).jpg

  Ignite 2016 上的演示:每秒 1 Exa-op (10^18) 的機(jī)器翻譯運(yùn)算能力

  微軟部署 FPGA 并不是一帆風(fēng)順的。對(duì)于把 FPGA 部署在哪里這個(gè)問題,大致經(jīng)歷了三個(gè)階段:

640.webp (22).jpg

  第一個(gè)階段是專用集群,里面插滿了 FPGA 加速卡,就像是一個(gè) FPGA 組成的超級(jí)計(jì)算機(jī)。

  下圖是最早的 BFB 實(shí)驗(yàn)板,一塊 PCIe 卡上放了 6 塊 FPGA,每臺(tái) 1U 服務(wù)器上又插了 4 塊 PCIe 卡。

  最早的 BFB 實(shí)驗(yàn)板,上面放了 6 塊 FPGA。

  當(dāng)然現(xiàn)在數(shù)據(jù)中心領(lǐng)域用兩家公司 FPGA 的都有。只要規(guī)模足夠大,對(duì) FPGA 價(jià)格過高的擔(dān)心將是不必要的。

640.webp (21).jpg

  最早的 BFB 實(shí)驗(yàn)板,1U 服務(wù)器上插了 4 塊 FPGA 卡。來源:[1]

  像超級(jí)計(jì)算機(jī)一樣的部署方式,意味著有專門的一個(gè)機(jī)柜全是上圖這種裝了 24 塊 FPGA 的服務(wù)器(下圖左)。

640.webp (20).jpg

  這種方式有幾個(gè)問題:

640.webp (19).jpg

  部署 FPGA 的三種方式,從中心化到分布式。

  一種不那么激進(jìn)的方式是,在每個(gè)機(jī)柜一面部署一臺(tái)裝滿 FPGA 的服務(wù)器(上圖中)。

  第二個(gè)階段,為了保證數(shù)據(jù)中心中服務(wù)器的同構(gòu)性(這也是不用 ASIC 的一個(gè)重要原因),在每臺(tái)服務(wù)器上插一塊 FPGA(上圖右),F(xiàn)PGA 之間通過專用網(wǎng)絡(luò)連接。這也是微軟在 ISCA''''14 上所發(fā)表論文采用的部署方式。

640.webp (17).jpg

  Open Compute Server 在機(jī)架中。

640.webp (18).jpg

  Open Compute Server 內(nèi)景。紅框是放 FPGA 的位置。

640.webp (16).jpg

  插入 FPGA 后的 Open Compute Server。

640.webp (15).jpg

  FPGA 與 Open Compute Server 之間的連接與固定。

  FPGA 采用 Stratix V D5,有 172K 個(gè) ALM,2014 個(gè) M20K 片上內(nèi)存,1590 個(gè) DSP。板上有一個(gè) 8GB DDR3-1333 內(nèi)存,一個(gè) PCIe Gen3 x8 接口,兩個(gè) 10 Gbps 網(wǎng)絡(luò)接口。一個(gè)機(jī)柜之間的 FPGA 采用專用網(wǎng)絡(luò)連接,一組 10G 網(wǎng)口 8 個(gè)一組連成環(huán),另一組 10G 網(wǎng)口 6 個(gè)一組連成環(huán),不使用交換機(jī)。

640.webp (14).jpg

  機(jī)柜中 FPGA 之間的網(wǎng)絡(luò)連接方式。

  這樣一個(gè) 1632 臺(tái)服務(wù)器、1632 塊 FPGA 的集群,把 Bing 的搜索結(jié)果排序整體性能提高到了 2 倍(換言之,節(jié)省了一半的服務(wù)器)。

  如下圖所示,每 8 塊 FPGA 穿成一條鏈,中間用前面提到的 10 Gbps 專用網(wǎng)線來通信。這 8 塊 FPGA 各司其職,有的負(fù)責(zé)從文檔中提取特征(黃色),有的負(fù)責(zé)計(jì)算特征表達(dá)式(綠色),有的負(fù)責(zé)計(jì)算文檔的得分(紅色)。

640.webp (13).jpg

  FPGA 加速 Bing 的搜索排序過程。

640.webp (12).jpg

  FPGA 不僅降低了 Bing 搜索的延遲,還顯著提高了延遲的穩(wěn)定性。來源:[4]

640.webp (11).jpg

  本地和遠(yuǎn)程的 FPGA 均可以降低搜索延遲,遠(yuǎn)程 FPGA 的通信延遲相比搜索延遲可忽略。

  FPGA 在 Bing 的部署取得了成功,Catapult 項(xiàng)目繼續(xù)在公司內(nèi)擴(kuò)張。

  微軟內(nèi)部擁有最多服務(wù)器的,就是云計(jì)算 Azure 部門了。

  Azure 部門急需解決的問題是網(wǎng)絡(luò)和存儲(chǔ)虛擬化帶來的開銷。Azure 把虛擬機(jī)賣給客戶,需要給虛擬機(jī)的網(wǎng)絡(luò)提供防火墻、負(fù)載均衡、隧道、NAT 等網(wǎng)絡(luò)功能。由于云存儲(chǔ)的物理存儲(chǔ)跟計(jì)算節(jié)點(diǎn)是分離的,需要把數(shù)據(jù)從存儲(chǔ)節(jié)點(diǎn)通過網(wǎng)絡(luò)搬運(yùn)過來,還要進(jìn)行壓縮和加密。

  在 1 Gbps 網(wǎng)絡(luò)和機(jī)械硬盤的時(shí)代,網(wǎng)絡(luò)和存儲(chǔ)虛擬化的 CPU 開銷不值一提。隨著網(wǎng)絡(luò)和存儲(chǔ)速度越來越快,網(wǎng)絡(luò)上了 40 Gbps,一塊 SSD 的吞吐量也能到 1 GB/s,CPU 漸漸變得力不從心了。

  例如 Hyper-V 虛擬交換機(jī)只能處理 25 Gbps 左右的流量,不能達(dá)到 40 Gbps 線速,當(dāng)數(shù)據(jù)包較小時(shí)性能更差;AES-256 加密和 SHA-1 簽名,每個(gè) CPU 核只能處理 100 MB/s,只是一塊 SSD 吞吐量的十分之一。

640.webp (10).jpg

  網(wǎng)絡(luò)隧道協(xié)議、防火墻處理 40 Gbps 需要的 CPU 核數(shù)。

  為了加速網(wǎng)絡(luò)功能和存儲(chǔ)虛擬化,微軟把 FPGA 部署在網(wǎng)卡和交換機(jī)之間。

  如下圖所示,每個(gè) FPGA 有一個(gè) 4 GB DDR3-1333 DRAM,通過兩個(gè) PCIe Gen3 x8 接口連接到一個(gè) CPU socket(物理上是 PCIe Gen3 x16 接口,因?yàn)?FPGA 沒有 x16 的硬核,邏輯上當(dāng)成兩個(gè) x8 的用)。物理網(wǎng)卡(NIC)就是普通的 40 Gbps 網(wǎng)卡,僅用于宿主機(jī)與網(wǎng)絡(luò)之間的通信。

640.webp (9).jpg

  Azure 服務(wù)器部署 FPGA 的架構(gòu)。

  FPGA(SmartNIC)對(duì)每個(gè)虛擬機(jī)虛擬出一塊網(wǎng)卡,虛擬機(jī)通過 SR-IOV 直接訪問這塊虛擬網(wǎng)卡。原本在虛擬交換機(jī)里面的數(shù)據(jù)平面功能被移到了 FPGA 里面,虛擬機(jī)收發(fā)網(wǎng)絡(luò)數(shù)據(jù)包均不需要 CPU 參與,也不需要經(jīng)過物理網(wǎng)卡(NIC)。這樣不僅節(jié)約了可用于出售的 CPU 資源,還提高了虛擬機(jī)的網(wǎng)絡(luò)性能(25 Gbps),把同數(shù)據(jù)中心虛擬機(jī)之間的網(wǎng)絡(luò)延遲降低了 10 倍。

640.webp (8).jpg

  網(wǎng)絡(luò)虛擬化的加速架構(gòu)。

  這就是微軟部署 FPGA 的第三代架構(gòu),也是目前「每臺(tái)服務(wù)器一塊 FPGA」大規(guī)模部署所采用的架構(gòu)。

  FPGA 復(fù)用主機(jī)網(wǎng)絡(luò)的初心是加速網(wǎng)絡(luò)和存儲(chǔ),更深遠(yuǎn)的影響則是把 FPGA 之間的網(wǎng)絡(luò)連接擴(kuò)展到了整個(gè)數(shù)據(jù)中心的規(guī)模,做成真正 cloud-scale 的「超級(jí)計(jì)算機(jī)」。

  第二代架構(gòu)里面,F(xiàn)PGA 之間的網(wǎng)絡(luò)連接局限于同一個(gè)機(jī)架以內(nèi),F(xiàn)PGA 之間專網(wǎng)互聯(lián)的方式很難擴(kuò)大規(guī)模,通過 CPU 來轉(zhuǎn)發(fā)則開銷太高。

  第三代架構(gòu)中,F(xiàn)PGA 之間通過 LTL (Lightweight Transport Layer) 通信。同一機(jī)架內(nèi)延遲在 3 微秒以內(nèi);8 微秒以內(nèi)可達(dá) 1000 塊 FPGA;20 微秒可達(dá)同一數(shù)據(jù)中心的所有 FPGA。第二代架構(gòu)盡管 8 臺(tái)機(jī)器以內(nèi)的延遲更低,但只能通過網(wǎng)絡(luò)訪問 48 塊 FPGA。為了支持大范圍的 FPGA 間通信,第三代架構(gòu)中的 LTL 還支持 PFC 流控協(xié)議和 DCQCN 擁塞控制協(xié)議。

640.webp (7).jpg

  縱軸:LTL 的延遲,橫軸:可達(dá)的 FPGA 數(shù)量。

640.webp (6).jpg

  FPGA 內(nèi)的邏輯模塊關(guān)系,其中每個(gè) Role 是用戶邏輯(如 DNN 加速、網(wǎng)絡(luò)功能加速、加密),外面的部分負(fù)責(zé)各個(gè) Role 之間的通信及 Role 與外設(shè)之間的通信。

640.webp (5).jpg

  FPGA 構(gòu)成的數(shù)據(jù)中心加速平面,介于網(wǎng)絡(luò)交換層(TOR、L1、L2)和傳統(tǒng)服務(wù)器軟件(CPU 上運(yùn)行的軟件)之間。

  通過高帶寬、低延遲的網(wǎng)絡(luò)互聯(lián)的 FPGA 構(gòu)成了介于網(wǎng)絡(luò)交換層和傳統(tǒng)服務(wù)器軟件之間的數(shù)據(jù)中心加速平面。

  除了每臺(tái)提供云服務(wù)的服務(wù)器都需要的網(wǎng)絡(luò)和存儲(chǔ)虛擬化加速,F(xiàn)PGA 上的剩余資源還可以用來加速 Bing 搜索、深度神經(jīng)網(wǎng)絡(luò)(DNN)等計(jì)算任務(wù)。

  對(duì)很多類型的應(yīng)用,隨著分布式 FPGA 加速器的規(guī)模擴(kuò)大,其性能提升是超線性的。

  例如 CNN inference,當(dāng)只用一塊 FPGA 的時(shí)候,由于片上內(nèi)存不足以放下整個(gè)模型,需要不斷訪問 DRAM 中的模型權(quán)重,性能瓶頸在 DRAM;如果 FPGA 的數(shù)量足夠多,每塊 FPGA 負(fù)責(zé)模型中的一層或者一層中的若干個(gè)特征,使得模型權(quán)重完全載入片上內(nèi)存,就消除了 DRAM 的性能瓶頸,完全發(fā)揮出 FPGA 計(jì)算單元的性能。

  當(dāng)然,拆得過細(xì)也會(huì)導(dǎo)致通信開銷的增加。把任務(wù)拆分到分布式 FPGA 集群的關(guān)鍵在于平衡計(jì)算和通信。

640.webp (4).jpg

  從神經(jīng)網(wǎng)絡(luò)模型到 HaaS 上的 FPGA。利用模型內(nèi)的并行性,模型的不同層、不同特征映射到不同 FPGA。

  在 MICRO''''16 會(huì)議上,微軟提出了 Hardware as a Service (HaaS) 的概念,即把硬件作為一種可調(diào)度的云服務(wù),使得 FPGA 服務(wù)的集中調(diào)度、管理和大規(guī)模部署成為可能。

640.webp (3).jpg

  Hardware as a Service (HaaS)。

  從第一代裝滿 FPGA 的專用服務(wù)器集群,到第二代通過專網(wǎng)連接的 FPGA 加速卡集群,到目前復(fù)用數(shù)據(jù)中心網(wǎng)絡(luò)的大規(guī)模 FPGA 云,三個(gè)思想指導(dǎo)我們的路線。

  三、FPGA 在云計(jì)算中的角色

  最后談一點(diǎn)我個(gè)人對(duì) FPGA 在云計(jì)算中角色的思考。作為三年級(jí)博士生,我在微軟亞洲研究院的研究試圖回答兩個(gè)問題:

  我對(duì) FPGA 業(yè)界主要的遺憾是,F(xiàn)PGA 在數(shù)據(jù)中心的主流用法,從除微軟外的互聯(lián)網(wǎng)巨頭,到兩大 FPGA 廠商,再到學(xué)術(shù)界,大多是把 FPGA 當(dāng)作跟 GPU 一樣的計(jì)算密集型任務(wù)的加速卡。然而 FPGA 真的很適合做 GPU 的事情嗎?

  前面講過,F(xiàn)PGA 和 GPU 最大的區(qū)別在于體系結(jié)構(gòu),F(xiàn)PGA 更適合做需要低延遲的流式處理,GPU 更適合做大批量同構(gòu)數(shù)據(jù)的處理。

  由于很多人打算把 FPGA 當(dāng)作計(jì)算加速卡來用,兩大 FPGA 廠商推出的高層次編程模型也是基于 OpenCL,模仿 GPU 基于共享內(nèi)存的批處理模式。CPU 要交給 FPGA 做一件事,需要先放進(jìn) FPGA 板上的 DRAM,然后告訴 FPGA 開始執(zhí)行,F(xiàn)PGA 把執(zhí)行結(jié)果放回 DRAM,再通知 CPU 去取回。

  CPU 和 FPGA 之間本來可以通過 PCIe 高效通信,為什么要到板上的 DRAM 繞一圈?也許是工程實(shí)現(xiàn)的問題,我們發(fā)現(xiàn)通過 OpenCL 寫 DRAM、啟動(dòng) kernel、讀 DRAM 一個(gè)來回,需要 1.8 毫秒。而通過 PCIe DMA 來通信,卻只要 1~2 微秒。

640.webp (2).jpg

  PCIe I/O channel 與 OpenCL 的性能比較??v坐標(biāo)為對(duì)數(shù)坐標(biāo)。

  OpenCL 里面多個(gè) kernel 之間的通信就更夸張了,默認(rèn)的方式也是通過共享內(nèi)存。

  本文開篇就講,F(xiàn)PGA 比 CPU 和 GPU 能效高,體系結(jié)構(gòu)上的根本優(yōu)勢(shì)是無指令、無需共享內(nèi)存。使用共享內(nèi)存在多個(gè) kernel 之間通信,在順序通信(FIFO)的情況下是毫無必要的。況且 FPGA 上的 DRAM 一般比 GPU 上的 DRAM 慢很多。

  因此我們提出了 ClickNP 網(wǎng)絡(luò)編程框架 [5],使用管道(channel)而非共享內(nèi)存來在執(zhí)行單元(element/kernel)間、執(zhí)行單元和主機(jī)軟件間進(jìn)行通信。

  需要共享內(nèi)存的應(yīng)用,也可以在管道的基礎(chǔ)上實(shí)現(xiàn),畢竟 CSP(Communicating Sequential Process)和共享內(nèi)存理論上是等價(jià)的嘛。ClickNP 目前還是在 OpenCL 基礎(chǔ)上的一個(gè)框架,受到 C 語言描述硬件的局限性(當(dāng)然 HLS 比 Verilog 的開發(fā)效率確實(shí)高多了)。理想的硬件描述語言,大概不會(huì)是 C 語言吧。

640.webp (1).jpg

  ClickNP 使用 channel 在 elements 間通信

640.webp.jpg

  ClickNP 使用 channel 在 FPGA 和 CPU 間通信

  低延遲的流式處理,需要最多的地方就是通信。

  然而 CPU 由于并行性的限制和操作系統(tǒng)的調(diào)度,做通信效率不高,延遲也不穩(wěn)定。

  此外,通信就必然涉及到調(diào)度和仲裁,CPU 由于單核性能的局限和核間通信的低效,調(diào)度、仲裁性能受限,硬件則很適合做這種重復(fù)工作。因此我的博士研究把 FPGA 定義為通信的「大管家」,不管是服務(wù)器跟服務(wù)器之間的通信,虛擬機(jī)跟虛擬機(jī)之間的通信,進(jìn)程跟進(jìn)程之間的通信,CPU 跟存儲(chǔ)設(shè)備之間的通信,都可以用 FPGA 來加速。

  成也蕭何,敗也蕭何。缺少指令同時(shí)是 FPGA 的優(yōu)勢(shì)和軟肋。

  每做一點(diǎn)不同的事情,就要占用一定的 FPGA 邏輯資源。如果要做的事情復(fù)雜、重復(fù)性不強(qiáng),就會(huì)占用大量的邏輯資源,其中的大部分處于閑置狀態(tài)。這時(shí)就不如用馮·諾依曼結(jié)構(gòu)的處理器。

  數(shù)據(jù)中心里的很多任務(wù)有很強(qiáng)的局部性和重復(fù)性:一部分是虛擬化平臺(tái)需要做的網(wǎng)絡(luò)和存儲(chǔ),這些都屬于通信;另一部分是客戶計(jì)算任務(wù)里的,比如機(jī)器學(xué)習(xí)、加密解密。

  首先把 FPGA 用于它最擅長(zhǎng)的通信,日后也許也會(huì)像 AWS 那樣把 FPGA 作為計(jì)算加速卡租給客戶。

  不管通信還是機(jī)器學(xué)習(xí)、加密解密,算法都是很復(fù)雜的,如果試圖用 FPGA 完全取代 CPU,勢(shì)必會(huì)帶來 FPGA 邏輯資源極大的浪費(fèi),也會(huì)提高 FPGA 程序的開發(fā)成本。更實(shí)用的做法是FPGA 和 CPU 協(xié)同工作,局部性和重復(fù)性強(qiáng)的歸 FPGA,復(fù)雜的歸 CPU。

  當(dāng)我們用 FPGA 加速了 Bing 搜索、深度學(xué)習(xí)等越來越多的服務(wù);當(dāng)網(wǎng)絡(luò)虛擬化、存儲(chǔ)虛擬化等基礎(chǔ)組件的數(shù)據(jù)平面被 FPGA 把持;當(dāng) FPGA 組成的「數(shù)據(jù)中心加速平面」成為網(wǎng)絡(luò)和服務(wù)器之間的天塹……似乎有種感覺,F(xiàn)PGA 將掌控全局,CPU 上的計(jì)算任務(wù)反而變得碎片化,受 FPGA 的驅(qū)使。以往我們是 CPU 為主,把重復(fù)的計(jì)算任務(wù)卸載(offload)到 FPGA 上;以后會(huì)不會(huì)變成 FPGA 為主,把復(fù)雜的計(jì)算任務(wù)卸載到 CPU 上呢?讓我們拭目以待吧!


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。