国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Zynq7000 FPGA異構(gòu)平臺的YOLOv2加速器設(shè)計與實(shí)現(xiàn)*

2019-10-24 07:45柴志雷
計算機(jī)與生活 2019年10期
關(guān)鍵詞:加速器時延排序

陳 辰,柴志雷,2+,夏 珺

1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫214122

2.數(shù)學(xué)工程與先進(jìn)計算國家重點(diǎn)實(shí)驗室,江蘇 無錫214125

+通訊作者E-mail:zlchai@jiangnan.edu.cn

1 引言

卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)已在圖像分類、目標(biāo)檢測等領(lǐng)域被廣泛應(yīng)用[1-2]。為了滿足卷積神經(jīng)網(wǎng)絡(luò)對高強(qiáng)度計算能力的需求,當(dāng)前數(shù)據(jù)中心、服務(wù)器端不僅采用ASIC(application specific integrated circuit)或GPU(graphics processing unit)處理大批量數(shù)據(jù)[3],考慮到能效等因素也會大規(guī)模部署FPGA(field-programmable gate array)[4]。除了ASIC 外,F(xiàn)PGA 也可以很好地滿足嵌入式端低功耗高性能的需求[5]。并且,F(xiàn)PGA 可重構(gòu)的特點(diǎn)很好地適應(yīng)當(dāng)前深度學(xué)習(xí)日新月異的演變速度,因此已有許多基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器的研究[6]。

Zhang 等人設(shè)計出一種輸入和輸出特征圖數(shù)目二維展開的SIMD(single instruction multiple data)卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu),并且提出采用Roofline模型進(jìn)行加速器設(shè)計空間的探索[7]。Qiu等人深入分析了CNN 模型的計算與存儲瓶頸,提出了參數(shù)重排序以及數(shù)據(jù)量化的具體流程,并設(shè)計出了一種在卷積核長寬二維展開的加速器架構(gòu)。但是,在建模時并沒有將傳輸延時也考慮在內(nèi),導(dǎo)致實(shí)際性能與理論性能相差接近47%[8]。雖然Rahman等人提出了一種將帶寬考慮在內(nèi)的加速器模型,但只是根據(jù)傳輸數(shù)據(jù)量建模,并沒有考慮實(shí)際傳輸時延[9]。Ma 等人詳細(xì)分析了基于卷積循環(huán)展開SIMD架構(gòu)的設(shè)計可能性,并提出在輸出特征圖數(shù)、寬度和高度三維展開的SIMD架構(gòu)加速器。然而,由于提出的架構(gòu)將特征圖像素和權(quán)重都緩存在片上,導(dǎo)致所耗費(fèi)的FPGA資源過多,很難在低端FPGA 上使用[10]。為了提高FPGA計算資源的動態(tài)利用率,Shen 等人提出設(shè)計多個加速器并發(fā)處理不同層,并且通過多通道數(shù)據(jù)傳輸改進(jìn)傳輸時延[11]。Li等人設(shè)計了一種層間流水,層內(nèi)輸入、輸出特征圖數(shù)和卷積核寬三維展開的加速器架構(gòu),但也只適用于資源足夠多的FPGA[12]。Zhang 等人提出通過增大突發(fā)傳輸長度來有效利用帶寬,以及通過參數(shù)復(fù)用和多批量處理來提高處理全連接層時計算單元的利用效率[13]。盧冶等人提出了一種面向邊緣計算的嵌入式FPGA 平臺卷積神經(jīng)網(wǎng)絡(luò)的通用構(gòu)建方法,但是用于評估的模型過于簡單,并且只設(shè)計了一種類似文獻(xiàn)[7]的加速器架構(gòu)[14]。另外,硬件設(shè)計的開發(fā)周期是非常長的,這也是導(dǎo)致硬件相關(guān)研究緩慢的一大原因。因此,可以通過高層次綜合(high-level synthesis,HLS)來快速地描述和實(shí)現(xiàn)所需的硬件架構(gòu),由此造成的額外資源開銷和開發(fā)效率的提升相比是可以接受的[15-16]。

因此,使用HLS 設(shè)計并實(shí)現(xiàn)了一種在輸入和輸出特征圖數(shù)二維展開的SIMD 卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu),并使用了參數(shù)重排序、多通道數(shù)據(jù)傳輸?shù)葍?yōu)化策略。以目前在業(yè)界被廣泛應(yīng)用的YOLOv2 目標(biāo)檢測算法[1]為例,來介紹將CNN模型映射到FPGA上的完整流程。在Zedboard 上獲得了30.15 GOP/s 的性能,與Xeon E5-2620 v4 CPU 相比,能效是其120.4倍,性能是其7.3倍;與雙核ARM-A9 CPU相比,能效是其86 倍,性能是其112.9 倍。同時,在性能上也超過現(xiàn)有的工作。

本文的貢獻(xiàn)如下:

(1)設(shè)計并實(shí)現(xiàn)了一個基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器,給出將YOLOv2模型映射到FPGA上的完整流程,對加速器的性能和所需資源進(jìn)行深入分析和建模,將實(shí)際傳輸延時考慮在內(nèi),極大地縮小了加速器理論與實(shí)際時延的誤差。代碼已在github 開源(https://github.com/dhm2013724/yolov2_xilinx_fpga)。

(2)改進(jìn)了基于FPGA 的SIMD 二維展開的卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu)中的輸入和輸出模塊,使得傳輸像素塊能夠以較大的突發(fā)長度進(jìn)行傳輸,有效提高了總線帶寬的實(shí)際利用率。

2 基本概念

本章主要介紹YOLOv2 模型涉及到的相關(guān)概念、突發(fā)傳輸以及卷積計算的優(yōu)化策略。

2.1 YOLOv2模型簡介

YOLOv2 一共包含4 種類型的層:卷積層、池化層、路由層和重排序?qū)?。其中,卷積層起到特征提取的作用,池化層用于像素抽樣,路由層用于多層次的特征融合,重排序?qū)佑糜谔卣鞯某闃又嘏?。在?xùn)練時常用批量歸一化來加速訓(xùn)練收斂[17],通過激活函數(shù)給網(wǎng)絡(luò)增加非線性擬合能力。批歸一化和激活函數(shù)一般都跟在卷積層后。

(1)卷積層(convolutional layer)

對多張輸入特征圖以對應(yīng)卷積核進(jìn)行卷積來實(shí)現(xiàn)特征提取,偽代碼如下所示:

其中R、C、M、N、K、S分別代表輸出特征圖高度、輸出特征圖寬度、輸出特征圖數(shù)、輸入特征圖數(shù)、卷積核大小和步長。pixelL(m,r,c)代表輸出特征圖m中r行c列的像素。全連接層可看作K=1,S=1 的特殊卷積層。

(2)池化層(pool layer)

對輸入特征圖降采樣,以降低特征圖的規(guī)模,同時也具有保持某種不變性(旋轉(zhuǎn)、平移、伸縮等)的功能,一般跟在卷積層后。最大池化層偽代碼如下所示:

其中,Max 表示在K×K的鄰域中返回最大像素,其他參數(shù)含義與卷積層類似。

(3)路由層(route layer)

將多層的輸出特征圖級聯(lián),作為下一層的輸入特征圖,實(shí)質(zhì)是將多維度的特征信息簡單融合。

(4)重排序?qū)樱╮eorganization layer)

將給定的大尺度輸入特征圖在鄰域內(nèi)按位置抽樣,同位置像素形成子圖,如圖1所示。

Fig.1 Reorganization with stride of 2圖1 步長S為2時的重排序過程

若步長S=2,則一張W×H的輸入特征圖在2×2的鄰域內(nèi)按位置抽樣,最終輸出4張W/2×H/2 的子圖。

(5)批歸一化(batch normalization,BN)

深度學(xué)習(xí)常通過批歸一化加快訓(xùn)練收斂[17]。如果某卷積層在訓(xùn)練階段使用了批量歸一化,那么在推斷階段,該層的每個輸出特征圖像素都需要經(jīng)過以下映射:

其中,bn0、bn1、sc0、sc1在訓(xùn)練完成后為常數(shù)??梢詫⑹剑?)與式(2)合并,得到:

由于BN 一般跟在卷積計算后,激活函數(shù)前,并且由式(3)可知,BN實(shí)際是做一個線性變換,因此可以將其與對應(yīng)的卷積計算融合,得到新的卷積核權(quán)重和偏置參數(shù),公式如下所示:

其中,Am和Bm為針對不同輸出特征圖m的相應(yīng)常數(shù)。本文之后的權(quán)重和偏置參數(shù)默認(rèn)都已經(jīng)過融合。

(6)激活函數(shù)

激活函數(shù)對每個輸出特征圖像素做一個非線性變換,主要用于給網(wǎng)絡(luò)增加非線性擬合的能力,一般位于批歸一化后。YOLOv2 中用到的激活函數(shù)是

2.2 突發(fā)傳輸

實(shí)際讀寫DRAM(dynamic random access memory)的帶寬往往與突發(fā)傳輸長度、數(shù)據(jù)位寬和時鐘頻率有關(guān)[13]。當(dāng)數(shù)據(jù)位寬和時鐘頻率保持不變時,傳輸同樣長度的連續(xù)數(shù)據(jù),突發(fā)傳輸長度越長,傳輸時延越小。如圖2所示。

Fig.2 Effective bandwidth for 64 MB transmission圖2 傳輸連續(xù)64 MB的有效帶寬

在Xilinx 的Zedboard 開發(fā)板上測試32 位AXI4 Master 接口在不同突發(fā)傳輸長度下,向DRAM 寫入連續(xù)的64 MB數(shù)據(jù)測得的實(shí)際帶寬。縱軸是實(shí)測帶寬(單位:MB/s),橫軸是突發(fā)傳輸長度,從1 至256。100 MHz 工作頻率下,在突發(fā)長度為256 時,能夠得到最大有效帶寬332 MB/s,此時的帶寬效率為332/400 ≈83%。150 MHz 工作頻率下,在突發(fā)長度為256 時,能夠得到最大有效帶寬489 MB/s,此時的帶寬效率為489/600 ≈81%。

在已測得實(shí)際對應(yīng)不同突發(fā)傳輸長度的有效帶寬的前提下,根據(jù)算法1,對讀寫DRAM 的時延進(jìn)行仿真。

算法1讀寫DRAM時延仿真

輸入:(1)連續(xù)傳輸32 位數(shù)據(jù)長度Length(32 bit);(2)最大突發(fā)長度BurstLengthmax(1~256);(3)對應(yīng)1~256突發(fā)長度的有效帶寬數(shù)組Bandwidth[256](MB/s)。

輸出:時延Latency(s)。

初始化時延Latency=0.0

計算以最大突發(fā)長度傳輸?shù)拇螖?shù)Nummax∶

計算剩余項的突發(fā)長度BurstLengthRm:

BurstLengthRm=Length%BurstLengthmax

計算以最大傳輸長度傳輸?shù)膫鬏敃r延:

若剩余項不為0,計算剩余項的傳輸時延:

否則,LatencyRm=0

Latency=Latencymax+LatencyRm

下文以MM(Length,BurstLengthmax)來表示在最大突發(fā)長度為BurstLengthmax的前提下,傳輸連續(xù)Length個32位數(shù)據(jù)的傳輸時延。

2.3 卷積優(yōu)化策略

大多數(shù)卷積神經(jīng)網(wǎng)絡(luò)中,卷積層占90%以上的計算量,而全連接層占據(jù)90%以上的參數(shù)量[8]。由于全連接層也可看作特殊的卷積層,因此針對CNN 計算和帶寬瓶頸的優(yōu)化主要是對卷積層加速策略的研究,一般分為展開和分塊兩種[10]。

(1)展開(unroll)

在不考慮訪存時延的前提下,如果計算單元無法快速地計算所給數(shù)據(jù),那么計算將成為瓶頸。當(dāng)前的大部分研究通過對卷積循環(huán)中的多維度展開,設(shè)計多個并行乘法和加法計算單元來提高計算能力[7-14]。本文對輸出特征圖數(shù)M和輸入特征圖數(shù)N兩維進(jìn)行部分展開,形成Tm×Tn個并行乘法單元和Tm個lbTn深度的加法樹,并行流水地計算卷積中的乘法和加法。其中,Tm為輸出特征圖數(shù)M維度的并行度/展開度,Tn為輸入特征圖數(shù)N維度的并行度。

(2)分塊(tile)

由于FPGA的片上存儲資源相對于CNN計算所需的存儲空間來說是極其不足的(一般小于10 MB),因此當(dāng)前大部分研究主要利用卷積計算的數(shù)據(jù)局部性,對卷積循環(huán)進(jìn)行多維劃分,使得在進(jìn)行卷積計算時,多次復(fù)用片上數(shù)據(jù)。從而,某些數(shù)據(jù)只需要從片外存儲中讀取或?qū)懭肷倭看螖?shù),極大地降低了訪存次數(shù)和訪存數(shù)據(jù)量,使得訪存不至于成為CNN 加速的瓶頸。

本文加速器設(shè)計所對應(yīng)的卷積層分塊與展開策略的偽代碼如下所示:

其中I、O、W分別代表輸入特征圖、輸出特征圖和卷積核參數(shù),一般存放于片外存儲DRAM中。Ibuf、Obuf、Wbuf分別代表在FPGA加速器上設(shè)計的片上輸入緩存、輸出緩存和參數(shù)緩存。偏置參數(shù)由于數(shù)據(jù)量較少,在進(jìn)行卷積計算前可以全部讀取到片上存儲bias中。

每次從片外DRAM 讀取Tn張輸入特征圖的((Tr-1)×S+K)×((Tc-1)×S+K)大小的像素塊以及對應(yīng)的Tm×Tn×K2大小的權(quán)重參數(shù),復(fù)用片上輸入特征圖像素塊和權(quán)重參數(shù),將中間結(jié)果保留在片上緩存中,只有得到最終的輸出像素塊后,向片外寫出Tm張輸出特征圖的Tr×Tc大小的像素塊。

3 從CNN模型到FPGA加速器構(gòu)建

本章主要描述從CNN模型到FPGA加速的完整流程,如圖3所示。

Fig.3 Flow chart from CNN model to FPGA acceleration圖3 從CNN模型到FPGA加速的流程圖

(1)模型分析與任務(wù)劃分:首先,需要對模型進(jìn)行深入分析,理解模型算法的原理和數(shù)據(jù)流。其次,根據(jù)模型在不同階段所做的運(yùn)算,考慮FPGA和CPU的特點(diǎn),將任務(wù)劃分給FPGA和CPU。CPU適合做控制性、串行、計算量較少的任務(wù),而FPGA適合做并行度高、計算密集型的任務(wù)。

(2)針對分配到FPGA 上的任務(wù):通過量化可以降低計算復(fù)雜度,減少計算單元所耗費(fèi)的資源,從而設(shè)計出更多的并行計算單元,提高加速器性能。此外,需要設(shè)計對應(yīng)的加速器模塊來加速各層的處理,加速器的優(yōu)化策略包括參數(shù)重排序、雙緩沖設(shè)計和多通道數(shù)據(jù)傳輸?shù)取?/p>

(3)針對分配到CPU上的任務(wù):可利用CPU的浮點(diǎn)運(yùn)算單元加快浮點(diǎn)計算。同時,在編譯時可采用編譯優(yōu)化加速任務(wù)處理。此外,還有諸如多線程并行、cache緩存優(yōu)化等優(yōu)化策略。基于CPU的性能優(yōu)化已非常成熟,這里不再詳細(xì)敘述。

3.1 YOLOv2網(wǎng)絡(luò)模型分析與任務(wù)劃分

3.1.1 模型分析

通過對文獻(xiàn)[1]及YOLOv2源碼分析可知,YOLOv2的目標(biāo)檢測步驟如下:

(1)圖像預(yù)處理:輸入任意分辨率的RGB 圖片,除以256轉(zhuǎn)化到[0,1]區(qū)間,按原圖長寬比調(diào)整到416×416大小,不足處填充0.5。

(2)網(wǎng)絡(luò)檢測:輸入預(yù)處理得到的416×416×3 的圖像數(shù)組,經(jīng)YOLOv2網(wǎng)絡(luò)檢測后,輸出包含檢測目標(biāo)信息的13×13×425大小的數(shù)組。

(3)圖像后處理:對輸出的13×13×425 數(shù)組進(jìn)行處理,得到檢測邊框的中心、長寬、邊框可信度和物體的預(yù)測概率等,根據(jù)原圖長寬比,將得到的邊框調(diào)整到原圖尺度,完成檢測。

3.1.2 任務(wù)劃分

由于圖像預(yù)處理和后處理部分計算量不大且在圖像處理總延時中占比極少,同時考慮到后處理涉及指數(shù)計算,而FPGA實(shí)現(xiàn)指數(shù)擬合的資源耗費(fèi)較大,因此將圖像的預(yù)處理和后處理部分放在CPU端處理。

YOLOv2 網(wǎng)絡(luò)中一共涉及4 類層:卷積層、池化層、路由層和重排序?qū)?。卷積層占據(jù)模型的大部分計算量,已有的研究表明使用FPGA加速卷積運(yùn)算是非常有效的[7-14]。最大池化與卷積類似,只是缺少輸入特征圖數(shù)維度,并使用比較運(yùn)算代替乘加運(yùn)算。因此,將卷積層和池化層的處理放在FPGA端[18]。路由層可通過預(yù)先設(shè)置內(nèi)存偏移地址來實(shí)現(xiàn)。重排序?qū)拥某闃又嘏排cDMA(direct memory access)類似,但與傳統(tǒng)DMA不同,因此也在FPGA端處理。

3.2 動態(tài)定點(diǎn)16位量化

CNN 對于數(shù)據(jù)精度有很強(qiáng)的魯棒性,在保持準(zhǔn)確度不變的前提下,可以通過降低數(shù)據(jù)位寬來減少計算耗費(fèi)的資源[7]。并且,隨著數(shù)據(jù)位寬降低,傳輸數(shù)據(jù)量也隨之降低。本文采用與文獻(xiàn)[8]和文獻(xiàn)[19]類似的流程對權(quán)重參數(shù)和輸入輸出特征圖進(jìn)行動態(tài)定點(diǎn)16位量化。

定點(diǎn)數(shù)xfixed可由以下公式表示:

其中,bw表示定點(diǎn)數(shù)的位寬,exp表示階碼,Bi∈{0,1}。定點(diǎn)數(shù)xfixed采用補(bǔ)碼表示,最高位為符號位。

浮點(diǎn)數(shù)xfloat與定點(diǎn)數(shù)xfixed的相互轉(zhuǎn)化如下:

由于定點(diǎn)數(shù)位寬有限且階碼固定,因此將浮點(diǎn)數(shù)xfloat轉(zhuǎn)換為定點(diǎn)數(shù)xfixed,再轉(zhuǎn)換回新浮點(diǎn)數(shù)x′float后,可能會有精度誤差。

動態(tài)定點(diǎn)數(shù)據(jù)量化由3步組成:

(1)權(quán)重參數(shù)量化

首先,找到每層的權(quán)重最優(yōu)階碼expw:

其中,Wfloat表示某層的任意權(quán)重參數(shù)原始浮點(diǎn)值,W(bw,expw)表示在給定位寬bw和階碼expw下將Wfloat定點(diǎn)化后轉(zhuǎn)換回浮點(diǎn)的新浮點(diǎn)數(shù)W′float。通過式(10),希望找到最優(yōu)階碼expw使得原始權(quán)重與定點(diǎn)化后的權(quán)重絕對誤差和最小。偏置參數(shù)的量化與其類似,在此不過多敘述。

(2)輸入輸出特征圖量化

按網(wǎng)絡(luò)的前向順序?qū)斎胼敵鎏卣鲌D進(jìn)行量化,使每一層的輸出特征圖像素有共同的階碼expout。階碼expout滿足以下公式:

其中,Pxfloat表示某層的原輸出特征圖浮點(diǎn)像素值,Out(bw,expo)表示給定位寬bw和階碼expo下定點(diǎn)化后轉(zhuǎn)換回浮點(diǎn)的浮點(diǎn)數(shù)Px′float。其余與權(quán)重參數(shù)量化類似。此外,由于在預(yù)處理時將RGB 像素值轉(zhuǎn)化到[0,1]區(qū)間,因此當(dāng)位寬bw為16時,可將第一層的輸入特征圖階碼定為14。

(3)中間結(jié)果量化

雖然前兩步已將權(quán)重和輸入輸出特征圖定點(diǎn)化,但在處理時還是先轉(zhuǎn)換成浮點(diǎn)進(jìn)行計算,并且中間結(jié)果以浮點(diǎn)存儲。

通過量化中間結(jié)果可以用定點(diǎn)數(shù)的乘加和移位來擬合浮點(diǎn)乘加運(yùn)算,使得推斷過程除預(yù)處理和后處理階段外,在FPGA 端都以定點(diǎn)數(shù)進(jìn)行計算和傳輸。中間結(jié)果階碼expinter滿足以下公式:

另外,使用動態(tài)定點(diǎn)量化時,激活函數(shù)Leaky ReLU 也要進(jìn)行相應(yīng)的量化操作。當(dāng)位寬bw為16時,使用與0xccc相乘和右移15位的定點(diǎn)運(yùn)算擬合與0.1相乘的操作。量化后的公式如下所示:

3.3 基于FPGA的設(shè)計與優(yōu)化

除路由層外,其他層都是將上一層的輸出作為當(dāng)前層的輸入,輸出結(jié)果作為下一層的輸入,串行順序處理。如圖4(a)所示,將路由層的功能通過預(yù)先設(shè)置存取地址偏移實(shí)現(xiàn)后,F(xiàn)PGA加速器只需根據(jù)相關(guān)參數(shù)讀取內(nèi)存數(shù)據(jù)、處理數(shù)據(jù)和將數(shù)據(jù)寫回內(nèi)存即可。

如圖4(b)所示,每次讀取或?qū)懭攵鄩K數(shù)據(jù),對FPGA片上緩存的數(shù)據(jù)塊復(fù)用結(jié)束后,再進(jìn)行下一次讀取,保證每塊數(shù)據(jù)只從片外讀取少量次數(shù)以減少訪存次數(shù)和傳輸數(shù)據(jù)量。

對于每次取到的分塊數(shù)據(jù),根據(jù)圖4(c)的控制流處理:將從片外讀取到的數(shù)據(jù)發(fā)送到片上緩存,根據(jù)層的類別交由CONV、POOL、REORG 模塊進(jìn)行處理。處理后的數(shù)據(jù)寫回輸出緩沖,待得到最終結(jié)果后寫回片外。

加速器總體架構(gòu)如圖5所示,加速器對外有多個AXI master 接口和一個AXILite slave 接口。通過AXILite slave接口讀寫控制、數(shù)據(jù)和狀態(tài)寄存器。多個AXI master 接口并發(fā)讀取輸入特征圖和寫回輸出特征圖,一個獨(dú)立的AXI master接口負(fù)責(zé)讀取每層權(quán)重參數(shù)。

Data scatter模塊生成對應(yīng)寫入地址,并將從片外讀到的輸入特征圖像素塊分發(fā)到片上緩存。Data gather生成寫回地址,將輸出緩存中的輸出特征圖像素塊寫回片外。

紅色處理模塊分別負(fù)責(zé)卷積層(CONV 和Leaky ReLU)、最大池化層(POOL)及重排序?qū)樱≧EORG)的處理。用于讀寫特征圖的AXI master 接口數(shù)由以下公式?jīng)Q定:

Fig.4 Execution schedule圖4 執(zhí)行調(diào)度流

Fig.5 Accelerator overall architecture圖5 加速器總體架構(gòu)

其中,NCin表示并發(fā)讀取特征圖的AXI master 接口數(shù),NCout表示并發(fā)寫回DRAM 的AXI master 接口數(shù)。由于AXI4協(xié)議本身讀寫通道獨(dú)立,讀寫操作并發(fā),因此實(shí)際用于數(shù)據(jù)傳輸?shù)腁XI master接口數(shù)由并發(fā)通道多的一側(cè)決定。再加上用于權(quán)重讀取的接口,實(shí)際AXI master接口數(shù)NAXIM=NChannel+1。

另一方面,HLS 生成的AXI4 master 接口模塊內(nèi)部讀寫通道都擁有類似DMA的硬件結(jié)構(gòu),可以看作(NCin+NCout+1)個獨(dú)立的DMA并發(fā)訪存。

3.3.1 輸入輸出模塊

由于AXI4 master 接口讀寫通道獨(dú)立,因此讀寫操作可以并發(fā)執(zhí)行。通過讀通道從DRAM 讀取數(shù)據(jù),由數(shù)據(jù)分發(fā)(data scatter)模塊控制多個讀通道的DMA 完成輸入特征圖像素塊的讀取,并將讀取的數(shù)據(jù)塊分發(fā)到對應(yīng)輸入緩存;由數(shù)據(jù)收集(data gather)模塊將輸出緩存中的像素塊寫回DRAM,控制多個寫通道的DMA完成輸出特征圖像素塊的寫入,如圖6所示。

圖6(a)中的TRow和TCol由輸出特征圖像素塊的寬度Tr和高度Tc、卷積核大小K和步長S決定,公式如下:

如圖6(a)所示,數(shù)據(jù)分發(fā)模塊從內(nèi)存順序讀取Tn張TRow×TCol大小的輸入特征圖像素塊,每個像素塊按行優(yōu)先順序讀取并分發(fā)到Tn個獨(dú)立的片上輸入緩存。與此類似,圖6(b)中的數(shù)據(jù)收集模塊從Tm個獨(dú)立的片上輸出緩存中順序讀取Tr×Tc大小的像素塊寫回片外。

Fig.6 Single channel data transmission圖6 單通道數(shù)據(jù)傳輸

為了減少數(shù)據(jù)的傳輸時延,在數(shù)據(jù)分發(fā)和收集模塊中還添加了額外的行緩沖,并且進(jìn)行了雙緩沖設(shè)計。輸入輸出模塊的雙緩沖時序如圖7所示。

(1)對于數(shù)據(jù)分發(fā)模塊從片外DRAM 讀取輸入特征圖像素塊到片上緩存的過程

如圖7(a)所示,數(shù)據(jù)分發(fā)模塊的雙緩沖的設(shè)計使得訪存地址、片上緩存偏移的計算、將輸入特征圖像素塊從DRAM讀取到行緩沖的時延和像素從行緩沖寫入輸入緩存的時延重疊,減少數(shù)據(jù)的傳輸時延。

輸入行緩沖所需的存儲資源NLoadLineBRAM為:

其中,行緩沖大小LineBufferSizeLoad滿足:

ConeBRAM表示單塊BRAM(block RAM)的存儲能力(典型值為18 Kb),Bitwidth表示當(dāng)前的數(shù)據(jù)寬度,Tcmax表示各層的最大Tc值,Smax和Kmax以此類推。NCin表示多通道并發(fā)輸入數(shù),此處無多通道數(shù)據(jù)傳輸情況下為1。

根據(jù)片上緩存和特征圖的寬度盡可能長地連續(xù)傳輸數(shù)據(jù),提高帶寬效率。行緩沖每次傳輸?shù)妮斎胩卣鲌D行數(shù)NTRowOneLine如下所示:

Fig.7 Timing graph for double buffered design圖7 雙緩沖設(shè)計時序圖

只有當(dāng)讀取的輸入特征圖的寬度小于TCol時,每次行緩沖才會讀取連續(xù)的多行像素。

①訪存地址、片上緩存偏移的計算、將輸入特征圖像素塊從DRAM 讀取到行緩沖的時延LatencyLoad1公式如下:

其中,Const為模塊相關(guān)常數(shù)(流水線初始化時鐘等),F(xiàn)req為加速器工作的時鐘頻率,BitwidthInterface為AXI Master 接口數(shù)據(jù)位寬,BurstLengthmax為設(shè)置的最大突發(fā)長度。

②將行緩沖中的像素寫入輸入緩存的時延LatencyLoad2如下:

上述兩個處理過程雙緩沖的循環(huán)次數(shù)InputPing-PongLoops(IPPL)如下所示:

使用雙緩沖設(shè)計后,輸入特征圖讀取時延LatencyLoadIFM為:

(2)對于數(shù)據(jù)接收模塊從片上輸出緩存寫出像素塊到片外DRAM的過程

如圖7(b)所示,數(shù)據(jù)接收模塊將訪存地址、片上緩存偏移的計算、像素從輸出緩存搬移到行緩沖的時延和將行緩沖中的像素寫回內(nèi)存的時延重疊。

輸出行緩沖所需存儲資源NStoreLineBRAM為:

NCout表示多通道并發(fā)輸出數(shù),此處為1。輸出行緩沖大小LineBufferSizeStore滿足以下約束:

行緩沖每次傳輸?shù)妮敵鎏卣鲌D行數(shù)NTrOneLine如下所示:

①訪存地址、片上緩存偏移的計算、從輸出緩存搬移到行緩沖的時延LatencyStore1如下所示:

②將行緩沖中的像素寫回內(nèi)存的時延LatencyStore2如下所示:

上述兩個處理過程雙緩沖的循環(huán)次數(shù)Output-PingPongLoops(OPPL)如下:

使用雙緩沖設(shè)計后,輸出時延LatencyStore為:

3.3.2 卷積模塊

對卷積循環(huán)中輸出特征圖數(shù)M和輸入特征圖數(shù)N兩維部分展開,形成Tm×Tn個并行乘法計算單元和Tm個lbTn深度的加法樹,流水地處理乘加運(yùn)算[20]。其中,Tm為輸出并行度,Tn為輸入并行度。以Tm=2,Tn=4為例,如圖8所示。

Fig.8 Convolution module(Tm=2,Tn=4)圖8 卷積模塊(Tm=2,Tn=4)

充滿流水線后,每個時鐘周期卷積模塊從對應(yīng)的Tn個獨(dú)立輸入特征圖緩存中讀入Tn個相同位置的像素,與此同時從Tm×Tn個獨(dú)立的卷積核緩存中讀入相同位置的權(quán)重,Tm×Tn個并行乘法單元復(fù)用Tn個輸入像素進(jìn)行乘法計算。Tm個加法樹將乘積兩兩相加,得到的結(jié)果和部分和累加后,寫回對應(yīng)輸出緩存或局部寄存器中。

卷積模塊對應(yīng)的計算時延LatencyCompute:

卷積模塊的資源大部分用于乘法器和加法器的設(shè)計。單一乘法器和加法器的資源耗費(fèi)與數(shù)據(jù)精度息息相關(guān)。由文獻(xiàn)[7]和實(shí)際評估可知,乘法器和加法器主要耗費(fèi)DSP(digital signal processing)和LUT(look-up table)資源。不同精度下,乘法器和加法器的資源耗費(fèi)如表1所示。

Table 1 Resource consumption comparison表1 資源耗費(fèi)比較

浮點(diǎn)32 位精度時,設(shè)計單個乘法器和加法器的DSP 和LUT 的耗費(fèi)較大。與浮點(diǎn)32 位時相比,定點(diǎn)16位精度的加法器只耗費(fèi)少量LUT,不耗費(fèi)DSP;乘法器和移位電路耗費(fèi)的資源也大大降低。因此,在保證數(shù)據(jù)精度的前提下,定點(diǎn)計算具有較大的優(yōu)勢。

在輸出并行度為Tm,輸入并行度為Tn的條件下,卷積模塊的主要DSP 資源耗費(fèi)NDSP和LUT 資源耗費(fèi)NLUT如下:

其中,CostMul和CostAdd分別對應(yīng)不同精度下,乘法器和加法器的對應(yīng)資源耗費(fèi)。CostSelect對應(yīng)圖8 中的2選1選擇電路和累加器的LUT耗費(fèi),本設(shè)計中典型值為8。

3.3.3 池化模塊

YOLOv2 中的池化層都為K=S=2 的最大池化層。對單一輸入特征圖,以2×2 大小且步長S=2 的窗口滑動,取其中的最大像素作為輸出。最大池化操作與卷積操作類似,不同之處在于:(1)只需要對單一輸入特征圖進(jìn)行抽樣;(2)運(yùn)算單元不是乘法器和加法器,而是比較器。硬件結(jié)構(gòu)如圖9所示。

充滿流水線后,每個時鐘周期,池化模塊從Tpool個獨(dú)立的輸入特征圖緩存中讀取相同位置的像素與當(dāng)前最大值比較,同時有Tpool個比較器在進(jìn)行不同輸入特征圖的比較運(yùn)算。比較K2次后,將得到的最大值寫入輸出緩存中。由于在加速器整體架構(gòu)中(圖5),各層共用輸入和輸出模塊,池化模塊的并行度Tpool≤min(Tnmax,Tmmax)。

池化模塊的計算時延LatencyCompute:

Fig.9 Pooling module圖9 池化模塊

池化模塊主要耗費(fèi)LUT 資源用于多路選擇器、比較器和寄存器的設(shè)計??紤]到其所耗費(fèi)資源較少,這里不再過多說明。

3.3.4 重排序模塊

重排序?qū)拥奶幚磉^程與最大池化層類似,都是對單一輸入特征圖的像素進(jìn)行抽樣。不同之處在于,最大池化層輸出K×K鄰域內(nèi)的最大像素到單一輸出特征圖,而重排序?qū)訉×K鄰域內(nèi)的輸入像素輸出到K×K張的輸出特征圖相同位置。因此,針對YOLOv2中K=S=2 的重排序?qū)?,重排序模塊只使用1 塊輸入緩存和4 塊輸出緩存,并設(shè)計一個4 路選擇器,每次從輸入緩存讀取1 個像素寫入對應(yīng)的輸出緩存。

重排序模塊的處理時延LatencyCompute如下:

3.4 優(yōu)化策略

3.4.1 參數(shù)重排序

參數(shù)重排序,將卷積層所需參數(shù)預(yù)先重排,使得每次傳輸?shù)膮?shù)在DRAM 中連續(xù)存儲,可以以較大的突發(fā)長度進(jìn)行傳輸,有效提高了帶寬的利用效率[13]。

對于權(quán)重參數(shù),由于只跟當(dāng)前層相關(guān),因此根據(jù)當(dāng)前層的塊劃分(這里指各層的Tn和Tm)對各層權(quán)重預(yù)先進(jìn)行重排序,以減少訪存次數(shù)和增大突發(fā)長度。以Layer 0為例,如圖10所示。

Fig.10 Weight arrangement in DRAM圖10 在DRAM中的參數(shù)排序

第0 層的核權(quán)重為32×3×3×3(M×N×K×K)也可看作32×3×9(M×N×K2),其中M=32,N=3,K=3。如圖10(a)所示,原始參數(shù)在內(nèi)存中按行優(yōu)先順序存儲。如果將卷積循環(huán)按Tm=16 和Tn=1劃分,那么需要按箭頭順序從DRAM 中讀取16×1×9 大小的參數(shù)6次。但由于參數(shù)不連續(xù),共需訪存32×3=96 次,每次的突發(fā)長度為9。

如圖10(b)所示,參數(shù)重排序后,由于讀取參數(shù)連續(xù)存放,只需訪存6 次,每次突發(fā)長度為16×9=144。增大突發(fā)長度并且減少大量的訪存次數(shù),使得有效帶寬大大增加。

參數(shù)讀取模塊與輸入模塊類似,也添加了行緩沖并進(jìn)行雙緩沖設(shè)計。不同排序下的參數(shù)讀取模塊的傳輸次數(shù)NumTrans和連續(xù)傳輸?shù)膮?shù)長度LengthTrans,如下所示:

其中,Normal 表示不使用參數(shù)重排時,從DRAM 讀取Tm次Tn×K×K個連續(xù)參數(shù);而Rearrangement 表示經(jīng)過參數(shù)重排序后,從DRAM讀取K×K次Tm×Tn個連續(xù)參數(shù)。

行緩沖所需的存儲資源為:

每次從DRAM 讀取連續(xù)LengthTrans個權(quán)重參數(shù)到行緩沖中的時延如下:

將行緩沖中的LengthTrans個參數(shù)寫入片上參數(shù)緩存中的時延:

從DRAM讀取NumTrans次LengthTrans個連續(xù)參數(shù)的讀取時延LatencyLoadW:

3.4.2 乒乓緩沖

通過乒乓緩沖的設(shè)計,將從片外DRAM 讀取數(shù)據(jù)的時延LatencyLoad、在片上數(shù)據(jù)處理的時延LatencyCompute和將處理完的數(shù)據(jù)寫回片外DRAM的時延LatencyStore重疊,減少總時延[7-8]。

由于讀取權(quán)重和輸入特征圖像素塊的過程可以并發(fā)執(zhí)行,從片外DRAM讀取數(shù)據(jù)的時延LatencyLoad由權(quán)重讀取時延LatencyLoad和輸入特征圖讀取時延LatencyLoadIFM中較大的一項決定:

沒有權(quán)重參數(shù)的最大池化層和重排序?qū)覮atencyLoadW為0。

如式(9)可知,卷積由六維乘加循環(huán)組成,與池化和重排序?qū)硬煌?,包括對輸入特征圖數(shù)維度N的遍歷。故不使用乒乓時,卷積層各部分時延不重疊,輸入特征圖數(shù)維度N的內(nèi)層循環(huán)需重復(fù)N/Tn次讀取和計算操作,才能輸出最終結(jié)果。此時,內(nèi)層循環(huán)的時延LatencyInner:

卷積層處理的總時延Latency為:

若使用乒乓緩沖,則讀取時延LatencyLoad和卷積計算時延LatencyCompute重疊,讀取和計算操作經(jīng)(N/Tn+1)次循環(huán)后輸出最終結(jié)果,此時內(nèi)層循環(huán)時延LatencyInner為:

與卷積層相比,池化層和重排序?qū)尤鄙佥斎胩卣鲌D數(shù)N維度,故只考慮讀取、數(shù)據(jù)處理和寫回三者是否兩兩重疊。不使用乒乓時,三者線性進(jìn)行,在時間上不重疊,處理總時延Latency為:

使用乒乓緩沖設(shè)計后,三者的處理過程兩兩重疊,此時處理總時延Latency為:

使用乒乓時,對應(yīng)輸入緩存和輸出緩存所耗費(fèi)的BRAM資源數(shù)如下:

其中,BitwidthInter表示中間結(jié)果的數(shù)據(jù)位寬,典型值為32。對于權(quán)重緩存,數(shù)據(jù)量較小時使用FF(flipflop)和LUT 資源設(shè)計;數(shù)據(jù)量較大時,使用BRAM資源設(shè)計,BRAM的耗費(fèi)如下:

不使用雙緩沖時,對應(yīng)BRAM資源耗費(fèi)減半。

3.4.3 多通道數(shù)據(jù)傳輸

3.3.1 節(jié)中的輸入輸出模塊每次順序地讀取或?qū)懭攵嗵卣鲌D的像素塊。考慮到DRAM實(shí)際帶寬大于單接口的總線帶寬,可通過多通道數(shù)據(jù)傳輸,減少傳輸時延[11]。如圖11所示。

Fig.11 Multi-channel data transmission圖11 多通道數(shù)據(jù)傳輸

圖11 與圖6 類似,但是圖11(a)中數(shù)據(jù)分發(fā)模塊變?yōu)镹Cin個子輸入模塊,每個子輸入模塊從DRAM讀取張輸入特征圖的像素塊到片上緩存。圖11(b)中數(shù)據(jù)收集模塊變?yōu)镹Cout個子輸出模塊,每個子輸出模塊將張輸出特征圖的像素塊從片上緩存寫回到片外。各輸入輸出子模塊間無依賴性,并發(fā)地完成數(shù)據(jù)傳輸。此時,在式(20)、式(23)和式(24)中NCin>1,式(24)、式(27)和式(28)中NCout>1。同時,由于讀寫通道的增加,式(17)和式(24)中行緩沖占用的BRAM數(shù)目也會隨之增加。

4 實(shí)驗評估

4.1 軟硬件實(shí)驗環(huán)境

CNN 模 型:YOLOv2 和YOLOv2-Tiny(416×416),模型對應(yīng)的數(shù)據(jù)集為COCO數(shù)據(jù)集[21]。

FPGA平臺:Xilinx Zedboard開發(fā)板(Dual-coreARMA9+FPGA),其中FPGA 的BRAM_18Kb、DSP48E、FF和LUT資源數(shù)分別為280、220、106 400和53 200。

CPU平臺:服務(wù)器CPU Intel E5-2620 v4(8 cores)工作頻率2.1 GHz,256 GB內(nèi)存。Zedboard上的雙核ARM-A9,時鐘頻率667 MHz,512 MB內(nèi)存。

使用Vivado HLS 2018.2 HLS 進(jìn)行加速器設(shè)計,Vivado v2018.2 進(jìn)行綜合和布局布線。功耗采用VC470 功耗測量儀外部測量板級系統(tǒng)功耗。對于E5-2620 v4,采用散熱設(shè)計功耗(thermal design power,TDP)作為總功耗(實(shí)際功耗大于TDP)。由于Zedboard是ARM+FPGA異構(gòu)SoC平臺,F(xiàn)PGA的計算功耗通過計算時系統(tǒng)的峰值功耗減去FPGA 復(fù)位后系統(tǒng)的空閑功耗得到。

4.2 加速器性能與資源耗費(fèi)的評估

選擇動態(tài)定點(diǎn)16 位精度下的加速器架構(gòu),采用參數(shù)重排序、乒乓緩沖和多通道數(shù)據(jù)傳輸三種優(yōu)化策略,其中Tmmax=32,Tnmax=4,Trmax=26,Tcmax=26,Kmax=3,Smax=2,NCin=4,NCout=2。給定以上硬件設(shè)計參數(shù)后,實(shí)際加速器設(shè)計已確定。此時,還需確定各層在當(dāng)前加速器設(shè)計下對應(yīng)的Tm、Tn、Tr和Tc。

各層的Tr和Tc由以下公式得出:

其中,OH和OW分別表示輸出特征圖的高度和寬度。通過式(49)和式(51),可以得出各層輸入和輸出緩存能夠存儲的像素塊的最大寬高。對于YOLOv2中的池化層和重排序?qū)?,S=K=2。

對于卷積層,Tm和Tn由以下公式得出:

當(dāng)Tmmax和Tnmax給定后,已確定卷積計算模塊的設(shè)計。因此,各卷積層的輸入并行度Tn和輸出并行度Tm不能超過相應(yīng)最大值。

對于池化層,Tm和Tn由以下公式得出:

由于各計算模塊復(fù)用輸入輸出模塊,因此池化層的并行度Tpool≤Tm,實(shí)驗中Tpool=Tm。

S=2 的重排序?qū)訉⒁粡堓斎胩卣鲌D抽樣重排為4張輸出特征圖,因此Tn=1,Tm=4。

4.2.1 資源耗費(fèi)評估

如表2所示,結(jié)合給定參數(shù)和上文中對各模塊資源耗費(fèi)的公式,將估計資源耗費(fèi)與實(shí)際資源耗費(fèi)進(jìn)行對比。

DSP 主要用于卷積模塊中加法器和乘法器的設(shè)計。根據(jù)式(32),DSP 耗費(fèi)128 個,實(shí)際設(shè)計中多出的DSP用于其他模塊的設(shè)計。

BRAM_18Kb主要用于實(shí)現(xiàn)存儲量大的緩存,除上文中所提及的各模塊對BRAM 的耗費(fèi)外,AXI Master 接口也會耗費(fèi)BRAM 來實(shí)現(xiàn)接口緩存(在當(dāng)前設(shè)計下,耗費(fèi)NAXIM×2=10 BRAM)。偏置參數(shù)的緩存耗費(fèi)額外的兩個BRAM。此外,根據(jù)式(49)、式(50)、式(17)、式(38)和式(24),加上輸入緩存(3×4×2)、輸出緩存(2×32×2)、片上輸入行緩沖(2)、權(quán)重行緩沖(2)和輸出行緩沖(2×2)所耗費(fèi)的BRAM 資源,共耗費(fèi)BRAM_18Kb 170 個,即85 個BRAM_36Kb,與實(shí)際BRAM耗費(fèi)接近。

由于單個權(quán)重緩存的存儲量過小(K2×Bitwidth=9×16=144 bit),無法充分利用BRAM資源。在設(shè)計時考慮使用LUT和FF來實(shí)現(xiàn)權(quán)重緩存(在當(dāng)前設(shè)計下,單個權(quán)重緩存耗費(fèi)約43 個LUT)。因此,當(dāng)前權(quán)重緩存共耗費(fèi)43×Tmmax×Tnmax×2=11 008 個LUT。由式(33)可知,此時16 位定點(diǎn)精度的卷積模塊耗費(fèi)19 968 個LUT。因此,共耗費(fèi)約30 976 個LUT。剩余LUT用于其他模塊的設(shè)計。

4.2.2 性能與能效評估

YOLOv2模型除路由層、圖像的預(yù)處理和后處理外,剩余29層。其中包括23層卷積層、5層池化層和1 層重排序?qū)?。由于篇幅原因,? 僅列出其中部分層的評估結(jié)果。列中的R(Real)表示該列數(shù)據(jù)為實(shí)測值,E(Estimated)表示該列數(shù)據(jù)是根據(jù)上文公式得到的估計值。

以相對誤差對時延模型進(jìn)行評價,相對誤差δ公式如下:

即測量的絕對誤差與被測量的真值之比。

以表中最后一行總延時為例,YOLOv2模型的總時延誤差約為,總計算時延誤差約為0.8%,總輸入時延誤差約為10.7%,總輸出時延誤差約為10.4%。雖然本模型的主要誤差仍集中于傳輸時延部分約為10%,但已遠(yuǎn)小于文獻(xiàn)[8]中的誤差47%。并且加速后卷積層的時延仍占總時延的95%(930.560/977.485 ≈95.2%)。

當(dāng)前的工作在性能上也超過之前的工作,如表4所示。文獻(xiàn)[22]設(shè)計了一個7×7的行緩沖,能夠適應(yīng)3×3 和7×7 的卷積核。由于分別設(shè)計卷積模塊和全連接模塊處理對應(yīng)層,計算單元的利用率并不高。雖然工作頻率很高,但性能僅達(dá)到18.82 GOP/s。文獻(xiàn)[23]基于Intel的OpenCL采用通用矩陣乘法對矩陣分塊,塊間并行乘加的方式加速。然而,此方法需要每次將輸入特征圖和卷積核參數(shù)重排序,增加了預(yù)處理時延和復(fù)雜度。

如表5所示,與CPU相比,CPU+FPGA的異構(gòu)系統(tǒng)是雙核ARM-A9 能效的86 倍左右,Xeon 的120.4倍。速度是雙核ARM-A9 的112.9 倍,Xeon 的7.3 倍左右。其中,將FPGA 復(fù)位后測量板級電源功耗,得到只使用雙核ARM-A9計算時的功耗。此時的功耗較低,但是由于計算能力弱,使得計算時延過長,能效低。Xeon恰恰與其相反,計算性能強(qiáng),使得計算時延很短,但是由于功耗過高,導(dǎo)致能效低下。與前兩者不同,使用CPU+FPGA的異構(gòu)系統(tǒng),功耗略高于雙核ARM-A9,但使用FPGA 加速,大幅度提高計算性能,在計算時延和能效上都獲得了不錯的表現(xiàn)。

Table 2 FPGA resource consumption表2 FPGA資源耗費(fèi)

Table 3 Actual and estimated delay(partial)表3 實(shí)際與估計時延(部分) ms

Table 4 Comparison with other FPGA work表4 與其他的FPGA工作比較

Table 5 Comparison with CPU表5 與CPU的比較

基于Xeon CPU 的評估由YOLOv2 源碼編譯(-Ofast)后執(zhí)行得到,數(shù)據(jù)精度為float32(同條件下,F(xiàn)ixed16執(zhí)行時間約為15.78 s)。動態(tài)定點(diǎn)16位數(shù)據(jù)量化得到的模型,在準(zhǔn)確度上與原模型接近,COCO數(shù)據(jù)集上mAP(mean average precision)達(dá)到約48.1%。

5 結(jié)束語

本文以YOLOv2 目標(biāo)檢測算法為例,設(shè)計并實(shí)現(xiàn)了一種在卷積輸入和輸出特征圖數(shù)二維展開的SIMD卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu),介紹將卷積神經(jīng)網(wǎng)絡(luò)模型映射到FPGA 上的完整流程。對加速器的性能和所需資源進(jìn)行分析和建模,將實(shí)際傳輸延時考慮在內(nèi),極大地縮小了加速器理論與實(shí)際時延的誤差。同時,改進(jìn)了加速器架構(gòu)中的輸入和輸出模塊,有效提高了總線帶寬的利用效率。

未來進(jìn)一步的改進(jìn)方向主要有4個方面:

(1)考慮多種數(shù)據(jù)復(fù)用模式,適應(yīng)不同維度“形狀”下的訪存需求,平衡計算與傳輸時延;(2)降低數(shù)據(jù)精度;(3)使用Winograd等快速矩陣乘法提高計算性能;(4)設(shè)計更細(xì)粒度的加速器或通過多層融合以減少總時延。

猜你喜歡
加速器時延排序
莫比斯加速器眾創(chuàng)辦公空間
知識快餐店 科學(xué)加速器
國內(nèi)外醫(yī)用直線加速器可靠性對比研究
計算機(jī)網(wǎng)絡(luò)總時延公式的探討
計算機(jī)網(wǎng)絡(luò)總時延公式的探討
作者簡介
基于物聯(lián)網(wǎng)的IT運(yùn)維可視化管理系統(tǒng)設(shè)計與實(shí)現(xiàn)
恐怖排序
《舍不得星星》特輯:摘顆星星給你呀
節(jié)日排序