袁海英,曾智勇,成君鵬
(北京工業(yè)大學(xué)信息學(xué)部,北京 100124)
隨著深度學(xué)習(xí)技術(shù)不斷突破[1],卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)成為圖像識別[2]、視頻跟蹤、目標(biāo)檢測和信息處理等人工智能應(yīng)用領(lǐng)域的主流算法之一[3].網(wǎng)絡(luò)性能提升涉及到龐大的參數(shù)量與計算量,由此帶來過高的資源開銷和計算開銷.為了高效加速CNN 模型運(yùn)算過程,基于FPGA 的加速器以其高能量利用率和可重構(gòu)性而備受業(yè)界關(guān)注[4,5].OPU[6]和Caffine[7]等采用的矩陣式運(yùn)算單元以并行度高與數(shù)據(jù)復(fù)用能力強(qiáng)等優(yōu)勢成功應(yīng)用于許多加速器中.通過合理利用激活的稀疏性,在不降低運(yùn)算精度情況下加速卷積運(yùn)算過程[8,9].隨著CNN 模型的深入研究,許多工作意識到在卷積模型中各個卷積層的尺寸相差過大是限制加速器性能提升的原因之一[10].為此,本文提出了一種具有靈活并行度的稀疏CNN 加速器(Sparsity-aware Accelerator with Flexible Parallelism,SAFP),主要貢獻(xiàn)概括為:
1.基于FPGA 設(shè)計了一種具有三個并行度參數(shù)的稀疏CNN 加速器,其中兩個可以在線配置,保證所有卷積層的高效運(yùn)算.
2.應(yīng)用了一種output-based 的并行任務(wù)劃分方法和稀疏數(shù)據(jù)流,最大限度地利用了二維矩陣結(jié)構(gòu)的乘累加陣列.
3.針對輸出激活的并行運(yùn)算,設(shè)計了一種優(yōu)化的片上數(shù)據(jù)并行傳輸方法,降低加速器對傳輸帶寬的依賴.
研究表明:本文提出的加速器減少了網(wǎng)絡(luò)碎片化影響,提升了CNN 中卷積層運(yùn)算效率.加速器歸一化性能達(dá)到794.63 GOP/s,遠(yuǎn)超過未進(jìn)行稀疏化處理的最高運(yùn)算性能.
CNN 通過多層卷積運(yùn)算從多個抽象級別上提取圖片特征[11,12].考慮到CNN 網(wǎng)絡(luò)的運(yùn)算量主要來自卷積層[13],因此對卷積層運(yùn)算進(jìn)行加速可以有效提高推理速度[14].卷積運(yùn)算過程如圖1所示.
圖1 卷積映射示意圖
將Chin 張大小為h_in×w_in 輸入圖像與Chout 個卷積核進(jìn)行卷積運(yùn)算,輸入特征圖中卷積核的滑窗每次移動都會計算出一個輸出激活像素,將輸入圖像映射為Chout張大小為h_out×w_out輸出圖像.
層與層之間通常采用非線性函數(shù)來避免相鄰兩層卷積運(yùn)算融合成一次運(yùn)算[15].ReLu 函數(shù)的非線性處理會帶來大量0 輸出.業(yè)界對其進(jìn)行了一系列優(yōu)化.Cnvlutin[9]可以跳過0 激活所參與的運(yùn)算周期來減少運(yùn)算負(fù)載.然而,這種結(jié)構(gòu)在應(yīng)對CNN 不同卷積層運(yùn)算時出現(xiàn)較明顯的碎片化問題,從而導(dǎo)致具有較高并行運(yùn)算資源的Cnvlutin在應(yīng)對較小卷積層時運(yùn)算效率低下.
本文提出的SAFP 架構(gòu)將一個完整的運(yùn)算結(jié)構(gòu)切分成多個運(yùn)行獨(dú)立輸出激活的運(yùn)算簇(cluster),上述操作相當(dāng)于增加了一個并行維度.此外,深入探究了加速器不同并行維度之間的數(shù)據(jù)關(guān)系,由此減少卷積運(yùn)算對片外通信帶寬的依賴.
CNN 中的數(shù)據(jù)流決定了卷積運(yùn)算在硬件結(jié)構(gòu)上的平鋪展開方式,本文提出基于多任務(wù)劃分的數(shù)據(jù)流,大大降低運(yùn)算性能對卷積層尺寸的敏感性.
為了實(shí)現(xiàn)加速器的通用性,對于卷積網(wǎng)絡(luò)的不同層通常采用相同的數(shù)據(jù)流動方式.這限制了運(yùn)算效率提升,當(dāng)輸入通道較小時,會有大量輸入通道的運(yùn)算模塊閑置.如果在輸入通道較小的卷積層中調(diào)用輸入通道并行度上的運(yùn)算模塊去計算不同的輸出激活,則能保證運(yùn)算效率.對輸出激活并行運(yùn)算實(shí)際上是將一個特征圖卷積運(yùn)算拆分成多個并行運(yùn)行任務(wù).圖2 所示的w_in×h_in 輸入特征圖被Tp個任務(wù)映射為w_out×h_out/Tp的輸出特征圖.設(shè)k為卷積核大小,stride 為跨步,pad 為padding 大小,則每一個任務(wù)依賴尺寸為w_in×((h_out/Tp-1)×stride+k-2×pad)的輸入特征圖,其中w_in×(k-stride)的特征圖為兩個任務(wù)所共享.
圖2 任務(wù)劃分
受限于硬件資源,無法使每個計算單元都擁有運(yùn)行獨(dú)立任務(wù)的能力.本文將獨(dú)立運(yùn)行一個任務(wù)的數(shù)個運(yùn)算單元(Computing Unit,CU)的集合定義為cluster,CU 實(shí)現(xiàn)所有輸出通道的并行度Tn和1個輸入通道的并行度.整個加速器具有Tm個CU.每個cluster 私有一個輸出緩存用來隔離不同的任務(wù)輸出.定義Dtm=ceil(ceil(Chin/Tn)/Tm),其中ceil()為向上取整函數(shù).
當(dāng)Dtm等于1時,Tp為1;當(dāng)Dtm不等于1時,任務(wù)并行度Tp的配置算法描述在圖3 中.采用該算法求出Tp值為2的指數(shù),這種不連續(xù)的可配置參數(shù)極大地簡化了加速器的控制邏輯結(jié)構(gòu).
圖3 計算任務(wù)并行度Tp的偽代碼段
算法1實(shí)現(xiàn)了多任務(wù)并行運(yùn)算的數(shù)據(jù)流,將運(yùn)算平鋪到由Tm個CU 組成的Tm×Tn乘累加(Multiplication and Accumulation,MAC)陣列上.第2 層循環(huán)將整個運(yùn)算分成Tp個并行任務(wù).由于并行任務(wù)在輸出特征圖上進(jìn)行劃分,每個運(yùn)算區(qū)域中Tm/Tp個CU運(yùn)算一個任務(wù)的不同輸入通道,這些運(yùn)算之間互不干擾.由于輸出通道的運(yùn)算相對獨(dú)立,其運(yùn)算只對k*k大小的激活和權(quán)重區(qū)域存在數(shù)據(jù)依賴,故該運(yùn)算被平鋪到CU 中Tn個MAC 上.判斷語句的外層循環(huán)中的數(shù)據(jù)流以stripe=Tn為單位流動,在這種大粒度控制情況下,激活-權(quán)重的鏈接不受到非結(jié)構(gòu)化稀疏的影響.判斷語句生成非0 激活相對于stripe 的位置指針off,利用該指針尋址到對應(yīng)權(quán)重位置,從而允許數(shù)據(jù)流跳過0激活.
多任務(wù)劃分僅影響到每個子任務(wù)的數(shù)據(jù)起點(diǎn),故每個CU執(zhí)行相同的數(shù)據(jù)流形式.
圖4 為加速器架構(gòu)頂層視圖.在運(yùn)算時由CPU 向配置寄存器寫入加速器的運(yùn)行參數(shù).AXI 總線將讀命令發(fā)生器的請求發(fā)送到片外存儲器.數(shù)據(jù)分配器接收來自AXI 總線的數(shù)據(jù)并將其分配給不同cluster 進(jìn)行卷積運(yùn)算.Cluster的輸出進(jìn)入到加法樹中.加法樹的輸出進(jìn)入數(shù)據(jù)路由模塊,它根據(jù)Tp值設(shè)置成不同的輸出緩存連接方式.最后由一個仲裁器將不同的輸出緩存寫回片外緩存中.為了使多任務(wù)的運(yùn)算輸出重新耦合成單任務(wù)的運(yùn)算輸入,仲裁器根據(jù)不同輸出激活所屬cluster的物理位置來配置輸出地址.
圖4 加速器架構(gòu)頂層視圖
作為卷積運(yùn)算的最小單元,圖5所示CU結(jié)構(gòu)完成稀疏激活的感知和運(yùn)算.稀疏激活感知器(Sparse Perception,SP)從激活緩存(Activation Buffer,AB)內(nèi)提取Tn個激活中的非零值及其對應(yīng)stripe的偏移值,緩存在非0緩存nz_buf 中.nz_buf 中的偏移值送入權(quán)重緩存(Weight Buffer,WB)進(jìn)行權(quán)重尋址,得到Tn個輸出通道的權(quán)重,將其與對應(yīng)非0激活在Tn個MAC中進(jìn)行乘累加運(yùn)算.
圖5 CU結(jié)構(gòu)
4.1.1 片上數(shù)據(jù)傳輸
在運(yùn)行多任務(wù)時,數(shù)據(jù)的并行傳輸可以減少重復(fù)傳輸,故有必要分析片上緩存數(shù)據(jù)的一致性.以Tp=4、Tm=8為例的片上數(shù)據(jù)存儲方式如圖6所示.該例共有4個任務(wù),每個任務(wù)被分配到Tm/Tp=2 個CU 中.每個CU運(yùn)行不同輸入通道的卷積運(yùn)算,相鄰的兩個CU 運(yùn)行一個任務(wù).由于數(shù)據(jù)流根據(jù)輸出特征圖的高度對任務(wù)進(jìn)行劃分,計算相鄰任務(wù)輸出特征圖所涉及的激活數(shù)據(jù)具有w_in×(k-stride)個激活的數(shù)據(jù)重疊,如圖6(a)中深藍(lán)色所示.由于多任務(wù)運(yùn)行在CNN 的同一個卷積層上,因此不同任務(wù)使用相同的權(quán)重數(shù)據(jù),如圖6(b)所示.
圖6 片上緩存數(shù)據(jù)存儲方式
根據(jù)數(shù)據(jù)重疊情況進(jìn)行并行傳輸可以減少片外存儲器的訪問.根據(jù)Tp值在數(shù)據(jù)分配器中使用一組Tm位的隊列對數(shù)據(jù)一致性進(jìn)行標(biāo)記,隊列中每一位對應(yīng)著一個CU 的緩存,僅對1 比特位所對應(yīng)的緩存數(shù)據(jù)進(jìn)行并行傳輸.權(quán)重傳輸?shù)钠鹗缄犃兄禐?在需要傳輸不同輸入通道的數(shù)據(jù)時僅需將隊列左移一位以選擇不同的緩存.特殊地,當(dāng)Tp=1 時起始隊列值為“00000001”,這意味著沒有權(quán)重進(jìn)行并行傳輸.
由于激活數(shù)據(jù)一致性較低,故大多數(shù)時候采用順序傳輸.不同任務(wù)之間存在w_in×(k-stride)的激活重疊,這體現(xiàn)在不同cluster 中傳輸這些重疊的激活數(shù)據(jù)時仍然采用并行傳輸形式.在傳輸非重疊數(shù)據(jù)時,激活傳輸?shù)年犃兄禐椤?0000001”;在傳輸重疊數(shù)據(jù)時,傳輸隊列值為在傳輸不同任務(wù)所對應(yīng)的激活數(shù)據(jù)時,將隊列左移Tm/Tp位;在傳輸同一任務(wù)的不同輸入通道所對應(yīng)的激活數(shù)據(jù)時將隊列左移1 位.這種數(shù)據(jù)傳輸方式既節(jié)省了片上傳輸時間,又減少了片外數(shù)據(jù)傳輸?shù)膸捯蕾?
4.1.2 稀疏激活運(yùn)算
稀疏神經(jīng)網(wǎng)絡(luò)加速器在推理過程中將訓(xùn)練時構(gòu)造的激活-權(quán)重密集連接模式打亂,在CU 中重新構(gòu)造激活-權(quán)重的稀疏連接模式.在運(yùn)算時,激活和權(quán)重均以stripe=Tn為粒度進(jìn)行尋址.激活每次尋址Tn個輸入通道上的數(shù)據(jù),將這些數(shù)據(jù)輸入SP 中,提取出非0 值及其在stripe 中的偏移值offset.當(dāng)一個stripe 中的數(shù)據(jù)全為0時,SP仍輸出一個0以便對該stripe進(jìn)行占位.偏移值用來進(jìn)行權(quán)重的細(xì)粒度尋址,在權(quán)重stripe 位置為c 情況下,其細(xì)粒度尋址位置為c×Tn+offset,該地址索引到Tn個輸出通道的權(quán)重上.一個非零激活和Tn個權(quán)重進(jìn)入Tn個MAC 所組成的運(yùn)算行中,實(shí)現(xiàn)Tn個輸出通道的并行運(yùn)算.
由于多任務(wù)需要輸出多個輸出激活結(jié)果,并且一個任務(wù)只耦合部分cluster 輸出,因此需要設(shè)計一種多輸出的加法樹結(jié)構(gòu).多輸出加法樹組中具有Tn個加法樹,每個加法樹具有Tm個輸入,輸入為每個CU 中的一個MAC,加法器的輸出連接到輸出路由邏輯.根據(jù)輸出激活的并行度,多輸出加法樹上各個加法器的輸出配置為單個任務(wù)的最終輸出,也可以配置為下一級加法樹的輸入.設(shè)加法樹中最遠(yuǎn)離輸入端的一級加法器為第0 級,則將第log2Tp級的所有加法器配置為輸出的加法器,并將上一級的加法器全部關(guān)閉.加法樹中同一級加法器相隔離的特性保證了多任務(wù)運(yùn)行互不干擾.
圖7中,同一矩形所對應(yīng)的cluster 屬于同一運(yùn)算路徑,相同運(yùn)算路徑中的數(shù)據(jù)經(jīng)過加法樹相互耦合.每條運(yùn)算路徑對應(yīng)一個(組)的輸出緩存,根據(jù)運(yùn)算路徑不同,由輸出數(shù)據(jù)路由模塊將加法樹輸出的數(shù)據(jù)路由到對應(yīng)輸出緩存中.
圖7 不同Tp情況下的運(yùn)算路徑
為了盡可能地提高輸出激活并行度,給每個cluster設(shè)置一個輸出緩存(Output Buffer,OB).每個緩存由深度為256 的FIFO 構(gòu)成,由此匹配AXI 總線的突發(fā)長度,充分利用傳輸帶寬.然而,由于輸出激活并行度的可配置性,這些緩存無法與每個任務(wù)一一對應(yīng),此時需要設(shè)計數(shù)據(jù)路由邏輯,為每個任務(wù)分配均衡的輸出緩存.輸出數(shù)據(jù)路由模塊負(fù)責(zé)將輸出數(shù)據(jù)引導(dǎo)到對應(yīng)輸出緩存中,具有8個cluster的硬件結(jié)構(gòu)如圖8所示.
圖8 輸出數(shù)據(jù)路由模塊
輸出數(shù)據(jù)路由模塊由8個數(shù)據(jù)選擇器組成,支持最多8任務(wù)的數(shù)據(jù)路由.AL_a_b代表來自第a級加法樹的第b 個加法器的輸出.偶數(shù)標(biāo)號的數(shù)據(jù)選擇器通常為不同任務(wù)的分界點(diǎn),故它們比奇數(shù)標(biāo)號的數(shù)據(jù)選擇器擁有更多數(shù)據(jù)輸入端.除了MUX_0,其它MUX 均有來自上一級輸出緩存的輸入端口.由此鏈接成一個容量較大的輸出緩存.當(dāng)Tp=2 時,8 個輸出緩存最終僅有OB_3和OB_7 兩個數(shù)據(jù)出口,這樣每個任務(wù)具有4×256的輸出緩存,如圖9所示.
圖9 Tp=2時輸出緩存的鏈接關(guān)系
當(dāng)激活的稀疏度較低時,各個輸出緩存的數(shù)據(jù)存入速度相仿,由此造成大量輸出緩存爭搶輸出帶寬.采用圖9 的輸出緩存鏈接方式可以有效地擴(kuò)充輸出緩存深度,減緩運(yùn)算對輸出帶寬的壓力.
輸出仲裁器將數(shù)據(jù)通過AXI 總線寫入片外存儲器時,需要將多個任務(wù)的輸出結(jié)果重新耦合成一個完整的輸出結(jié)果.其實(shí)現(xiàn)方式是在外部存儲器上為每個任務(wù)劃分大小為h_out×w_out×Chout/Tp地址區(qū)域并前后緊密相接,這樣下一層的卷積運(yùn)算可以將上一層的輸出結(jié)果看作一個完整的特征圖輸入.
實(shí)驗(yàn)評估工程建立在Xilinx VC709 的FPGA 平臺上,采用Xilinx Vivado(v2019.1)工具進(jìn)行邏輯綜合并實(shí)現(xiàn)了RTL 代碼.加速器所有性能仿真均使用實(shí)現(xiàn)時序仿真來估計運(yùn)算性能;在運(yùn)行時序仿真時使用saif文件記錄下加速器大部分節(jié)點(diǎn)的翻轉(zhuǎn)率信息,將該信息導(dǎo)入Vivado 的功耗評估工具,以盡可能準(zhǔn)確地評估功耗性能.
該加速器采用模塊化設(shè)計.各個cluster 結(jié)構(gòu)相同且cluster 數(shù)量可定義為宏,根據(jù)FPGA 的實(shí)際硬件資源進(jìn)行靈活配置.該加速器運(yùn)行在0.2 GHz 工作頻率上,部署參數(shù)設(shè)置為Tm=64,Tn=16,1 024 個乘法器,其理論運(yùn)算速度高達(dá)2×0.2 GHz×64×16=409.6 GOP/s.FPGA 硬件實(shí)現(xiàn)后的資源利用率統(tǒng)計在表1 中,BRAM 用于構(gòu)造激活、權(quán)重和輸出緩存,DSP用于實(shí)現(xiàn)MAC陣列.
表1 資源消耗
考慮到過度利用BRAM 會增加布線難度,故加速器僅使用52%的BRAM 資源.每個MAC 均采用DSP 實(shí)現(xiàn),其中1 024個DSP用于運(yùn)算,其余DSP用于尋址.
為了綜合評估多任務(wù)策略對該加速器性能的提升效果,建立一個與其總體架構(gòu)相同的baseline 模型.該模型僅運(yùn)行在單任務(wù)模式下,其余行為均與該加速器一樣,以模擬未使用多任務(wù)策略的加速器性能.
AlexNet 是一個碎片化問題十分嚴(yán)重的CNN 模型,它在很少卷積層中跨越了過大的輸入通道數(shù)量.SAFP在各個卷積層的運(yùn)行時間占比如圖10 所示;每個卷積層運(yùn)行時間較為平均,這意味著SAFP 對于運(yùn)算碎片化并不敏感.作為對比,在baseline 中,僅第1 層的運(yùn)行時間就超過了90%.
圖10 在AlexNet中各個卷積層的運(yùn)算時間占比
為了反映稀疏加速器的實(shí)際加速能力,需要根據(jù)公式performancenormalizationt=將稀疏加速器的實(shí)際性能轉(zhuǎn)化為歸一化性能.
VGG-16 各個卷積層在SAFP和baseline 模型上的運(yùn)算性能對比如圖11 所示.得益于高效的并行度拓展策略,SAFP 的平均歸一化運(yùn)算性能達(dá)到794.63 GOP/s,是baseline 的4.6 倍.值得注意的是,其第1 層的運(yùn)算速度甚至達(dá)到baseline的30倍以上.
圖11 在VGG-16中不同層的運(yùn)算性能
VGG-16 的計算規(guī)模不足以將卷積運(yùn)算的輸入通道平鋪在所有計算單元上,圖12的baseline模型中各個卷積層的最高利用率均不超過50%,這導(dǎo)致超過一半的運(yùn)算資源被閑置.就VGG-16模型而言,無論baseline的運(yùn)算資源如何增加,其運(yùn)算性能均不會有所提升.應(yīng)用了多任務(wù)的SAFP 除了第1 層,其余層的運(yùn)算資源利用率均達(dá)到100%.
圖12 在VGG-16中不同層的資源利用率
然而,任務(wù)量Tp提升在增加算力的同時也增加了運(yùn)算模塊對片外帶寬的依賴.針對運(yùn)算任務(wù)進(jìn)行劃分時,需要考慮到計算與訪存之間的關(guān)系.計算訪存的屋頂(Roofline)模型如圖13 所示,用于分析VGG-16 各卷積層計算與訪存之間的關(guān)系,以定制化地確定圖3算法中的Tp值.
圖13 本文加速器的Roofline模型
其中,黑色折線為本加速器Roofline 模型的“屋頂”和“屋檐”,折線拐點(diǎn)的左右兩邊分別為帶寬瓶頸區(qū)和計算瓶頸區(qū).可見,VGG-16 絕大部分卷積層的運(yùn)算結(jié)果均落到了計算瓶頸區(qū)域,僅有第一個卷積層(具有32個任務(wù)并行度)的運(yùn)算結(jié)果落到了帶寬瓶頸區(qū).圖13顯示該層運(yùn)算只利用到了一半運(yùn)算資源,因此運(yùn)算第一個卷積層的Roofline 模型的“屋頂”實(shí)際應(yīng)為紅線部分,此時,第一個卷積層的運(yùn)算速度十分接近算力上限,故帶寬對加速器性能的影響極為有限.此外,任務(wù)并行度Tp的計算方法不會帶來加速器的額外帶寬壓力.
表2 對比了本文加速器SAFP 與部分FPGA 加速器的運(yùn)算性能和功耗.根據(jù)式(1),SAFP 模型歸一化性能達(dá)到794.63 GOP/s,遠(yuǎn)超過許多沒有針對稀疏激活優(yōu)化的設(shè)計[10].LACS[16]沒有實(shí)現(xiàn)較大的并行度,這直接限制了加速器的性能發(fā)揮;SAFP 實(shí)現(xiàn)了其四倍的并行度,因此SAFP性能比其高出很多.這也證明了SAFP可以在具有較大邏輯資源的FPGA 上取得較好的加速效果.文獻(xiàn)[17]對于不同尺寸的卷積核運(yùn)算需要進(jìn)行分割或補(bǔ)全的操作,這一操作會減少加速器的運(yùn)算效率,因此SAFP 以更少的DSP 資源實(shí)現(xiàn)了更高的運(yùn)算性能.OMNI[18]必需將權(quán)值分為幾組并強(qiáng)制每個組具有相同數(shù)量的非0數(shù)據(jù),大幅度降低了加速器的稀疏敏感度與靈活性,并且該加速器需要額外的軟件支持來進(jìn)行權(quán)重的模塊化剪枝.基于上述分析,在VGG-16 測試集中,SAFP加速器實(shí)現(xiàn)了更高的運(yùn)算性能.
表2 加速器性能對比
雖然SAFP 將運(yùn)行多任務(wù)所需的重疊數(shù)據(jù)進(jìn)行廣播傳輸,由于網(wǎng)絡(luò)層數(shù)越深,通道數(shù)越多,導(dǎo)致任務(wù)數(shù)量變少,其重疊數(shù)據(jù)大幅減少,由此削弱了廣播傳輸?shù)膬?yōu)勢.
針對稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的配置靈活性較低問題,本文提出了一種可在線配置并行度的硬件架構(gòu),它執(zhí)行了一個面向單運(yùn)算多任務(wù)并行的稀疏激活感知數(shù)據(jù)流.基于該數(shù)據(jù)流設(shè)計了一個具有多個cluster 的硬件加速器,cluster內(nèi)部的稀疏感知模塊可以高效地過濾0激活;每個cluster根據(jù)輸入通道數(shù)量被分配到不同任務(wù)的運(yùn)算上,從而令加速器的運(yùn)算更趨于平衡;深入挖掘不同cluster 之間的數(shù)據(jù)一致性,采用數(shù)據(jù)分配器并行傳輸具有一致性的數(shù)據(jù),減少了加速器對片外傳輸帶寬的嚴(yán)重依賴.該加速器架構(gòu)在FPGA 平臺上硬件實(shí)現(xiàn)并進(jìn)行充分驗(yàn)證和綜合評估,實(shí)驗(yàn)結(jié)果表明其運(yùn)算性能高達(dá)325.8 GOP/s,平均功耗為17.4 W,達(dá)到比大多稀疏感知加速器更高的綜合性能.