欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種可編程卷積神經(jīng)網(wǎng)絡(luò)協(xié)處理器IP核的制作方法

文檔序號(hào):12819415閱讀:302來(lái)源:國(guó)知局
一種可編程卷積神經(jīng)網(wǎng)絡(luò)協(xié)處理器IP核的制作方法與工藝
本發(fā)明涉及數(shù)字芯片設(shè)計(jì)領(lǐng)域,具體涉及一種可編程卷積神經(jīng)網(wǎng)絡(luò)協(xié)處理器ip核的設(shè)計(jì)。
背景技術(shù)
:對(duì)人工智能(artificialintelligence)的探索、研究和實(shí)現(xiàn)一直是人類(lèi)孜孜不倦的追求。作為計(jì)算機(jī)科學(xué)最重要的分支之一,人工智能科學(xué)隨著計(jì)算機(jī)科學(xué)的誕生起源于20世紀(jì)中葉,逐漸發(fā)展成為多個(gè)領(lǐng)域諸如計(jì)算機(jī)、數(shù)學(xué)、電子、生物學(xué)、醫(yī)學(xué)以及工程領(lǐng)域的交叉科學(xué)。機(jī)器學(xué)習(xí)(machinelearning)目前是人工智能領(lǐng)域中最核心、也是發(fā)展最快的一個(gè)分支,致力于研究通過(guò)一定的學(xué)習(xí)算法從數(shù)據(jù)中自動(dòng)分析獲得規(guī)律,再由模型去預(yù)測(cè)未知數(shù)據(jù)。機(jī)器學(xué)習(xí)理論已經(jīng)廣泛應(yīng)用于計(jì)算機(jī)視覺(jué)、搜索引擎推薦、自然語(yǔ)言處理以及機(jī)器人等多個(gè)領(lǐng)域。21世紀(jì)初,隨著軟硬件的發(fā)展,計(jì)算能力有了長(zhǎng)足提升,而大數(shù)據(jù)技術(shù)的發(fā)展又為機(jī)器學(xué)習(xí)積累了海量的樣本。因此,層數(shù)非常多的神經(jīng)網(wǎng)絡(luò),即深度神經(jīng)網(wǎng)絡(luò)或深度學(xué)習(xí)(deeplearning)充分利用了這些優(yōu)勢(shì),取得了令人矚目的表現(xiàn)能力,受到學(xué)術(shù)界與工業(yè)界的重新關(guān)注,掀起了機(jī)器學(xué)習(xí)的又一輪熱潮,尤其在圖像分類(lèi)識(shí)別、視頻跟蹤、自然語(yǔ)言處理、人工智能與決策等領(lǐng)域取得了豐碩成果。卷積神經(jīng)網(wǎng)絡(luò)(convolutionalneuralnetwork,cnn)是深度學(xué)習(xí)中使用最為廣泛的一種模型之一,其思想來(lái)源于人腦在識(shí)別與處理圖像過(guò)程中的一些行為模式,因此其在圖像與視頻處理方面成為了一定意義上的“標(biāo)配”結(jié)構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)日趨復(fù)雜,大規(guī)模、深層次的網(wǎng)絡(luò)利用了海量數(shù)據(jù)樣本,其學(xué)習(xí)能力與表現(xiàn)能力不斷提升,然而隨之而來(lái)的是訓(xùn)練參數(shù)與計(jì)算量的成倍增加。復(fù)雜的深度學(xué)習(xí)網(wǎng)絡(luò)的訓(xùn)練與預(yù)測(cè)過(guò)程需要消耗巨額浮點(diǎn)計(jì)算資源以及極高訪(fǎng)存帶寬,由于硬件體系結(jié)構(gòu)的限制,僅利用通用架構(gòu)cpu進(jìn)行深度學(xué)習(xí)計(jì)算效率低、速度慢,難以部署大規(guī)模的計(jì)算任務(wù)。隨著以nvidia的cuda為代表的gpu異構(gòu)加速計(jì)算的興起,研究者們開(kāi)始使用gpu集群進(jìn)行深度學(xué)習(xí)計(jì)算。然而,這樣雖然解決了一定的計(jì)算力問(wèn)題,但高端gpu芯片成本高昂、功耗巨大,能耗比仍然不甚理想,受限于體積、移動(dòng)性、續(xù)航能力,通用cpu+gpu的計(jì)算模式難以支持日益普遍的嵌入式應(yīng)用與終端應(yīng)用場(chǎng)景。對(duì)于上述應(yīng)用場(chǎng)景,業(yè)界未來(lái)的一個(gè)趨勢(shì)是在主控制器(桌面級(jí)或嵌入式cpu)之外,利用專(zhuān)用芯片(fpga或asic)來(lái)進(jìn)行卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算加速,其優(yōu)勢(shì)在于延遲小、功耗低、效率高。當(dāng)出貨量增長(zhǎng)后,平攤成本非常低廉。fpga具有靈活的可編程性和可配置性,可以設(shè)計(jì)高度并行化的專(zhuān)用計(jì)算單元,在高效計(jì)算的同時(shí)兼顧低功耗的優(yōu)勢(shì)。一方面,深度學(xué)習(xí)模型中有相當(dāng)多的抽象模塊可以分解為結(jié)構(gòu)規(guī)整、復(fù)用度高的基本單元,適于硬件實(shí)現(xiàn)與集成。另一方面,深度學(xué)習(xí)算法理論仍然在快速發(fā)展中,與asic(專(zhuān)用集成電路)相比,fpga的重構(gòu)特性可以用于設(shè)計(jì)的快速更新與迭代,而當(dāng)硬件設(shè)計(jì)有了兼顧通用性與穩(wěn)定性的版本時(shí),fpga設(shè)計(jì)的積累也可以快速轉(zhuǎn)型為asic。因此,近年來(lái)利用fpga與asic進(jìn)行深度學(xué)習(xí)異構(gòu)加速正成為學(xué)術(shù)界和巨頭企業(yè)關(guān)注的熱門(mén)研究方向。由于終端應(yīng)用場(chǎng)景廣泛,對(duì)卷積神經(jīng)網(wǎng)絡(luò)的規(guī)模和結(jié)構(gòu)要求不同,需要根據(jù)應(yīng)用場(chǎng)景進(jìn)行靈活的調(diào)整與修改。眾所周知,直接進(jìn)行硬件設(shè)計(jì)的修改和調(diào)試是一個(gè)成本較高、耗時(shí)較長(zhǎng)的過(guò)程。為了能夠向不熟悉硬件設(shè)計(jì)的算法與軟件人員提供應(yīng)用支持,加速硬件具有可編程的接口,使上層應(yīng)用與底層平臺(tái)分離,對(duì)算法的支持有著重要的意義。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供一種可編程卷積神經(jīng)網(wǎng)絡(luò)協(xié)處理器ip核,其目的是在數(shù)字芯片(fpga或asic)上實(shí)現(xiàn)對(duì)卷積神經(jīng)網(wǎng)絡(luò)的運(yùn)算加速,并應(yīng)用于卷積神經(jīng)網(wǎng)絡(luò)的異構(gòu)加速或終端部署。本發(fā)明的預(yù)期應(yīng)用場(chǎng)景要求專(zhuān)用芯片具有可配置性與可編程性,支持包含卷積、非線(xiàn)性激活函數(shù)、池化、填充與全連接計(jì)算的不同規(guī)模的卷積神經(jīng)網(wǎng)絡(luò)完整流程;計(jì)算效率保持高性能的同時(shí),具有低功耗特性;具有標(biāo)準(zhǔn)的接口,具有可擴(kuò)展性與可定制性。為實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:一種可編程卷積神經(jīng)網(wǎng)絡(luò)協(xié)處理器ip核,具體包含了全局控制器、i/o控制器、多緩存結(jié)構(gòu)、卷積單元、池化單元、填充單元、全連接單元、內(nèi)部互聯(lián)邏輯以及針對(duì)該協(xié)處理器ip各種操作而自主設(shè)計(jì)的指令集。所述各單元的控制端口與全局控制器的對(duì)應(yīng)端口點(diǎn)對(duì)點(diǎn)連接,數(shù)據(jù)讀寫(xiě)端口連接到內(nèi)部互聯(lián)邏輯的512位數(shù)據(jù)總線(xiàn),以全局控制器仲裁的方式進(jìn)行共享。所述的全局控制器,完成對(duì)整個(gè)協(xié)處理器各模塊的控制,包含了具有8個(gè)32位寄存器的通用寄存器堆、指令譯碼單元以及對(duì)各個(gè)單元的控制端口。所述的i/o控制器,支持外部ddr3存儲(chǔ)器及其控制器,以dma(directmemoryaccess)方式進(jìn)行對(duì)外部存儲(chǔ)器的批量讀寫(xiě),由全局控制器給出讀寫(xiě)首地址、偏移量之后自動(dòng)進(jìn)行讀寫(xiě)操作。所述的多緩存結(jié)構(gòu)包含了全局?jǐn)?shù)據(jù)緩存(分為兩個(gè)存儲(chǔ)塊,每塊容量1024kb)、全局權(quán)值緩存(分為四個(gè)存儲(chǔ)塊,每塊容量64kb)、8kb指令緩存,與各模塊的通過(guò)內(nèi)部互聯(lián)邏輯進(jìn)行通信。全局?jǐn)?shù)據(jù)緩存,支持“乒乓”讀寫(xiě),被分為兩個(gè)存儲(chǔ)塊(以下稱(chēng)bank)。存儲(chǔ)地址與空間不共享,每個(gè)塊有一組獨(dú)立的讀寫(xiě)端口,兩個(gè)塊交替讀寫(xiě)。bank的切換由指令控制,但其讀寫(xiě)切換的邏輯模塊對(duì)外部是不可見(jiàn)的,即其他單元與全局?jǐn)?shù)據(jù)緩存的連接不需要具體區(qū)分連接的是哪一個(gè)讀寫(xiě)端口。所述的卷積單元,包含了內(nèi)部的控制模塊、輸入模塊、計(jì)算模塊、輸出模塊;1)控制模塊包含了配置表與控制器:配置表連接到卷積單元公共參數(shù)寄存器組,根據(jù)卷積單元的公共參數(shù)計(jì)算出在本次卷積迭代中,對(duì)各向量單元的開(kāi)閉、執(zhí)行、輸入數(shù)據(jù)與輸出數(shù)據(jù)的線(xiàn)性地址區(qū)間、邏輯索引值做了計(jì)算??刂破髯x取配置表的輸出,并完成對(duì)各模塊的調(diào)度。2)輸入模塊包含了輸入數(shù)據(jù)廣播器、16組局部輸入緩存、與局部輸入緩存一一對(duì)應(yīng)連接的16組數(shù)據(jù)移位器。輸入模塊從全局?jǐn)?shù)據(jù)緩存讀入數(shù)據(jù),并按照各向量單元處理的不同子區(qū)域把數(shù)據(jù)以廣播方式送入對(duì)應(yīng)的局部輸入緩存。移位器從局部輸入緩存載入數(shù)據(jù),以“滑窗”的方式發(fā)送給計(jì)算模塊。3)計(jì)算模塊內(nèi)調(diào)用了512個(gè)單精度乘法器與512個(gè)單精度加法器,每一個(gè)乘法器與加法器組合成一個(gè)乘法-加法對(duì),作為一個(gè)最基本的浮點(diǎn)計(jì)算單元fpu,全部fpu被劃分4個(gè)計(jì)算內(nèi)核組,每組16個(gè)向量單元,可以通過(guò)配置相關(guān)參數(shù)寄存器確定每組開(kāi)啟的單元數(shù)量。每個(gè)向量單元長(zhǎng)度為8個(gè)單精度浮點(diǎn)值,即256位,在一次迭代中負(fù)責(zé)輸出特征中的1×8的行向量。每個(gè)向量單元包含8組浮點(diǎn)乘法器與浮點(diǎn)加法器。每一組乘法-加法對(duì)負(fù)責(zé)對(duì)一個(gè)輸入特征的子區(qū)域進(jìn)行卷積,計(jì)算結(jié)果為輸出特征的一個(gè)點(diǎn)。加法器的輸出反饋連接到輸入端以完成累加。當(dāng)所有計(jì)算內(nèi)核都被開(kāi)啟時(shí),在一次迭代中輸出了一個(gè)16×8×4的三維子矩陣。4)輸出模塊包含對(duì)應(yīng)各向量單元的局部輸出緩存和卷積單元輸出接口。每一組局部輸出緩存位寬為256位,與向量單元的位寬適配。各緩存的最終結(jié)果由輸出接口輪流讀出并按照對(duì)應(yīng)的地址寫(xiě)入全局?jǐn)?shù)據(jù)緩存的寫(xiě)bank。所述池化單元完成對(duì)卷積單元輸出特征的采樣。池化支持兩種類(lèi)型:2×2與3×3的最大池化與平均池化。最大池化單元從子區(qū)域中找出最大值,調(diào)用了9組浮點(diǎn)比較器,按9-5-3-2-1的的樹(shù)形陣列連接;平均池化單元計(jì)算一個(gè)子區(qū)域的平均值,調(diào)用了加法器,按9-5-3-2-1的樹(shù)形陣列連接,其最后一級(jí)的輸出連接到浮點(diǎn)乘法器,乘以1/2、1/4、1/9等池化區(qū)域面積的倒數(shù)來(lái)取平均值,避免了使用資源開(kāi)銷(xiāo)大、延遲較高的除法器。所述全連接單元完成向量的乘加操作,其向量長(zhǎng)度與外部存儲(chǔ)器的帶寬匹配,完成一個(gè)行向量(輸入特征)與矩陣相乘(權(quán)值),輸出另一個(gè)行向量(輸出特征)的計(jì)算。本設(shè)計(jì)中,全連接單元調(diào)用了16個(gè)浮點(diǎn)乘法器,并通過(guò)16-8-4-2-1的樹(shù)形浮點(diǎn)加法器陣列完成累加,一次計(jì)算迭代可以進(jìn)行1×16的行向量?jī)?nèi)積運(yùn)算。卷積單元、池化單元、填充單元、全連接單元掛載在內(nèi)部互聯(lián)邏輯上,對(duì)內(nèi)部總線(xiàn)的占有權(quán)由全局控制器進(jìn)行仲裁。所述的指令集,位寬為32位,包含了完成調(diào)度工作而不直接控制復(fù)雜計(jì)算的10條基本指令,如寄存器載入、存儲(chǔ)器讀寫(xiě)、單元執(zhí)行、分支跳轉(zhuǎn)等。相對(duì)于現(xiàn)有技術(shù),本發(fā)明具有以下優(yōu)點(diǎn):與其他類(lèi)似技術(shù)相比,本發(fā)明把卷積神經(jīng)網(wǎng)絡(luò)的其他組件集成在同一ip核中,提供了“卷積-池化-全連接”的完整的計(jì)算流程。特別地,與一些類(lèi)似技術(shù)提供了固定尺寸與層數(shù)的卷積支持相比,本發(fā)明所提出的卷積單元,在硬件資源限制內(nèi),提出一種可擴(kuò)展規(guī)模的設(shè)計(jì),支持一定范圍內(nèi)的任意尺寸(即調(diào)整的最小步長(zhǎng)為1),且通過(guò)指令的控制可以支持任意層數(shù)的卷積神經(jīng)網(wǎng)絡(luò)。本發(fā)明注重發(fā)揮芯片(fpga或asic)硬件結(jié)構(gòu)的并行性,與通用處理器相比,能耗比優(yōu)勢(shì)明顯;同時(shí),利用了卷積操作具有的數(shù)據(jù)復(fù)用特點(diǎn),設(shè)計(jì)多級(jí)緩存體系,借助適度容量的緩存,大幅減小了對(duì)外部存儲(chǔ)器的讀寫(xiě)頻率及帶寬壓力,有助于減小芯片功耗與soc內(nèi)部通信資源的占用。通過(guò)指令控制運(yùn)算流程,使軟件設(shè)計(jì)人員、算法人員等用戶(hù)面對(duì)不同的應(yīng)用場(chǎng)景時(shí),可以擺脫繁雜耗時(shí)的硬件設(shè)計(jì)與調(diào)試過(guò)程,具有使用的便捷性與廣泛性,有利于快速迭代;接口與具體硬件設(shè)計(jì)分離的特性,也有利于硬件設(shè)計(jì)人員在本發(fā)明的新版本中提供內(nèi)部模塊的升級(jí)與改進(jìn)。附圖說(shuō)明圖1為卷積神經(jīng)網(wǎng)絡(luò)協(xié)處理器ip的頂層結(jié)構(gòu)圖示;圖2為卷積單元的硬件結(jié)構(gòu)及其與外部模塊的連接方式圖示;圖3為卷積單元控制器狀態(tài)流圖示;圖4為卷積單元輸入特征子區(qū)間交疊情況圖示;圖5為卷積單元輸入數(shù)據(jù)廣播機(jī)制圖示;圖6為卷積單元輸入特征與卷積核的運(yùn)算過(guò)程圖示;圖7為卷積單元移位器工作圖示;圖8為卷積單元中的向量計(jì)算單元結(jié)構(gòu)圖示;圖9為浮點(diǎn)加法器流水線(xiàn)填充機(jī)制圖示;圖10為補(bǔ)齊邊界的最大池化圖示;圖11為填充單元圖示;圖12為全連接單元乘法器與加法器連接結(jié)構(gòu)圖示;具體實(shí)施方式首先給出以下卷積運(yùn)算基本定義以便后續(xù)的具體實(shí)施方式說(shuō)明:-fi:輸入特征,即卷積層的輸入矩陣。此處為分析一般情況,假設(shè)二維輸入特征是一個(gè)正方形,三個(gè)維度定義為(is,is,ci),分別表示輸入特征的長(zhǎng)、寬與通道數(shù)。-fo:輸出特征,即經(jīng)過(guò)卷積層計(jì)算后的輸出矩陣,三個(gè)維度為(os,os,co),分別表示輸出特征的長(zhǎng)、寬與通道數(shù)。-w:權(quán)值矩陣,即卷積核。此處假設(shè)卷積核為正方形,四個(gè)維度為(k,k,ci,co),其中ci對(duì)應(yīng)輸入特征、co對(duì)應(yīng)輸出通道的同名變量定義。-bias:權(quán)值的偏置值,一維向量,長(zhǎng)度為co。參照?qǐng)D1,一種可編程卷積神經(jīng)網(wǎng)絡(luò)協(xié)處理器ip核的硬件架構(gòu)具體包含了全局控制器(附指令緩存)、i/o控制器、全局?jǐn)?shù)據(jù)緩存(bank0、bank1)、全局權(quán)值緩存(bank0~bank3)、卷積單元(附局部輸入、輸出緩存)、池化單元、填充單元、全連接單元、內(nèi)部互聯(lián)邏輯。協(xié)處理器ip核與外部各ip通過(guò)外部的互聯(lián)邏輯連接,具體的外部結(jié)構(gòu)由該發(fā)明被應(yīng)用的具體場(chǎng)景決定,不局限于圖1所示。參照?qǐng)D2,描述了卷積單元的整體架構(gòu)及其與其他模塊的連接方式。其中l(wèi)ib指局部輸入緩存,lob指局部輸出緩存。卷積單元在開(kāi)始工作前,首先要完成公共參數(shù)的配置:全局控制器在解析指令后把對(duì)應(yīng)參數(shù)按順序放入全局控制器通用寄存器堆,并通過(guò)使能信號(hào)告知卷積單元配置表從通用寄存器中讀取如表1所示的公共參數(shù)。配置表會(huì)根據(jù)這些參數(shù)計(jì)算出如表2所示的具體參數(shù)。全局控制器在告知卷積單元開(kāi)始工作時(shí),對(duì)互聯(lián)邏輯進(jìn)行仲裁,以保證其數(shù)據(jù)流是由卷積單元作為主設(shè)備發(fā)起控制的。卷積單元首先會(huì)從全局?jǐn)?shù)據(jù)緩存的讀bank讀入輸入特征在本次卷積中需要的一個(gè)子區(qū)域,該子區(qū)域在全局緩存中的地址區(qū)間從配置表中獲知。并通過(guò)數(shù)據(jù)廣播器按照廣播方式寫(xiě)入局部輸入緩存(lib)陣列中的每一個(gè)存儲(chǔ)塊;之后控制器按照卷積子區(qū)域的行、輸出通道、輸入通道的順序進(jìn)行遍歷,計(jì)算中間結(jié)果存儲(chǔ)在各向量單元的局部輸出緩存(lob);遍歷結(jié)束,中間結(jié)果成為最終結(jié)果。所有的最終結(jié)果通過(guò)輸出接口按特定的地址映射機(jī)制寫(xiě)入全局?jǐn)?shù)據(jù)緩存的寫(xiě)bank正確位置;本次卷積的迭代結(jié)束后,系統(tǒng)向全局控制器發(fā)送結(jié)束信號(hào),并進(jìn)入空閑狀態(tài),等待下一次配置與計(jì)算。表1卷積單元公共參數(shù)參數(shù)說(shuō)明relu輸出特征是否需要通過(guò)relu函數(shù)stride卷積核滑動(dòng)步長(zhǎng)k卷積核尺寸is輸入特征尺寸os輸出特征尺寸ci_num輸入通道數(shù)ci_start輸入通道初值ci_end輸入通道終值co_num輸出通道數(shù)row_start本次卷積對(duì)應(yīng)輸出特征的行起點(diǎn)col_start本次卷積對(duì)應(yīng)輸出特征的列起點(diǎn)vec_active本次卷積開(kāi)啟的向量單元組的數(shù)量表2卷積配置表參數(shù)參數(shù)說(shuō)明data_row_start卷積子區(qū)域的起始行data_col_start卷積子區(qū)域的起始列data_row_end卷積子區(qū)域的終點(diǎn)行data_col_end卷積子區(qū)域的終點(diǎn)列vecidx[i].row第i組局部數(shù)據(jù)緩存的起始行vecidx[i].col第i組局部數(shù)據(jù)緩存的起始列參照?qǐng)D3,卷積單元的控制器狀態(tài)及描述如表3所示,其狀態(tài)跳轉(zhuǎn)條件如表4所示。表3卷積單元控制器狀態(tài)表4卷積單元控制器狀態(tài)跳轉(zhuǎn)條件參照?qǐng)D1,輸入模塊包含輸入數(shù)據(jù)廣播器、16組局部輸入緩存與一一對(duì)應(yīng)連接的數(shù)據(jù)移位器。輸出特征行相鄰的向量單元,計(jì)算的輸入特征子區(qū)域是高度重疊的,因此一組讀入的數(shù)據(jù)可能會(huì)被多個(gè)向量單元在不同的時(shí)刻訪(fǎng)問(wèn)到。采用廣播機(jī)制的數(shù)據(jù)傳輸可以使總的數(shù)據(jù)緩沖時(shí)間開(kāi)銷(xiāo)降低。以下結(jié)合圖4,對(duì)輸入數(shù)據(jù)廣播機(jī)制進(jìn)行詳細(xì)說(shuō)明:對(duì)一個(gè)特定的輸入通道而言,輸入數(shù)據(jù)子區(qū)域?yàn)橐粋€(gè)二維矩陣。為方便分析,假設(shè)其起始行列的邏輯坐標(biāo)為(0,0),結(jié)束于(m,n),卷積核尺寸為k,卷積滑動(dòng)步長(zhǎng)取通常值1,那么輸入數(shù)據(jù)子區(qū)域表示為矩陣各局部輸入緩存需求的區(qū)間為注意到,每一個(gè)局部輸入緩存要求的數(shù)據(jù)都是該矩陣的子矩陣,開(kāi)始于(i,0),結(jié)束于(i+k-1,n),具有k行n列,并且其各數(shù)據(jù)元素在存儲(chǔ)器中的地址有很大的交集,如圖4所示。卷積單元輸入數(shù)據(jù)廣播機(jī)制的邏輯時(shí)序如圖5所示。配置表中已經(jīng)提供了各向量單元計(jì)算的子區(qū)域的行列起始坐標(biāo),由該坐標(biāo)以及卷積公共參數(shù)可以計(jì)算出各向量單元對(duì)全局?jǐn)?shù)據(jù)緩存的訪(fǎng)存地址。控制器在load狀態(tài)發(fā)送的地址流是所有局部緩存需求區(qū)域的并集,即整個(gè)輸入特征子區(qū)域的各數(shù)據(jù)元素的公共地址。當(dāng)某個(gè)局部數(shù)據(jù)緩存的需求訪(fǎng)存地址與當(dāng)前公共地址匹配時(shí),廣播器獲知該匹配信號(hào),啟動(dòng)該局部數(shù)據(jù)緩存的傳輸過(guò)程,從數(shù)據(jù)總線(xiàn)上讀取數(shù)據(jù)流,此時(shí)可能有多組局部數(shù)據(jù)緩存地址匹配,同時(shí)處于讀取狀態(tài);當(dāng)不再匹配時(shí),匹配信號(hào)取消,傳輸過(guò)程結(jié)束。結(jié)合圖6,卷積運(yùn)算可以看作卷積核在輸入特征上的“滑窗”。8組向量計(jì)算單元的計(jì)算中,每一個(gè)卷積子區(qū)域列相鄰的數(shù)據(jù)的物理位置是有交集的,但由于輸出的8個(gè)元素之間在算法上互相無(wú)關(guān)聯(lián),因此各子區(qū)域在邏輯上又是獨(dú)立的。卷積操作借鑒了simd(單指令多數(shù)據(jù),single-instruction-multiple-data)的思想,一次移位操作完成8組數(shù)據(jù)的發(fā)送。移位器完成“滑窗”過(guò)程,在每一行數(shù)據(jù)移位完畢時(shí),需要重載下一行數(shù)據(jù)再進(jìn)行移位。參照?qǐng)D7,移位器的硬件邏輯實(shí)現(xiàn)方式為:1)從局部數(shù)據(jù)緩存讀入一行待移位數(shù)據(jù)。局部數(shù)據(jù)緩存的讀寫(xiě)帶寬設(shè)計(jì)為256bit,因此一個(gè)周期便可以填充移位器,讀入8個(gè)單精度浮點(diǎn)數(shù)的向量長(zhǎng)度(8×32bit=256bit)。2)之后,移位寄存器向左移位,同時(shí)最右端補(bǔ)入下一個(gè)向量中的一個(gè)元素,具體取該向量中的元素索引與移位次數(shù)一致。同時(shí),對(duì)應(yīng)的權(quán)值也在每周期讀入一個(gè)新值,該過(guò)程對(duì)應(yīng)了控制器中的“shift”狀態(tài)。3)移位次數(shù)與卷積核尺寸相等時(shí),移位器從局部緩存讀入并替換為卷積區(qū)域下一行的向量,對(duì)應(yīng)了控制器中的“switch”狀態(tài)。4)最后一個(gè)輸入通道的卷積區(qū)域計(jì)算完畢時(shí),需要額外增加一個(gè)偏置值(bias,在權(quán)值緩存中保存,每個(gè)輸入通道都有一個(gè)bias)。為了保持乘加操作的連貫性,移位器的數(shù)值變?yōu)閱尉鹊?.0(十六進(jìn)制表示為0x3f800000),即1.0×偏置值,把額外的加操作合并到之前的乘加流水中。這個(gè)過(guò)程對(duì)應(yīng)了控制器中的“bias”狀態(tài)。重復(fù)2、3步驟,直到該卷積區(qū)域計(jì)算完畢,之后控制器將進(jìn)入其他狀態(tài)以完成對(duì)應(yīng)操作。如圖2所示,全部向量計(jì)算單元調(diào)用了512個(gè)單精度乘法器與512個(gè)單精度加法器。每一個(gè)乘法器與加法器組合成一個(gè)乘法-加法對(duì),作為一個(gè)最基本的浮點(diǎn)計(jì)算單元(以下簡(jiǎn)稱(chēng)為fpu,floatingpointunit)。全部fpu被劃分4個(gè)計(jì)算內(nèi)核組,每組16個(gè)向量單元,可以通過(guò)配置相關(guān)參數(shù)寄存器確定每組開(kāi)啟的單元數(shù)量。參照?qǐng)D8,一組向量單元包含8組浮點(diǎn)乘法器與浮點(diǎn)加法器,長(zhǎng)度為8個(gè)單精度浮點(diǎn)數(shù)值,即256位。每一組乘法-加法對(duì)負(fù)責(zé)對(duì)一個(gè)輸入特征的子區(qū)域進(jìn)行卷積,在一次迭代中負(fù)責(zé)輸出特征中的1×8的行向量,相當(dāng)于把輸入的二維矩陣延展成為一維向量,可以靈活處理不同卷積核尺寸。加法器的輸出端經(jīng)過(guò)一級(jí)寄存器后反饋到輸入端,以完成累加。shift狀態(tài)下,向量單元模式為“乘加”,權(quán)值與從移位器輸入的向量相乘,乘積送入加法器(此時(shí)作為累加器)。執(zhí)行完一個(gè)輸入通道對(duì)應(yīng)的卷積時(shí),該通道卷積計(jì)算的結(jié)果與已經(jīng)暫存在局部輸出緩存中的前一個(gè)通道的計(jì)算結(jié)果相加,其結(jié)果寫(xiě)回局部輸出緩存的同一地址,該過(guò)程發(fā)生在acc狀態(tài)中,向量單元模式為“加”,加法器的輸入分別來(lái)自累加和(sum)寄存器和局部輸出緩存。此時(shí)也表示前一段累加過(guò)程結(jié)束,因此對(duì)加法器的輸出端清零,以開(kāi)始另一組累加過(guò)程。浮點(diǎn)運(yùn)算較為復(fù)雜,經(jīng)過(guò)對(duì)時(shí)序的評(píng)估,本設(shè)計(jì)采用了3級(jí)流水的浮點(diǎn)加法器??紤]到加法器輸出端的還會(huì)經(jīng)過(guò)一級(jí)累加寄存器,所以加法結(jié)果傳遞給下一級(jí)需要等待4個(gè)時(shí)鐘周期。由于累加過(guò)程會(huì)產(chǎn)生數(shù)據(jù)依賴(lài),即后一組累加需要等待前一組結(jié)果的完全產(chǎn)生,因此一次特定的卷積運(yùn)算只能在流水線(xiàn)的固定節(jié)拍上執(zhí)行,其余各節(jié)拍都會(huì)處于空閑狀態(tài)。流水線(xiàn)各節(jié)拍之間的數(shù)據(jù)互不影響,所以為了避免流水線(xiàn)氣泡造成的性能浪費(fèi),控制器在其他三個(gè)節(jié)拍插入對(duì)應(yīng)不同卷積核的計(jì)算(即輸出特征屬于不同的輸出通道),從而填充了流水線(xiàn)。結(jié)合圖9以及如下表達(dá)式,假設(shè)有四個(gè)數(shù)組a、b、c、d需要進(jìn)行累加操作,即:sa=a0+a1+a2+…+ansb=b0+b1+b2+…+bnsc=c0+c1+c2+…+cnsd=d0+d1+d2+…+dn設(shè)計(jì)中將其分散在流水線(xiàn)的四個(gè)節(jié)拍中,即流水線(xiàn)節(jié)拍0——數(shù)組a、節(jié)拍1——數(shù)組b、節(jié)拍2——數(shù)組c、節(jié)拍3——數(shù)組d。由于一組輸入特征對(duì)應(yīng)多組卷積核,因此一組移位器的數(shù)據(jù)可以由多個(gè)向量單元共享。本發(fā)明的硬件結(jié)構(gòu)中,全局權(quán)值緩存有4個(gè)bank,即4個(gè)獨(dú)立讀寫(xiě)通道,可同時(shí)輸出4組不同的權(quán)值。因此一組移位器與4組向量單元連接,每個(gè)向量單元對(duì)應(yīng)一組權(quán)值,并行執(zhí)行4組卷積運(yùn)算,其卷積運(yùn)算結(jié)果對(duì)應(yīng)于4組不同輸出通道的輸出特征。由于輸出空間是一個(gè)三維矩陣,當(dāng)所有計(jì)算內(nèi)核都被開(kāi)啟時(shí),在一次迭代中輸出了一個(gè)16×8×4的三維矩陣。卷積單元輸出模塊包含對(duì)應(yīng)各向量單元的局部輸出緩沖區(qū)和卷積單元輸出接口。每一組局部輸出緩沖區(qū)位寬為256bit,與向量單元的輸出位寬適配,一個(gè)周期即可完成一組向量的讀寫(xiě),用于存儲(chǔ)對(duì)應(yīng)于一個(gè)特定輸入通道的所有輸出通道中間結(jié)果,并與下一個(gè)輸入通道的值累加后重新寫(xiě)回原地址。該過(guò)程對(duì)應(yīng)控制器的acc狀態(tài)。當(dāng)遍歷了所有的輸入通道之后,向量單元再次存入局部輸出緩存的數(shù)值即為最終結(jié)果,由輸出接口模塊輪流讀出并按照對(duì)應(yīng)的地址寫(xiě)入全局?jǐn)?shù)據(jù)緩存的寫(xiě)bank。該過(guò)程對(duì)應(yīng)控制器的save狀態(tài)。池化單元包含了控制器、輸入緩沖區(qū)、最大池化單元與平均池化單元。池化過(guò)程從全局?jǐn)?shù)據(jù)緩存的讀bank中讀入數(shù)據(jù),經(jīng)過(guò)池化操作后的結(jié)果寫(xiě)回全局?jǐn)?shù)據(jù)緩存的寫(xiě)bank。最大池化單元從子區(qū)域中找出最大值,調(diào)用了9組浮點(diǎn)比較器,按9-5-3-2-1的的樹(shù)形陣列連接。平均池化單元計(jì)算子區(qū)域的平均值,調(diào)用了加法器,按9-5-3-2-1的樹(shù)形陣列連接,其最后一級(jí)的輸出連接到浮點(diǎn)乘法器,乘以1/4、1/9等池化區(qū)域面積的倒數(shù)來(lái)取平均值,避免了使用資源開(kāi)銷(xiāo)大、延遲較高的除法器。如圖10所示,池化時(shí)考慮了輸入特征的行列尺寸,如果行列不能由池化子區(qū)域完全覆蓋,則需要額外處理邊界,以輸入尺寸為8、池化尺寸為3、池化步長(zhǎng)為2的最大池化為例,需要補(bǔ)齊邊界,填充為0或單精度負(fù)無(wú)窮(0xff7fffff),如圖11所示,填充單元在輸入特征每一個(gè)輸入通道的二維矩陣四周填充1到2層零。1)首先根據(jù)填充的層數(shù),向全局?jǐn)?shù)據(jù)緩存的寫(xiě)bank中寫(xiě)入全零行。2)之后從全局?jǐn)?shù)據(jù)緩存的讀bank中讀取原輸入特征,在原輸入特征的每一行開(kāi)頭寫(xiě)入零,并把每個(gè)元素的寫(xiě)入地址增加一個(gè)偏移量。原輸入特征的這一行存儲(chǔ)完后,再在該行末尾寫(xiě)入零。重復(fù)1、2兩個(gè)過(guò)程至原輸入特征的最后一行,在最后寫(xiě)入全零行。之后開(kāi)始對(duì)下一個(gè)輸入通道的二維矩陣進(jìn)行處理。圖12描述了全連接單元的結(jié)構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)中的全連接單元實(shí)際上是一個(gè)行向量(輸入特征)與矩陣相乘(權(quán)值矩陣),輸出另一個(gè)行向量(輸出特征)的計(jì)算過(guò)程,因此權(quán)值不存在復(fù)用情形,其計(jì)算能力取決于存儲(chǔ)器帶寬,向量長(zhǎng)度可以與外部存儲(chǔ)器的帶寬匹配。本設(shè)計(jì)中,外部數(shù)據(jù)存儲(chǔ)器和權(quán)值存儲(chǔ)器都是512bit,因此全連接單元設(shè)計(jì)為16組乘法器的輸出與加法器的16-8-4-2-1樹(shù)形連接模式,如圖12所示。由于全連接層的尺寸較大,計(jì)算中會(huì)出現(xiàn)累加,數(shù)據(jù)依賴(lài)導(dǎo)致的加法器流水線(xiàn)氣泡問(wèn)題同樣采用了如圖9所示的處理策略。所述全連接單元完成向量的乘加操作,其向量長(zhǎng)度與外部存儲(chǔ)器的帶寬匹配,完成一個(gè)行向量(輸入特征)與矩陣相乘(權(quán)值),輸出另一個(gè)行向量(輸出特征)的計(jì)算。本設(shè)計(jì)中,全連接單元調(diào)用了16個(gè)浮點(diǎn)乘法器,并通過(guò)的樹(shù)形浮點(diǎn)加法器陣列完成累加,一次計(jì)算迭代可以進(jìn)行1×16的行向量?jī)?nèi)積運(yùn)算。多緩存結(jié)構(gòu)包含了全局?jǐn)?shù)據(jù)緩存與全局權(quán)值緩存。卷積神經(jīng)網(wǎng)絡(luò)計(jì)算過(guò)程中,各層單向連接,每一層的計(jì)算結(jié)果成為下一層的輸入,即訪(fǎng)存過(guò)程要求同時(shí)讀寫(xiě)數(shù)據(jù)緩存。為了滿(mǎn)足這個(gè)需求,全局?jǐn)?shù)據(jù)緩存的設(shè)計(jì)考慮了“乒乓”策略。全局?jǐn)?shù)據(jù)緩存被分為兩個(gè)存儲(chǔ)塊(bank),存儲(chǔ)地址與空間不共享,每個(gè)塊都有獨(dú)立的讀寫(xiě)端口,讀寫(xiě)位寬為512bit,每個(gè)塊設(shè)計(jì)容量為1mb,共計(jì)2mb。兩個(gè)塊交替讀寫(xiě),避免了讀寫(xiě)阻塞與數(shù)據(jù)覆蓋。例如,輸入特征存儲(chǔ)在bank0,經(jīng)過(guò)第一層卷積的輸出特征存儲(chǔ)在bank1。輸入特征在全部計(jì)算過(guò)程中都會(huì)使用到,卷積單元從bank0讀入數(shù)據(jù)的同時(shí)向bank1寫(xiě)入輸出數(shù)據(jù)。bank的切換由指令控制,但其切換邏輯對(duì)外部是不可見(jiàn)的,即各計(jì)算單元在訪(fǎng)問(wèn)全局?jǐn)?shù)據(jù)緩存時(shí),并不需要關(guān)心具體訪(fǎng)問(wèn)的是哪一個(gè)bank、使哪一個(gè)讀寫(xiě)接口生效。全局?jǐn)?shù)據(jù)緩存使數(shù)據(jù)流能夠主要在協(xié)處理器內(nèi)部流動(dòng),避免了與外部ddr3存儲(chǔ)器的頻繁數(shù)據(jù)交換。如果預(yù)計(jì)某一層卷積計(jì)算的輸出特征存儲(chǔ)空間會(huì)超過(guò)數(shù)據(jù)緩存容量,那么在生成指令時(shí),就會(huì)把這次計(jì)算分成多個(gè)批次進(jìn)行,每一個(gè)分批都只計(jì)算輸出特征的一部分輸出通道,從而能夠保證該批次數(shù)據(jù)的完整性。在新一批次的計(jì)算開(kāi)始之前,全局?jǐn)?shù)據(jù)緩存中的這些數(shù)據(jù)會(huì)保存到外部ddr3存儲(chǔ)器的一個(gè)地址段中。之后,需要這一批數(shù)據(jù)的時(shí)候,再?gòu)脑摰刂范巫x回全局?jǐn)?shù)據(jù)緩存。卷積操作中,權(quán)值批量保存在全局權(quán)值緩存中,讀寫(xiě)位寬為512bit,權(quán)值緩存從外部ddr3只讀,并且對(duì)各計(jì)算單元只讀,減少了兩個(gè)方向的讀寫(xiě)。權(quán)值緩存設(shè)計(jì)為四個(gè)存儲(chǔ)塊,每個(gè)存儲(chǔ)塊的容量為16k×32bit=64kb,共計(jì)256kb。每個(gè)存儲(chǔ)塊對(duì)應(yīng)一個(gè)獨(dú)立的權(quán)值讀寫(xiě)通道,四個(gè)存儲(chǔ)塊可以支持四組向量計(jì)算單元對(duì)一組輸入特征的共享。i/o控制器負(fù)責(zé)外部ddr3存儲(chǔ)器的控制器與協(xié)處理器內(nèi)的全局?jǐn)?shù)據(jù)、權(quán)值緩存和指令緩存的通信。由于片上緩存與ddr3批量交換數(shù)據(jù),因此i/o控制器采用了dma(directmemoryaccess,直接內(nèi)存訪(fǎng)問(wèn))模式,把訪(fǎng)存控制邏輯從全局控制器中分離出來(lái),對(duì)ddr3控制器的讀寫(xiě)以及各有效信號(hào)進(jìn)行控制以完成批量訪(fǎng)問(wèn),并自動(dòng)完成對(duì)應(yīng)不同字長(zhǎng)的地址轉(zhuǎn)換,把訪(fǎng)問(wèn)ddr3的多種信號(hào)配合過(guò)程簡(jiǎn)化為一條對(duì)i/o控制器的訪(fǎng)存指令。全局控制器需要提供讀寫(xiě)請(qǐng)求、訪(fǎng)存首地址、批量訪(fǎng)問(wèn)長(zhǎng)度、目的存儲(chǔ)器以及目的存儲(chǔ)器首地址,i/o控制器會(huì)自動(dòng)進(jìn)行這一傳輸過(guò)程,而不需要全局控制器進(jìn)行干涉。傳輸完成時(shí)向全局控制器發(fā)送結(jié)束信號(hào)。全局控制器完成對(duì)整個(gè)協(xié)處理器各模塊的控制,包含了具有8個(gè)32位寄存器的通用寄存器堆、指令譯碼單元以及對(duì)各個(gè)單元的控制端口;控制器具有獨(dú)享的指令緩存,容量2048×32bit=8kb。在協(xié)處理器接受了外部某個(gè)主控制器或主機(jī)的啟動(dòng)信號(hào),從等待狀態(tài)上線(xiàn)時(shí),需要首先自動(dòng)進(jìn)入啟動(dòng)階段,從外部ddr3存儲(chǔ)器的指定數(shù)據(jù)段向指令緩存載入指令,之后指令指針自動(dòng)從指令緩存零地址開(kāi)始讀取指令,并在執(zhí)行本條指令時(shí)取出下一條指令并進(jìn)行譯碼。讀取到nop指令時(shí),即本次計(jì)算任務(wù)結(jié)束,進(jìn)入等待狀態(tài)。由于控制器只完成調(diào)度工作而不直接控制計(jì)算單元的復(fù)雜計(jì)算,因此本設(shè)計(jì)提供了一些必要的基本指令集,而不涉及很多具體的計(jì)算類(lèi)指令。全部的指令位寬為32bit,具體指令定義如表5所示:表5自設(shè)計(jì)指令集表中,指令域由第31位到第28表示。對(duì)不同的指令,其操作數(shù)的規(guī)定也不同,具體描述如表6所示。表6指令集具體規(guī)定當(dāng)前第1頁(yè)12
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
丽江市| 绥阳县| 舒城县| 锦屏县| 赣榆县| 新竹市| 连江县| 桐城市| 罗源县| 巨野县| 新化县| 舟曲县| 天门市| 古交市| 五原县| 罗定市| 游戏| 无锡市| 乡城县| 嘉荫县| 东方市| 历史| 金秀| 哈巴河县| 潜江市| 宝清县| 东宁县| 张家川| 通山县| 昌都县| 南宫市| 五莲县| 峨山| 故城县| 永顺县| 浠水县| 行唐县| 兴义市| 丰城市| 营山县| 安国市|