999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在軌高效目標(biāo)檢測(cè)加速技術(shù)

2022-12-26 01:16:48呼延烺蔣冬梅張艷寧魏佳圓劉娟妮
宇航學(xué)報(bào) 2022年11期
關(guān)鍵詞:引擎

呼延烺,李 映,蔣冬梅,張艷寧,周 詮,魏佳圓,劉娟妮

(1.西北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,西安 710129;2.空間微波技術(shù)國(guó)家級(jí)重點(diǎn)實(shí)驗(yàn)室,西安 710100)

0 引 言

近年來(lái)人工智能技術(shù),尤其是深度學(xué)習(xí)技術(shù)取得了突破性進(jìn)展,在多個(gè)任務(wù)上均取得了最優(yōu)性能。相比于傳統(tǒng)技術(shù),深度學(xué)習(xí)技術(shù)在性能上有巨大優(yōu)勢(shì),眾多學(xué)者嘗試將該技術(shù)應(yīng)用到目標(biāo)檢測(cè)[1]和識(shí)別、異常檢測(cè)[2]、變化檢測(cè)[3]、對(duì)地觀測(cè)[4]等空間任務(wù)中。相關(guān)研究成果表明深度學(xué)習(xí)技術(shù)性能優(yōu)異,在空間任務(wù)中具有廣闊的應(yīng)用前景。

遙感圖像目標(biāo)檢測(cè)是遙感圖像處理的基本任務(wù)之一,也是遙感圖像分析、圖像理解和場(chǎng)景理解等高級(jí)應(yīng)用的基礎(chǔ)。但受空間環(huán)境限制,星上計(jì)算能力和存儲(chǔ)能力與地面相差甚遠(yuǎn),而且深度學(xué)習(xí)算法是計(jì)算密集型和存儲(chǔ)密集型算法,其優(yōu)異的性能是以大量計(jì)算資源和存儲(chǔ)資源消耗為代價(jià)。在星上部署基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法比地面上更具有挑戰(zhàn)性,因此,目標(biāo)檢測(cè)算法在軌加速技術(shù)是一個(gè)重要研究領(lǐng)域,同時(shí)也是研究熱點(diǎn)和難點(diǎn)。

在星上實(shí)現(xiàn)深度學(xué)習(xí)算法加速主要涉及加速器硬件平臺(tái)、算法模型以及計(jì)算引擎三個(gè)方面。

加速器硬件平臺(tái)主要有圖形處理器(GPU)、中央處理器(CPU)以及現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)。當(dāng)前地面深度學(xué)習(xí)算法加速以GPU為主,盡管GPU計(jì)算性能強(qiáng)勁,但其功耗動(dòng)輒百瓦以上,能效比較低;CPU能效相對(duì)GPU較高,但其計(jì)算能力有限,因此GPU及CPU均無(wú)法滿足在軌應(yīng)用需求。

隨著深度學(xué)習(xí)算法在地面上不斷深入應(yīng)用,諸如Nvidia Jetson系列GPU及Myriad 2視覺(jué)處理器(VPU)等高能效比加速器也隨之產(chǎn)生。此類(lèi)加速器配套和生態(tài)也較為成熟,可很好應(yīng)用于地面移動(dòng)場(chǎng)景。但此類(lèi)加速器并非針對(duì)空間環(huán)境設(shè)計(jì),在空間應(yīng)用時(shí),會(huì)因空間環(huán)境的單粒子效應(yīng)造成加速器發(fā)生單粒子翻轉(zhuǎn)[5],導(dǎo)致算法性能急劇下降甚至造成加速器永久損壞。因此,需要選用適合空間環(huán)境的硬件平臺(tái)來(lái)實(shí)現(xiàn)深度學(xué)習(xí)算法的加速。

FPGA在傳統(tǒng)星上處理中應(yīng)用廣泛,具有應(yīng)對(duì)空間環(huán)境的成熟方法。此外,F(xiàn)PGA具有可編程特點(diǎn),在模型和算法開(kāi)發(fā)過(guò)程中可以不斷改進(jìn)和完善,甚至可以實(shí)現(xiàn)在軌重構(gòu)。文獻(xiàn)[6-7]表明ESA Φ-Sat-1衛(wèi)星采用Myriad 2 VPU實(shí)現(xiàn)在軌智能云檢測(cè),但由于其可靠性問(wèn)題,在后續(xù)任務(wù)中已經(jīng)采用FPGA作為在軌加速器件。鑒于FPGA的高可靠性、在軌重構(gòu)能力以及強(qiáng)大的處理能力,將FPGA作為星載深度學(xué)習(xí)算法加速硬件平臺(tái)是一個(gè)可行的方案。

在加速器所實(shí)現(xiàn)的算法模型方面,學(xué)者們對(duì)此進(jìn)行了廣泛研究[8-10],但基于FPGA的加速器設(shè)計(jì)與最新算法模型之間仍有較大差距[11]。有一部分FPGA加速器是針對(duì)AlexNet[12],VGG16[13],ResNet[14]等模型所設(shè)計(jì),此類(lèi)模型參數(shù)量大,消耗大量計(jì)算資源和存儲(chǔ)資源,難以在星上部署。

有一部分FPGA加速器是針對(duì)輕量化模型所設(shè)計(jì)[15-17],此類(lèi)模型參數(shù)量少,消耗的計(jì)算量也小。此類(lèi)加速器所消耗的硬件資源和功耗相對(duì)通用大模型具有較大優(yōu)勢(shì),適合在星上進(jìn)行部署。

針對(duì)目標(biāo)檢測(cè)算法在軌應(yīng)用需求,在前期工作中將輕量化思想引入遙感圖像目標(biāo)檢測(cè),提出了一種輕量化遙感圖像目標(biāo)檢測(cè)算法MSF-SNET[18]。該算法參數(shù)量?jī)H有1.54 M,計(jì)算量?jī)H有0.21 GFLOPs(每秒千兆次浮點(diǎn)運(yùn)算),適合在星上部署。針對(duì)特定算法設(shè)計(jì)特定加速器,可以有效提高資源利用率,是未來(lái)FPGA加速器發(fā)展的一個(gè)重要方向。

在加速器設(shè)計(jì)與實(shí)現(xiàn)方面,根據(jù)加速器的結(jié)構(gòu)大致可以分為兩大類(lèi),一類(lèi)是流水線結(jié)構(gòu)[16],另外一類(lèi)是統(tǒng)一處理結(jié)構(gòu)[15,19]。

流水線結(jié)構(gòu)的優(yōu)點(diǎn)是流水線上的每一個(gè)卷積層并行處理,有利于提高加速器性能。該結(jié)構(gòu)的缺點(diǎn)是其硬件開(kāi)銷(xiāo)較大,每一個(gè)卷積層都需要獨(dú)立的處理單元,每一個(gè)處理單元也只能處理與其對(duì)應(yīng)的卷積層,從而造成了硬件資源開(kāi)銷(xiāo)大,利用率低。因此,流水線結(jié)構(gòu)只適合用來(lái)實(shí)現(xiàn)層數(shù)較少且結(jié)構(gòu)單一的卷積網(wǎng)絡(luò)加速。

統(tǒng)一處理結(jié)構(gòu)的優(yōu)點(diǎn)是能夠大幅降低硬件資源消耗,能夠在有限的硬件資源上實(shí)現(xiàn)任意層數(shù)的CNN加速,硬件資源利用率較高。該結(jié)構(gòu)的缺點(diǎn)是需要不斷從外部DDR中讀取輸入特征圖到片上緩存,因而加速器需要有足夠的外部存儲(chǔ)器帶寬,且增加了數(shù)據(jù)從外部存儲(chǔ)器進(jìn)入加速器的時(shí)延以及不斷讀寫(xiě)外部緩存造成功耗的增加。

在空間環(huán)境中能夠提供的硬件資源有限,且MSF-SNET輕量化算法具有分支網(wǎng)絡(luò),在星上采用統(tǒng)一處理結(jié)構(gòu)具有可行性。

無(wú)論流水線結(jié)構(gòu)還是統(tǒng)一處理結(jié)構(gòu),都需要計(jì)算引擎來(lái)完成CNN中的運(yùn)算。計(jì)算引擎按照其實(shí)現(xiàn)方式可以分為GEMM[19](General matrix multiplic-ations),WT[20](Winograd transform),FFT[21](Fast Fourier transform)以及乘累加樹(shù)[22-23]。

GEMM的基本思想是將3維卷積轉(zhuǎn)換成兩個(gè)矩陣相乘。其優(yōu)點(diǎn)是通用性強(qiáng),CPU、GPU以及Intel的OpenCL均采用該方法實(shí)現(xiàn)加速,缺點(diǎn)是矩陣相乘會(huì)在輸入特征圖中引入冗余數(shù)據(jù),從而造成硬件資源利用率降低,計(jì)算效率下降[24]。

WT方法同樣是將卷積轉(zhuǎn)換為矩陣相乘進(jìn)行運(yùn)算。其優(yōu)點(diǎn)是可以有效減少計(jì)算量,缺點(diǎn)是需要設(shè)計(jì)不同的變換矩陣來(lái)應(yīng)對(duì)不同大小的卷積核,在FPGA中實(shí)現(xiàn)矩陣乘法需要消耗大量的存儲(chǔ)資源。

FFT方法是將卷積從空域轉(zhuǎn)換到頻域進(jìn)行計(jì)算,文獻(xiàn)[25]指出FFT方法在卷積核尺寸大于5時(shí)計(jì)算效率較高,在卷積核尺寸較小時(shí)并無(wú)優(yōu)勢(shì)。

乘累加樹(shù)在FPGA加速器中使用較多,該方法通過(guò)給卷積核的每一元素設(shè)計(jì)一個(gè)乘法器,然后使用累加樹(shù)將乘積累加起來(lái)從而實(shí)現(xiàn)卷積運(yùn)算,其優(yōu)點(diǎn)是計(jì)算效率高且實(shí)現(xiàn)方便簡(jiǎn)單,缺點(diǎn)是針對(duì)不同的卷積算子需要設(shè)計(jì)不同的計(jì)算引擎。

雖然文獻(xiàn)中對(duì)基于FPGA的CNN網(wǎng)絡(luò)加速技術(shù)進(jìn)行了廣泛研究,但在輕量化目標(biāo)檢測(cè)加速中仍然存在挑戰(zhàn)。主要體現(xiàn)在輕量化網(wǎng)絡(luò)中往往同時(shí)涉及到多種卷積算子,例如ShuffleNet V2以及Mobi-leNetsV2中均涉及到普通3×3卷積和深度可分離卷積,MSF-SNET涉及到了普通3×3卷積、3×3空洞深度可分離卷積和1×1卷積三種卷積算子。目前主流做法是通過(guò)GEMM方法或者在加速器中設(shè)計(jì)多種計(jì)算引擎來(lái)實(shí)現(xiàn)CNN中多種卷積算子的計(jì)算。文獻(xiàn)[15]針對(duì)MobileNets中涉及到的普通3×3卷積和深度可分離卷積分別設(shè)計(jì)了兩種不同計(jì)算引擎,在CNN中卷積逐層計(jì)算,不同計(jì)算引擎難以同時(shí)利用從而造成了硬件資源利用低,計(jì)算效率下降。

本文針對(duì)輕量化目標(biāo)檢測(cè)算法MSF-SNET在軌部署需求,提出了一種在軌目標(biāo)檢測(cè)算法加速框架以及一種能夠兼容三種卷積算子的計(jì)算引擎,解決了目前輕量化算法FPGA加速中面臨的硬件資源利用低和計(jì)算效率低的問(wèn)題,實(shí)現(xiàn)了輕量化目標(biāo)檢測(cè)算法MSF-SNET在軌加速。

1 算法優(yōu)化

1.1 MSF-SNET算法時(shí)空復(fù)雜度分析

MSF-SNET算法的骨干網(wǎng)主要由如圖1(a)所示的BU(Basic building unit)和圖1(b)所示的SDU(Spatial down sampling(2x) unit)組成。涉及到3×3卷積、1×1卷積及3×3空洞深度可分離卷積。

圖1 骨干網(wǎng)組成模塊Fig.1 Building blocks of MSF-SNET

當(dāng)輸入特征圖X的通道數(shù)為C,高和寬分別為H和W,采用輸入通道數(shù)為C、輸出通道數(shù)為T(mén)的3×3卷積核K進(jìn)行卷積時(shí),輸出特征圖Y為式(1)所示,其尺寸為T(mén)×H×W。

(1)

卷積運(yùn)算占用的存儲(chǔ)空間Msc和消耗的計(jì)算量Jsc分別為式(2)和式(3)所示。

Msc=T×C×D2×Nb

(2)

Jsc=(2×C×T×D2)×H×W

(3)

式中:D表示標(biāo)準(zhǔn)卷積核尺寸;Nb表示每個(gè)參數(shù)量化的比特?cái)?shù)。

當(dāng)采用3×3空洞深度可分離卷積算子對(duì)輸入特征圖X進(jìn)行卷積時(shí)其輸出特征圖Y為式(4)所示。

(4)

其占用的存儲(chǔ)空間Mdsc和消耗的計(jì)算量Jdsc分別表示為式(5)和式(6)。

Mdsc=C×D2×Nb

(5)

Jdsc=(C×D2×H×W)/2

(6)

當(dāng)采用1×1卷積對(duì)輸入特征圖X進(jìn)行卷積時(shí),其輸出特征圖Y為式(7)所示。

(7)

其占用的存儲(chǔ)空間MPSC和消耗的計(jì)算量Jpsc分別表示為式(8)和式(9)。

Mpsc=C×D2×Nb

(8)

Jpsc=(C×D2×H×W)/2

(9)

1.2 卷積并行化

為了高效完成MSF-SNET算法中多種卷積算子運(yùn)算,需要將算法并行化。由于卷積核之間相互獨(dú)立,卷積核各個(gè)通道之間相互獨(dú)立,通道內(nèi)各個(gè)元素之間的運(yùn)算相互獨(dú)立,因此可以在通道和卷積核兩個(gè)維度將其展開(kāi),并在通道內(nèi)采用乘累加樹(shù)的思想實(shí)現(xiàn)算法的并行化。

若通道并行度為C,在設(shè)計(jì)加速引擎時(shí),采用C個(gè)并行計(jì)算單元實(shí)現(xiàn)并行運(yùn)算。如果卷積核并行度為N,則采用N個(gè)加速引擎實(shí)現(xiàn)卷積核并行運(yùn)算。

在卷積運(yùn)算中輸入特征圖是一個(gè)3維張量,其通道數(shù)為Nin,寬和高分別為W和H,卷積核是一個(gè)4維張量,其中卷積核數(shù)目為Nout,其通道數(shù)、寬和高與輸入特征圖對(duì)應(yīng)參數(shù)相同。由于FPGA片上資源有限,并不能夠?qū)⑺惴ㄍ耆⑿谢虼诵枰谕ǖ篮途矸e核兩個(gè)維度上進(jìn)行切片。并行化后第q層卷積運(yùn)算所消耗的時(shí)間如式(10)所示,所有卷積層消耗時(shí)間如式(11)所示。

(10)

(11)

式中:Tr表示輸入特征圖寬和高的分割因子;Nreused是行數(shù)據(jù)復(fù)用因子Nreused_r和列復(fù)用因子Nreused_c之積。

從式(10)和式(11)可以看出算法所消耗的時(shí)間與并行度C和N成反比,受片上計(jì)算資源限制,C和N需要受式(12)約束。

N×C×NC_DSP≤αNDSP

(12)

式中:NC_DSP為單個(gè)通道卷積計(jì)算所消耗的計(jì)算資源數(shù)量;NDSP為片上計(jì)算資源總數(shù);α為經(jīng)驗(yàn)因子,一般情況下該值取0.7為宜。

1.3 批歸一化層優(yōu)化

為了提高計(jì)算引擎效率,減少硬件資源消耗,將批歸一化運(yùn)算融合到卷積層中。在訓(xùn)練過(guò)程中,批歸一化可以用式(13)和式(14)表示,其中μ和σ2為均值和方差。

(13)

(14)

(15)

(16)

Y=X*W+B

(17)

Y=X*W′+B′

(18)

在訓(xùn)練結(jié)束后超參數(shù)γ和β以及統(tǒng)計(jì)參數(shù)均值和方差已經(jīng)確定,模型中的權(quán)重和偏置可以分別表示為式(15)和式(16)。因此,式(17)所示的卷積運(yùn)算可以融合為式(18)所示的運(yùn)算。在加速器中無(wú)需再單獨(dú)設(shè)計(jì)批歸一化處理單元。

2 MSF-SNET算法FPGA加速器

2.1 加速器框架

加速總體框架如圖2所示,主要包含控制模塊、緩存模塊和計(jì)算模塊三大部分。緩存模塊用于臨時(shí)存儲(chǔ)模型權(quán)重、輸入特征圖和輸出特征圖。片上緩存容量有限,無(wú)法將模型所有參數(shù)及輸入特征圖緩存在片上RAM中,需要將模型參數(shù)和輸入特征圖分割成運(yùn)算數(shù)據(jù)單元逐次加載。

圖2 MSF-SNET算法加速總體框架Fig.2 The overall structure of accelerator for MSF-SNET algorithm

在運(yùn)算時(shí)通過(guò)數(shù)據(jù)總線將輸入特征圖和模型權(quán)重從片上緩存器加載到計(jì)算單元。在運(yùn)算結(jié)束后通過(guò)數(shù)據(jù)總線將計(jì)算結(jié)果寫(xiě)入片上緩存。

計(jì)算模塊負(fù)責(zé)完成MSF-SNET算法中涉及到的所有運(yùn)算。計(jì)算模塊由多個(gè)功能相同的計(jì)算引擎組成,完成卷積核維度的并行計(jì)算,其數(shù)量為N,每個(gè)計(jì)算引擎中含有16 bit定點(diǎn)運(yùn)算資源,完成基本的乘累加及比較運(yùn)算。各個(gè)計(jì)算引擎之間通過(guò)數(shù)據(jù)總線和控制總線相連。根據(jù)FPGA可提供的計(jì)算資源靈活增加或者減少計(jì)算引擎數(shù)量,各個(gè)計(jì)算引擎并行完成所分配的計(jì)算任務(wù)。

由1.2節(jié)分析可知,計(jì)算單元的通道并行度為C,卷積核并行度為N,每個(gè)時(shí)鐘周期加速器可以處理N個(gè)卷積核的C個(gè)通道,因此在加速器啟動(dòng)后將N個(gè)卷積核的C個(gè)參數(shù)從外部DDR3加載到權(quán)值緩存中,然后將切片后的輸入特征圖從外部DDR3中加載到輸入特征緩存。當(dāng)輸入特征圖和權(quán)值參數(shù)準(zhǔn)備就緒之后,將二者同時(shí)加載到計(jì)算單元完成相應(yīng)運(yùn)算。以此方式完成卷積層中卷積核所有通道運(yùn)算,并通過(guò)輸入特征緩存將計(jì)算結(jié)果寫(xiě)入外部DDR3。

2.2 并行計(jì)算引擎

深度卷積網(wǎng)絡(luò)模型參數(shù)通常采用32 bit全精度浮點(diǎn)數(shù)表示,但FPGA并不擅長(zhǎng)處理浮點(diǎn)型數(shù)據(jù)。為了在FPGA上實(shí)現(xiàn)該算法,在通道間采用動(dòng)態(tài)量化策略,在通道內(nèi)采用靜態(tài)量化策略將32 bit全精度浮點(diǎn)數(shù)模型參數(shù)轉(zhuǎn)換為16比特定點(diǎn)模型參數(shù)。

計(jì)算引擎需要完成MSF-SNET目標(biāo)檢測(cè)算法中所包含的1×1卷積、3×3卷積、3×3可分離空洞卷積、ReLU激活、maxpool等功能。為了實(shí)現(xiàn)不同卷積算子,文獻(xiàn)[16]針對(duì)不同算子設(shè)計(jì)了不同計(jì)算單元,由于同一時(shí)刻并非所有算子都參與運(yùn)算,這種設(shè)計(jì)方法大大降低了計(jì)算資源利用率。為了提高計(jì)算引擎的效率及利用率,本文提出了一種3維立體計(jì)算引擎,實(shí)現(xiàn)了在同一計(jì)算單元中兼容1×1卷積、3×3卷積及3×3可分離空洞卷積三種卷積算子,有效提高了資源利用率。

如圖3所示,3維立體計(jì)算引擎由多個(gè)計(jì)算單元堆疊形成,其數(shù)量為C。每個(gè)計(jì)算單元均能夠獨(dú)立完成三種卷積算子運(yùn)算、激活及池化運(yùn)算。計(jì)算引擎并行完成C個(gè)通道的運(yùn)算,這種設(shè)計(jì)具有很高的靈活性,可以根據(jù)FPGA片上資源以及加速器的性能需求來(lái)選擇合適的計(jì)算單元數(shù)量。每個(gè)計(jì)算單元中包含9個(gè)乘法器、9個(gè)加法器、9個(gè)寄存器、后處理單元以及ReLU模塊。

圖3 三維立體計(jì)算引擎Fig.3 3D computing engine

對(duì)于標(biāo)準(zhǔn)3×3卷積,每個(gè)通道需要進(jìn)行9次乘法運(yùn)算并將其結(jié)果累加。輸入特征圖緩存器輸入一個(gè)通道的數(shù)據(jù),權(quán)重緩存器中輸入卷積核的一個(gè)通道的參數(shù)。采用9個(gè)乘法器完成卷積中的乘法運(yùn)算,之后通過(guò)選擇器將9個(gè)加法器組成一個(gè)加法樹(shù),以流水線方式實(shí)現(xiàn)乘累加。卷積結(jié)果寫(xiě)入寄存器R9中,多個(gè)通道的卷積結(jié)果通過(guò)加法器累加到一起。再將同一計(jì)算引擎中的多個(gè)計(jì)算單元的計(jì)算結(jié)果累加即實(shí)現(xiàn)了一個(gè)卷積核的一次卷積運(yùn)算。

3×3可分離空洞卷積與標(biāo)準(zhǔn)3×3卷積的計(jì)算過(guò)程相同,但輸入特征圖和卷積核不同。標(biāo)準(zhǔn)卷積一次輸入3×3的特征圖,空洞卷積則需要輸入5×5的特征圖;標(biāo)準(zhǔn)卷積每個(gè)卷積核有多個(gè)通道,而空洞卷積每個(gè)卷積核僅有一個(gè)通道。由于二者計(jì)算過(guò)程一致,在輸入特征圖進(jìn)入緩存時(shí),將空洞去除,從而使得同一計(jì)算單元能夠計(jì)算空洞卷積。

對(duì)于1×1卷積,每個(gè)通道僅需要一次乘法運(yùn)算,然后將多個(gè)通道的乘積累加。為了充分利用計(jì)算單元中的運(yùn)算資源,通過(guò)選擇器將計(jì)算單元中的9個(gè)乘法器和9個(gè)加法器配置為可以獨(dú)立運(yùn)算的卷積運(yùn)算單元。此時(shí),輸入特征圖緩存器輸入一個(gè)通道的數(shù)據(jù),權(quán)重緩存器輸入9個(gè)卷積核,在一個(gè)計(jì)算單元中可并行完成9個(gè)卷積核運(yùn)算。

圖4 最大池化單元Fig.4 Maxpooling unit

MSF-SNET算法在第一層卷積之后需要進(jìn)行一次3×3最大池化。通常卷積計(jì)算采用逐行滑動(dòng)方法,這種卷積計(jì)算方法需要采用line buffer組成池化窗口[15]。為了減少池化所消耗的存儲(chǔ)資源,本文利用卷積計(jì)算順序形成池化窗口。卷積運(yùn)算順序按照局部Z形滑動(dòng),即在卷積計(jì)算過(guò)程中先水平滑動(dòng)3次,然后垂直滑動(dòng)1次,以此類(lèi)推,完成9個(gè)卷積窗口計(jì)算后便會(huì)形成一個(gè)3×3的池化窗口。從而避免因使用line buffer造成的資源消耗。

最大池化單元設(shè)計(jì)如圖4所示。池化運(yùn)算單元輸入為3×3卷積運(yùn)算結(jié)果。兩個(gè)控制信號(hào)分別為是否是池化層及是否需要進(jìn)行激活。寄存器R用來(lái)存儲(chǔ)當(dāng)前最大值,如果是池化層,則將寄存器中存儲(chǔ)的最大值與當(dāng)前卷積結(jié)果進(jìn)行比較,并更新寄存器。當(dāng)9個(gè)卷積窗口均完成之后得到最大值。

2.3 數(shù)據(jù)組織與緩存設(shè)計(jì)

為降低頻繁訪問(wèn)外部緩存帶來(lái)的數(shù)據(jù)傳輸時(shí)延和功耗,需要設(shè)置片內(nèi)特征圖緩存和模型參數(shù)緩存。

模型參數(shù)緩存設(shè)計(jì)如圖5所示,加速器中N個(gè)計(jì)算引擎同步并行運(yùn)行,針對(duì)各計(jì)算引擎設(shè)計(jì)獨(dú)立緩存器WB(Weight Buffer),從而實(shí)現(xiàn)模型參數(shù)到計(jì)算引擎的同步加載。每個(gè)計(jì)算引擎中又包含了C個(gè)獨(dú)立計(jì)算單元,每個(gè)計(jì)算單元可獨(dú)立完成一次3×3卷積或9次1×1卷積。在WB中設(shè)置C個(gè)獨(dú)立BR(Block RAM),分別用來(lái)緩存每個(gè)計(jì)算單元所需要的參數(shù)。BR位寬為9個(gè)16位字(144 bit),深度為2×Mi,其中Mi為單次加載的輸入特征圖的通道數(shù)。每個(gè)地址存儲(chǔ)1個(gè)3×3×Mi卷積核中一個(gè)通道的參數(shù)或者9個(gè)1×1卷積核中一個(gè)通道的參數(shù)。

計(jì)算3×3卷積時(shí)每個(gè)WB中緩存1個(gè)卷積核。卷積核按照通道均勻存儲(chǔ)在不同BR中,每個(gè)地址存儲(chǔ)一個(gè)通道。例如,在C=16,Mi=32時(shí),對(duì)于3×3×512的卷積核,第0至31通道按照順序緩存在BR(0)中,第32至第63通道緩存在BR(1)中,以此類(lèi)推,第480通道至511通道緩存在BR(15)中。每個(gè)時(shí)鐘周期每個(gè)計(jì)算單元從其對(duì)應(yīng)的BR中加載一個(gè)卷積核的一個(gè)通道進(jìn)行運(yùn)算。Mi個(gè)時(shí)鐘周期便可以完成一個(gè)卷積核的運(yùn)算。

圖5 模型參數(shù)緩存設(shè)計(jì)Fig.5 Weight buffer organization

1×1卷積核在緩存中的組織如圖6所示。每個(gè)WB中緩存9個(gè)卷積核,9個(gè)卷積核并列存儲(chǔ),同樣按照通道均勻存儲(chǔ)在不同BR中,每個(gè)地址并列存儲(chǔ)9個(gè)卷積核的一個(gè)通道。例如,9個(gè)1×1×512的卷積核的第0通道并列存儲(chǔ)在BR(0)中的0地址上。其中第0比特至第15比特為Filter0第一通道的參數(shù),第16比特至第31比特為Filter1第一通道的參數(shù),以此類(lèi)推,在第128比特至第143比特為Filter8第一通道參數(shù)。每個(gè)時(shí)鐘周期每個(gè)計(jì)算單元可以從其對(duì)應(yīng)BR中加載9個(gè)卷積核的一個(gè)通道進(jìn)行運(yùn)算。Mi個(gè)時(shí)鐘周期便可以完成9個(gè)卷積核運(yùn)算。

圖6 1×1卷積核參數(shù)緩存設(shè)計(jì)Fig.6 1×1 convolution weight buffer organization

受FPGA內(nèi)部BRAM資源限制,無(wú)法將特征圖中所有數(shù)據(jù)加載到片上緩存,因此需要將特征圖進(jìn)行分塊后逐塊加載。為了適配算法中3×3空洞卷積,特征圖按照5×5×Mi大小的數(shù)據(jù)塊進(jìn)行加載,其中Mi為所加載的輸入特征圖的通道數(shù)。

如圖7所示,加速器中共設(shè)置4個(gè)數(shù)據(jù)緩沖器DB(Data Buffer),每個(gè)DB緩存容量與特征圖數(shù)據(jù)塊大小一致。將DB0和DB1組成一個(gè)乒乓緩沖器,DB2和DB3組成另外一個(gè)乒乓緩沖器,從而使得加速器能夠連續(xù)將數(shù)據(jù)送入計(jì)算引擎進(jìn)行計(jì)算。在使用DB0中的數(shù)據(jù)時(shí)將第2塊數(shù)據(jù)預(yù)加載到DB1中。在使用DB1中的數(shù)據(jù)時(shí)將第3塊數(shù)據(jù)加載到DB0中,以此類(lèi)推循環(huán)使用兩個(gè)數(shù)據(jù)緩存器。

每個(gè)DB由5個(gè)獨(dú)立的子緩存器組成,每個(gè)子緩存器用來(lái)存儲(chǔ)數(shù)據(jù)塊一行中所有通道的數(shù)據(jù)。從子緩存器中讀出的數(shù)據(jù)共享給所有計(jì)算引擎,并與不同的卷積核進(jìn)行卷積。從圖中可以看出每個(gè)子緩存器設(shè)計(jì)為三維立體緩存形式,其存儲(chǔ)位寬為5個(gè)字,深度為Mi,高度為N,其中N為計(jì)算引擎中計(jì)算單元數(shù)目。數(shù)據(jù)塊的一行中Mi個(gè)通道所有數(shù)據(jù)按照通道均勻存儲(chǔ)在子緩存器中。在一個(gè)時(shí)鐘周期內(nèi)可以并行讀出N個(gè)通道的數(shù)據(jù)。

由于5個(gè)子緩存器中分別存儲(chǔ)了5行特征圖,在卷積計(jì)算過(guò)程中,分別從不同的子緩存器中讀出特征圖數(shù)據(jù)即可以組成一個(gè)卷積窗口。

圖7 輸入特征圖緩存設(shè)計(jì)Fig.7 Input feature map buffer organization

2.4 加速器性能分析

文獻(xiàn)[10]引入了針對(duì)FPGA的Roofline模型用于評(píng)估算法與加速器之間的匹配程度。本文采用該模型對(duì)所設(shè)計(jì)的加速器進(jìn)行定量分析。

加速器性能PATP為

PATP=min(PPE×S,IC×BW)

(19)

式中:PPE為單個(gè)計(jì)算單元的峰值性能(GFLOPS)。

式(19)中S為可擴(kuò)展因子,表示為

(20)

式中:AR表示FPGA中可用資源;RCPE表示每個(gè)計(jì)算單元所消耗的資源。

IC計(jì)算強(qiáng)度,定義為每字節(jié)外部DRAM數(shù)據(jù)流所能支撐的計(jì)算量(FLOPS/Byte),該參數(shù)與算法相關(guān),代表了加速器所需要的帶寬。BW表示加速器可以提供的帶寬。

根據(jù)FPGA的Roofline模型中各個(gè)參數(shù)的定義可知,在本算法中PPE為

PPE=F×NBPW×NWOPK

(21)

式中:F表示計(jì)算單元運(yùn)行頻率;NBPW表示運(yùn)算字的字節(jié)數(shù)目,本設(shè)計(jì)中運(yùn)算字節(jié)數(shù)為2;NWOPK表示單個(gè)計(jì)算單元所能完成的運(yùn)算量,本設(shè)計(jì)中一個(gè)時(shí)鐘周期內(nèi)完成乘法和加法運(yùn)算各9次。

根據(jù)可擴(kuò)展因子的定義,S可表示為

(22)

式中各項(xiàng)分子表示FPGA中所包含的LUT,F(xiàn)F,DSP,BRAM資源,分母為單個(gè)計(jì)算單元所消耗的FPGA資源。

計(jì)算強(qiáng)度為一個(gè)數(shù)據(jù)復(fù)用周期內(nèi)總計(jì)算量與數(shù)據(jù)讀寫(xiě)總量的比值,表示為

(23)

將運(yùn)算中各個(gè)參數(shù)代入式(23)之后,計(jì)算強(qiáng)度IC表示為

(24)

式中:Nreused_r為行數(shù)據(jù)復(fù)用因子;Nreused_c為列數(shù)據(jù)復(fù)用因子;NPE為同一復(fù)用數(shù)據(jù)通道計(jì)算單元數(shù)目;Nread為數(shù)據(jù)復(fù)用周期內(nèi)從外部DRAM中讀取數(shù)據(jù)的次數(shù);Ndata為單次讀取的數(shù)據(jù)量;No為單個(gè)數(shù)據(jù)復(fù)用周期內(nèi)需要向外部DARM寫(xiě)入的數(shù)據(jù)量。三種卷積算子參數(shù)及計(jì)算強(qiáng)度如表1所示。

表1 三種卷積算子參數(shù)及計(jì)算強(qiáng)度Table 1 Computational intensity and parameters for three convolution operators

BW為運(yùn)算平臺(tái)所具有的外部DRAM帶寬,本文所設(shè)計(jì)的平臺(tái)外部掛8片DDR3,總數(shù)據(jù)位寬為256 bit,數(shù)據(jù)總線頻率為800 MHz,按照80%的效率計(jì)算,DDR帶寬為40.96 GB。從roofline模型可知,可擴(kuò)展因子S、時(shí)鐘頻率F以及外部DRAM帶寬BW是影響加速器性能的主要因素,其中F和S確定了加速器算力上限,BW確定了加速器帶寬上限。

當(dāng)BW確定時(shí),加速器的帶寬上限確定。由式(19)可知其帶寬瓶頸IC×BW為2589.01GFLOPs。此時(shí),增加時(shí)鐘頻率F和可擴(kuò)展因子S均會(huì)提高加速器的計(jì)算性能,但前者會(huì)消耗FPGA中的布線資源,后者會(huì)消耗FPGA中的計(jì)算資源。當(dāng)時(shí)鐘頻率為100 MHz時(shí),S是影響加速器的主要因素。例如,當(dāng)S為128時(shí),其計(jì)算性能為460.8GFLOPs,當(dāng)S增加到256時(shí),其計(jì)算性能提升到了921.6GFLOPs。當(dāng)S確定時(shí),提高時(shí)鐘頻率會(huì)提升加速器的性能,例如,在S為256時(shí),將時(shí)鐘頻率從100 MHz提高到200 MHz時(shí),其計(jì)算性能從921.6GFLOPs提升到1843.2GFLOPs。但是時(shí)鐘頻率超過(guò)200 MHz之后FPGA布線難度增大,甚至?xí)斐刹季€失敗。

在時(shí)鐘頻率F和可擴(kuò)展因子S確定,即加速器所消耗的資源確定的情況下,外部BRAM的帶寬BW是影響加速器性能的主要因素。例如,當(dāng)時(shí)鐘頻率為200 MHz,S為256時(shí),由式(21)可知,其計(jì)算性能的瓶頸PPE×S為1843.2GFLOPs。當(dāng)DDR芯片從8片減少到4片時(shí),加速器的計(jì)算性能IC×BW為1294.54 GFLOPs,由此可見(jiàn),由于DDR帶寬不足造成了加速器性能由1843.2GFLOPs下降到了1294.54 GFLOPs,損失了29.76%。

3 仿真校驗(yàn)

本文中使用Verilog硬件描述語(yǔ)言在Xilinx XC7VX690T,XC7K480T,XC7A200T,XC7Z045四種FPGA上實(shí)現(xiàn)了該加速器,并對(duì)不同F(xiàn)PGA平臺(tái)上加速器的性能進(jìn)行評(píng)估,通過(guò)峰值性能、功耗及推理時(shí)間三個(gè)指標(biāo)對(duì)加速器進(jìn)行評(píng)價(jià)。加速器設(shè)計(jì)采用了Xilinx VIVADO2019.2,加速器功耗采用Xilinx功耗分析工具獲得。

3.1 加速器性能評(píng)估

本文加速器在不同F(xiàn)PGA上的資源占用情況如表2所示。當(dāng)N=16,C=16時(shí),此時(shí)擴(kuò)展因子S為256,可以在XC7VX690T上實(shí)現(xiàn)該加速器。DSP消耗達(dá)到64%,BRAM資源消耗達(dá)到69.80%,LUT和FF資源消耗分別為21.32%和21.15%。

表2 加速器在不同F(xiàn)PGA上的資源消耗情況Table 2 Utilization of the accelerator on different FPGA

可見(jiàn),DSP資源和BRAM資源是限制加速器規(guī)模和性能的主要因素。時(shí)鐘頻率改變不影響DSP資源和BRAM資源的消耗,對(duì)FF資源和LUT資源的消耗稍有不同。當(dāng)N和C參數(shù)均為8時(shí),可將該加速器適配到Xilinx中端FPGA XC7K480T上,當(dāng)N和C參數(shù)分別為4和8時(shí),可以將該加速器適配到低端平臺(tái)XC7A200T上,當(dāng)N和C參數(shù)分別為4和12時(shí),可以將該加速器適配到Xilinx嵌入式平臺(tái)XC7Z045上。可見(jiàn),該框架具有良好的擴(kuò)展性,可以根據(jù)需求部署到不同F(xiàn)PGA上。

表3 加速器在不同F(xiàn)PGA上的性能(100 MHz)Table 3 Performance of the accelerator on different FPGA (100 MHz)

當(dāng)頻率為100 MHz時(shí),加速器在不同F(xiàn)PGA上的性能如表3所示。由于XC7VX690T的DSP資源和BRAM資源最多,其可擴(kuò)展因子S最大,在相同的時(shí)鐘頻率下加速器可以達(dá)到最高性能和最大能效比。此時(shí),加速器計(jì)算性能為921.6GFLOPs,功耗為9.94 W,能效比為92.71,推理時(shí)間為0.43 ms。四種FPGA平臺(tái)中XC7A200T資源最少,其可擴(kuò)展因子S最高僅為32,此時(shí)加速器性能為115.2GFLOPs。可見(jiàn),在相同時(shí)鐘頻率下,不同F(xiàn)PGA平臺(tái)上可擴(kuò)展因子不同,所能達(dá)到的性能也不同。

當(dāng)頻率為150 MHz時(shí),加速器在不同F(xiàn)PGA上的性能如表4所示。由于頻率提高了50%,加速器在XC7VX690T上的計(jì)算性能提高了50%,達(dá)到了1382.4GFLOPs,推理時(shí)間也縮短到了0.29 ms,但功耗增加了3.17 W。在其它三種FPGA平臺(tái)上加速器的性能也相應(yīng)提高了50%,功耗也有所增加。可見(jiàn),頻率是影響加速器性能的關(guān)鍵因素,提高頻率,可以提高加速器性能,但其功耗也會(huì)增加。

表4 加速器在不同F(xiàn)PGA上的性能(150 MHz)Table 4 Performance of the accelerator on different FPGA (150 MHz)

當(dāng)時(shí)鐘頻率為200 MHz時(shí),加速器在不同F(xiàn)PGA上的性能如表5所示。當(dāng)頻率進(jìn)一步增加,加速器在XC7VX690T上性能達(dá)到了1843.2GFLOPs,功耗也增加到了16.32 W,能效比為112.94。

表5 加速器在不同F(xiàn)PGA上的性能(200 MHz)Table 5 Performance of the accelerator on different FPGA (200 MHz)

顯然,在加速器帶寬和FPGA平臺(tái)確定的情況下,可以通過(guò)提高時(shí)鐘頻率來(lái)提高加速器性能,但是,當(dāng)頻率提高到某一個(gè)值時(shí),進(jìn)一步提高時(shí)鐘頻率會(huì)使得布線失敗。在本設(shè)計(jì)中,時(shí)鐘頻率超過(guò)200 MHz時(shí),布線資源緊張。值得注意的是在時(shí)鐘頻率為200 MHz時(shí)也可以將本文加速器部署到Xilinx低端FPGA XC7A200T上。在功耗為3.88 W時(shí)可以達(dá)到230.4GFLOPs的計(jì)算性能,對(duì)于256×256×3的圖像推理時(shí)間只需要1.72 ms。

3.2 性能對(duì)比

由于不同F(xiàn)PGA的資源以及采用的工藝不同,加速器能達(dá)到的規(guī)模和性能也不同。為了實(shí)現(xiàn)公平對(duì)比,本文分別在Xilinx Virtex-7系列FPGA,Xilinx Z系列FPGA和Intel FPGA上進(jìn)行了對(duì)比。Virtex系列FPGA是空間應(yīng)用的主流器件,本文將所提出的加速器分別在100 MHz,150 MHz和200 MHz時(shí)與其它性能較好的加速器進(jìn)行對(duì)比。

表6 與其它加速器性能對(duì)比(100 MHz)Table 6 Performance comparison with other accelerators (100 MHz)

表6顯示了在Virtex-7系列FPGA上頻率為100 MHz時(shí)本文所提加速器與其它加速器性能對(duì)比結(jié)果。文獻(xiàn)[27]與本文均采用了XC7VX690T,雖然文獻(xiàn)[23,26]采用了XC7VX485T,但屬于同一系列,具有可比性。此時(shí),本文加速器計(jì)算性能為921.6GFLOPS,是文獻(xiàn)[27]加速器的2.07倍,是文獻(xiàn)[23]加速器的14.96倍。本文加速器功耗為9.94 W,是文獻(xiàn)[27]加速器功耗的38.2%,是文獻(xiàn)[23]加速器功耗的53%。本文所提出加速器能效比達(dá)到了92.71,是文獻(xiàn)[23]中加速器能效比的28倍,是文獻(xiàn)[27]中加速器能效比的5.16倍。由于本文采用了輕量化網(wǎng)絡(luò),計(jì)算時(shí)間為0.43 ms,是文獻(xiàn)[27]推理時(shí)間的12.75%。可見(jiàn),在100 MHz時(shí),本文加速器在計(jì)算性能、計(jì)算時(shí)間以及能效比方面具有優(yōu)勢(shì)。

表7顯示了頻率為150 MHz時(shí)本文提出的加速器與其它加速器的性能對(duì)比。可以看出文獻(xiàn)[13,28]中加速器頻率為150 MHz,文獻(xiàn)[12]中加速器頻率為156 MHz。由于本文計(jì)算引擎中實(shí)現(xiàn)了三種卷積算子的有機(jī)融合,從而大大提高了FPGA中DSP資源的利用率,在150 MHz頻率下,性能達(dá)到了1382.4GFLOPs,是文獻(xiàn)[12]加速器性能的2.44倍,是文獻(xiàn)[13]加速器性能的6.78倍,是文獻(xiàn)[28]加速器的2.17倍。由于本文采用了輕量化模型,推理時(shí)間具有極大優(yōu)勢(shì),僅0.29 ms即可完成一幅圖像推理,而文獻(xiàn)[13]中的加速器采用了VGG網(wǎng)絡(luò),推理時(shí)間高達(dá)151.8 ms。在能效方面,本文加速器能效是文獻(xiàn)[13]加速器的18.08倍,是文獻(xiàn)[12]加速器的4.76倍。

表7 與其它加速器性能對(duì)比(150 MHz)Table 7 Performance comparison with other accelerators (150 MHz)

表8顯示了頻率為200 MHz時(shí)本文加速器與其它加速器的性能對(duì)比。表中TY3代表Tiny YOLO V3,Y2代表YOLO V2,RS18代表ResNet-18。在相同時(shí)鐘頻率下本文加速器計(jì)算性能與文獻(xiàn)[16]所提加速器的計(jì)算性能相當(dāng),在功耗和能效比方面有一定優(yōu)勢(shì)。但是在推理時(shí)間上文獻(xiàn)[16]消耗時(shí)間是本文所提方案的41.59倍。本文加速器在性能、推理時(shí)間和能耗方面遠(yuǎn)超文獻(xiàn)[14,17]中的加速器。

表8 與其它加速器性能對(duì)比(200 MHz)Table 8 Performance comparison with other accelerators (200 MHz)

表9顯示了本文提出的加速器在Xilinx Z系列FPGA上與其它加速器的性能對(duì)比。文獻(xiàn)[29]中加速器的時(shí)鐘頻率為150 MHz,文獻(xiàn)[30-31]中加速器時(shí)鐘頻率分別為167 MHz和142 MHz。本文加速器計(jì)算性能方面略優(yōu)于文獻(xiàn)[30-31]中加速器計(jì)算性能,是文獻(xiàn)[29]中加速器計(jì)算性能的1.89倍。本文加速器功耗為1.58 W,是文獻(xiàn)[29]中加速器功耗的35.5%,是文獻(xiàn)[31]的80%。本文加速器能效比為81,是文獻(xiàn)[29]中加速器能效比的5.7倍,是文獻(xiàn)[31]中加速器能效比的1.43倍。可見(jiàn),在Xilinx Z系列FPGA上,本文加速器性能優(yōu)于同類(lèi)加速器性能。

表9 在Xilinx Z系列FPGA上與其它加速器性能對(duì)比Table 9 Performance comparison with other accelerators on Xilinx Z series FPGA

4 結(jié) 論

本文提出了一種在軌高效目標(biāo)檢測(cè)加速器框架,并在Xilinx多款FPGA上實(shí)現(xiàn)了該加速器。所提出的計(jì)算引擎設(shè)計(jì)方法實(shí)現(xiàn)了三種卷積算子的有機(jī)融合,使得目標(biāo)檢測(cè)算法與硬件加速器更好的匹配,達(dá)到最優(yōu)性能和最高能效比。

通過(guò)在多款FPGA及多種時(shí)鐘頻率下對(duì)該加速器的性能評(píng)估我們可以得出以下結(jié)論:

1) 與同類(lèi)加速器方案相比,本文所提出的加速器框架在性能、功耗、能效比及計(jì)算時(shí)間方面具有優(yōu)勢(shì),適合部署在資源受限環(huán)境中,具有良好的星上應(yīng)用前景和價(jià)值;

2) 通過(guò)在Xilinx XC7VX690T,XC7K480T,XC7A200T,XC7Z045 FPGA上的驗(yàn)證表明該框架具有良好的可擴(kuò)展性和適配性,可以根據(jù)性能、功耗、推理時(shí)間及成本要求將其部署到不同F(xiàn)PGA上;

3) 雖然本文提出的目標(biāo)檢測(cè)算法加速框架是針對(duì)MSF-SNET算法所做的加速,但該加速框架可以推廣應(yīng)用到其它算法的加速中。

綜上所述,本文所提出的加速器框架具有良好的性能,不僅具有理論價(jià)值也具有工程借鑒意義。此外,該加速框架針對(duì)目標(biāo)檢測(cè)算法設(shè)計(jì),下一步可以將其推廣到其它算法。

猜你喜歡
引擎
以學(xué)促干 挺膺擔(dān)當(dāng) 激活砥礪前行的紅色引擎
江陰市“三個(gè)創(chuàng)新”打造危化品安全監(jiān)管新引擎
新海珠,新引擎,新活力!
消費(fèi)繼續(xù)發(fā)揮經(jīng)濟(jì)增長(zhǎng)第一引擎作用
三生 三大引擎齊發(fā)力
藍(lán)谷: “涉藍(lán)”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
休閑垂釣 傳統(tǒng)漁業(yè)新引擎
信息化,“盛京”加速的新引擎
無(wú)形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
基于Cocos2d引擎的PuzzleGame開(kāi)發(fā)
主站蜘蛛池模板: 人妻一本久道久久综合久久鬼色| 国产污视频在线观看| 亚洲中文字幕久久无码精品A| 国产你懂得| www.99精品视频在线播放| 在线观看国产精美视频| 色欲色欲久久综合网| 99久久99视频| 广东一级毛片| 亚洲综合婷婷激情| 日韩精品亚洲人旧成在线| 国产91透明丝袜美腿在线| 久久精品人人做人人爽97| 五月婷婷欧美| 国产网站一区二区三区| 无码人中文字幕| 女人18毛片久久| 日本免费a视频| 人妻熟妇日韩AV在线播放| 日韩AV无码免费一二三区| lhav亚洲精品| 亚洲欧洲一区二区三区| 欧美三级视频网站| 天天摸夜夜操| 波多野结衣第一页| 国产网站免费| 91蝌蚪视频在线观看| 国产天天色| 国产成人a在线观看视频| 亚洲国内精品自在自线官| 人妻无码中文字幕一区二区三区| 88av在线| 亚洲视频免费在线| 无码精品国产VA在线观看DVD| 欧美亚洲国产日韩电影在线| 亚洲视频免| 久久亚洲AⅤ无码精品午夜麻豆| 国产成人凹凸视频在线| 国产欧美日韩一区二区视频在线| 国产办公室秘书无码精品| 亚洲人成网7777777国产| 女人爽到高潮免费视频大全| 国产精品久久久久无码网站| 99热国产在线精品99| 99热这里只有成人精品国产| 色婷婷啪啪| 在线毛片免费| 国产黑人在线| 67194在线午夜亚洲| 制服丝袜在线视频香蕉| 国产亚洲精品在天天在线麻豆| 一本视频精品中文字幕| 国产电话自拍伊人| 久久人人妻人人爽人人卡片av| 免费国产高清视频| 日韩AV手机在线观看蜜芽| 毛片最新网址| 999国内精品视频免费| 激情网址在线观看| 欧美成人一级| 日韩免费毛片视频| 国产毛片一区| 成人蜜桃网| 精品久久久久久久久久久| 任我操在线视频| 国产黑丝视频在线观看| 伊人久久精品亚洲午夜| 一本一道波多野结衣一区二区| 国产99在线观看| 日韩久草视频| 国产特级毛片aaaaaa| 亚洲一区波多野结衣二区三区| 91精品国产无线乱码在线| 国产美女丝袜高潮| 欧美视频在线播放观看免费福利资源 | 成年人国产视频| 国产精品综合久久久| 天堂va亚洲va欧美va国产| 久久影院一区二区h| 亚州AV秘 一区二区三区| 亚洲精品va| 欧美日韩在线亚洲国产人|