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

面向卷積神經網絡的FPGA 加速器架構設計

2020-03-19 13:48:14李炳劍秦國軒朱少杰裴智慧
計算機與生活 2020年3期
關鍵詞:指令設計

李炳劍,秦國軒,朱少杰,裴智慧

天津大學 微電子學院,天津300072

1 引言

隨著人工智能的高速發展,卷積神經網絡(convolutional neural network,CNN)越來越受到人們的重視,在圖像處理等很多領域發揮著重要的作用[1-2]。相比于傳統算法,CNN 的計算復雜度要高很多,通用CPU已經無法滿足計算需求,目前主要的解決方法是使用GPU 進行CNN 的計算,雖然GPU 在并行計算方面有著天然的優勢,但是在成本和功耗方面有著很大的不足,無法滿足一些低特定場景下的CNN計算要求。

FPGA(field-programmable gate array)具有強大的并行處理能力、靈活的可配置特性和超低功耗,使其成為CNN 的實現平臺的理想選擇。目前已經有很多研究人員研究了使用FPGA 實現CNN 加速[3]。

Farabet 等人提出了一種運用移位寄存器實現卷積運算單元的方案,該結構設計簡單,在一定程度上實現了CNN 中卷積部分的并行化計算,但是這種設計結構并行化計算程度有限,并且對于卷積核尺寸的支持也不夠靈活[4]。

Ma 等人提出了一種卷積層間流水,同一層內部在輸出特征圖數、寬度和高度三個維度展開實現并行化計算的加速器架構。但是該文所提出的架構將特征圖像素和權重都緩存在片上,這種設計對于FPGA 資源需求過多,很難在低端FPGA 上使用[5]。

Feng 等人設計的加速器使用了流水線和循環展開來優化計算過程,實現卷積并行化計算,數據復用的程度也得到了有效提升,但是在嵌套循環重構方面的設計并不合理,雖然節省了硬件資源,但是在計算性能方面不是很理想[6-7]。

Zhang 等人設計了一種用于VGG 網絡加速的FPGA 加速器,該加速器針對VGG 網絡特點進行了特定優化,在Arria10 GX1150 FPGA 上實現了高達1 790 GOP/s 的計算能力,但是缺點也很突出,該加速器只能支持單種特定網絡加速,無法滿足通用化的需求[8]。

Ferdman 等人將研究重點放在了在片內外訪存帶寬需求上。其在文章中指出,在計算神經網絡時,由于是逐層計算,在計算每層的前后都要讀寫特征圖片,這占據了近50%的片外存儲訪問。因此他們提出了一種層間計算融合的模式(fusion),相比其他加速器,在fusion 計算模式中,一層結果計算完成后直接進行下一層的計算而不是被存儲到片外中,這種模式可以盡可能地減少片內外的數據傳輸[9]。

本文在研究了大量CNN 模型特性后,設計了一款基于FPGA 的CNN 加速器,通過使用流水線架構以及多個層面實現的并行計算,提升了CNN 計算效率。設計了片內存儲及權重緩存器(buffer)的雙緩存結構,減少片外存儲訪問的同時實現了有效的數據復用。支持參數化設計,讓所設計的加速器可以適配在不同規模的FPGA 上。通過指令控制可以實現模塊間運算順序的變換以及單個模塊內部配置的變換,這種設計可以實現支持不同的CNN 模型加速的目的。

2 加速器設計研究

2.1 CNN 介紹

卷積神經網絡是一種經典的深度學習模型,目前被廣泛應用于圖像識別等領域。其經典網絡模型包含卷積層、池化層、全連接層等結構,卷積過程如圖1 所示。輸入的圖像首先經過多個卷積層和池化層運算,之后進入全連接層,最后通過輸出層得到最終的分類結果[10]。

在介紹加速器的設計細節之前,首先研究了當前最先進的幾種CNN 模型,目的是通過這些CNN 模型的結構分析來幫助更好地設計加速器所需的功能。幾種典型的CNN 模型列在了表1 中。

CNN 中卷積層的功能是通過卷積運算對輸入數據進行特征值提取。卷積層通過輸入特征圖與由權重wi,j組成的卷積核進行卷積運算,運算結果加上偏置后輸出,輸出即卷積層運算結果[11]。卷積層運算如式(1):

Fig.1 Convolutional neural network圖1 卷積神經網絡示意圖

Table 1 Typical convolutional neural network表1 典型CNN 模型

卷積層內部包含多個卷積核,目前CNN 中卷積核大小正在發生變化。早期的CNN 設計[12]采用的卷積核尺寸為11×11,相比目前最常用的3×3 卷積核要大得多。152 層ResNet 在除了第一層外的所有卷積層都使用了3×3 卷積核。SqueezeNet[13]甚至使用1×1卷積核來進一步降低計算復雜度,實驗結果表明這種結構達到了AlexNet[14]的準確度,而參數量僅為其1/50。在卷積層中使用較小的內核可以顯著地減少計算復雜度,因此目前人們更傾向于使用較小的卷積核。從表1的統計中也可以看出目前最受歡迎的卷積核大小是3×3 卷積核以及1×1 卷積核,因此本文設計的加速器支持3×3 和1×1 兩種卷積核,這樣的設計可以讓所設計的加速器支持大部分最新的CNN模型。

池化層目的是在盡量不丟失圖像特征的前提下,對圖像進行降采樣。目前的CNN 網絡主要有最大池化(Maxpooling)和平均池化(Averagepooling),雖然Maxpooling 和Averagepooling 都對數據進行了下采樣,但是Maxpooling 進行了特征選擇,選出了分類辨識度更好的特征,因此Maxpooling 的效果更好一些,Averagepooling 主要是對整體的特征信息進行下采樣,能更好地減少參數量[15-16]。由表1可以看出目前大部分CNN 運用的是Maxpooling,Averagepooling 僅在部分網絡的特定層中使用,因此本文所設計的加速器僅支持Maxpooling運算。其運算過程如式(2)所示:

CNN 中全連接層是對輸入進行線性空間轉換,得到輸出,其計算過程描述為:

激活函數主要是用來給網絡加入非線性因素,常用的激活函數主要有Sigmod、Tanh、ReLU 等。ReLU 函數比Sigmod 函數和Tanh 函數有更快的收斂速度,因此是目前最受歡迎的激活函數[17-18]。從表1的統計也可以看出,幾種典型的CNN 網絡均使用ReLU 作為激活函數,另外兩種激活函數目前已經很少用到,因此本文所設計的加速器僅支持ReLU運算。

ReLU 模塊設計比較簡單,只需將輸入的負值數據置零即可。ReLU 計算公式為:

下面以VGG16 為例,通過分析VGG16 的網絡結構進一步探討CNN 加速器的設計思路。VGG16 網絡結構如圖2 所示,一共有13個卷積層,3個全連接層和5個池化層,卷積層均為3×3 大小的卷積核,池化層均使用2×2 窗口大小的池化。

Fig.2 VGG network structure圖2 VGG 網絡結構

其每層網絡參數如圖3 所示,特征圖數據量在第一層時最大為3.2 MB,而權重數據在第一個全連接層時數據量最大,達到了102 MB,這樣的數據量很難在FPGA 片上高速緩存。因此,需要設計合理的存儲結構以及數據復用方式,下一節將進行具體探討。

Fig.3 VGG network parameters圖3 VGG 網絡參數

2.2 計算精度優化

VGG 網絡采用的數據為32 位浮點數,這在大部分FPGA 中需要使用3個數字信號處理(digital signal processor,DSP)資源才能實現一次乘累加操作,但如果使用8 位定點數則只需1個DSP 就能實現一次乘累加。同時,使用8 位定點數相比32 位浮點數還能有效減少FPGA的片上存儲資源占用。相關的實驗證實了降低精度對于CNN 識別準確度影響是很低的[19]。因此本文設計中輸入的圖像數據和權重數據均采用8 位定點數,這樣的設計減少了FPGA 資源利用,同時提升了網絡運算速度。

2.3 參數化設計

不同型號的FPGA 可用資源不同,固定的加速器架構無法在不同型號的FPGA 中都發揮最佳的性能,因此提出了參數化的設計方案,通過在綜合前改變參數N的值可以實現不同規模的加速器,所設計的加速器提供了3種參數設置,在N等于32、64、128時分別可以產生512、1 024、2 048個MAC 的加速器架構。

3 加速器設計方案

3.1 加速器整體結構

加速器的整體架構如圖4 所示,由主機和FPGA組成。其中主機主要負責圖像數據、權重數據的預處理以及指令數據生成工作,FPGA 負責整個CNN運算部分。

Fig.4 CNN accelerator overall structure圖4 CNN 加速器整體結構

加速器運算過程由主機負責控制,首先通過主機將圖像和權重數據進行預處理,將精度轉化為8 位定點數。然后根據網絡結構生成指令,當數據和指令準備完成后,主機將圖像數據、權重數據和指令數據傳輸到外部存儲器中,傳輸完成后發出指令控制FPGA 中的CNN 運算單元啟動。當運算完成后,運算結果數據會通過FPGA 發回給主機。

3.2 加速器計算單元架構

CNN 的計算單元流水線結構如圖5 所示。其中卷積運算模塊和池化模塊分別負責CNN 中的卷積和池化運算部分。直接內存存取(direct memory access,DMA)模塊負責從外部雙倍速率同步動態隨機存儲器(double data rate,DDR)中搬運圖像數據、權重數據和指令數據,并負責將運算結果寫回DDR,其中搬運進來的圖像數據存放在片上存儲中,權重數據存放在權重buffer 中,指令數據存放在指令隨機存取存儲器(random access memory,RAM)中,DMA 通過AXI4總線與外部DDR 通信。指令控制模塊負責從指令RAM 中讀取指令數據分發給卷積運算模塊、池化模塊和這兩個模塊相對應的地址控制器,通過一些簡單的指令變換可以實現卷積層、池化層順序方面的排列組合,是否進行歸一化(batch normalization)計算,以及不同卷積核大小間的模式選擇等,這樣的設計可以達到支持不同網絡模型的目的。地址控制器1 負責通過產生地址來訪問片上存儲相應的特征圖數據并將這些數據送入卷積運算單元,同時負責將卷積模塊以及ReLU 模塊處理后的數據寫回片上存儲中,地址產生器1 可以通過產生無效地址來支持零填充(Padding)功能。地址控制器2 負責從片上存儲中讀取上一層卷積和ReLU 運算后的數據送入池化模塊進行池化運算,并負責將結果寫回片上存儲中。

Fig.5 Accelerator computing unit architecture圖5 加速器計算單元架構

本文所設計的架構運算過程為:

(1)將神經網絡模型轉換成加速器能識別的神經網絡指令。

(2)將圖像數據、權重數據和轉換好的神經網絡指令存入FPGA 上的外部DDR 中。

(3)通過CPU 啟動加速器,加速器的DMA 模塊首先啟動,將部分圖像數據搬運到片上存儲中,將權重數搬運到權重buffer 中,將指令數據搬運到指令RAM 中。

(4)當圖像數據和指令數據搬運完成后指令控制模塊啟動,從指令RAM 中讀取指令數據,分發給卷積運算模塊和地址控制模塊。卷積運算模塊收到指令后,根據指令要求從片上存儲中讀取圖像數據同時從權重buffer 中讀取權重數據,并進行卷積運算,卷積運算后將數據送入ReLU 模塊完成ReLU 運算。

(5)卷積以及ReLU 運算完成后,指令控制模塊將后面的指令分發給池化模塊和相應的地址控制模塊。池化模塊收到指令后,從片上存儲中讀取第4 步運算后的數據,根據指令要求進行池化運算,運算后將結果寫回片上存儲。

(6)反復執行步驟(4)和步驟(5),直到整個卷積神經網絡運算完成,然后將運算結果通過DMA 搬運回DDR 中,完成整個加速過程。

3.3 卷積模塊

卷積運算單元如圖6 所示,包括16個處理單元(processing unit,PE)模塊和一個加法器。PE 模塊主要負責卷積運算中乘法運算、一部分加法運算以及歸一化Batch Normalization 運算;加法器負責將16個PE 模塊的計算結果與片上存儲輸入進來的中間結果相累加。

Fig.6 Convolution operation module圖6 卷積運算模塊

PE 模塊結構如圖7 所示,16個PE 模塊每個模塊中有一個權重buffer 負責存儲權重數據以便進行數據復用。其具體運算過程是:輸入PE 的N個8 bit 特征圖數據與相應的N個8 bit 權重數據對應相乘,然后將這N個結果累加起來加上偏置后送入Batch Normalization 模塊進行歸一化計算,然后輸出。

Fig.7 PE module圖7 PE 模塊

3.4 卷積運算并行化

卷積運算是CNN中所占計算量最大的部分,實現卷積并行計算將會顯著提高CNN 的計算效率,以3×3卷積核為例,本文使用了四層循環的算法實現了卷積并行優化。其中輸入的特征圖數據大小為Fx×Fy,卷積核大小為Kx×Ky,通道數為C,卷積核數量為K。

(1)第一層循環

第一層循環如圖8 所示,16個PE 單元從權重buffer 中取16個卷積核N個通道方向的第一個像素點分別與輸入特征圖N個通道方向的第一個像素點相乘,然后在通道方向上累加,輸出結果。

(2)第二層循環

第二層循環如圖9 所示,在這一層循環中,PE 單元中的權重數據不變,通過在特征圖上滑動,得到卷積核N個通道的第一個像素點與部分特征圖相乘并在通道方向上累加的結果。

(3)第三層循環

Fig.8 The first loop of convolution operation圖8 卷積運算第一層循環

Fig.9 The second loop of convolution operation圖9 卷積運算第二層循環

Fig.10 The third loop of convolution operation圖10 卷積運算第三層循環

第三層循環如圖10 所示,這一層循環是通過改變PE 單元中的權重數據,使乘法運算覆蓋整個卷積核以及整個特征圖數據,得到3×3 卷積核N個通道方向上所有像素點與整幅特征圖相乘并在通道方向上累加的結果。在這一層運算中通過從片上存儲取出中間結果送入加法器,完成與3×3 卷積核9個權重數據相對應的特征圖數據在時間方向上累加。

(4)第四層循環

第四層循環如圖11 所示,這一層循環是在上一層循環的基礎上,卷積核與輸入特征圖分別在通道方向上取下一組N個通道,然后重復上面3個循環的操作。

3.5 池化模塊

Maxpooling 運算過程如圖12 所示,通過滑動窗口將輸入特征圖劃分為多個不重疊的圖像塊,圖像塊大小為n×n,其中n由滑動步長決定,然后對每個圖像塊求其最大值,使得輸出圖像長和寬方向都縮小為原來的1/n[20]。

本文設計池化模塊支持2×2 窗口大小的Maxpooling 和3×3 窗口大小的Maxpooling 兩種模式,為了提高池化模塊的計算效率,該模塊設計為由16個單獨的池化模塊組成,16個池化模塊并行計算以達到提高計算效率的目的。單個池化模塊結構如圖13所示,包括一個數據比較器、一個計數器和兩個先進先出存儲器(first input first output,FIFO)模塊,其中數據比較器負責將輸入的數據依次比較,得到最大值結果,計數器負責記錄輸入比較器的數據個數,FIFO 模塊負責輸入輸出數據緩存。對FIFO 模塊的滿信號進行了特殊處理,當輸入數據達到FIFO 最大數據量的一半時,FIFO 滿信號便拉高,這樣的設計有效防止了由于數據請求延遲而導致數據丟失的情況。池化模塊計算過程為:

(1)每個池化模塊通過地址控制器2 從片上存儲中取出卷積層運算后的數據存入FIFO 中等待進行Maxpooling 運算。

(2)第一次計算時,計數器計數為1,此時將輸入FIFO 中的第一個數據存入寄存器延一拍,然后與第二個數據同時送入比較器進行比較得到較大值。

(3)將得到的較大值與FIFO 中下一個數據進行比較。每次從FIFO 中取兩個數據送入比較器,以此類推,直到計數器值為n(n為池化窗口大小),此時池化模塊計算完畢得到最終結果值,每n+1個時鐘周期可以計算出16個Maxpooling 結果。

Fig.11 The fourth loop of convolution operation圖11 卷積運算第四層循環

Fig.12 Maxpooling operation圖12 Maxpooling 運算過程

Fig.13 Pooling module圖13 Pooling 模塊

3.6 存儲結構

存儲分為片上存儲和片外存儲,在FPGA 中片上存儲主要使用塊隨機存儲器(block RAM,BRAM),特點是存儲量小,但是讀寫速度快。片外存儲主要使用動態隨機存取存儲器(dynamic random access memory,DRAM),特點是存儲量大,但讀寫速度較慢[21]。卷積神經網絡計算過程中數據量很大,因此難以將全部數據放入片上存儲,同時卷積計算過程中會產生中間結果,從相關的研究中可以看出,如果全部存儲到外部DRAM 中對計算速度的影響較大[8]。因此本文設計了片外存儲加片上存儲的結構。先將圖像數據和卷積核數據存儲在DRAM 中,開始運算后通過DMA 將圖像數據傳送到片上存儲中,然后參與運算。對于參數量較小的網絡,在預處理時可以將整張圖像存入片上存儲。對于參數量更大的網絡或更高分辨率的輸入圖像,無法將全部圖像一次存入片上存儲,可以將圖像拆分成小塊再送入片上存儲進行計算。

權重數據存儲在PE 內部的權重buffer 中,權重buffer 使用乒乓存儲結構。在進行現在的運算時,DMA 會提前將下一個權重數據存入權重buffer,這樣的設計防止了計算單元由于等待數據搬運而閑置,提高了運算效率。

指令數據存儲在指令RAM 中,指令RAM 也采用了乒乓存儲結構來提升效率。

3.7 數據復用分析

重復使用特征圖和權重數據可以減少讀取片上存儲的次數。相關文獻研究中總結出了可以進行數據復用的兩種方式,即空間方向的數據復用和時間方向的數據復用。空間方向的數據復用意味著,從片上存儲讀取數據后,在同一個時鐘周期,該數據被用于多個并行運算單元。另一方面,時間方向的數據復用意味著取到的數據用于多個連續的時鐘周期[22]。本文設計的加速器通過采用片上存儲和權重buffer的方式在進行卷積運算中同時實現了兩種類型的數據復用。

對于特征圖數據來說,本文支持了空間上的復用,從片上存儲到特征圖數據,在同一時間周期被16個PE 模塊所共享。對于權重數據來說,本文實現了時間上的數據復用,權重數據存入權重buffer 后,在接下來的連續時鐘周期內,權重數據不會改變,直到這一權重數據與圖像上所有對應的點都計算完成后再讀取下一個權重,這樣的方式讓每一個存入權重buffer 的權重數據都做到了最大化的數據復用。通過以上數據復用策略,減少了加速器的帶寬需求以及存儲占用,有效提高了運算效率。

4 實驗結果分析

4.1 實驗平臺

本文實驗使用Xilinx 公司的Vivado 進行硬件開發,Synopsys公司的VCS進行仿真。FPGA使用Xilinx公司的Virtex-7 2000T,工作頻率達到了152 MHz。實驗采用的測試集是ImageNet數據集中100張224×224大小的圖片,圖片精度為8位定點數,所用CNN網絡為VGG16,實驗對比方面,CPU采用主頻為3.6 GHz的i7-6850K 處理器,GPU 采用NVDIA 公司生產的NVDIA GTX 1080Ti,其帶寬為484 GB/s,顯存為11 GB。

4.2 實驗結果

本文研究了加速器的性能功耗比與N值的參數以及片上存儲大小的關系,從圖14 中可以看出,N值越大,加速器的運算單元越多,其性能功耗比越大,因此所設計的加速器在高端FPGA 上相比低端FPGA 更能發揮優勢。片上存儲方面,在片上存儲小于3.5 MB 時,片上存儲值的增大,性能功耗比越強,當片上存儲大于3.5 MB 后,性能功耗比隨著片上存儲值的增大反而減小。這是因為在片上存儲比較小時,中間參數無法全部存入片上存儲,需要分塊存入處理,這影響了加速器的計算性能,當片上存儲足夠將所有中間參數存入時,片上存儲的增大不再對加速器性能產生影響,但隨著片上存儲的增大,FPGA的功耗會增大,因此性能功耗比會有所下降。

Fig.14 Accelerator performance power ratio vs parameters圖14 加速器性能功耗比與參數關系

圖15 中列出了FPGA 的資源使用情況,所用的片上存儲大小為3.5 MB。在N=32,64,128 條件下,BRAM使用率均為72%。乘法部分運算邏輯全部使用DSP 資源,使用率分別為25%、48%和95%。Register分別使用了4%、6%和9%,查找表(look-up-table,LUT)分別使用了17%、29%和52%。

Fig.15 FPGA resources utilization圖15 FPGA 資源占有率

表2 列出了各平臺對于CNN 計算的性能以及功耗方面的對比,所用網絡為VGG16,對比數據中本文所設計加速器以及CPU、GPU 圖像數據和權值數據均為8 位定點數。從表中可以看出,本文所設計的加速器相對于CPU 在計算速度方面有著明顯的提升,達到了560.2 GOP/s,為CPU 的8.9 倍,相對于GPU 雖然在計算速度方面沒有優勢,但性能功耗比達到了GPU 的3.0 倍。相比其他FPGA 進行CNN 加速的研究可以看出,本文的設計在性能功耗比上相比文獻[10]、文獻[23]、文獻[16]有著明顯優勢,對于文獻[8]所提出的設計,本文的設計在性能功耗比方面存在一定的差距,但文獻[8]使用的Intel Arria10 GX1150系列高端FPGA,采用20 nm 工藝,相對于本文所使用的28 nm 工藝,FPGA 在性能和功耗方面存在著天然的優勢。綜上,本文所設計的加速器在對主流CNN網絡進行推理計算的性能和能效上,利用較為低端的硬件實現了比大多數方案更好的效果,同時不乏通用性。

Table 2 Accelerator performance power consumption comparison table表2 加速器性能功耗對比表

5 結束語

本文提出了一種基于FPGA 的卷積神經網絡加速器,整體架構使用了流水線技術以及片上存儲結構,卷積運算方面實現了四個維度的卷積并行運算以及有效的數據復用策略,支持參數化設計。在三種參數下單個時鐘周期分別可以進行512、1 024、2 048 次乘累加。用VGG16 網絡對本文的設計進行了實驗,并與CPU、GPU以及文獻中相關設計方案進行了對比,實驗結果表明,本文所提出的設計計算速度達到了i7-6850K CPU 的8.9倍,計算能效達到了NVDIA GTX 1080Ti GPU 的3.0 倍。與其他FPGA 加速器設計方案相比,本文所設計的加速器在主流CNN網絡計算上實現了較高的性能功耗比,同時兼顧了通用性。

本文所研究的重點在于加速器整體架構設計,并未對FPGA 資源利用方面進行很好的優化,沒有最大限度地發揮本文實驗中所用FPGA 的全部資源。未來工作中可以對FPGA 的資源進行更為細致的優化,例如用靈活運用LUT 來代替部分DSP 資源,以最大化地發揮FPGA 的計算能力。

猜你喜歡
指令設計
聽我指令:大催眠術
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
一種基于滑窗的余度指令判別算法
主站蜘蛛池模板: 国产毛片一区| 久久精品人人做人人综合试看| 日本国产精品一区久久久| 精品伊人久久久久7777人| 亚洲精品国产日韩无码AV永久免费网 | 国产爽妇精品| 日本高清免费不卡视频| 欧美激情伊人| 久久久受www免费人成| 久久一日本道色综合久久| 亚洲人妖在线| 免费观看三级毛片| 亚洲人妖在线| 中文字幕无码制服中字| 亚洲第一天堂无码专区| 99视频在线免费| 噜噜噜久久| 伊人天堂网| 91小视频在线观看| 中文无码精品a∨在线观看| 国产成本人片免费a∨短片| 国产在线91在线电影| 一区二区午夜| 精品综合久久久久久97超人| 91啦中文字幕| 99性视频| 亚洲综合第一页| 香蕉久久永久视频| 日韩久草视频| 青青草国产精品久久久久| 91精品啪在线观看国产60岁 | 美女被操91视频| 国产精品香蕉在线观看不卡| 激情在线网| 精品综合久久久久久97| 69av在线| 国产精品一线天| 欧美午夜理伦三级在线观看| 中文字幕亚洲综久久2021| 国产综合欧美| 久久精品中文字幕免费| 福利在线免费视频| 欧美性久久久久| 欧美成人精品欧美一级乱黄| 国产高清在线丝袜精品一区| 国产一区二区精品福利| 国产成人综合亚洲欧洲色就色| 日韩欧美91| 毛片网站在线看| 最新亚洲人成无码网站欣赏网| 国产极品美女在线观看| 精品国产免费观看| 亚洲综合婷婷激情| 午夜丁香婷婷| 日韩精品亚洲人旧成在线| 欧美日韩国产在线人| 日韩AV无码一区| 亚洲精品自拍区在线观看| 国产免费a级片| 亚洲天堂成人在线观看| 青青青国产视频手机| 97人人做人人爽香蕉精品| 国产人免费人成免费视频| 9久久伊人精品综合| 国产亚洲欧美在线中文bt天堂| 日韩黄色在线| 国产精品欧美激情| 久热精品免费| 欧美精品亚洲二区| 国产在线视频欧美亚综合| 成AV人片一区二区三区久久| 亚洲一区国色天香| 日本一区二区三区精品AⅤ| 亚洲经典在线中文字幕| 77777亚洲午夜久久多人| 亚洲无线视频| 国产精品99一区不卡| 久久一日本道色综合久久| 国产午夜人做人免费视频中文| 欧美日本在线| 欧美国产日韩在线观看| 日韩精品少妇无码受不了|