CPU本身無(wú)法滿足高性能計(jì)算應(yīng)用軟件的性能需求,導(dǎo)致需求和性能之間出現(xiàn)了缺口。在新的芯片材料等基礎(chǔ)技術(shù)沒(méi)有取得突破前,一種有效的解決方法就是采用專用協(xié)處理器的異構(gòu)計(jì)算方式來(lái)提升處理性能?,F(xiàn)有的協(xié)處理器主要有FPGA,GPU和ASIC,F(xiàn)PGA由于其獨(dú)特的架構(gòu)擁有其他處理器無(wú)法比擬的優(yōu)勢(shì)。
FPGA(FieldProgrammableGateArray)現(xiàn)場(chǎng)可編程門陣列,可以通過(guò)軟件重新配置芯片內(nèi)部的資源形成不同功能硬件,就像用樂(lè)高積木可以搭出航空母艦或變形金剛一樣。因此,F(xiàn)PGA不僅有了軟件的可編程性和靈活性,同時(shí)又有ASIC高吞吐和低延時(shí)的特性。而且,由于有豐富的IO,F(xiàn)PGA還非常適合用作協(xié)議和接口轉(zhuǎn)換的芯片。
FPGA在數(shù)據(jù)中心最大的特點(diǎn)就在高吞吐的同時(shí)能做到低延時(shí)。FPGA內(nèi)部的資源都是可以重配置的,因此它可以很容易進(jìn)行數(shù)據(jù)并行和流水并行,且易于在數(shù)據(jù)并行和流水并行之間平衡。而GPU幾乎只能做數(shù)據(jù)并行。
與ASIC相比,F(xiàn)PGA的可編程性體現(xiàn)出很大的優(yōu)勢(shì)?,F(xiàn)在數(shù)據(jù)中心的各種算法每時(shí)每刻都在更新變化,沒(méi)有足夠穩(wěn)定的時(shí)間讓ASIC完成長(zhǎng)周期的開發(fā)。比如在一種神經(jīng)網(wǎng)絡(luò)模型出來(lái)之后開始把它做成ASIC,也許還未投片生產(chǎn),這個(gè)神經(jīng)網(wǎng)絡(luò)模型已經(jīng)被另一種神經(jīng)網(wǎng)絡(luò)模型所替代。不同的是,F(xiàn)PGA可以在不同的業(yè)務(wù)需求之間做平衡。比如說(shuō)白天用于為搜索業(yè)務(wù)排序的機(jī)器;在晚上請(qǐng)求很少的情況下,可以將這些FPGA重新配置成離線數(shù)據(jù)分析的功能,提供對(duì)離線數(shù)據(jù)進(jìn)行分析的服務(wù)。
另外由于FPGA有高速SERDES等豐富的接口,而且能靈活控制實(shí)現(xiàn)的粒度和操作數(shù)據(jù),因此非常適合進(jìn)行協(xié)議處理和數(shù)據(jù)格式的轉(zhuǎn)換。比如說(shuō)FPGA可以很方便的接入以太網(wǎng)數(shù)據(jù),并對(duì)以太網(wǎng)包進(jìn)行包過(guò)濾等處理。
和CPU、GPU、ASIC在設(shè)計(jì)上的區(qū)別
(圖3)處理器芯片對(duì)比
CPU/GPU屬于馮·諾依曼結(jié)構(gòu),任務(wù)執(zhí)行需要經(jīng)歷取指、譯碼、執(zhí)行、訪存以及寫回等過(guò)程。CPU為達(dá)到足夠高的通用性,其指令流的控制邏輯相當(dāng)復(fù)雜。GPU使用SIMD單指令多數(shù)據(jù)流并行等方式進(jìn)行計(jì)算加速。
FPGA/ASIC在使用時(shí)硬件功能模塊已固定,無(wú)需分支判斷等復(fù)雜控制邏輯,同時(shí)大大降低了訪存次數(shù)。因此在能效上可以比CPU高出1到2個(gè)數(shù)量級(jí)。
ASIC是一種專用的芯片,是為了某種特定的需求而專門定制的芯片。ASIC與通用芯片相比,體積孝功耗低、計(jì)算效率高、芯片出貨量越大成本越低。但是缺點(diǎn)也很明顯:開發(fā)周期很長(zhǎng),算法是固定的,一旦算法變化就可能無(wú)法重用。
而FPGA則是“軟硬件一體”的架構(gòu),軟件就是硬件。FPGA基本原理是在芯片內(nèi)集成大量的數(shù)字門電路以及存儲(chǔ)器,用戶可以通過(guò)燒入FPGA配置文件來(lái)來(lái)定義這些門電路以及存儲(chǔ)器之間的連線,進(jìn)而得到不同的硬件功能。
就開發(fā)難度而言,ASIC>FPGA>GPU>CPU。目前主流的FPGA開發(fā)語(yǔ)言是硬件描述HDL,需要開發(fā)者具備一定的相關(guān)技能。隨著業(yè)界OPENCL、HLS等類C高級(jí)語(yǔ)言的推進(jìn),F(xiàn)PGA的開發(fā)難度和周期也會(huì)有所改善。
FPGA部署在哪里?與CPU之間如何通信?
騰訊云的FPGA主要部署在數(shù)據(jù)中心的服務(wù)器中。騰訊云將FPGA芯片加上DDR內(nèi)存、外圍電路和散熱片,設(shè)計(jì)成PCIE板卡。這種FPGA板卡被安裝在服務(wù)器的主板上,用戶通過(guò)網(wǎng)絡(luò)遠(yuǎn)程訪問(wèn)服務(wù)器,開發(fā)調(diào)試FPGA,并用其加速特定業(yè)務(wù)。
FPGA與CPU之間是通過(guò)PCIE鏈路通信的。CPU內(nèi)部集成了DDR內(nèi)存控制器和PCIE控制器。在FPGA芯片內(nèi)部也用可編程邏輯資源實(shí)現(xiàn)了PCIE控制器、DDR控制器和DMA控制器。一般通訊分三種情況:
(1)指令通道
CPU向FPGA芯片寫入指令,讀取狀態(tài)。CPU直接通過(guò)PCIE訪問(wèn)到FPGA芯片內(nèi)掛載的存儲(chǔ)器或內(nèi)部總線。
(2)數(shù)據(jù)通道
CPU讀寫FPGA板卡上DDR的數(shù)據(jù)時(shí),CPU通過(guò)PCIE配置FPGA芯片內(nèi)的DMA控制器,輸入數(shù)據(jù)的源物理地址和目的物理地址。DMA控制器控制FPGA卡上的DDR控制器和PCIE控制器,在FPGA卡上的DDR內(nèi)存和CPU連接的DDR內(nèi)存之間傳輸數(shù)據(jù)。