揭秘FPGA:為什么比 GPU 的延遲低這么多?
最近幾年,FPGA這個(gè)概念越來越多地出現(xiàn)。
本文引用地址:http://m.butianyuan.cn/article/201806/382354.htm例如,比特幣挖礦,就有使用基于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í)增長。
人們使用定制硬件來加速常見的計(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)性能和靈活性的比較
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ì)算能力。
▲FPGA 的整數(shù)乘法運(yùn)算能力(估計(jì)值,不使用 DSP,根據(jù)邏輯資源占用量估計(jì))
▲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ū)別了。
評(píng)論