CPU和GPU都屬于馮·諾依曼結(jié)構(gòu),指令譯碼執(zhí)行,共享內(nèi)存。FPGA之所以比CPU、GPU更快,本質(zhì)上是因為其無指令,無共享內(nèi)存的體系結(jié)構(gòu)所決定的。
馮氏結(jié)構(gòu)中,由于執(zhí)行單元可能執(zhí)行任意指令,就需要有指令存儲器、譯碼器、各種指令的運算器、分支跳轉(zhuǎn)處理邏輯。而FPGA的每個邏輯單元的功能在重編程時就已經(jīng)確定,不需要指令。
馮氏結(jié)構(gòu)中使用內(nèi)存有兩種作用:①保存狀態(tài)。②執(zhí)行單元間的通信。
1)保存狀態(tài):FPGA中的寄存器和片上內(nèi)存(BRAM)是屬于各自的控制邏輯的,無需不必要的仲裁和緩存。
2)通信需求:FPGA每個邏輯單元與周圍邏輯單元的連接在重編程時就已經(jīng)確定了,并不需要通過共享內(nèi)存來通信。
計算密集型任務(wù)中:
在數(shù)據(jù)中心,F(xiàn)PGA相比GPU的核心優(yōu)勢在于延遲。FPGA為什么比GPU的延遲低很多?本質(zhì)上是體系結(jié)構(gòu)的區(qū)別。FPGA同時擁有流水線并行和數(shù)據(jù)并行,而GPU幾乎只有數(shù)據(jù)并行(流水線深度受限)。
處理一個數(shù)據(jù)包有10個步驟,F(xiàn)PGA可以搭建一個10級流水線,流水線的不同級在處理不同的數(shù)據(jù)包,每個數(shù)據(jù)包流經(jīng)10級之后處理完成。每個處理完成的數(shù)據(jù)包可以馬上輸出。而GPU的數(shù)據(jù)并行方法是做10個計算單元,每個計算單元也在處理不同的數(shù)據(jù)包,但是所有的計算單元必須按照統(tǒng)一的步調(diào),做相同的事情(SIMD)。這就要求10個數(shù)據(jù)包必須同進同出。當(dāng)任務(wù)是逐個而非成批到達的時候,流水線并行比數(shù)據(jù)并行可實現(xiàn)更低的延遲。因此對流水式計算的任務(wù),F(xiàn)PGA比GPU天生有延遲方面的優(yōu)勢。
ASIC在吞吐量、延遲、功耗單個方面都是最優(yōu)秀的。但是其研發(fā)成本高,周期長。FPGA的靈活性可以保護資產(chǎn)。數(shù)據(jù)中心是租給不同租戶使用的。有的機器上有神經(jīng)網(wǎng)絡(luò)加速卡,有的有bing搜索加速卡,有的有網(wǎng)絡(luò)虛擬加速卡,任務(wù)的調(diào)度和運維會很麻煩。使用FPGA可以保持數(shù)據(jù)中心的同構(gòu)性。
通信密集型任務(wù)中,F(xiàn)PGA相比GPU、CPU的優(yōu)勢更大。
①吞吐量:FPGA可以直接接上40Gbps或者100Gbps的網(wǎng)線,以線速處理任意大小的數(shù)據(jù)包;而CPU則需要網(wǎng)卡把數(shù)據(jù)包接收過來;GPU也可以高性能處理數(shù)據(jù)包,但GPU沒有網(wǎng)口,同樣需要網(wǎng)卡,這樣吞吐量受到網(wǎng)卡和(或)者CPU的限制。
②延遲:網(wǎng)卡把數(shù)據(jù)傳給CPU,CPU處理后傳給網(wǎng)卡,再加上系統(tǒng)中的時鐘中斷和任務(wù)調(diào)度增加了延遲的不穩(wěn)定性。
綜上所述,在數(shù)據(jù)中心里 FPGA 的主要優(yōu)勢是穩(wěn)定又極低的延遲,適用于流式的計算密集型任務(wù)和通信密集型任務(wù)。
FPGA 和 GPU 最大的區(qū)別在于體系結(jié)構(gòu),F(xiàn)PGA 更適合做需要低延遲的流式處理,GPU 更適合做大批量同構(gòu)數(shù)據(jù)的處理。
成也蕭何,敗也蕭何。缺少指令同時是 FPGA 的優(yōu)勢和軟肋。每做一點不同的事情,就要占用一定的 FPGA 邏輯資源。如果要做的事情復(fù)雜、重復(fù)性不強,就會占用大量的邏輯資源,其中的大部分處于閑置狀態(tài)。這時就不如用馮·諾依曼結(jié)構(gòu)的處理器。
FPGA 和 CPU 協(xié)同工作,局部性和重復(fù)性強的歸 FPGA,復(fù)雜的歸 CPU。