[發(fā)明專利]一種卷積神經(jīng)網(wǎng)絡(luò)加速器的內(nèi)部存儲帶寬優(yōu)化方法有效
| 申請?zhí)枺?/td> | 202011102647.7 | 申請日: | 2020-10-15 |
| 公開(公告)號: | CN112070217B | 公開(公告)日: | 2023-06-06 |
| 發(fā)明(設(shè)計(jì))人: | 李幼萌;王亞博 | 申請(專利權(quán))人: | 天津大學(xué) |
| 主分類號: | G06N3/0464 | 分類號: | G06N3/0464 |
| 代理公司: | 天津市北洋有限責(zé)任專利代理事務(wù)所 12201 | 代理人: | 韓帥 |
| 地址: | 300072*** | 國省代碼: | 天津;12 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 卷積 神經(jīng)網(wǎng)絡(luò) 加速器 內(nèi)部 存儲 帶寬 優(yōu)化 方法 | ||
1.一種卷積神經(jīng)網(wǎng)絡(luò)加速器的內(nèi)部存儲帶寬優(yōu)化方法,其特征在于,所述神經(jīng)網(wǎng)絡(luò)的卷積層中設(shè)置有對加速器減少帶寬需求的優(yōu)化模塊,所述優(yōu)化模塊采用如下步驟:
步驟1、在存放待計(jì)算特征數(shù)據(jù)的內(nèi)部存儲RAM與計(jì)算單元之間設(shè)置一塊與計(jì)算單元數(shù)相同大小的CACHE,CACHE中的各個(gè)數(shù)據(jù)直連在計(jì)算單元上,在每個(gè)計(jì)算周期先將CACHE中數(shù)據(jù)傳入計(jì)算單元;
步驟2、由內(nèi)存讀寫控制單元用讀取并準(zhǔn)備好下一周期所用數(shù)據(jù):緩存塊相對于內(nèi)存區(qū)優(yōu)先上下移動,每次移動將緩存塊中不同于上一周期的一行數(shù)據(jù)丟棄,其他數(shù)據(jù)順序前移,將緩存塊新覆蓋到的數(shù)據(jù)加入到空行;
步驟3、當(dāng)縱向移動到邊界時(shí),橫向移動一步,將緩存塊中不同于上一周期的一列數(shù)據(jù)丟棄,其他數(shù)據(jù)順序側(cè)移,將緩存塊新覆蓋到的數(shù)據(jù)加入到空列,其中,所述優(yōu)化模塊采用如下步驟實(shí)現(xiàn)二維特征數(shù)據(jù)緩存:
步驟0,初始化CACHE,準(zhǔn)備好第一個(gè)計(jì)算周期所用數(shù)據(jù);此過程開始,由內(nèi)存讀寫控制單元將CACHE第一行應(yīng)存入的數(shù)據(jù)的地址向量傳給內(nèi)部存儲RAM,在下一周期提交第二行地址向量,并將收到的第一行數(shù)據(jù)向量放入CACHE第一行,如此重復(fù),直到將CACHE填滿,標(biāo)志初始化完成,此時(shí)CACHE中的數(shù)據(jù)與內(nèi)部存儲RAM的左上角數(shù)據(jù)一一對應(yīng);其中:設(shè)置了維護(hù)地址的變量AddrBase,AddrBase的第一個(gè)值等于CoreLen減1,每一個(gè)地址向量的最后一個(gè)元素等于AddrBase的值,其它元素依次遞減得出,之后AddrBase的值改變?yōu)锳ddr0,Addr0的計(jì)算如公式(1)所示,公式1中InMapCol為超參數(shù),是二維特征數(shù)據(jù)的列數(shù);
Addr0=AddrBase+InMapCol?????(1)
步驟1:當(dāng)初始化完成之后,計(jì)算單元開始工作,利用CACHE中的數(shù)據(jù)完成第一次運(yùn)算,內(nèi)存讀寫控制單元繼續(xù)執(zhí)行上述地址的計(jì)算及傳遞,接收到的數(shù)據(jù)向量將被放置于CACHE的最后一行,原有的最后一行轉(zhuǎn)移到倒數(shù)第二行,以此規(guī)律將數(shù)據(jù)上移,拋棄原有的第一行數(shù)據(jù),同時(shí)計(jì)數(shù)器Counter1開始工作,每執(zhí)行一次地址向量的傳遞便自增,直到其不小于InMapRow減CoreLen;
步驟2:步驟1結(jié)束時(shí)相當(dāng)于CACHE相對于二維特征數(shù)據(jù)的滑動已經(jīng)到達(dá)此列的底部,此時(shí)將CACHE向右移動一列;此時(shí)地址向量的計(jì)算方式改變,AddrBase的值加1作為地址向量的最后一個(gè)元素,其他元素向前依次遞減InMapCol,由此地址向量得到的數(shù)據(jù)向量以新方式放入CACHE:將CACHE的各行數(shù)據(jù)向前移動一個(gè)元素的位置,舍棄各行的行首元素,之后將新的數(shù)據(jù)向量的第一個(gè)元素填充在CACHE的第一行的最后一個(gè)元素位置上,數(shù)據(jù)向量的第二個(gè)元素填充在CACHE的第二行的最后一個(gè)元素位置上,依次進(jìn)行;之后,將AddrBase的值糾正為Addr1,Addr1的計(jì)算如公式(2)所示,同時(shí)變量Counter2自增,并進(jìn)入步驟3:
Addr1=AddrBase-CoreLen×InMapCol????(2)
步驟3:本步驟類似步驟1,本步驟于每次地址向量計(jì)算完后,變量AddrBase的值改變?yōu)锳ddr2,Addr2的計(jì)算方式如公式(2)所示,接收到的數(shù)據(jù)向量將被放置在CACHE的第一行,原第一行向下移動成為新的第二行,其他行依次下移,拋棄最后一行數(shù)據(jù);同時(shí)計(jì)數(shù)器Counter1將每次自減1,直到其不大于1時(shí),進(jìn)入步驟4;
Addr2=AddrBase-InMapCol????(3)
步驟4:本步驟類似步驟2,本步驟地址向量的計(jì)算方式變?yōu)锳ddrBase的值加1作為地址向量的最后一個(gè)元素,其他元素向前依次遞增InMapCol,然后將CACHE的各行數(shù)據(jù)向前移動一個(gè)元素的位置,舍棄各行的行首元素,之后將新的數(shù)據(jù)向量的最后一個(gè)元素填充在CACHE的第一行的最后一個(gè)元素位置上,數(shù)據(jù)向量的倒數(shù)第二個(gè)元素填充在CACHE的第二行的最后一個(gè)元素位置上,依次進(jìn)行,填充完畢后對計(jì)數(shù)器Counter2進(jìn)行判斷,如果Counter2小于Counter,則Counter2自增1,將AddrBase的值糾正為Addr3,Addr3的計(jì)算如公式(5)所示,并進(jìn)入步驟1;否則,表示此特征數(shù)據(jù)已經(jīng)被掃描一遍了,這時(shí)需要判斷是否還有其他卷積核需要與其進(jìn)行卷積計(jì)算,ScanIndex變量則記錄一組二維特征數(shù)據(jù)被掃描的次數(shù),如ScanIndex不小于CoreGroup,則表示此二維特征數(shù)據(jù)已使用完畢,需初始化相關(guān)的各變量,否則糾正AddrBase的值為Addr4,Addr4的計(jì)算如公式(6)所示,并進(jìn)入步驟5:
Counter=InMapCol-CoreLen????(4)
Addr3=AddrBase+CoreLen×InMapCol????(5)
Addr4=AddrBase-CoreLen+CoreLen×InMapCol????(6)
步驟5:為了省去初始化CACHE的步驟,此時(shí)可以沿著CACHE滑動的路徑反向移動回去,由于一個(gè)卷積核對應(yīng)一組二維特征數(shù)據(jù),因此滑動的初始位置可以在任意位置;此時(shí)CACHE相當(dāng)于和二維特征數(shù)據(jù)的右上角數(shù)據(jù)一一對應(yīng);總體上類似于步驟1,不同的是地址向量的第一個(gè)元素等于變量AddrBase的值,其他元素依次遞增;同時(shí)計(jì)數(shù)器Counter1的狀態(tài)與條件與步驟1相同,其不小于Counter′時(shí)進(jìn)入步驟6,Counter′的計(jì)算如公式(7)所示:
Counter′=InMapRow-CoreLen????(7)
步驟6:此步驟與步驟2相似,不同的是AddrBase的值自減1作為地址向量的第一個(gè)元素,其他元素向后依次遞減InMapCol;將CACHE的各行數(shù)據(jù)向后移動一個(gè)元素的位置,舍棄各行的行尾元素,之后將新的數(shù)據(jù)向量的第一個(gè)元素填充在CACHE的最后一行的第一個(gè)元素位置上,數(shù)據(jù)向量的第二個(gè)元素填充在CACHE的倒數(shù)第二行的第一個(gè)元素位置上,依次進(jìn)行;之后,將AddrBase的值糾正為Addr1;計(jì)數(shù)器Counter2自減1,并進(jìn)入步驟7;
步驟7:此步驟與步驟3基本相同,不同的是此步驟中地址向量的計(jì)算方式與步驟5相同,地址向量的第一個(gè)元素等于變量AddrBase的值,其他元素依次遞增;當(dāng)計(jì)數(shù)器Counter1不大于1時(shí),進(jìn)入步驟8;
步驟8:本步驟類似步驟4,本步驟地址向量的計(jì)算方式為AddrBase的值自減1作為地址向量的第一個(gè)元素,其他元素向后依次遞減InMapCol,將CACHE的各行數(shù)據(jù)向后移動一個(gè)元素的位置,舍棄各行的行尾元素,之后將新的數(shù)據(jù)向量的第一個(gè)元素填充在CACHE的第一行的第一個(gè)元素位置上,數(shù)據(jù)向量的第二個(gè)元素填充在CACHE的第二行的第一個(gè)元素位置上,依次進(jìn)行;填充完畢后對計(jì)數(shù)器Counter2進(jìn)行判斷,如果Counter2大于1,則Counter2自減1,將AddrBase的值糾正為Addr3,進(jìn)入步驟5;否則,表示此特征數(shù)據(jù)已經(jīng)被掃描一遍了,這時(shí)如果ScanIndex不小于CoreGroup,則表示此二維特征數(shù)據(jù)已使用完畢,需初始化相關(guān)的各變量,否則糾正變量AddrBase的值為Addr5,Addr5的計(jì)算方法如公式(8)所示,之后進(jìn)入步驟1;
Addr5=AddrBase+CoreLen+CoreLen×InMapCol?????(8)。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于天津大學(xué),未經(jīng)天津大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202011102647.7/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 卷積運(yùn)算處理方法及相關(guān)產(chǎn)品
- 一種卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算方法及系統(tǒng)
- 卷積運(yùn)算方法及系統(tǒng)
- 卷積運(yùn)算方法、裝置及系統(tǒng)
- 深度神經(jīng)網(wǎng)絡(luò)裁剪方法、裝置及電子設(shè)備
- 基于卷積神經(jīng)網(wǎng)絡(luò)的圖像處理方法和圖像處理裝置
- 卷積神經(jīng)網(wǎng)絡(luò)及基于卷積神經(jīng)網(wǎng)絡(luò)的圖像處理方法
- 一種圖像處理方法、裝置以及計(jì)算機(jī)存儲介質(zhì)
- 用于卷積神經(jīng)網(wǎng)絡(luò)的卷積運(yùn)算裝置
- 基于FPGA實(shí)現(xiàn)圖像識別的方法、裝置、設(shè)備及存儲介質(zhì)
- 硬件神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)換方法、計(jì)算裝置、軟硬件協(xié)作系統(tǒng)
- 生成較大神經(jīng)網(wǎng)絡(luò)
- 神經(jīng)網(wǎng)絡(luò)的生成方法、生成裝置和電子設(shè)備
- 一種舌診方法、裝置、計(jì)算設(shè)備及計(jì)算機(jī)存儲介質(zhì)
- 學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
- 脈沖神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)換方法及相關(guān)轉(zhuǎn)換芯片
- 圖像處理方法、裝置、可讀存儲介質(zhì)和計(jì)算機(jī)設(shè)備
- 一種適應(yīng)目標(biāo)數(shù)據(jù)集的網(wǎng)絡(luò)模型微調(diào)方法、系統(tǒng)、終端和存儲介質(zhì)
- 用于重構(gòu)人工神經(jīng)網(wǎng)絡(luò)的處理器及其操作方法、電氣設(shè)備
- 一種圖像神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)化方法及裝置





