本發(fā)明涉及神經(jīng)網(wǎng)絡(luò)及硬件加速技術(shù),尤其涉及支持神經(jīng)網(wǎng)絡(luò)計(jì)算的加速方法及存儲(chǔ)結(jié)構(gòu)。
背景技術(shù):
卷積神經(jīng)網(wǎng)絡(luò)具有良好的容錯(cuò)能力、并行處理能力和自學(xué)習(xí)能力,被廣泛應(yīng)用在深度學(xué)習(xí)中作為基準(zhǔn)神經(jīng)網(wǎng)絡(luò)架構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算通常會(huì)涉及頻繁的訪存,降低訪存延遲和提高訪存帶寬對(duì)于提高卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算效率、降低計(jì)算功耗都有極大的好處。傳統(tǒng)基于dram或sram的方式存儲(chǔ)權(quán)重和中間計(jì)算結(jié)果的方法,并不能得到很好的效果。對(duì)于dram,其訪存速度相較于sram要慢,訪存帶寬也相較于sram要小,對(duì)于神經(jīng)網(wǎng)絡(luò)的計(jì)算效率有很大的限制作用。而對(duì)于sram,雖然在訪存速度和訪存帶寬上要略勝一籌,但是因?yàn)槠涓甙旱膬r(jià)格,并不能提供很大的內(nèi)存容量,也不適合具有大量計(jì)算數(shù)據(jù)的卷積神經(jīng)網(wǎng)絡(luò)計(jì)算。hmc(hybridmemorycube,混合內(nèi)存立方體)是一種新型的3d內(nèi)存結(jié)構(gòu),由于其具有存儲(chǔ)容量大、片上訪存延遲小等特點(diǎn),可能是一種合適應(yīng)用于卷積神經(jīng)網(wǎng)絡(luò)計(jì)算中的存儲(chǔ)計(jì)算載體,但如何利用這種新型內(nèi)存結(jié)構(gòu)更好地支持卷積神經(jīng)網(wǎng)絡(luò)計(jì)算,仍是亟需解決的問題。
技術(shù)實(shí)現(xiàn)要素:
因此,本發(fā)明的目的是提供一種能較好地支持卷積神經(jīng)網(wǎng)絡(luò)計(jì)算的混合內(nèi)存立方體結(jié)構(gòu)及加速卷積神經(jīng)網(wǎng)絡(luò)計(jì)算的方法。
本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的:
一方面,本發(fā)明提供了一種混合內(nèi)存立方體存儲(chǔ)系統(tǒng),包括混合立方體和設(shè)置在所述混合立方體的電路邏輯層上的計(jì)算控制器、乘加加速器及緩存,
其中所述計(jì)算控制器用于響應(yīng)于接收的指令指示所述混合立方體的內(nèi)存控制器對(duì)所述混合立方體中的數(shù)據(jù)進(jìn)行存取,讀寫緩存以及指示乘加加速器進(jìn)行計(jì)算;
所述乘加加速器用于響應(yīng)于來自所述計(jì)算控制器的指令,讀取緩存中的數(shù)據(jù)來并行地進(jìn)行多路乘加計(jì)算并將計(jì)算結(jié)果寫入至緩存。
在上述系統(tǒng)中,所述乘加加速器可包括并行乘加器、寄存器和狀態(tài)機(jī),其中狀態(tài)機(jī)響應(yīng)于來自計(jì)算控制器的指令控制并行乘加器進(jìn)行運(yùn)算;并行乘加器響應(yīng)于狀態(tài)機(jī)的控制,基于從寄存器讀取的數(shù)據(jù)并行地進(jìn)行多路乘加計(jì)算并將計(jì)算結(jié)果寫入到寄存器;寄存器用于存儲(chǔ)從緩存讀取的數(shù)據(jù)和來自并行乘加器的計(jì)算結(jié)果。
在上述系統(tǒng)中,所述并行乘加器可以由多個(gè)并聯(lián)的乘加器構(gòu)成。
在上述系統(tǒng)中,所述寄存器大小可取決于并行乘加器一次計(jì)算所需的數(shù)據(jù)的最大容量。
在上述系統(tǒng)中,所述計(jì)算控制器可以為輕量級(jí)處理器。
在上述系統(tǒng)中,所述計(jì)算控制器可響應(yīng)于收到要進(jìn)行存取數(shù)據(jù)的指令時(shí),通過內(nèi)存控制器從混合立方體中存取相關(guān)數(shù)據(jù),并返回對(duì)所述指令的響應(yīng)。
在上述系統(tǒng)中,所述計(jì)算控制器可響應(yīng)于收到要進(jìn)行乘加運(yùn)算的指令時(shí),通過內(nèi)存控制器從混合立方體中讀取要進(jìn)行計(jì)算的數(shù)據(jù)并將其保存至緩存中,指示乘加加速器從緩存中讀取相應(yīng)數(shù)據(jù)進(jìn)行運(yùn)算,以及從緩存中讀取來自乘加加速器的運(yùn)算結(jié)果并通過內(nèi)存控制器將其寫入混合立方體中,同時(shí)返回對(duì)所述指令的響應(yīng)。
又一方面,本發(fā)明提供了一種采用上述的存儲(chǔ)系統(tǒng)進(jìn)行加速計(jì)算的方法,包括:
步驟s1,由計(jì)算控制器響應(yīng)于確定收到的指令指示要進(jìn)行乘加運(yùn)算,從該指令中提取需要計(jì)算的數(shù)據(jù)在混合立方體中的物理地址;
步驟s2,由計(jì)算控制器指示混合立方體的內(nèi)存控制器通過所提取的物理地址取出數(shù)據(jù)并保存到緩存中;
步驟s3,由計(jì)算控制器指示乘加加速器從緩存中讀取數(shù)據(jù)進(jìn)行相關(guān)的乘加計(jì)算并將得到的計(jì)算結(jié)果保存至緩存;
步驟s4,由計(jì)算控制器從緩存中讀取計(jì)算結(jié)果,指示內(nèi)存控制器將該計(jì)算結(jié)果寫入到所收到的指令中指定的需要寫入計(jì)算結(jié)果的物理地址。
在上述方法中,還可包括由計(jì)算控制器響應(yīng)于確定收到的指令指示要進(jìn)行數(shù)據(jù)存/取,從該指令中提取需要進(jìn)行存/取的物理地址;
由計(jì)算控制器指示混合立方體的內(nèi)存控制器在該物理地址處存/取數(shù)據(jù)并返回對(duì)指令的響應(yīng)。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
將卷積神經(jīng)網(wǎng)絡(luò)中大量的并發(fā)乘加計(jì)算放在hmc的電路邏輯層中進(jìn)行,充分利用了hmc結(jié)構(gòu)內(nèi)部的高內(nèi)存帶寬和低訪存延遲的特點(diǎn),減少了主處理器的負(fù)擔(dān),提高了神經(jīng)網(wǎng)絡(luò)整體的計(jì)算效率,并降低了功耗開銷。
附圖說明
以下參照附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步說明,其中:
圖1為現(xiàn)有的混合立方體的結(jié)構(gòu)示意圖;
圖2為對(duì)于現(xiàn)有混合立方體的訪存示意圖;
圖3為根據(jù)本發(fā)明實(shí)施例的混合立方體存儲(chǔ)系統(tǒng)結(jié)構(gòu)示意圖;
圖4為根據(jù)本發(fā)明實(shí)施例的乘加加速器的結(jié)構(gòu)示意圖;
圖5為根據(jù)本發(fā)明實(shí)施例的并行乘加器的結(jié)構(gòu)示意圖;
圖6為根據(jù)本發(fā)明實(shí)施例的乘加加速器中狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換示意圖;
圖7為基于本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)加速卷積神經(jīng)網(wǎng)絡(luò)計(jì)算的方法流程示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的,技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖通過具體實(shí)施例對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
圖1給出了現(xiàn)有的混合立方體(hmc)的結(jié)構(gòu)示例示意圖。如圖1所示,hmc包括多個(gè)內(nèi)存層和一個(gè)電路邏輯層。hmc采用了3d封裝技術(shù),將多層dram以及電路邏輯層堆疊,其中電路邏輯層對(duì)各層進(jìn)行排序,刷新,數(shù)據(jù)路由,糾錯(cuò)等。平行堆疊的多個(gè)內(nèi)存芯片通過tsv(硅通孔)技術(shù)互相垂直鏈接,以使得每個(gè)芯片傳輸數(shù)據(jù)的輸入輸出端口大幅度增加從而大大提升了內(nèi)存帶寬并降低了傳輸延遲。其中每一個(gè)拱頂(vault)都在對(duì)應(yīng)的電路邏輯層中存在一個(gè)內(nèi)存控制器,用來對(duì)這個(gè)vault中的內(nèi)存操作行為進(jìn)行管理。
發(fā)明人研究發(fā)現(xiàn),在卷積神經(jīng)網(wǎng)絡(luò)中直接采用這種hmc結(jié)構(gòu)對(duì)于整體計(jì)算效率的改善并不大。如圖2所示,主處理器通過系統(tǒng)總線訪問hmc內(nèi)存。在卷積神經(jīng)網(wǎng)絡(luò)計(jì)算中包括大量的并發(fā)乘加計(jì)算(例如,并發(fā)性卷積計(jì)算),當(dāng)進(jìn)行這些并發(fā)乘加計(jì)算時(shí),處理器需要密集地存取hmc中保存的數(shù)據(jù),盡管hmc內(nèi)部的內(nèi)存帶寬和訪問延遲有所改善,但對(duì)于主處理器與hmc之間的大量的數(shù)據(jù)傳輸及延遲并沒有改善,而且這些并發(fā)性乘加計(jì)算會(huì)占用主處理器的大量計(jì)算時(shí)間,因而卷積神經(jīng)網(wǎng)絡(luò)整體計(jì)算效率并沒有太多的改善。雖然可以通過采用包括多個(gè)內(nèi)核的處理器或?qū)S脠D形處理器來優(yōu)化計(jì)算能力,但這無疑會(huì)增加系統(tǒng)成本。并且現(xiàn)有的處理器本身在進(jìn)行并發(fā)性乘加計(jì)算時(shí)的效率也不是很理想。
在本發(fā)明一個(gè)實(shí)施例中,提供了一種面向卷積神經(jīng)網(wǎng)絡(luò)的混合立方體存儲(chǔ)系統(tǒng),以更好地改善卷積神經(jīng)網(wǎng)絡(luò)整體的計(jì)算效率。該存儲(chǔ)系統(tǒng)包括hmc和位于hmc的電路邏輯層的計(jì)算控制器、乘加加速器和緩存。該存儲(chǔ)系統(tǒng)通過系統(tǒng)總線與外部的主處理器相連接。如圖3所示,計(jì)算控制器響應(yīng)于來自外部處理器的指令來執(zhí)行相應(yīng)的任務(wù)并將結(jié)果返回給外部處理器。更具體地,當(dāng)計(jì)算控制器收到讀取和寫入指令時(shí),可以通過hmc的內(nèi)存控制器來對(duì)hmc進(jìn)行數(shù)據(jù)的讀取和寫入。當(dāng)計(jì)算控制器收到要進(jìn)行乘加計(jì)算的指令時(shí),通過內(nèi)存控制器從hmc中讀取要進(jìn)行運(yùn)算的數(shù)據(jù)并將其傳輸至緩存中,以及指示乘加加速器從緩存中讀取相應(yīng)數(shù)據(jù)進(jìn)行運(yùn)算。在運(yùn)算完成之后,乘加加速器將運(yùn)算結(jié)果寫入緩存中。計(jì)算控制器從緩存中讀出運(yùn)算結(jié)果并通過內(nèi)存控制器將其寫入hmc內(nèi)存芯片中,同時(shí)也可以向外部的主處理器返回運(yùn)算結(jié)果和/或運(yùn)算結(jié)果的存儲(chǔ)地址。這里的計(jì)算控制器可以是實(shí)現(xiàn)上述功能任一邏輯控制電路、fpga或asic芯片等。優(yōu)選地,該計(jì)算控制器可以為輕量級(jí)處理核,例如arm處理核或類似于arm處理器的輕量級(jí)處理器,還可以適當(dāng)?shù)貫橹魈幚砥鞒袚?dān)部分非并發(fā)性乘加的計(jì)算和接受來自主處理器的相關(guān)指令調(diào)度,而并發(fā)乘加計(jì)算通過乘加加速器來進(jìn)行。其中緩存大小可根據(jù)乘加加速器的規(guī)模而定,緩存的類型可以是靜態(tài)隨機(jī)存儲(chǔ)器(staticrandomaccessmemory,sram),動(dòng)態(tài)隨機(jī)存儲(chǔ)器(dynamicrandomaccessmemory,dram),寄存器堆(registerfile,rf)等常見存儲(chǔ)介質(zhì),也可以是新型的存儲(chǔ)器件,如非易失存儲(chǔ)器(non-volatilememory,nvm)等。
圖4為根據(jù)本發(fā)明一個(gè)實(shí)施例的乘加加速器的結(jié)構(gòu)示意圖。如圖4所示,乘加加速器與計(jì)算控制器和緩存相連,其包括寄存器、狀態(tài)機(jī)和并行乘加器。其中寄存器用于存儲(chǔ)從緩存讀取的、用來進(jìn)行計(jì)算的數(shù)據(jù)。狀態(tài)機(jī)接收來自計(jì)算控制器的指令來控制并行乘加器進(jìn)行計(jì)算。并行乘加器根據(jù)從寄存器讀取的數(shù)據(jù)來進(jìn)行乘加計(jì)算,當(dāng)?shù)玫接?jì)算結(jié)果后,將計(jì)算結(jié)果數(shù)據(jù)寫入到寄存器中。寄存器大小可根據(jù)實(shí)際并行乘加器的計(jì)算規(guī)模而定,可以但不僅限于取決于并行乘加器一次計(jì)算所需的數(shù)據(jù)的最大容量。寄存器可以是寄存器堆(registerfile,rf),也可以是靜態(tài)隨機(jī)存儲(chǔ)器(staticrandomaccessmemory,sram),動(dòng)態(tài)隨機(jī)存儲(chǔ)器(dynamicrandomaccessmemory,dram)等存儲(chǔ)介質(zhì),也可以是新型的存儲(chǔ)器件,如非易失存儲(chǔ)器(non-volatilememory,nvm)。并行乘加器由多個(gè)的乘加器構(gòu)成,乘加器的數(shù)量可根據(jù)實(shí)際卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算規(guī)模而定,例如可以是由32路或64路乘加器構(gòu)成。如圖5所示,可以通過多個(gè)并聯(lián)的乘加器組成的并行乘加器,可同時(shí)進(jìn)行多路乘加計(jì)算。每個(gè)乘加器的基本運(yùn)算通常是先乘后加,即y=a*b+c。圖5還給出了單個(gè)乘加器的電路結(jié)構(gòu)示意圖,其中乘加器包括乘法器,加法器,選擇器和寄存器。左邊為三個(gè)輸入信號(hào)(即a,b,c),右邊為輸出信號(hào)y。但應(yīng)理解,圖5僅是舉例說明而非對(duì)乘加器本身的電路結(jié)構(gòu)以及并行乘加器的電路結(jié)構(gòu)進(jìn)行任何限制,能實(shí)現(xiàn)基本乘加計(jì)算的乘加器電路和能實(shí)現(xiàn)多個(gè)乘加計(jì)算并行執(zhí)行的電路結(jié)構(gòu)都適用于本發(fā)明的實(shí)施例。
繼續(xù)參考圖4,該乘加加速器還包括狀態(tài)機(jī)。狀態(tài)機(jī)通常包括狀態(tài)寄存器和組合邏輯電路,根據(jù)控制信號(hào)按照預(yù)先設(shè)定的狀態(tài)進(jìn)行狀態(tài)轉(zhuǎn)移,協(xié)調(diào)相關(guān)信號(hào)及相關(guān)模塊以完成特定操作。如圖4所示,在該實(shí)施例中,狀態(tài)機(jī)相關(guān)控制信號(hào)來控制寄存器從緩存中讀取計(jì)算數(shù)據(jù),控制并行乘加器讀取寄存器數(shù)據(jù)進(jìn)行并行乘加計(jì)算并將計(jì)算結(jié)果寫回寄存器,以及控制寄存器將數(shù)據(jù)寫入緩存。圖6給出了根據(jù)本發(fā)明一個(gè)實(shí)施例的狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。如圖6所示,該狀態(tài)機(jī)的狀態(tài)分為空閑、輸入、讀取、計(jì)算、寫入和輸出。而狀態(tài)機(jī)的控制信號(hào)的類型包括指令信號(hào)core_ins,寄存器控制信號(hào)rf,乘加控制信號(hào)muxadd。指令信號(hào)core_ins來自于與狀態(tài)機(jī)相連的計(jì)算控制器,寄存器控制信號(hào)rf來自于與狀態(tài)機(jī)相連的寄存器,乘加控制信號(hào)muxadd來自于和狀態(tài)機(jī)相連的并行乘加器。在圖6中,該狀態(tài)機(jī)的一次完整的狀態(tài)轉(zhuǎn)換可以如下所述:
空閑:初始狀態(tài)為空閑,當(dāng)收到來自計(jì)算控制器的core_ins=1信號(hào)時(shí),進(jìn)入下一狀態(tài)“輸入”。
輸入:在輸入狀態(tài)下,狀態(tài)機(jī)控制寄存器從緩存中讀取數(shù)據(jù),當(dāng)寄存器讀取完成后,發(fā)送rf=1的信號(hào)給狀態(tài)機(jī),然后進(jìn)入下一個(gè)狀態(tài)“讀取”。
讀取:在讀取狀態(tài)下,狀態(tài)機(jī)控制并行乘加器從寄存器中讀取數(shù)據(jù),當(dāng)讀取完畢后,并行乘加器發(fā)送muxadd=1的信號(hào)給狀態(tài)機(jī),然后進(jìn)入下一狀態(tài)“計(jì)算”。
計(jì)算:在計(jì)算狀態(tài)下,狀態(tài)機(jī)控制并行乘加器對(duì)讀取的數(shù)據(jù)進(jìn)行乘加計(jì)算,當(dāng)后者得到計(jì)算結(jié)果時(shí),發(fā)送muxadd=0的信號(hào)給狀態(tài)機(jī),然后進(jìn)入下一狀態(tài)“寫入”。
寫入:在寫入狀態(tài)下,并行乘加器將計(jì)算結(jié)果寫入到寄存器中,當(dāng)寫入完畢后,寄存器發(fā)送信號(hào)rf=1給狀態(tài)機(jī),若此時(shí)core_ins=1,則狀態(tài)機(jī)進(jìn)入輸入狀態(tài),若core_ins=0,則狀態(tài)機(jī)進(jìn)入空閑狀態(tài)。
應(yīng)理解,上述狀態(tài)轉(zhuǎn)換僅是舉例說明而非進(jìn)行任何限制。在本發(fā)明的實(shí)施例對(duì)于狀態(tài)機(jī)的具體結(jié)構(gòu)也不進(jìn)行限制,可以采用能完成上述功能的任何電路結(jié)構(gòu)。
如上文提到的,在卷積神經(jīng)網(wǎng)絡(luò)計(jì)算中包括大量的并發(fā)乘加計(jì)算,當(dāng)采用根據(jù)上述實(shí)施例的存儲(chǔ)系統(tǒng)時(shí),主處理器可以將大量的乘加計(jì)算轉(zhuǎn)移給該存儲(chǔ)系統(tǒng)內(nèi)部設(shè)置的乘加加速器來執(zhí)行,以利用hmc內(nèi)部極高的內(nèi)存帶寬和低訪問延遲來加快并發(fā)的乘加計(jì)算的速度。圖7給出了利用根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)加速卷積神經(jīng)網(wǎng)絡(luò)計(jì)算的示例方法的流程示意。該方法主要可包括下列步驟:
步驟s701,該存儲(chǔ)系統(tǒng)中的計(jì)算控制器接收來自主處理器的指令。該指令可以是讀數(shù)據(jù)或?qū)憯?shù)據(jù)之類的訪存指令,也可以是計(jì)算指令。對(duì)于其他訪存指令的處理與現(xiàn)有hmc一樣,在此不再贅述。如果計(jì)算控制器確定所接收的指令時(shí)需要進(jìn)行下一步計(jì)算,則進(jìn)入步驟s702。
步驟s702,計(jì)算控制器從該計(jì)算指令中提取需要進(jìn)行卷積神經(jīng)網(wǎng)絡(luò)下一步計(jì)算的數(shù)據(jù)在hmc內(nèi)存中的物理地址,然后進(jìn)入步驟s703。
步驟s703,通過所提取的物理地址,指示hmc的內(nèi)存控制器從內(nèi)存中取出數(shù)據(jù),將其保存到緩存中,然后進(jìn)入步驟s704。
步驟s704,通過乘加加速器從緩存中讀取數(shù)據(jù)進(jìn)行相關(guān)的卷積神經(jīng)網(wǎng)絡(luò)計(jì)算,并將得到的計(jì)算結(jié)果保存至緩存,進(jìn)入步驟s705。
步驟s705,計(jì)算控制根據(jù)從主處理器的接收的指令中指定的需要寫入計(jì)算結(jié)果的內(nèi)存物理地址然后進(jìn)入步驟s706。
步驟s706,從緩存中讀取計(jì)算結(jié)果,并通過hmc的內(nèi)存控制器將該計(jì)算結(jié)果寫入到步驟s705得到內(nèi)存物理地址,接著進(jìn)入步驟s707。
步驟s707,判斷主處理器的指令是否全部處理完畢,若是則結(jié)束,若否則返回步驟s702。
從上述實(shí)施例可以看出,通過上述存儲(chǔ)系統(tǒng),卷積神經(jīng)網(wǎng)絡(luò)中大量的并行計(jì)算及其涉及的頻繁訪存操作都可以在hmc內(nèi)部完成。相比hmc外部的主處理器,在hmc的電路邏輯層中設(shè)置乘加加速器可以充分利用hmc內(nèi)極高的內(nèi)存帶寬和低訪問延遲的優(yōu)勢(shì),提高了卷積神經(jīng)網(wǎng)絡(luò)中大量的并發(fā)乘加計(jì)算的效率,并且主處理器也可以同時(shí)運(yùn)行其他任務(wù),卷積神經(jīng)網(wǎng)絡(luò)整體的計(jì)算效率得到了提升。
雖然本發(fā)明已經(jīng)通過優(yōu)選實(shí)施例進(jìn)行了描述,然而本發(fā)明并非局限于這里所描述的實(shí)施例,在不脫離本發(fā)明范圍的情況下還包括所做出的各種改變以及變化。