result和der_result表示32個(gè)16位寬的數(shù)據(jù)輸出,active_result表示多個(gè)激活函數(shù)或采樣后的結(jié)果,der_result表示導(dǎo)數(shù)值。以及流水級(jí)b模塊的控制信號(hào)。
[0060]所述的流水級(jí)b按照功能可以切分為,由32個(gè)負(fù)責(zé)函數(shù)的插值以及32個(gè)負(fù)責(zé)導(dǎo)數(shù)插值的線性插值模塊b_l(相當(dāng)于權(quán)利要求中的線性插值模塊)和32個(gè)抽樣器件模塊13_2(相當(dāng)于權(quán)利要求中的抽樣器件模塊)。
[0061 ]所述的流水級(jí)線性插值模塊b_l,其主要功能為根據(jù)輸入通過線性插值近似求解非線性函數(shù)值。可為兩種工作模式:加載差值表與線性插值模式。
[0062]線性載插值模塊bj工作在加載插值表模式時(shí),線性插值器根據(jù)控制信號(hào)判斷正在加載的插值表屬于哪一類插值器(激活函數(shù)或?qū)?shù)),同時(shí)表示正在加載的差值表屬于哪一類插值器。
[0063]線性載插值模塊13_1工作在線性插值模式時(shí),線性插值器根據(jù)輸如信號(hào)X的某些位作為64選1的索引,并選取差值表中的一組斜率a和截距b,根據(jù)y = a*x+b線性函數(shù)得到插值的結(jié)果。
[0064]所述的流水級(jí)抽樣模塊1^_2,抽樣器件將線性插值器計(jì)算的激活函數(shù)y與隨機(jī)數(shù)產(chǎn)生的隨機(jī)數(shù)進(jìn)行比較,如果y大于隨機(jī)數(shù)則輸出1,否則輸出0。其中,1、0是定義的32位定點(diǎn)數(shù)形式輸出。
[0065]所述的三級(jí)流水模塊c含有若干輸入與輸出,主要信號(hào)有,3組表示32個(gè)16位寬的數(shù)據(jù)輸入,即3組輸入數(shù)據(jù)的位寬為512位。一組表示32個(gè)16位寬的數(shù)據(jù)輸出,即輸出數(shù)據(jù)為512位,和控制信號(hào)。
[0066]流水級(jí)c模塊主要根據(jù)輸入值與對(duì)應(yīng)的操作碼,對(duì)輸入的數(shù)據(jù)進(jìn)行向量加或減以及乘操作,最后輸出流水級(jí)的結(jié)果。
[0067]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對(duì)本發(fā)明的流水級(jí)運(yùn)算裝置、數(shù)據(jù)處理方法及片上網(wǎng)絡(luò)芯片進(jìn)行進(jìn)一步詳細(xì)說明。
[0068]如圖1所示為了提高芯片的主頻及吞吐量,采用流水線處理數(shù)據(jù)的方式。流水級(jí)處理電路切分為三個(gè)流水級(jí):流水級(jí)a、流水級(jí)b、流水級(jí)c,流水級(jí)a、b、c后設(shè)有一緩存寄存器用于寄存流水運(yùn)算結(jié)果以及控制指令,流水級(jí)a前設(shè)有一緩存寄存器用于寄存接收的輸入數(shù)據(jù)以及控制指令。
[0069]如圖1所示的片上網(wǎng)絡(luò)芯片的流水級(jí)工作過程可以劃分為兩個(gè)工作過程,一為流水級(jí)的初始化,另一工作過程為流水級(jí)的運(yùn)算。
[0070]對(duì)于圖1中流水級(jí)的初始化包括兩個(gè)方面:插值表的初始化和學(xué)習(xí)率等常數(shù)的加載,但二者不能同時(shí)進(jìn)行。
[0071 ]流水級(jí)在輸入一條有效指令且reg_num_ld_flag(加載常數(shù)表標(biāo)志位)有效,在流水線不阻塞的情況下兩個(gè)時(shí)鐘周期之后將,輸入inputa(輸入端口 a)(3)的低96位賦值給3個(gè)寄存學(xué)習(xí)率的寄存器。若act_flag(加載激活函數(shù)插值表標(biāo)志位)(31)有效,流水線不阻塞的情況下依照talbe_ld_oder (插值表加載順序)(33)將輸入inputa(3)賦值給函數(shù)插值表的a以及b表格中相應(yīng)部分。如果der_f lag(加載導(dǎo)數(shù)插值表標(biāo)志位)(32)有效,流水線不阻塞的情況下依照七8]^6_1(1_0(161'(33)將輸入;[即1^&(3)賦值給導(dǎo)數(shù)插值表的3以及13表格中相應(yīng)部分。
[0072]對(duì)于圖1中流水級(jí)的運(yùn)算過程,其過程如下。運(yùn)算時(shí),流水級(jí)根據(jù)每一級(jí)流水級(jí)是否被使用以及操作碼選擇流水級(jí)的輸入數(shù)據(jù)。若流水級(jí)未被使用,則輸入數(shù)據(jù)置0。
[0073]第一個(gè)流水級(jí)a接收從外部輸入的數(shù)據(jù),根據(jù)所需進(jìn)行的操作選擇數(shù)據(jù)也可能不進(jìn)行任何操作,運(yùn)算結(jié)果輸出。由于后面的流水級(jí)可能需要第一級(jí)流水計(jì)算的結(jié)果max_index(最大值索引)(9)、results(第一流水運(yùn)算結(jié)果)(8)和外部輸入inputa(3)、inputb(4)。同時(shí),后面流水級(jí)不會(huì)同時(shí)需要max_index(9)和inputa(3),而不會(huì)同時(shí)需要inputa(3)以及results(8),因此,第一個(gè)流水級(jí)只需給后面的流水級(jí)傳遞兩組數(shù)據(jù)寄存器以及控制信號(hào)。
[0074]第二個(gè)流水級(jí)接收第一個(gè)流水級(jí)傳遞的數(shù)據(jù),根據(jù)所需進(jìn)行的操作選擇數(shù)據(jù)也可能不進(jìn)行任何操作,運(yùn)算結(jié)果輸出。
[0075]第三個(gè)流水級(jí)運(yùn)算只可能需要第二個(gè)流水級(jí)運(yùn)算結(jié)果activejesult(激活函數(shù)值)(34)和der_reSult(導(dǎo)數(shù)值)(35)以及第一個(gè)流水級(jí)傳遞的兩個(gè)數(shù)據(jù)。而且不同時(shí)需要8(:1:;^6_代81111:(34)以及第一個(gè)流水級(jí)傳遞的可能包含;[即1^3(3)的寄存器值。因此,第二個(gè)流水級(jí)只需向第三個(gè)流水級(jí)傳遞三組數(shù)據(jù)寄存器以及控制信號(hào)。
[0076]第三個(gè)流水級(jí)接收第二個(gè)流水級(jí)傳遞的數(shù)據(jù),根據(jù)所需進(jìn)行的操作選擇數(shù)據(jù)也可能不進(jìn)行任何操作,運(yùn)算結(jié)果輸出。第三個(gè)流水級(jí)需要將第三個(gè)流水級(jí)運(yùn)算結(jié)果傳遞到下一級(jí)寄存器還需將前面兩個(gè)流水級(jí)計(jì)算結(jié)果以及控制信號(hào)傳至下級(jí)寄存器。
[0077]流水級(jí)需要根據(jù)最后一級(jí)寄存器中的控制信號(hào)選擇輸出值。
[0078]如圖2所示的第一級(jí)流水級(jí)a模塊,該模塊主要含有若干輸入與2個(gè)輸出。其中,inputa(輸入端口a) (3)、inputb(輸入端口b) (4)和inputc(輸入端口 c) (4)表示32個(gè)16位寬數(shù)據(jù)輸入,1'6 811]^8(8)和11^1_;[11(161(9)表示32個(gè)16位寬數(shù)據(jù)輸出。1]^1_;[11(161(9)表示進(jìn)行max_pooling時(shí),32個(gè)不同的feature_map各自pooling kernal中最大值索引index。
[0079]如圖2所示的流水級(jí)a模塊由一個(gè)流水級(jí)子模塊a_l(如圖3所示),和32個(gè)流水級(jí)子模塊a_2(如圖4所示)組成。流水級(jí)a子模塊含有一個(gè)計(jì)數(shù)寄存器,當(dāng)控制信號(hào)op(操作碼)(6)為1時(shí)計(jì)數(shù)器置0,同時(shí)如果調(diào)用了pooling操作并且流水線尚未被堵塞,計(jì)數(shù)器自加1,pipe 1 ine_en(流水級(jí)使能標(biāo)志位)(7)為流水級(jí)a子模塊的使能信號(hào)。
[0080]如圖3所示,流水級(jí)&_1為第一流水級(jí)a的一個(gè)子模塊,該模塊主要含有若干輸入與1個(gè)輸出。輸入inputa(輸入端口a)(10)、inputb(輸入端口b)(ll)、inputc(輸入端口 c) (12)代表32個(gè)16位寬輸入數(shù)據(jù),輸出results(運(yùn)算結(jié)果)(15)代表32個(gè)16位寬的輸出數(shù)據(jù)。sub_flag(減使能)(13)、〖1&8(累加使能)(14)為控制信號(hào),在控制信號(hào)的作用下,&_1子模塊支持?jǐn)?shù)據(jù)1即此3(10)和;[即111:13(11)向量減法或減法,然后直接輸出或者和;[即111:(3(12)向量加法之后再輸出。
[0081]如圖4所示,流水級(jí)&_2為第一流水級(jí)a的另一個(gè)子模塊,該模塊含有若干輸入與輸出。輸入數(shù)據(jù)inputa(輸入端口a) (18)、inputb(輸入端口 b)( 19)、inputc(輸入端口 c)(20)表示一個(gè)16位寬的數(shù)據(jù)輸入。sub_result(運(yùn)算結(jié)果)(24)和max_index(最大值索引)(25)表示一組16位寬數(shù)據(jù)輸出,以及若干控制信號(hào)。max_index(25)表示pooling kernal中最大值索引index,a_2子模塊的功能是支持一個(gè)對(duì)feature map的神經(jīng)元進(jìn)行的pooling正向以及反向的基本操作。
[0082]如圖4所示,流水級(jí)&_2子模塊由a_2_l、a_2_2、a_2_3三個(gè)子模塊組成,流水級(jí)&_2子模塊中設(shè)有一個(gè)寄存結(jié)果的寄存器,若內(nèi)部pooling_begin_flag(pooling開始標(biāo)志位)有效,將inputa(18)直接賦值給結(jié)果寄存器。否則操作碼所選擇的運(yùn)算模塊將子模塊a_2_l的輸出結(jié)果或a_2_3的輸出結(jié)果賦值給結(jié)果寄存器。
[0083]如圖4所示,流水級(jí)&_2三個(gè)子模塊的功能分別為:a_2_l子模塊根據(jù)輸入數(shù)據(jù)inputa(18)以及結(jié)果寄存器的值,取最大值。a_2_2子模塊,根據(jù)輸入數(shù)據(jù)inputa(18)、inputb(19)、inputc(20),如果inputa( 18)和inputb(19)相等,將inputc(20)作為結(jié)果輸出,否則輸出結(jié)果0。其中,inputb(19)是輸入的index或者pooling kernal中的最大值,i