本發(fā)明涉及神經(jīng)網(wǎng)絡(luò)處理器體系結(jié)構(gòu)技術(shù)領(lǐng)域,特別涉及適用神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計方法、裝置及優(yōu)化方法。
背景技術(shù):
隨著人工智能領(lǐng)域相關(guān)技術(shù)的飛速發(fā)展,深度學(xué)習(xí)作為計算機(jī)科學(xué)與生命科學(xué)的跨學(xué)科產(chǎn)物,在解決高級抽象認(rèn)知問題上具有出色的表現(xiàn),因此成為了學(xué)術(shù)界和工業(yè)界的研究熱點(diǎn)。為了提高神經(jīng)網(wǎng)絡(luò)的計算性能同時適應(yīng)更復(fù)雜的應(yīng)用問題,神經(jīng)網(wǎng)絡(luò)的規(guī)模在不斷擴(kuò)大,計算量、數(shù)據(jù)量及運(yùn)算能耗也隨之增加。尋找高性能低能耗的神經(jīng)網(wǎng)絡(luò)計算方法及設(shè)備成為研究人員的關(guān)注熱點(diǎn)
目前利用深度神經(jīng)網(wǎng)絡(luò)進(jìn)行實(shí)時任務(wù)分析大多依靠大規(guī)模高性能處理器或通用圖形處理器,這些設(shè)備成本高功耗大,面向便攜式智能設(shè)備應(yīng)用時,存在電路規(guī)模大、能量消耗高和產(chǎn)品價格昂貴等一系列問題,因此,針對嵌入式設(shè)備及小型低成本數(shù)據(jù)中心等應(yīng)用領(lǐng)域中高能效實(shí)時處理的應(yīng)用,采用專用神經(jīng)網(wǎng)絡(luò)處理器加速而不是軟件的方式進(jìn)行神經(jīng)網(wǎng)絡(luò)模型計算成為一種更有效的解決方案,然而神經(jīng)網(wǎng)絡(luò)模型的拓?fù)浣Y(jié)構(gòu)及參數(shù)設(shè)計會根據(jù)不同的應(yīng)用場景而改變,另外神經(jīng)網(wǎng)絡(luò)模型的發(fā)展更迭速度很快,提供一種可以面向各種應(yīng)用場景并覆蓋各種神經(jīng)網(wǎng)絡(luò)模型的通用高效神經(jīng)網(wǎng)絡(luò)處理器非常困難,這為高層應(yīng)用開發(fā)者針對不同應(yīng)用需求設(shè)計硬件加速解決方案帶來了極大不變。
目前現(xiàn)有的神經(jīng)網(wǎng)絡(luò)硬件加速技術(shù)包括專用集成電路(applicationspecificintegratedcircuit,asic)芯片和現(xiàn)場可編程門陣列(fieldprogrammablegatearray,fpga)兩種方式,在同等工藝條件下,asic芯片運(yùn)行速度快且功耗低,但設(shè)計流程復(fù)雜、投片周期長、開發(fā)成本高,無法適應(yīng)神經(jīng)網(wǎng)絡(luò)模型快速更新的特點(diǎn);fpga具有電路配置靈活、開發(fā)周期短的特點(diǎn),但運(yùn)行速度相對低,硬件開銷及功耗相對較大,無論采用上述哪種硬件加速技術(shù),均需要神經(jīng)網(wǎng)絡(luò)模型及算法開發(fā)人員在了解網(wǎng)絡(luò)拓?fù)浜蛿?shù)據(jù)流模式的同時掌握硬件開發(fā)技術(shù),包括處理器架構(gòu)設(shè)計、硬件代碼編寫、仿真驗(yàn)證及布局布線等環(huán)節(jié),這些技術(shù)對專注于研究神經(jīng)網(wǎng)絡(luò)模型及結(jié)構(gòu)設(shè)計、而不具備硬件設(shè)計能力的高層應(yīng)用開發(fā)人員而言開發(fā)難度較高,因此,為了使高層開發(fā)者高效地進(jìn)行神經(jīng)網(wǎng)絡(luò)技術(shù)應(yīng)用開發(fā),提供一種面向多種神經(jīng)網(wǎng)絡(luò)模型的神經(jīng)網(wǎng)絡(luò)處理器自動化設(shè)計方法及工具是非常迫切的。
為縮短神經(jīng)網(wǎng)絡(luò)處理器的設(shè)計周期、提高神經(jīng)網(wǎng)絡(luò)處理器的工作性能并滿足上層應(yīng)用開發(fā)者的神經(jīng)網(wǎng)絡(luò)運(yùn)行需求,本發(fā)明提供一款適用神經(jīng)網(wǎng)絡(luò)處理器的自動設(shè)計工具,該工具可將神經(jīng)網(wǎng)絡(luò)模型映射為神經(jīng)網(wǎng)絡(luò)專用處理器,并根據(jù)該處理器結(jié)構(gòu)優(yōu)化數(shù)據(jù)計算及調(diào)度方式、生成相對應(yīng)的控制流指令,實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)硬件加速器的硬件及軟件自動化協(xié)同設(shè)計。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)的不足,本發(fā)明提出適用神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計方法、裝置及優(yōu)化方法。
本發(fā)明提出一種適用神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計方法,包括:
步驟1,獲取神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件與硬件資源約束文件,其中所述硬件資源約束文件包括目標(biāo)電路面積開銷、目標(biāo)電路功耗開銷及目標(biāo)電路工作頻率;
步驟2,根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件與所述硬件資源約束文件生成神經(jīng)網(wǎng)絡(luò)處理器硬件架構(gòu),并生成硬件架構(gòu)描述文件;
步驟3,根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)、所述硬件資源約束文件及所述硬件架構(gòu)描述文件優(yōu)化數(shù)據(jù)調(diào)度、存儲及計算方式,生成對應(yīng)的控制描述文件;
步驟4,根據(jù)所述硬件架構(gòu)描述文件、所述控制描述文件從已構(gòu)建的神經(jīng)網(wǎng)絡(luò)可復(fù)用單元庫查找符合設(shè)計要求的單元庫、生成相對應(yīng)的控制邏輯并生成對應(yīng)的硬件電路描述語言,將所述硬件電路描述語言轉(zhuǎn)化為硬件電路。
所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件包括神經(jīng)網(wǎng)絡(luò)層數(shù)及每層網(wǎng)絡(luò)尺寸大小、數(shù)據(jù)位寬、權(quán)重位寬、當(dāng)前層功能屬性、當(dāng)前層輸入層數(shù)、當(dāng)前層輸出層數(shù)、當(dāng)前層卷積核大小、當(dāng)前層步進(jìn)大小,下一層連接屬性。
在生成神經(jīng)網(wǎng)絡(luò)電路模型的同時生成控制指令流,指令類型包括載入/存儲指令和運(yùn)算指令等類型。
所述步驟3包括:根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件進(jìn)行卷積核分塊、數(shù)據(jù)分塊,并生成控制狀態(tài)機(jī);根據(jù)所述控制狀態(tài)機(jī)生成控制指令流。
所述硬件架構(gòu)描述文件包括輸入數(shù)據(jù)存儲器容量、輸入存儲器位寬、權(quán)重存儲器容量、權(quán)重存儲器位寬、偏置存儲器容量、偏置存儲器位寬、輸出數(shù)據(jù)存儲器容量、輸出數(shù)據(jù)存儲器位寬、數(shù)據(jù)位寬、計算單元寬度、計算單元深度、數(shù)據(jù)共享標(biāo)志位及權(quán)重共享標(biāo)志位。
本發(fā)明還提出一種適用神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計裝置,包括:
獲取數(shù)據(jù)模塊,用于獲取神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件與硬件資源約束文件,其中所述硬件資源約束文件包括目標(biāo)電路面積開銷、目標(biāo)電路功耗開銷及目標(biāo)電路工作頻率;
生成硬件架構(gòu)描述文件模塊,用于根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件與所述硬件資源約束文件生成神經(jīng)網(wǎng)絡(luò)處理器硬件架構(gòu),并生成硬件架構(gòu)描述文件;
生成控制描述文件模塊,用于根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)、所述硬件資源約束文件及所述硬件架構(gòu)描述文件優(yōu)化數(shù)據(jù)調(diào)度、存儲及計算方式,生成對應(yīng)的控制描述文件;
生成硬件電路模塊,用于根據(jù)所述硬件架構(gòu)描述文件、所述控制描述文件從已構(gòu)建的神經(jīng)網(wǎng)絡(luò)可復(fù)用單元庫查找符合設(shè)計要求的單元庫并生成對應(yīng)的硬件電路描述語言,將所述硬件電路描述語言轉(zhuǎn)化為硬件電路。
所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件包括神經(jīng)網(wǎng)絡(luò)層數(shù)及每層網(wǎng)絡(luò)尺寸大小、數(shù)據(jù)位寬、權(quán)重位寬、當(dāng)前層功能屬性、當(dāng)前層輸入層數(shù)、當(dāng)前層輸出層數(shù)、當(dāng)前層卷積核大小、當(dāng)前層步進(jìn)大小,下一層連接屬性。
在生成神經(jīng)網(wǎng)絡(luò)電路模型的同時生成控制指令流,指令類型包括載入/存儲指令和運(yùn)算指令等類型。
所述生成控制描述文件模塊功能包括:根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件進(jìn)行卷積核分塊、數(shù)據(jù)分塊,并生成控制狀態(tài)機(jī);根據(jù)所述控制狀態(tài)機(jī)生成控制指令流。
所述硬件架構(gòu)描述文件包括輸入數(shù)據(jù)存儲器容量、輸入存儲器位寬、權(quán)重存儲器容量、權(quán)重存儲器位寬、偏置存儲器容量、偏置存儲器位寬、輸出數(shù)據(jù)存儲器容量、輸出數(shù)據(jù)存儲器位寬、數(shù)據(jù)位寬、計算單元寬度、計算單元深度、數(shù)據(jù)共享標(biāo)志位及權(quán)重共享標(biāo)志位。
本發(fā)明還提出一種基于如所述的適用神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計方法的優(yōu)化方法,包括:
步驟1,對于給定的神經(jīng)網(wǎng)絡(luò)層,若卷積核大小k與步進(jìn)值s一致,采用權(quán)重共享模式,卷積核在單層數(shù)據(jù)圖內(nèi)進(jìn)行卷積操作;
步驟2,若數(shù)據(jù)圖層數(shù)小于計算單元寬度,采用卷積核分割的方法,將卷積核k分割為多個卷積核ks;若數(shù)據(jù)圖層數(shù)大于計算單元寬度,采用數(shù)據(jù)共享方式;
步驟3,判斷下一神經(jīng)網(wǎng)絡(luò)層的計算方式,并根據(jù)下一神經(jīng)網(wǎng)絡(luò)層的卷積操作方式存儲當(dāng)前層的計算結(jié)果。
由以上方案可知,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明包括一款硬件生成器和一款編譯器,所述硬件生成器可根據(jù)神經(jīng)網(wǎng)絡(luò)類型及硬件資源約束自動生成神經(jīng)網(wǎng)絡(luò)處理器的硬件描述語言代碼,隨后設(shè)計人員利用已有硬件電路設(shè)計方法通過硬件描述語言生成處理器硬件電路;所述編譯器可根據(jù)神經(jīng)網(wǎng)絡(luò)處理器電路結(jié)構(gòu)生成控制和數(shù)據(jù)調(diào)度指令流。
附圖說明
圖1是本發(fā)明提供的神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計工作流程圖;
圖2是本發(fā)明可自動生成的神經(jīng)網(wǎng)絡(luò)處理器系統(tǒng)示意圖;
圖3是本發(fā)明中編譯器工作具體步驟圖;
圖4是神經(jīng)網(wǎng)絡(luò)處理器進(jìn)行卷積操作的控制狀態(tài)機(jī)流程圖;
圖5是權(quán)重共享模式下卷積核工作示意圖;
圖6是本發(fā)明提出的卷積核分割方法示意圖;
圖7是載入/存儲指令的指令格式圖;
圖8是運(yùn)算指令的指令格式圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案、設(shè)計方法及優(yōu)點(diǎn)更加清楚明了,以下結(jié)合附圖通過具體實(shí)施例對本發(fā)明進(jìn)一步詳細(xì)說明,應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明旨在提供一種適用神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計方法、裝置及優(yōu)化方法,該裝置包括一款硬件生成器和一款編譯器,所述硬件生成器可根據(jù)神經(jīng)網(wǎng)絡(luò)類型及硬件資源約束自動生成神經(jīng)網(wǎng)絡(luò)處理器的硬件描述語言代碼,隨后設(shè)計人員利用已有硬件電路設(shè)計方法通過硬件描述語言生成處理器硬件電路;所述編譯器可根據(jù)神經(jīng)網(wǎng)絡(luò)處理器電路結(jié)構(gòu)生成控制和數(shù)據(jù)調(diào)度指令流。
如圖1所示為本發(fā)明提供的適用于神經(jīng)網(wǎng)絡(luò)處理器自動化設(shè)計裝置的工作步驟:
步驟1,讀入神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件,所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件包括神經(jīng)網(wǎng)絡(luò)層數(shù)及每層網(wǎng)絡(luò)尺寸大小、數(shù)據(jù)位寬、權(quán)重位寬、當(dāng)前層功能屬性、當(dāng)前層輸入層數(shù)、當(dāng)前層輸出層數(shù)、當(dāng)前層卷積核大小、當(dāng)前層步進(jìn)大小,下一層連接屬性;
步驟2,讀入硬件資源約束文件,所述硬件資源約束文件包括目標(biāo)電路面積開銷、目標(biāo)電路功耗開銷及目標(biāo)電路工作頻率等;
步驟3,裝置所包含硬件生成器根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件和硬件資源約束文件生成神經(jīng)網(wǎng)絡(luò)處理器硬件架構(gòu),并生成硬件架構(gòu)描述文件;
步驟4,裝置所包含編譯器根據(jù)神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)、硬件資源約束及硬件架構(gòu)描述文件優(yōu)化數(shù)據(jù)調(diào)度、存儲及計算方式,并生成對應(yīng)的控制描述文件;
步驟5,硬件生成器根據(jù)硬件架構(gòu)描述文件及控制流描述文件從已構(gòu)建好的神經(jīng)網(wǎng)絡(luò)可復(fù)用單元庫索引符合設(shè)計要求的單元庫、生成相對應(yīng)的控制邏輯并生成對應(yīng)的硬件電路描述語言;
步驟6,通過已有硬件設(shè)計方法將硬件電路描述語言轉(zhuǎn)化為硬件電路。
本發(fā)明可自動生成的神經(jīng)網(wǎng)絡(luò)處理器基于存儲-控制-計算的結(jié)構(gòu);
存儲結(jié)構(gòu)用于存儲參與計算的數(shù)據(jù)、神經(jīng)網(wǎng)絡(luò)權(quán)重及處理器操作指令;
控制結(jié)構(gòu)包括譯碼電路與控制邏輯電路,用于解析操作指令,生成控制信號,該信號用于控制片上數(shù)據(jù)的調(diào)度與存儲以及神經(jīng)網(wǎng)絡(luò)計算過程;
計算結(jié)構(gòu)包括計算單元,用于參與該處理器中的神經(jīng)網(wǎng)絡(luò)計算操作。
圖2為本發(fā)明可自動生成的神經(jīng)網(wǎng)絡(luò)處理器系統(tǒng)101示意圖,該神經(jīng)網(wǎng)絡(luò)處理器系統(tǒng)101架構(gòu)由七個部分構(gòu)成,包括輸入數(shù)據(jù)存儲單元102、控制單元103、輸出數(shù)據(jù)存儲單元104、權(quán)重存儲單元105、指令存儲單元106、計算單元107。
輸入數(shù)據(jù)存儲單元102用于存儲參與計算的數(shù)據(jù),該數(shù)據(jù)包括原始特征圖數(shù)據(jù)和參與中間層計算的數(shù)據(jù);輸出數(shù)據(jù)存儲單元104存儲計算得到的神經(jīng)元響應(yīng)值;指令存儲單元106存儲參與計算的指令信息,指令被解析為控制流來調(diào)度神經(jīng)網(wǎng)絡(luò)計算;權(quán)重存儲單元105用于存儲已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)權(quán)重;
控制單元103分別與輸出數(shù)據(jù)存儲單元104、權(quán)重存儲單元105、指令存儲單元106、計算單元107相連,控制單元103獲得保存在指令存儲單元106中的指令并且解析該指令,控制單元103可根據(jù)解析指令得到的控制信號控制計算單元進(jìn)行神經(jīng)網(wǎng)絡(luò)計算。
計算單元107用于根據(jù)控制單元103產(chǎn)生的控制信號來執(zhí)行相應(yīng)的神經(jīng)網(wǎng)絡(luò)計算。計算單元107與一個或多個存儲單元相關(guān)聯(lián),計算單元107可以從與其相關(guān)聯(lián)的輸入數(shù)據(jù)存儲單元102中的數(shù)據(jù)存儲部件獲得數(shù)據(jù)以進(jìn)行計算,并且可以向與其相關(guān)聯(lián)的輸出數(shù)據(jù)存儲單元104寫入數(shù)據(jù)。計算單元107完成神經(jīng)網(wǎng)絡(luò)算法中的大部分運(yùn)算,即向量乘加操作等。
所述硬件生成器根據(jù)神經(jīng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、約束文件構(gòu)建神經(jīng)網(wǎng)絡(luò)處理器硬件架構(gòu),并根據(jù)所述處理器硬件架構(gòu)、已構(gòu)建好的神經(jīng)網(wǎng)絡(luò)可復(fù)用單元庫以及編譯器生成的控制狀態(tài)機(jī)生成硬件描述語言代碼;
為了適應(yīng)各種神經(jīng)網(wǎng)絡(luò)模型的硬件實(shí)現(xiàn)設(shè)計,本發(fā)明提供一套神經(jīng)網(wǎng)絡(luò)可復(fù)用單元庫,單元庫包括硬件描述文件及配置腳本兩部分。本發(fā)明提供的可復(fù)用單元庫包括但不局限于:神經(jīng)元單元、累加器單元、池化單元、分類器單元、局部響應(yīng)歸一化單元、查找表單元、地址生成單元、控制單元等。
本發(fā)明提供的神經(jīng)網(wǎng)絡(luò)處理器包括一款編譯器,根據(jù)神經(jīng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、硬件電路結(jié)構(gòu)及約束文件生成指令流,對處理器進(jìn)行實(shí)時控制。圖3為編譯器工作具體步驟:
步驟1,讀入神經(jīng)網(wǎng)絡(luò)拓補(bǔ)結(jié)構(gòu)配置文件、硬件架構(gòu)描述文件及約束配置文件(即神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件);
步驟2,編譯器根據(jù)配置文件進(jìn)行卷積核分塊、數(shù)據(jù)分塊等調(diào)度優(yōu)化,并生成控制狀態(tài)機(jī);
步驟3,生成控制指令流。
所述控制狀態(tài)機(jī)用來調(diào)度電路工作狀態(tài),圖4以神經(jīng)網(wǎng)絡(luò)處理器進(jìn)行卷積操作為例描述了所述控制狀態(tài)機(jī)流程圖。
所述神經(jīng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)配置文件包括本發(fā)明通過提供所述神經(jīng)網(wǎng)絡(luò)描述文件格式描述神經(jīng)網(wǎng)絡(luò)模型特征,該描述文件內(nèi)容包括網(wǎng)絡(luò)基本屬性、參數(shù)描述和連接信息三部分,其中基本屬性包括層名稱和層類型,參數(shù)描述包括輸出層數(shù)、卷積核大小和步進(jìn)大小,連接信息包括連接名稱、連接方向、連接類型。
所述硬件架構(gòu)描述文件包括硬件電路結(jié)構(gòu)輸入數(shù)據(jù)存儲器容量、輸入存儲器位寬、權(quán)重存儲器容量、權(quán)重存儲器位寬、偏置存儲器容量、偏置存儲器位寬、輸出數(shù)據(jù)存儲器容量、輸出數(shù)據(jù)存儲器位寬、數(shù)據(jù)位寬、計算單元寬度、計算單元深度、數(shù)據(jù)共享標(biāo)志位及權(quán)重共享標(biāo)志位。
本發(fā)明在編譯階段采用一種基于卷積核分割及數(shù)據(jù)共享的優(yōu)化算法,所述優(yōu)化算法的步驟為:
步驟1,對于給定的神經(jīng)網(wǎng)絡(luò)層,若卷積核大小k和步進(jìn)值s一致,采用權(quán)重共享模式,卷積核在單層數(shù)據(jù)圖內(nèi)進(jìn)行卷積操作,如圖5;
步驟2,若數(shù)據(jù)圖層數(shù)小于計算單元寬度,采用卷積核分割的方法,將大卷積核k分割為小卷積核ks,如圖6;若數(shù)據(jù)圖層數(shù)大于計算單元寬度,采用數(shù)據(jù)共享方式。
步驟3,判斷下一神經(jīng)網(wǎng)絡(luò)層的計算方式,并根據(jù)下一神經(jīng)網(wǎng)絡(luò)層的卷積操作方式存儲當(dāng)前層的計算結(jié)果。
本發(fā)明所述指令流為宏指令,所述編譯器在生成指令流時的具體步驟為:
步驟1,讀入神經(jīng)網(wǎng)絡(luò)層名稱;
步驟2,讀入神經(jīng)網(wǎng)絡(luò)層類型;
步驟3,解析神經(jīng)網(wǎng)絡(luò)層參數(shù);
步驟4,確定硬件電路結(jié)構(gòu)與參數(shù);
步驟5,通過所述卷積核分割及數(shù)據(jù)共享優(yōu)化算法進(jìn)行調(diào)度優(yōu)化;
步驟6,確定指令參數(shù)并根據(jù)神經(jīng)網(wǎng)絡(luò)工作方式與調(diào)度方式生成控制流指令。
所述指令參數(shù)包括:神經(jīng)網(wǎng)絡(luò)層序號、輸入層數(shù)、輸出層數(shù)、每層數(shù)據(jù)尺寸大小、數(shù)據(jù)寬度、權(quán)重寬度、卷積核大小等。
所述指令流為所設(shè)計神經(jīng)網(wǎng)絡(luò)處理器的操作指令根據(jù)神經(jīng)網(wǎng)絡(luò)模型工作方式組成而成,其中指令類型包括載入/存儲指令和運(yùn)算指令等類型。
載入/存儲指令包括:
外部與內(nèi)部存儲器數(shù)據(jù)傳輸指令,用于外部存儲器與內(nèi)部存儲器之間的數(shù)據(jù)交換,所述數(shù)據(jù)包括參與神經(jīng)網(wǎng)絡(luò)計算的數(shù)據(jù)、已訓(xùn)練好的權(quán)重及偏置數(shù)據(jù)等;
輸入數(shù)據(jù)存儲器與計算單元傳輸指令,用于將片上存儲器中的數(shù)據(jù)按照編譯優(yōu)化的調(diào)度方式載入至計算單元;
權(quán)重存儲器與計算單元傳輸指令,用于將片上存儲器中的權(quán)重數(shù)據(jù)按照編譯優(yōu)化的調(diào)度方式載入至計算單元;
計算單元與輸出數(shù)據(jù)存儲器傳輸指令,用于將計算單元的計算結(jié)果存儲至存儲器中。
以輸入數(shù)據(jù)存儲器與計算單元傳輸指令為例,介紹載入/存儲指令的指令格式,指令格式如圖7所示,每條指令包括:
操作碼,標(biāo)記指令類型;
發(fā)射間隔,標(biāo)記指令每次操作的發(fā)射間隔;
數(shù)據(jù)首地址,標(biāo)記數(shù)據(jù)首地址;
操作模式,描述電路所處工作狀態(tài),包括大卷積核操作、小卷積核操作、池化操作、全連接操作等;
卷積核大小,標(biāo)記卷積核值;
輸出圖片大小,標(biāo)記輸出圖片大??;
輸入層數(shù)目,標(biāo)記輸入層數(shù)目;
輸出層數(shù)目,標(biāo)記輸出層數(shù)目;
清零信號,清除數(shù)據(jù)值。
運(yùn)算指令包括:
卷積操作指令,用于控制卷積操作,指令包括;
池化操作指令,用于控制池化操作;
局部相應(yīng)歸一化指令,用于控制局部響應(yīng)歸一化操作;
清除指令,用于清除計算單元中載入的數(shù)據(jù);
激勵函數(shù)操作指令,用于控制激勵函數(shù)操作并配置函數(shù)模式。
以卷積指令為例,介紹運(yùn)算指令的指令格式,指令格式如圖8所示,每條指令包括:
操作碼,標(biāo)記指令類型;
計算核心數(shù),標(biāo)記參與運(yùn)算的計算核心數(shù);
發(fā)射間隔,標(biāo)記指令每次操作的發(fā)射間隔;
操作模式,包括層內(nèi)卷積及跨層卷積等模式;
目標(biāo)寄存器,標(biāo)記計算結(jié)果的存儲位置,包括輸出數(shù)據(jù)存儲器、激勵函數(shù)寄存器及查找表寄存器等。
綜上所述,本發(fā)明提供一款適用于神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計工具,該工具可將神經(jīng)網(wǎng)絡(luò)模型映射為神經(jīng)網(wǎng)絡(luò)專用處理器,并根據(jù)該處理器結(jié)構(gòu)優(yōu)化數(shù)據(jù)計算及調(diào)度方式、生成相對應(yīng)的控制流指令,實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計,降低了神經(jīng)網(wǎng)絡(luò)處理器的設(shè)計周期,適應(yīng)了神經(jīng)網(wǎng)絡(luò)技術(shù)網(wǎng)絡(luò)模型更新快、運(yùn)算速度要求塊、能量效率要求高的應(yīng)用特點(diǎn)。
本發(fā)明還提出一種適用神經(jīng)網(wǎng)絡(luò)處理器的自動化設(shè)計裝置,包括:
獲取數(shù)據(jù)模塊,用于獲取神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件與硬件資源約束文件,其中所述硬件資源約束文件包括目標(biāo)電路面積開銷、目標(biāo)電路功耗開銷及目標(biāo)電路工作頻率;
生成硬件架構(gòu)描述文件模塊,用于根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件與所述硬件資源約束文件生成神經(jīng)網(wǎng)絡(luò)處理器硬件架構(gòu),并生成硬件架構(gòu)描述文件;
生成控制描述文件模塊,用于根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)、所述硬件資源約束文件及所述硬件架構(gòu)描述文件優(yōu)化數(shù)據(jù)調(diào)度、存儲及計算方式,生成對應(yīng)的控制描述文件;
生成硬件電路模塊,用于根據(jù)所述硬件架構(gòu)描述文件、所述控制描述文件從已構(gòu)建的神經(jīng)網(wǎng)絡(luò)可復(fù)用單元庫查找符合設(shè)計要求的單元庫并生成對應(yīng)的硬件電路描述語言,將所述硬件電路描述語言轉(zhuǎn)化為硬件電路。
所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件包括神經(jīng)網(wǎng)絡(luò)層數(shù)及每層網(wǎng)絡(luò)尺寸大小、數(shù)據(jù)位寬、權(quán)重位寬、當(dāng)前層功能屬性、當(dāng)前層輸入層數(shù)、當(dāng)前層輸出層數(shù)、當(dāng)前層卷積核大小、當(dāng)前層步進(jìn)大小,下一層連接屬性。
所述神經(jīng)網(wǎng)絡(luò)可復(fù)用單元庫包括:神經(jīng)元單元、累加器單元、池化單元、分類器單元、局部響應(yīng)歸一化單元、查找表單元、地址生成單元、控制單元。
所述生成控制描述文件包括:根據(jù)所述神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)配置文件進(jìn)行卷積核分塊、數(shù)據(jù)分塊,并生成控制狀態(tài)機(jī);根據(jù)所述控制狀態(tài)機(jī)生成控制指令流。
所述硬件架構(gòu)描述文件包括輸入數(shù)據(jù)存儲器容量、輸入存儲器位寬、權(quán)重存儲器容量、權(quán)重存儲器位寬、偏置存儲器容量、偏置存儲器位寬、輸出數(shù)據(jù)存儲器容量、輸出數(shù)據(jù)存儲器位寬、數(shù)據(jù)位寬、計算單元寬度、計算單元深度、數(shù)據(jù)共享標(biāo)志位及權(quán)重共享標(biāo)志位。
應(yīng)當(dāng)理解,雖然本說明書是按照各個實(shí)施例描述的,但并非每個實(shí)施例僅包含一個獨(dú)立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說明書作為一個整體,各實(shí)施例中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實(shí)施方式。
以上所述僅為本發(fā)明示意性的具體實(shí)施方式,并非用以限定本發(fā)明的范圍。任何本領(lǐng)域的技術(shù)人員,在不脫離本發(fā)明的構(gòu)思和原則的前提下所作的等同變化、修改與結(jié)合,均應(yīng)屬于本發(fā)明保護(hù)的范圍。