將浮點(diǎn)轉(zhuǎn)為定點(diǎn) 大幅降低功耗和成本
摘要
本文引用地址:http://2s4d.com/article/201809/389188.htm在數(shù)據(jù)中心、航空航天與軍用、5G 無線以及汽車等領(lǐng)域,客戶必須滿足高級(jí)駕駛員輔助 (ADAS)、雷達(dá)和深度學(xué)習(xí)等應(yīng)用中嚴(yán)峻的散熱、功耗和成本要求。
要實(shí)現(xiàn)這些目標(biāo),一種極為有效的方法是用定點(diǎn)數(shù)實(shí)現(xiàn)信號(hào)處理鏈。賽靈思FPGA 和 SoC 具備固有的可變精度支持,允許客戶輕松調(diào)整以適應(yīng)不斷演變的朝更低精度解決方案發(fā)展的這種行業(yè)趨勢。
賽靈思提供一種包含 Vivado® 高層次綜合 (HLS) 的工具流程,允許客戶方便地評(píng)估 C/C++ 設(shè)計(jì)的更低精度實(shí)現(xiàn)方案,諸如定點(diǎn)等。
簡介 :賽靈思支持的數(shù)據(jù)類型
賽靈思 All Programmable 器件和工具支持從二進(jìn)制到雙精度浮點(diǎn)在內(nèi)的多種數(shù)據(jù)類型。用定點(diǎn)實(shí)現(xiàn)的設(shè)計(jì)總是比用浮點(diǎn)實(shí)現(xiàn)的同一設(shè)計(jì)更加高效,因?yàn)槎c(diǎn)實(shí)現(xiàn)方案所占用的資源和消耗的功耗更少。若將設(shè)計(jì)遷移到定點(diǎn),功耗和占用面積縮減一半并不稀奇。
相較于浮點(diǎn),定點(diǎn)數(shù)據(jù)類型的優(yōu)勢包括 :
• 邏輯資源占用減少
• 功耗降低
• 材料成本降低
• 時(shí)延縮短
賽靈思所有器件均支持客戶采用浮點(diǎn)數(shù)據(jù)類型提供的動(dòng)態(tài)范圍,能實(shí)現(xiàn)高達(dá) 7.3TFLOPs 的單精度浮點(diǎn)DSP 性能。
業(yè)界領(lǐng)先的賽靈思工具套件提供浮點(diǎn)支持。Vivado® 高層次綜合 (HLS) [ 參考資料 1] 和 System Generator for DSP [ 參考資料 2] 本身均支持可變的浮點(diǎn)精度,包括半精度 (FP16)、單精度 (FP32) 和雙精度 (FP64) ;System Generator 還支持自定義精度,具備更大的靈活性。這些工具本身還支持可變定點(diǎn)數(shù)據(jù)類型。
表1 :賽靈思工具支持浮點(diǎn)和定點(diǎn)數(shù)據(jù)類型
注 :
1. System Generator for DSP 原本不支持 FP16,但支持自定義 FP16。
2. 浮點(diǎn)運(yùn)算符內(nèi)核支持 →定點(diǎn)到浮點(diǎn)轉(zhuǎn)換、浮點(diǎn)到定點(diǎn)轉(zhuǎn)換以及浮點(diǎn)到浮點(diǎn)的精度變換
賽靈思器件和工具均能支持可變精度數(shù)據(jù)類型,以便客戶能夠簡單、靈活地調(diào)整和適應(yīng)行業(yè)趨勢的變化,例如圖像分類只要求 INT8 或更低的定點(diǎn)計(jì)算,以保持可接受的推斷精度 [ 參考資料 3][ 參考資料 4]。
用于高計(jì)算強(qiáng)度工作負(fù)載的其他器件,例如 GPU,在傳統(tǒng)上其結(jié)構(gòu)決定了只能有效支持單精度浮點(diǎn)。這些廠商現(xiàn)在也開始重新設(shè)計(jì)產(chǎn)品,以應(yīng)對(duì)趨勢的變化。賽靈思的可擴(kuò)展架構(gòu)允許客戶調(diào)整信號(hào)處理鏈的精度,以便滿足日新月異的行業(yè)需求。
當(dāng)選擇實(shí)現(xiàn)浮點(diǎn)還是定點(diǎn)信號(hào)處理鏈時(shí),客戶必須在功耗、成本、生產(chǎn)力和精度之間仔細(xì)權(quán)衡。
賽靈思靈活的 DSP48E2 Slice 可使用所有數(shù)據(jù)類型進(jìn)行重要的 DSP 計(jì)算。當(dāng)實(shí)現(xiàn)新的定點(diǎn)設(shè)計(jì)或針對(duì)某些應(yīng)用(適用浮點(diǎn)到定點(diǎn)轉(zhuǎn)換)將現(xiàn)有設(shè)計(jì)從浮點(diǎn)轉(zhuǎn)換成定點(diǎn)時(shí),DSP Slice 與賽靈思工具集相結(jié)合能夠帶來巨大優(yōu)勢和靈活性 [ 參考資料 5]。
對(duì)于采用 C/C++ 語言設(shè)計(jì)的客戶,賽靈思提供 Vivado HLS 并支持任意精度定點(diǎn)數(shù)據(jù)類型,使客戶能夠方便地采用定點(diǎn)進(jìn)行設(shè)計(jì)或者將現(xiàn)有的 C/C++ 設(shè)計(jì)轉(zhuǎn)換成定點(diǎn)。
浮點(diǎn)轉(zhuǎn)換為定點(diǎn)的優(yōu)勢
對(duì)于目前幾乎所有的設(shè)計(jì),最小化功耗是需要優(yōu)先處理的問題。大多數(shù)應(yīng)用產(chǎn)品必須首先滿足嚴(yán)格的功耗和散熱范圍要求,才能投產(chǎn)。
普遍接受的一個(gè)原則是,浮點(diǎn)設(shè)計(jì)較之低精度設(shè)計(jì)而言,功耗更大 [ 參考資料 6][ 參考資料 7]。這對(duì)FPGA 來說也一樣,其中的浮點(diǎn) DSP 模塊已被硬化在 FPGA 中,另外客戶必須使用提供的 DSP 資源和其它 FPGA 資源來實(shí)現(xiàn)軟解決方案。浮點(diǎn)方案與同等的定點(diǎn)解決方案相比需占用更多的 FPGA 資源。資源占用增多,功耗隨之增大,最終會(huì)增加設(shè)計(jì)實(shí)現(xiàn)的總成本。
將浮點(diǎn)設(shè)計(jì)轉(zhuǎn)換為定點(diǎn)設(shè)計(jì)有助于滿足嚴(yán)格的規(guī)范,具體體現(xiàn)在以下幾個(gè)方面 :
減少 FPGA 資源占用
○ 使用定點(diǎn)數(shù)據(jù)類型時(shí),所需的 DSP48E2、查找表 (LUT) 和觸發(fā)器更少。
○ 存儲(chǔ)定點(diǎn)數(shù)字所需的存儲(chǔ)容量更小。
• 功耗更低
○ 減少 FPGA 資源利用自然就會(huì)降低功耗。
• 材料成本降低
○ 設(shè)計(jì)人員可利用額外的資源以相同成本在應(yīng)用中實(shí)現(xiàn)附加功能。
○ 資源的節(jié)約能大幅提升 FPGA 的計(jì)算能力。計(jì)算能力的提升可以讓很多應(yīng)用受益,例如機(jī)器學(xué)習(xí)
DNN。
○ 資源的節(jié)省還可能減小設(shè)計(jì)所需的器件尺寸。
• 降低時(shí)延
○ 當(dāng)實(shí)現(xiàn) FIR 時(shí)減少所用的資源,尤其是減少 DSP48E2 Slice 的占用,能降低定點(diǎn)設(shè)計(jì)的時(shí)延。
• 相近的性能和精度
○ 對(duì)于不需要用浮點(diǎn)實(shí)現(xiàn)動(dòng)態(tài)范圍的設(shè)計(jì)和應(yīng)用,定點(diǎn)方案能提供相近的結(jié)果和精度。 有些情況
下,結(jié)果甚至更好。
過去由于缺乏工具支持,難以將設(shè)計(jì)從浮點(diǎn)轉(zhuǎn)換為定點(diǎn)。對(duì)于針對(duì)賽靈思 All Programmable 器件的 C/C++ 開發(fā)人員來說,可使用 Vivado HLS 減少轉(zhuǎn)換過程中遇到的挑戰(zhàn)。
這種轉(zhuǎn)換能帶來多種優(yōu)勢,在適用情況下應(yīng)認(rèn)真考慮——尤其是不需要利用浮點(diǎn)來實(shí)現(xiàn)動(dòng)態(tài)范圍和浮點(diǎn)精度的設(shè)計(jì),而且很小的可預(yù)見的精度損失不會(huì)在部署后的應(yīng)用中導(dǎo)致無效性。
實(shí)例 :將浮點(diǎn) FIR 濾波器轉(zhuǎn)換為定點(diǎn)
Vivado HLS 中簡單的 FIR 濾波器設(shè)計(jì) [ 參考資料 8] 可用來展示浮點(diǎn) FIR 設(shè)計(jì)轉(zhuǎn)換為定點(diǎn)設(shè)計(jì)如何減少所用資源和功耗并實(shí)現(xiàn)相近的結(jié)果精度。
單精度浮點(diǎn) FIR
在 C++ FIR 函數(shù)代碼中,頂層函數(shù)將 FIR.h 報(bào)頭文件中找到的類 CFir 文件 (class CFir) 實(shí)例化。
CFir 類 (CFir class) 是主要的 FIR 算法,在報(bào)頭文件 FIR.h 中定義。
此函數(shù)包含重要的 ARRAY_PARTITION 編譯指示,以確保設(shè)計(jì)的所有實(shí)現(xiàn)方案都是 II=1 (迭代間隔為1)[ 參考資料 9]。PIPELINE 編譯指示也被應(yīng)用到頂層函數(shù)調(diào)用。
這些編譯指示、并行產(chǎn)品實(shí)現(xiàn)以及用于執(zhí)行累加的加法器樹,能夠在整個(gè) FIR 函數(shù)中確保最低時(shí)延(無論數(shù)據(jù)類型如何),同時(shí)保持 II = 1。
在 fp_FIR 函數(shù)中,fp_coef_t、fp_data_t 和 fp_acc_t 都被定義為浮點(diǎn)類型,即 C++ 默認(rèn)的單精度浮點(diǎn)數(shù)據(jù)類型。
通過報(bào)頭文件中的 include 命令加載濾波器系數(shù)
用系數(shù)創(chuàng)建一個(gè)對(duì)稱 FIR 濾波器,但本例中,未使用 DSP48E2 Slice 中的預(yù)加法器。如果使用預(yù)加法器,會(huì)實(shí)現(xiàn)更高效率。
以下是針對(duì) 85 抽頭 FIR 濾波器得到的結(jié)果,在 Vivado HLS 中運(yùn)行 C 綜合與實(shí)現(xiàn),并采用 XCVU9P2FLGB2104 器件上的 400MHz 時(shí)鐘(2.5ns 時(shí)鐘周期)。見表 2。
表 2 :單精度浮點(diǎn) FIR 的實(shí)現(xiàn)后結(jié)果
本例中,需要 423 個(gè) DSP48E2 以及約 23,000 個(gè) LUT 來實(shí)現(xiàn)單精度浮點(diǎn) FIR。實(shí)現(xiàn)后,時(shí)延為 91 個(gè)時(shí)鐘周期,F(xiàn)MAX 為 500MHz(遠(yuǎn)遠(yuǎn)高于 400MHz 的目標(biāo))。
轉(zhuǎn)換到定點(diǎn) FIR 濾波器
為實(shí)現(xiàn)最高 DSP 效率,浮點(diǎn)到定點(diǎn)的轉(zhuǎn)換必須考慮 DSP Slice 的總線寬度,即 27x18 位乘法器和 48 位累加器。將總線寬度進(jìn)一步縮減到到設(shè)計(jì)允許的最低水平,從而盡可能減少資源占用和功耗。
針對(duì)這個(gè) FIR 濾波器實(shí)例,定義以下定點(diǎn)數(shù)據(jù)類型以匹配 DSP48E2 Slice 中的總線大小,即 18 位系數(shù)中1 個(gè)整數(shù)位和 17 個(gè)小數(shù)位 ;27 位數(shù)據(jù)中 15 個(gè)整數(shù)位和 12 個(gè)小數(shù)位 ;以及 48 位累加器中 19 個(gè)整數(shù)位和29 個(gè)小數(shù)位。
要使用 Vivado HLS 固有的 ap_fixed 數(shù)據(jù)類型,必須包含 ap_fixed.h 報(bào)頭文件,以定義任意定點(diǎn)數(shù)據(jù)類型 [ 參考資料 9]。
再次采用 400MHz 時(shí)鐘(2.5ns 時(shí)鐘周期)和 XCVU9P-2FLGB2104 器件,定點(diǎn) FIR 設(shè)計(jì)的 C 綜合與實(shí)現(xiàn)產(chǎn)生的結(jié)果如表 3 所示。
表 3 :比較兩種設(shè)計(jì)的實(shí)現(xiàn)后結(jié)果
正如結(jié)果顯示的那樣,重視時(shí)延和 FPGA 資源利用率,能獲得明顯的改進(jìn)。
在 UltraScale 架構(gòu)中,通過將多個(gè) DSP48E2 Slice 級(jí)聯(lián),必要時(shí)仍可支持更高總線寬度。采用級(jí)聯(lián)DSP48E2 Slice 的定點(diǎn)設(shè)計(jì),與浮點(diǎn)方案相比仍可顯著減少資源占用和功耗。
比較濾波器精度
在 System Generator for DSP 中使用 Vivado HLS 模塊(來自賽靈思模塊集),在 MATLAB®/Simulink®環(huán)境中比較 FIR 濾波器的兩種實(shí)現(xiàn)方案。見圖 1。
圖 1 :System Generator for DSP 模型 - 使用兩種 HLS 解決方案進(jìn)行分析
System Generator 模型由兩個(gè) Vivado HLS 模塊構(gòu)成,都經(jīng)過配置以包含來自 Vivado HLS 的單精度浮點(diǎn) (FP32) 和定點(diǎn) FIR 解決方案。兩個(gè)模塊具有相同的輸入和離散脈沖信號(hào),然后在 Simulink 示波器上比較每個(gè) FIR 的輸出。見圖 2。
圖 2 :System Generator 中兩個(gè) HLS 設(shè)計(jì)的輸出
為了方便比較輸出,有必要延遲定點(diǎn)結(jié)果,以按照兩種解決方案之間的時(shí)延差進(jìn)行對(duì)比。
正如預(yù)期的那樣,兩種 FIR 濾波器產(chǎn)生的結(jié)果幾乎相同,差異很小。
為進(jìn)一步分析信號(hào),將兩個(gè)輸出相減。得到的信號(hào)表明精度損失非常小,處在如圖 3 所示頻譜分析圖中的 -100dBm 至 -160dBm 范圍。
圖 3 :兩個(gè)輸出差的 dB 圖
關(guān)鍵優(yōu)勢
當(dāng)把原始單精度浮點(diǎn) FIR 濾波器的結(jié)果與轉(zhuǎn)換后定點(diǎn) FIR 濾波器的結(jié)果進(jìn)行比較時(shí),發(fā)現(xiàn)定點(diǎn)設(shè)計(jì)不僅減少了資源占用 , 降低了時(shí)延,同時(shí)還能保持甚至提高設(shè)計(jì)的最大頻率 (FMAX) 。見圖 4。
圖 4 :定點(diǎn) - 性能相近,并減少時(shí)延、資源占用和功耗
大大減少 FPGA 資源占用
本例中的定點(diǎn) FIR 所占資源不足原始浮點(diǎn) FIR 的五分之一。
選擇總線寬度,實(shí)現(xiàn)到硬件中 DSP48E2 slice 的最佳映射。這樣允許每次相乘都在一個(gè) DSP48E2 Slice 中完成,并針對(duì) 85 個(gè)系數(shù)并行完成。這將 DSP48E2 Slice 的使用量減小至浮點(diǎn)解決方案的 20%。
實(shí)現(xiàn) FPGA 架構(gòu)中 LUT 的大幅節(jié)省(約 90%),因?yàn)樵诙c(diǎn)方案中,無需額外的 LUT 來構(gòu)建浮點(diǎn)運(yùn)算。
如果一個(gè)設(shè)計(jì)有 10 個(gè) FIR 濾波器,預(yù)計(jì)功耗會(huì)隨設(shè)計(jì)而擴(kuò)展。表 4 顯示了 10 FIR 濾波器設(shè)計(jì)的單精度和定點(diǎn)實(shí)現(xiàn)方案的 XCVU9P FPGA 資源占用。當(dāng)將單精度浮點(diǎn)的資源占用與定點(diǎn)實(shí)現(xiàn)方案進(jìn)行對(duì)比時(shí),會(huì)看到明顯的差異。
表 4 :兩種數(shù)據(jù)類型 10 FIR 濾波器所使用的資源
顯著的資源節(jié)省能實(shí)現(xiàn)多種優(yōu)勢,為設(shè)計(jì)人員帶來深遠(yuǎn)的影響,有助于他們改進(jìn)設(shè)計(jì)特性集、設(shè)計(jì)功耗、設(shè)計(jì)性能和設(shè)計(jì)成本。
實(shí)現(xiàn)顯著的功耗節(jié)省
顯著的資源節(jié)省能夠相應(yīng)地降低功耗量。
將本白皮書中單個(gè) FIR 濾波器的兩種實(shí)現(xiàn)方案的功耗估算結(jié)果進(jìn)行比較,發(fā)現(xiàn)定點(diǎn) FIR 的功耗減少1.4W。兩種方案中,器件的靜態(tài)功耗都是略高于 3W,單個(gè)單精度浮點(diǎn) FIR 設(shè)計(jì)的總功耗為 4.7W。這表明該設(shè)計(jì)的動(dòng)態(tài)功耗節(jié)省 80% 以上,定點(diǎn) FIR 功耗為 3.3W。
再看看 10 FIR 濾波器設(shè)計(jì),可利用賽靈思功耗估算器 (XPE) 和表 4 中的資源來獲得兩種實(shí)現(xiàn)方案的功耗估算結(jié)果。圖 5 對(duì)節(jié)省效果進(jìn)行了比較。
圖 5 :10 FIR 濾波器實(shí)例 :利用定點(diǎn)實(shí)現(xiàn)顯著的功耗節(jié)約
這個(gè) 10 FIR 濾波器實(shí)例中,把設(shè)計(jì)轉(zhuǎn)換成定點(diǎn)數(shù)據(jù)類型后,總功耗節(jié)省 70%。如果設(shè)計(jì)具有大量浮點(diǎn)信號(hào)處理,需占用大量 FPGA 資源,則通過將部分或全部浮點(diǎn)信號(hào)處理鏈轉(zhuǎn)換成定點(diǎn),能夠?qū)崿F(xiàn)巨大的功耗節(jié)省。
削減材料成本
將浮點(diǎn)設(shè)計(jì)轉(zhuǎn)換成定點(diǎn)方案,能大大減少 FPGA 資源占用。FPGA 資源的削減能降低材料成本。通過三種方法來實(shí)現(xiàn)。
1 可利用最新可用的 FPGA 資源來增加應(yīng)用特性集。
2 由于所用 FPGA 資源大量減少以及通過數(shù)據(jù)路徑提高 FMAX,因此 FPGA 的總體計(jì)算能力顯著提高。
3 由于所需 FPGA 資源減少,因此設(shè)計(jì)可遷移到更小型的賽靈思 FPGA 中。
相近的精度
通過比較單個(gè) FIR 濾波器設(shè)計(jì)兩種實(shí)現(xiàn)方案的輸出,會(huì)發(fā)現(xiàn)定點(diǎn)實(shí)現(xiàn)方案提供相近的濾波器精度,精度損失僅為 -100dBm 至 -160dBm,同時(shí)能降低功耗和成本。
然而,定點(diǎn)方案無法獲得相同的動(dòng)態(tài)范圍,導(dǎo)致設(shè)計(jì)中出現(xiàn)可預(yù)測的精度損失。對(duì)于很多設(shè)計(jì)來說這不成問題,因?yàn)橹恍枰畹蜆?biāo)準(zhǔn)的精度。與單個(gè) FIR 實(shí)例類似,這類設(shè)計(jì)很適合轉(zhuǎn)換為定點(diǎn)。
對(duì)于需要更大精度值的設(shè)計(jì),有時(shí)可將信號(hào)處理鏈中的中間值從浮點(diǎn)轉(zhuǎn)換為定點(diǎn)。這種方案使設(shè)計(jì)人員能夠?qū)⒃O(shè)計(jì)的特定部分(而非全部)轉(zhuǎn)換為定點(diǎn)。最終,這使設(shè)計(jì)人員能夠在需要時(shí)保持動(dòng)態(tài)范圍,確保維持?jǐn)?shù)據(jù)路徑的精度,同時(shí)充分發(fā)揮定點(diǎn)實(shí)現(xiàn)方案帶來的部分優(yōu)勢。
降低時(shí)延
對(duì)于單個(gè) FIR 設(shè)計(jì)實(shí)例,可通過濾波器降低時(shí)延——定點(diǎn)實(shí)現(xiàn)方案為 12 個(gè)時(shí)鐘周期,浮點(diǎn)設(shè)計(jì)為 91 個(gè)時(shí)鐘周期。隨著資源用量減少,尤其是 DSP48E2 Slice 減少,有望降低時(shí)延。
除了降低時(shí)延,在單個(gè) FIR 實(shí)例中,還能提升 FMAX,實(shí)現(xiàn)之后能將 FMAX 提升 16%。
結(jié)論
賽靈思 All Programmable 器件和工具支持多種數(shù)據(jù)類型,包括多種精度的浮點(diǎn)和定點(diǎn)。使用浮點(diǎn)的設(shè)計(jì)與使用定點(diǎn)的同一設(shè)計(jì)相比,資源用量和功耗都要更高,無論針對(duì) FPGA 還是其他架構(gòu)(例如 GPU)都是如此。
某些應(yīng)用領(lǐng)域已開始放棄浮點(diǎn)數(shù)據(jù)類型,例如深度學(xué)習(xí)推斷工作負(fù)載會(huì)盡可能多地使用 INT8 或更低精度,這已經(jīng)成為明顯的行業(yè)趨勢。
如今的設(shè)計(jì)環(huán)境極富挑戰(zhàn),散熱和功耗要求越來越難以滿足,因此,設(shè)計(jì)人員必須評(píng)估所有可能的方法來降低功耗。其中一種選擇就是將浮點(diǎn)設(shè)計(jì)轉(zhuǎn)換為定點(diǎn)。
如果是使用 C/C++,Vivado HLS 等賽靈思工具有助于簡化轉(zhuǎn)換過程。
設(shè)計(jì)人員必須對(duì)定點(diǎn)數(shù)據(jù)類型的轉(zhuǎn)換進(jìn)行充分權(quán)衡,并充分理解這樣做所能帶來的巨大優(yōu)勢。
繼續(xù)使用浮點(diǎn)是通向市場的捷徑,但是成本高。投入時(shí)間和精力轉(zhuǎn)換成定點(diǎn),這樣能夠降低資源使用量、成本和功耗,而且性能損失很小,從而獲得巨大優(yōu)勢。
評(píng)論