《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 其他 > FPGA教學(xué)——為什么FPGA主頻比CPU慢,,但卻可以用來幫CPU加速,?

FPGA教學(xué)——為什么FPGA主頻比CPU慢,,但卻可以用來幫CPU加速,?

2022-08-23
來源:FPGA之家
關(guān)鍵詞: FPGA CPU

  我們知道,,FPGA的頻率一般只有幾百MHz,,而CPU的頻率卻高達(dá)數(shù)GHz,。那么,,有不少網(wǎng)友心中就有一個疑問:“為什么FPGA主頻比CPU慢,,但卻可以用來幫CPU做加速?”,。

  今天,EDN就和大家系統(tǒng)性地討論下這個問題,。

  將FPGA主頻與CPU相比不妥

  在開始之前,,首先要明確一點,將FPGA的主頻與CPU比較,,實際是風(fēng)馬牛不相及的問題,。FPGA和CPU是兩種完全不同的器件,前者是專用,,是硬件編程,,而后者是通用,是軟件編程,。

  微信圖片_20220823164532.png

  不同體系結(jié)構(gòu)性能和靈活性的比較,。(圖片來源:《如何評價微軟在數(shù)據(jù)中心使用 FPGA 代替?zhèn)鹘y(tǒng) CPU 的做法?》)

  表面上看,F(xiàn)PGA的時鐘頻率要低;對于通用計算任務(wù),,F(xiàn)PGA設(shè)計貌似不如CPU設(shè)計,。但是實際上,單個FPGA的并行度卻比CPU要高得多,。FPGA的行為是確定性的,,用作硬件加速器沒有時間片、線程或資源沖突的問題,。它始終以完全相同的速度執(zhí)行一件事。因此,,如果需要低延遲,,那么FPGA就可能是最佳選擇,。

  微信圖片_20220823164615.png

  計算密集型任務(wù),CPU,、GPU,、FPGA、ASIC 的數(shù)量級比較(以16位整數(shù)乘法為例,,數(shù)字僅為數(shù)量級的估計)(圖片來源:《如何評價微軟在數(shù)據(jù)中心使用 FPGA 代替?zhèn)鹘y(tǒng) CPU 的做法?》)

  FPGA并行計算機(jī)制

  如知乎網(wǎng)友young cc所言,,雖然CPU主頻很高,但其是通用處理器,,做某個特定運算(如信號處理,,圖像處理)可能需要很多個時鐘周期。而FPGA可以通過編程重組電路,,直接生成專用電路,。加上電路并行性,可能做這個特定運算只需要一個時鐘周期,。

  舉例來說,,CPU主頻為3GHz,F(xiàn)PGA主頻為200MHz,。若做某個特定運算,,CPU需要30個時鐘周期,而FPGA只需一個,,那么耗時情況是:

  CPU:30/3GHz =10ns;

  FPGA:1/200MHz =5ns,。

  可以看到,F(xiàn)PGA做這個特定運算速度比CPU塊,,能幫助加速,。

  另外,CPU的主頻是加過流水線之后的,。比如是15級流水線,,則第一條指令執(zhí)行了15個時鐘周期后才能出結(jié)果。

  但是,,使用FPGA也不一定總能做加速,。

  例如,知乎網(wǎng)友Evan172就表示,,使用FPGA做加速,,只是在某些強(qiáng)計算和數(shù)據(jù)處理的方面,因為其硬件電路并行運行和有很多DSP硬核資源供調(diào)用的特點,,可以工作得更出色,。

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

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

  一個有趣的例子:數(shù)組加法計算

  知乎用戶doing舉了一個很有趣的例子。他指出,,假設(shè)用FPGA完整實現(xiàn)了CPU,,然后再跑軟件的話,的確比CPU慢,。問題是FPGA不會那么干,,它會直指問題本質(zhì),解決問題,。

  例如,,有兩個數(shù)組,其中有256個32位數(shù)?,F(xiàn)在要把它們對應(yīng)相加變成一個數(shù)組,,用CPU寫最快大概是這個樣子:

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

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

  ...

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

  當(dāng)然也可能會這么寫(在分支預(yù)測準(zhǔn)確,指令緩存不大的情況下可能更快):

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

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

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

  CPU是一個一個加法計算,而FPGA排好邏輯電路,,在一個時鐘周期內(nèi)計算完畢,。就算CPU主頻比FPGA快100倍也趕不上啊。話說后來CPU大量的增加SIMD指令,,就有點這個意思,,不過這相當(dāng)于提供庫函數(shù),沒那么靈活,。

  FPGA的并行是真并行,,CPU完全沒得比。CPU如果想并行最多也就是讓多個核并行,,但是對于大部分算法實現(xiàn)來說,,如上例,多個核之間的同步調(diào)度開銷遠(yuǎn)遠(yuǎn)大于計算開銷,就算多個核之間的調(diào)用開銷可以做的很小,,一般CPU也就那幾個核,,而FPGA只要門足夠,想并行幾路就可以并行幾路,。

  所以在做可并行的計算密集型任務(wù)時,比如信號處理,,網(wǎng)絡(luò)傳輸?shù)鹊菷PGA可以幫上忙;但是如果做常見的以串行為主的任務(wù),,F(xiàn)PGA的確遠(yuǎn)遠(yuǎn)比不上CPU。如果要類比的話,,有點像似GPU和CPU之間的關(guān)系,。

  “當(dāng)年寫Verilog的時候,我就想如果CPU里面自帶一塊FPGA,,應(yīng)用程序程序可以在初始化期間直接燒一段代碼下去,,那豈不是很爽。后來,,有了能寫shader的3D顯卡...”

  為什么FPGA成為數(shù)據(jù)中心尖端技術(shù)?

  最后再討論一個話題,,就是為什么FPGA一直是數(shù)據(jù)中心領(lǐng)域最尖端的技術(shù)?

  有人可能認(rèn)為,再大的問題(算力)都可以通過堆CPU核心來解決,。那么,,假設(shè)有一臺強(qiáng)大的48核服務(wù)器,即使使用非常高端的FPGA,,也很難達(dá)到相同的吞吐量,。而且,F(xiàn)PGA硬件設(shè)計還需要由強(qiáng)大的團(tuán)隊來完成,,非常燒錢,。

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

  首先來看能源效率。假設(shè)這臺48核服務(wù)器的功耗為400W并且發(fā)熱嚴(yán)重,,那么就會對數(shù)據(jù)中心運營不利——能耗和散熱是數(shù)據(jù)中心運營的兩項最大支出,。而將FPGA連接起來只執(zhí)行一項任務(wù),就可以實現(xiàn)很高的能效而開銷極低,。通過正確的設(shè)計,,可以在實現(xiàn)低功耗的同時獲得高吞吐量。

  其次,,機(jī)會成本(這個問題不太明顯),。系統(tǒng)中的CPU內(nèi)核數(shù)量就那么多。購買新的內(nèi)核并且安裝需要花很長時間,而且最好是將通用CPU內(nèi)核保留用于通用任務(wù)(例如虛擬機(jī)訂閱),。每個CPU核賣不出去就會燒錢,。

  當(dāng)有任務(wù)大量占用CPU時間(例如AI推理)時,F(xiàn)PGA就成為了不錯的選擇,。

  一個有關(guān)微軟Project Catapult項目當(dāng)中FPGA的趣事

  當(dāng)年,,微軟必應(yīng)團(tuán)隊在其Project Catapult項目中發(fā)現(xiàn),在啟用FPGA時,,CPU的總體利用率實際上略有上升,。所有的人都感到困惑,因為從直覺來看FPGA應(yīng)該要減少CPU負(fù)載,。但是后來他們發(fā)現(xiàn),,數(shù)據(jù)中心的業(yè)務(wù)流量達(dá)到了原來的2倍!由于效率提高,流量實現(xiàn)了兩倍的負(fù)載均衡,。由此可見FPGA的強(qiáng)大之處,。

  總結(jié)

  維基百科的相關(guān)詞條提到兩點:FPGA的優(yōu)勢在于其并行特性,有時對于某些應(yīng)用而言可以使速度明顯變快;可以使用FPGA來對算法中的某些部分加速,,也可以在FPGA和通用處理器之間共享部分計算,。

  綜上,F(xiàn)PGA有兩個優(yōu)點:FPGA并行度遠(yuǎn)超CPU;CPU是通用電路,,F(xiàn)PGA是定制電路,。但是也有兩個缺點:開發(fā)周期長;并不是所有東西都適合FPGA。

更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<

微信圖片_20210517164139.jpg

  作者:趙明燦

   本文來源于EDN電子技術(shù)設(shè)計



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