流水級(jí)運(yùn)算裝置、數(shù)據(jù)處理方法及片上網(wǎng)絡(luò)芯片的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)處理系統(tǒng)領(lǐng)域,更具體地,本發(fā)明涉及一種流水級(jí)運(yùn)算裝置、數(shù)據(jù)處理方法及包含該流水級(jí)運(yùn)算裝置的片上網(wǎng)絡(luò)芯片。
【背景技術(shù)】
[0002]提供包含處理流水線的數(shù)據(jù)處理系統(tǒng)以便增加數(shù)據(jù)處理系統(tǒng)中并行執(zhí)行的程度從而相應(yīng)的增加每個(gè)周期所執(zhí)行的指令數(shù)目是已知的。在處理流水線中增加流水線級(jí)數(shù)會(huì)增加能夠并行執(zhí)行的程序指令數(shù)目。而且,大量的流水線級(jí)的處理流水線難以有效的處理失敗指令。例如,如果沿處理流水線進(jìn)行一個(gè)加載指令未能在預(yù)期的時(shí)間內(nèi)收到它的加載數(shù)據(jù),一種做法是使流水線暫停,這將是非常低效的,如果沒有后續(xù)的指令依賴于該失敗的加載指令,則另外一種做法是,允許加載指令作為處理“氣泡”與其它沿該流水線進(jìn)行的程序指令一致的沿處理流水線進(jìn)行,從而不干擾那些其它處理指令的執(zhí)行。這種做法的問題是流水線中氣泡的出現(xiàn)降低了并行執(zhí)行的程序指令數(shù)目,從而降低了每個(gè)周期總的被執(zhí)行指令的值。
[0003]專利文件1(公開號(hào)為CN102411492A)公開了一種數(shù)據(jù)處理的方法和裝置,能夠在硬件流水線上采用不同的數(shù)據(jù)處理速率,實(shí)現(xiàn)硬件流水線上數(shù)據(jù)處理速率的靈活調(diào)整。但是該方法僅僅通過控制對(duì)硬件流水線上數(shù)據(jù)處理速率來提高硬件流水線上數(shù)據(jù)的處理速度。
[0004]專利文件2(公開號(hào)為CN102855122A)公開了一種處理流水線控制裝置和方法,所述裝置具備紋理流水線、加載存儲(chǔ)流水線、及算數(shù)流水線,該發(fā)明通過將紋理流水線劃分為第一流水線和第二流水線,使第一流水線負(fù)責(zé)從存儲(chǔ)器中獲取描述符數(shù)據(jù)并將其存儲(chǔ)到與紋理流水線緊密耦合的共享描述符緩存中,使第二流水線負(fù)責(zé)依賴于描述符緩存中存儲(chǔ)的描述符數(shù)據(jù)而從存儲(chǔ)器中獲取紋理數(shù)據(jù)。其效果在于,避免了在紋理流水線的這些后面部分中引入不必要的處理氣泡。
[0005]但是,上述這些現(xiàn)有技術(shù)是通過控制對(duì)硬件流水線上數(shù)據(jù)處理速率或是通過對(duì)紋理流水線進(jìn)行設(shè)計(jì)來提高硬件流水線上數(shù)據(jù)的處理速度,并沒有從如何提高芯片的運(yùn)算主頻及高運(yùn)算吞吐量的角度進(jìn)行考慮。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于,解決至少上述問題和缺陷,本發(fā)明采用以下技術(shù)方案,提高芯片的工作效率以及高數(shù)據(jù)吞吐量以使芯片達(dá)到最佳的運(yùn)算性能。
[0007]本發(fā)明提供一種流水級(jí)運(yùn)算裝置,用于片上網(wǎng)絡(luò)芯片,其中,包括:
[0008]—級(jí)流水模塊,具有第一輸入緩存寄存器模塊、第一流水級(jí)模塊、和第一輸出緩存器模塊,所述第一輸入緩存寄存器模塊設(shè)置在所述第一流水級(jí)模塊的輸入端,用于寄存接收的輸入數(shù)據(jù)及控制指令,所述第一流水級(jí)模塊用于對(duì)來自所述第一輸入緩存寄存器模塊的數(shù)據(jù)及其最大索引值maxjndex進(jìn)行向量加法或減法運(yùn)算,或者根據(jù)所述最大索引值maxjndex,使當(dāng)前時(shí)鐘周期之后的連續(xù)N個(gè)時(shí)鐘周期的運(yùn)算中在第maxjndex個(gè)時(shí)鐘周期第一輸出流水級(jí)的輸出數(shù)據(jù)等于輸入數(shù)據(jù),其余N-1個(gè)時(shí)鐘周期的輸出數(shù)據(jù)為0,其中N和maxjndex均為正整數(shù)且N不小于max_index,所述第一輸出緩存寄存器模塊設(shè)置在所述第一流水級(jí)模塊的輸出端,用于存儲(chǔ)所述第一流水級(jí)的運(yùn)算結(jié)果和控制指令;
[0009]二級(jí)流水模塊,具有第二流水級(jí)模塊和第二緩存寄存器模塊,所述第二流水級(jí)模塊用于對(duì)來自所述第一輸出緩存寄存器模塊的運(yùn)算結(jié)果進(jìn)行導(dǎo)數(shù)值的求解以及激活函數(shù)的求解,所述第二緩存寄存器模塊設(shè)置在所述第二流水級(jí)模塊的輸出端,用于存儲(chǔ)所述第二流水級(jí)的運(yùn)算結(jié)果和控制指令;
[0010]三級(jí)流水模塊,具有第三流水級(jí)模塊和第三緩存寄存器模塊,所述第三流水級(jí)模塊用于對(duì)來自所述第二緩存寄存器模塊的運(yùn)算結(jié)果進(jìn)行乘法與加法的操作,所述第三緩存寄存器模塊設(shè)置在所述第三流水級(jí)模塊的輸出端,用于存儲(chǔ)所述第三流水級(jí)的運(yùn)算結(jié)果和控制指令。
[0011 ]本發(fā)明的流水級(jí)運(yùn)算裝置,其中,所述第一流水級(jí)模塊包括一個(gè)加減操作模塊和多個(gè)最大索引值選擇模塊,
[0012]所述加減操作模塊,根據(jù)控制信號(hào)對(duì)該輸入數(shù)據(jù)進(jìn)行向量加法或者減法操作,并作為所述第一流水級(jí)模塊的一個(gè)輸出,
[0013]所述最大索引值選擇模塊,根據(jù)操作碼選擇該模塊輸入信號(hào)的最大索引值,并作為所述第一流水級(jí)模塊的另一個(gè)輸出;或者根據(jù)最大索引值max_index,使當(dāng)前時(shí)鐘周期之后的連續(xù)N個(gè)時(shí)鐘周期的運(yùn)算中在第maxjndex個(gè)時(shí)鐘周期第一輸出流水級(jí)的輸出數(shù)據(jù)等于輸入數(shù)據(jù),其余N-1個(gè)時(shí)鐘周期的輸出數(shù)據(jù)為0。
[0014]本發(fā)明的流水級(jí)運(yùn)算裝置,其中,所述第二流水級(jí)模塊包括多個(gè)線性差值模塊和多個(gè)抽樣器模塊,
[0015]所述線性差值模塊,對(duì)輸入數(shù)據(jù)通過線性插值近似求解非線性函數(shù)的導(dǎo)數(shù)值或激活函數(shù)值;
[0016]所述抽樣器模塊,對(duì)所述線性插值模塊計(jì)算的激活函數(shù)值與一個(gè)隨機(jī)數(shù)產(chǎn)生模塊產(chǎn)生的隨機(jī)值進(jìn)行比較,如果所述激活函數(shù)值大于所述隨機(jī)數(shù)則輸出1,否則輸出0,其中數(shù)值0或1定義32位定點(diǎn)數(shù)的輸出。
[0017]本發(fā)明的流水級(jí)運(yùn)算裝置,其中,所述線性差值模塊具有加載插值表模式和線性插值模式,
[0018]所述加載差值表模式,根據(jù)所述線性差值模塊的控制信號(hào),判斷正在加載的插值表屬于激活函數(shù)插值器還是導(dǎo)數(shù)插值器,同時(shí)根據(jù)該控制信號(hào)判斷正在加載的操作數(shù)表示差值表的哪一部分;
[0019]所述線性插值模式,使插值器根據(jù)輸入信號(hào)X的操作數(shù)選擇插值表中的一組斜率a和截距b,然后根據(jù)表達(dá)式y(tǒng) = a*x+b求得插值結(jié)果,其中y表示差值。
[0020]本發(fā)明的流水級(jí)運(yùn)算裝置,其中,所述第三流水級(jí)模塊根據(jù)輸入值與對(duì)應(yīng)的操作碼,對(duì)輸入的數(shù)據(jù)進(jìn)行向量加或減以及乘操作,并輸出流水級(jí)的結(jié)果。
[0021]另外,本發(fā)明還提供一種使用上述的流水級(jí)運(yùn)算裝置處理數(shù)據(jù)的方法,包括以下步驟:
[0022]—級(jí)流水模塊運(yùn)算步驟,在第一流水級(jí)模塊執(zhí)行沿處理流水線進(jìn)行的程序指令所指定的、對(duì)來自第一輸入緩存寄存器模塊的輸入數(shù)據(jù)及其最大索引值maxjndex進(jìn)行向量加法或減法運(yùn)算,或者根據(jù)所述最大索引值maxjndex,使之后連續(xù)N個(gè)時(shí)鐘周期的運(yùn)算中在第maxjndex個(gè)時(shí)鐘周期第一輸出流水級(jí)的輸出數(shù)據(jù)等于輸入數(shù)據(jù),其余N-1個(gè)時(shí)鐘周期的輸出數(shù)據(jù)為0,其中N和maxjndex均為正整數(shù)且N不小于maxjndex,并將運(yùn)算結(jié)果和控制指令存儲(chǔ)至第一輸出緩存寄存器模塊;
[0023]二級(jí)流水模塊運(yùn)算步驟,在第二流水級(jí)模塊執(zhí)行沿處理流水線進(jìn)行的程序指令所指定的、對(duì)來自第一輸出緩存寄存器模塊的運(yùn)算結(jié)果進(jìn)行導(dǎo)數(shù)值的求解以及激活函數(shù)的求解,并將運(yùn)算結(jié)果和控制指令存儲(chǔ)至第二緩存寄存器模塊;
[0024]三級(jí)流水模塊運(yùn)算步驟,在第三流水級(jí)模塊執(zhí)行沿處理流水線進(jìn)行的程序指令所指定的、對(duì)來自第二緩存寄存器模塊的運(yùn)算結(jié)果進(jìn)行乘法與加法的操作,并將運(yùn)算結(jié)果和控制指令存儲(chǔ)至第三緩存寄存器模塊;
[0025]所述處理數(shù)據(jù)的方法根據(jù)程序指令所指定的運(yùn)算操作選擇性地執(zhí)行第一、第二、和第三流水級(jí)模塊中的運(yùn)算處理中的任一運(yùn)算處理或它們之中任意兩者或三者的組合的運(yùn)算處理,并由所述第三緩存寄存器輸出最終運(yùn)算結(jié)果。
[0026]本發(fā)明的處理數(shù)據(jù)的方法,其中,所述一級(jí)流水模塊運(yùn)算步驟中,進(jìn)一步包括加減操作運(yùn)算步驟和最大索引值選擇步驟,
[0027]所述加減操作運(yùn)算步驟,根據(jù)加減操作運(yùn)模塊中的控制信號(hào)對(duì)輸入數(shù)據(jù)進(jìn)行向量加法或者減法操作,并作為所述第一流水級(jí)模塊的一個(gè)輸出,
[0028]所述最大索引值選擇步驟,根據(jù)最大索引值選擇模塊中的操作碼選擇輸入信號(hào)的最大索引值,并作為所述第一流水級(jí)模塊的另一個(gè)輸出;或者根據(jù)輸入的最大索引值max_index,使當(dāng)前時(shí)鐘周期之后的連續(xù)N個(gè)時(shí)鐘周期的運(yùn)算中在第maxjndex個(gè)時(shí)鐘周期第一輸出流水級(jí)的輸出數(shù)據(jù)等于輸入數(shù)據(jù),其余N-1時(shí)鐘周期的輸出數(shù)據(jù)為0。
[0029]本發(fā)明的處理數(shù)據(jù)的方法,其中,所述二級(jí)流水模塊運(yùn)算步驟中,進(jìn)一步包括線性差值運(yùn)算步驟和抽樣運(yùn)算步驟,
[0030]所述線性差值運(yùn)算步驟,線性插值模塊對(duì)輸入數(shù)據(jù)通過線性插值近似求解非線性函數(shù)的導(dǎo)數(shù)值或激活函數(shù)值;
[0031]所述抽樣運(yùn)算步驟,對(duì)所述線性插值模塊計(jì)算的激活函數(shù)值與一個(gè)隨機(jī)數(shù)產(chǎn)生模塊產(chǎn)生的隨機(jī)值進(jìn)行比較,如果所述激活函數(shù)值大于所