主頻率不高 為何FPGA可幫CPU加速?

作者 : 趙明燦,EDN China

FPGA的頻率一般只有幾百MHz,而CPU的頻率卻高達數GHz。因此,有不少網友心中就有一個疑問:「為什麼FPGA主頻率比CPU慢,但卻可以用來幫CPU加速?」

眾所周知,FPGA的頻率一般只有幾百MHz,而CPU的頻率卻高達數GHz。因此,有不少網友心中就有個疑問:「為什麼FPGA主頻率比CPU慢,但卻可以用來幫CPU加速?」EDN China就和大家系統性地討論這個問題。

將FPGA主頻率與CPU相比不妥

在開始之前,首先要明確一點,將FPGA的主頻率與CPU比較,實際是風馬牛不相及的問題。FPGA和CPU是兩種完全不同的元件,前者是專用、是硬體程式設計;而後者是通用、是軟體程式設計。

不同體系結構性能和靈活性的比較。(圖片來源:《如何評價微軟在資料中心使用 FPGA 代替傳統 CPU 的做法?》)

表面上看,FPGA的時脈頻率較低,對於通用運算任務,FPGA設計貌似不如CPU設計。但是實際上,單個FPGA的平行度卻比CPU要高得多。FPGA的行為是確定性的,用作硬體加速器沒有時間片、執行緒或資源衝突的問題。它始終以完全相同的速度執行一件事,因此,如果需要低延遲,那麼FPGA就可能是最佳選擇。

運算密集型任務中,CPU、GPU、FPGA、ASIC 的數量級比較(以16位元整數乘法為例,數位僅為數量級的估計)。(圖片來源:《如何評價微軟在資料中心使用 FPGA 代替傳統 CPU 的做法?》)

FPGA平行運算機制

如中國知乎網友young cc所言,雖然CPU主頻率很高,但其是通用處理器,執行某個特定運算(如訊號處理、影像處理)可能需要很多個時脈週期。而FPGA可以透過程式設計重組電路,直接生成專用電路,加上電路平行性,可能執行這個特定運算只需要一個時脈週期。

舉例來說,CPU主頻率為3GHz,FPGA主頻率為200MHz。若執行某個特定運算,CPU需要30個時脈週期,而FPGA只需一個,那麼耗時情況是:

CPU:30/3GHz =10ns;

FPGA:1/200MHz =5ns。

可以看到,FPGA執行特定運算速度比CPU塊,能協助加速。另外,CPU的主頻率是加過流水線之後的。比如是15級流水線,則第一條指令執行了15個時脈週期後才能得出結果。但是,使用FPGA也不一定總能進行加速。

例如,知乎網友Evan172就表示,使用FPGA做加速,只是在某些強運算和資料處理的方面,因為其硬體電路平行運作和有很多DSP硬核資源供調用的特點,可以工作得更出色。

FPGA本身也只是輔助角色,進行控制的還是CPU本身,所以FPGA並不能代替CPU,只是在完成一件大任務的過程中將某部分任務分解給FPGA可以更好地一起完成任務。在這過程中也會有額外的開銷產生,在某些場合,可能用了FPGA反而效果更差也是有的。

另外,通常說的使用FPGA加速比CPU和GPU省電,是指在完成同樣的任務下,FPGA耗費的電力比起CPU和GPU更少一些。這是相對而言,並不是說FPGA本身就一定省電。

一個有趣的例子:陣列加法計算

知乎用戶doing舉了一個很有趣的例子。他指出,假設用FPGA完整實現了CPU,然後再跑軟體的話,的確比CPU慢。問題是FPGA不會那麼做,它會直指問題本質,解決問題。

例如,有兩個陣列,其中有256個32位元數。現在要把它們對應相加變成一個陣列,用CPU寫最快大概是這個樣子:

r[0] = a[0] + b[0];

r[1] = a[1] + b[1];

r[255] = a[255] + b[255];

當然也可能會這麼寫(在分支預測準確,指令快取不大的情況下可能更快):

for (int i = 0; i < 255; i++)

r[i] = a[i] + b[i];

對FPGA來說,也可以用上面相同的寫法,不同在於:

CPU是一個一個加法計算,而FPGA排好邏輯電路,在一個時脈週期內計算完畢。就算CPU主頻率比FPGA快100倍也趕不上。話說,後來CPU大量的增加SIMD指令,就有點這個意思,不過這相當於提供庫函數,沒那麼靈活。

FPGA的平行是真平行,CPU完全沒得比。CPU如果想平行最多也就是讓多個核心平行,但是對於大部分演算法實現來說,如上例,多個核心之間的同步調度開銷遠遠大於運算開銷,就算多個核心之間的調用開銷可以做的很小,一般CPU也就那幾個核心,而FPGA只要閘足夠,想平行幾路就可以平行幾路。

所以在執行可平行的運算密集型任務時,比如訊號處理,網路傳輸等FPGA可以幫上忙;但是如果執行常見的以串列為主的任務,FPGA的確遠遠比不上CPU。如果要類比的話,有點像似GPU和CPU之間的關係。

為什麼FPGA成為資料中心尖端技術?

最後再討論一個話題,就是為什麼FPGA一直是資料中心領域最尖端的技術?

有人可能認為,再大的問題(運算力)都可以透過堆疊CPU核心來解決。那麼,假設有一台強大的48核心伺服器,即使使用非常高階的FPGA,也很難達到相同的傳輸量。而且,FPGA硬體設計還需要由強大的團隊來完成,非常燒錢。

這時,如果把機會成本和能源效率兩者考慮進去,好處就開始顯現出來了。

首先來看能源效率。假設這台48核心伺服器的功耗為400W並且發熱嚴重,那麼就會對資料中心營運不利——能耗和散熱是資料中心營運的兩項最大支出。而將FPGA連接起來只執行一項任務,就可以實現很高的能效而開銷極低。透過正確的設計,可以在實現低功耗的同時獲得高傳輸量。

其次,機會成本(這個問題不太明顯)。系統中的CPU核心數量就那麼多,購買新的核心並且安裝需要花很長時間,而且最好是將通用CPU核心保留用於通用任務(例如虛擬機器訂閱),每個CPU核心賣不出去就會燒錢。而當有任務大量佔用CPU時間(例如AI推理)時,FPGA就成為了不的選擇。

有關微軟Project Catapult專案當中FPGA趣事

當年,微軟必應(Bing)團隊在其Project Catapult專案中發現,在啟用FPGA時,CPU的總體利用率實際上略有上升。所有的人都感到困惑,因為從直覺來看,FPGA應該要減少CPU負載。但是後來他們發現,資料中心的業務流量達到了原來的2倍,由於效率提高,流量實現了兩倍的負載均衡,由此可見FPGA的強大之處。

總結

維基百科的相關詞條提到兩點:FPGA的優勢在於其平行特性,有時對於某些應用而言可以使速度明顯變快;可以使用FPGA來對演算法中的某些部分加速,也可以在FPGA和通用處理器之間共用部分運算。

綜上,FPGA有兩個優點:FPGA平行度遠超CPU,CPU是通用電路,FPGA是客製電路。但是也有兩個缺點:開發週期長,並不是所有東西都適合FPGA。

本文原刊登於EDN China網站

 

掃描或點擊QR Code立即加入 “EETimes技術論壇” Line 群組 !

 EET-Line技術論壇-QR

發表評論