本發(fā)明涉及一種處理器,特別涉及一種提升人工神經(jīng)網(wǎng)絡(luò)的運(yùn)算效能與效率的處理器。本申請(qǐng)案主張下列的美國(guó)臨時(shí)申請(qǐng)案的國(guó)際優(yōu)先權(quán)。這些優(yōu)先權(quán)案的全文并入本案以供參考。本申請(qǐng)案關(guān)聯(lián)于下列同時(shí)提出申請(qǐng)的美國(guó)申請(qǐng)案。這些關(guān)聯(lián)申請(qǐng)案的全文并入本案以供參考。
背景技術(shù):
::近年來(lái),人工神經(jīng)網(wǎng)絡(luò)(artificialneuralnetworks,ANN)重新吸引了人們的注意。這些研究通常被稱(chēng)為深度學(xué)習(xí)(deeplearning)、計(jì)算機(jī)學(xué)習(xí)(computerlearning)等類(lèi)似術(shù)語(yǔ)。通用處理器運(yùn)算能力的提升也推升了人們?cè)跀?shù)十年后的現(xiàn)在對(duì)于人工神經(jīng)網(wǎng)絡(luò)的興趣。人工神經(jīng)網(wǎng)絡(luò)近期的應(yīng)用包括語(yǔ)言與影像辨識(shí)等。對(duì)于提升人工神經(jīng)網(wǎng)絡(luò)的運(yùn)算效能與效率的需求似乎正在增加。技術(shù)實(shí)現(xiàn)要素:有鑒于此,本發(fā)明提供一種神經(jīng)網(wǎng)絡(luò)單元。此神經(jīng)網(wǎng)絡(luò)單元包括一個(gè)由N個(gè)神經(jīng)處理單元(NPU)構(gòu)成的陣列,第一存儲(chǔ)器與第二存儲(chǔ)器。其中,各個(gè)神經(jīng)處理單元包括一算術(shù)單元與一累加器;以及第一與第二多任務(wù)緩存器。第一與第二多任務(wù)緩存器分別具有第一與第二輸出,由算術(shù)單元與一相鄰神經(jīng)處理單元的相對(duì)應(yīng)第一與第二多任務(wù)器接收,N個(gè)神經(jīng)處理單元的多個(gè)第一多任務(wù)器與多個(gè)第二多任務(wù)器分別選擇性地集體作為第一N個(gè)文字旋轉(zhuǎn)器與第二N個(gè)文字旋轉(zhuǎn)器進(jìn)行運(yùn)作。第一存儲(chǔ)器用以裝載N個(gè)權(quán)重文字的列,并將一列N個(gè)權(quán)重文字提供至N個(gè)神經(jīng)處理單元中的相對(duì)應(yīng)的多個(gè)神經(jīng)處理單元。第二存儲(chǔ)器用以裝載N個(gè)數(shù)據(jù)文字的列,并將一列N個(gè)數(shù)據(jù)文字提供至N個(gè)神經(jīng)處理單元中的相對(duì)應(yīng)的多個(gè)神經(jīng)處理單元。其中,神經(jīng)網(wǎng)絡(luò)單元可經(jīng)程序化使神經(jīng)處理單元陣列選擇性地:對(duì)接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字與利用第二N個(gè)文字旋轉(zhuǎn)器接收自第二存儲(chǔ)器的一列N個(gè)數(shù)據(jù)文字,執(zhí)行乘法累加運(yùn)算;對(duì)利用第一N個(gè)文字旋轉(zhuǎn)器接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字與接收自第二存儲(chǔ)器的多列的N個(gè)數(shù)據(jù)文字,執(zhí)行卷積運(yùn)算,其中,多列權(quán)重文字為一數(shù)據(jù)矩陣,多列數(shù)據(jù)文字為一卷積核的元素;以及對(duì)利用第一N個(gè)文字旋轉(zhuǎn)器接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字,執(zhí)行共源運(yùn)算。本發(fā)明還提供一種運(yùn)作一神經(jīng)網(wǎng)絡(luò)單元的方法。此神經(jīng)網(wǎng)絡(luò)單元包括一個(gè)由N個(gè)神經(jīng)處理單元構(gòu)成的陣列,各個(gè)神經(jīng)處理單元包括一算術(shù)單元與一累加器以及第一與第二多任務(wù)緩存器。第一與第二多任務(wù)緩存器分別具有第一與第二輸出,由算術(shù)單元與一相鄰神經(jīng)處理單元的相對(duì)應(yīng)第一與第二多任務(wù)器接收。此方法包括:利用一第一存儲(chǔ)器,將一列N個(gè)權(quán)重文字提供至N個(gè)神經(jīng)處理單元中的相對(duì)應(yīng)的多個(gè)神經(jīng)處理單元;利用一第二存儲(chǔ)器,將一列N個(gè)數(shù)據(jù)文字提供至N個(gè)神經(jīng)處理單元中的相對(duì)應(yīng)的多個(gè)神經(jīng)處理單元;以及程序化神經(jīng)網(wǎng)絡(luò)單元,使神經(jīng)處理單元陣列選擇性地:在一第一事例(instance),對(duì)接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字與利用第二N個(gè)文字旋轉(zhuǎn)器接收自第二存儲(chǔ)器的一列N個(gè)數(shù)據(jù)文字,執(zhí)行乘法累加運(yùn)算;在一第二事例,對(duì)利用第一N個(gè)文字旋轉(zhuǎn)器接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字與接收自第二存儲(chǔ)器的多列的N個(gè)數(shù)據(jù)文字,執(zhí)行卷積運(yùn)算,其中,多列權(quán)重文字為一數(shù)據(jù)矩陣,多列數(shù)據(jù)文字為一卷積核的元素;以及在一第三事例,對(duì)利用第一N個(gè)文字旋轉(zhuǎn)器接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字,執(zhí)行共源運(yùn)算。本發(fā)明還提供一種編碼于至少一非瞬時(shí)計(jì)算機(jī)可使用媒體以供一計(jì)算機(jī)裝置使用的一計(jì)算機(jī)程序產(chǎn)品。此計(jì)算機(jī)程序產(chǎn)品包括內(nèi)含于媒體的計(jì)算機(jī)可使用程序代碼,用以描述一神經(jīng)網(wǎng)絡(luò)單元。此計(jì)算機(jī)可使用程序代碼包括第一程序代碼,第二程序代碼與第三程序代碼。第一程序代碼用以描述一個(gè)由N個(gè)神經(jīng)處理單元(NPU)構(gòu)成的陣列。其中,各個(gè)神經(jīng)處理單元包括一算術(shù)單元與一累加器,以及第一與第二多任務(wù)緩存器。第一與第二多任務(wù)緩存器分別具有第一與第二輸出,由算術(shù)單元與一相鄰神經(jīng)處理單元的相對(duì)應(yīng)第一與第二多任務(wù)器接收。N個(gè)神經(jīng)處理單元的多個(gè)第一多任務(wù)器與多個(gè)第二多任務(wù)器分別選擇性地集體作為第一N個(gè)文字旋轉(zhuǎn)器與第二N個(gè)文字旋轉(zhuǎn)器進(jìn)行運(yùn)作。第二程序代碼用以描述一第一存儲(chǔ)器。第一存儲(chǔ)器裝載N個(gè)權(quán)重文字的列,并將一列N個(gè)權(quán)重文字提供至N個(gè)神經(jīng)處理單元中的相對(duì)應(yīng)的多個(gè)神經(jīng)處理單元。第三程序代碼用以描述一第二存儲(chǔ)器。第二存儲(chǔ)器裝載N個(gè)數(shù)據(jù)文字的列,并將一列N個(gè)數(shù)據(jù)文字提供至N個(gè)神經(jīng)處理單元中的相對(duì)應(yīng)的多個(gè)神經(jīng)處理單元。其中,神經(jīng)網(wǎng)絡(luò)單元可經(jīng)程序化使神經(jīng)處理單元陣列選擇性地:對(duì)接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字與利用第二N個(gè)文字旋轉(zhuǎn)器接收自第二存儲(chǔ)器的一列N個(gè)數(shù)據(jù)文字,執(zhí)行乘法累加運(yùn)算;對(duì)利用第一N個(gè)文字旋轉(zhuǎn)器接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字與接收自第二存儲(chǔ)器的多列的N個(gè)數(shù)據(jù)文字,執(zhí)行卷積運(yùn)算,其中,多列權(quán)重文字為一數(shù)據(jù)矩陣,多列數(shù)據(jù)文字為一卷積核的元素;以及對(duì)利用第一N個(gè)文字旋轉(zhuǎn)器接收自第一存儲(chǔ)器的多列的N個(gè)權(quán)重文字,執(zhí)行共源運(yùn)算。本發(fā)明所采用的具體實(shí)施例,將通過(guò)以下的實(shí)施例及圖式作進(jìn)一步的說(shuō)明。附圖說(shuō)明圖1為顯示包含神經(jīng)網(wǎng)絡(luò)單元(neuralnetworkunit,NNU)的處理器的方塊示意圖。圖2為顯示圖1的神經(jīng)處理單元(neuralprocessingunit,NPU)的方塊示意圖。圖3為方塊圖,顯示利用圖1的神經(jīng)網(wǎng)絡(luò)單元的N個(gè)神經(jīng)處理單元的N個(gè)多任務(wù)緩存器,對(duì)于由圖1的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器取得的一列數(shù)據(jù)文字執(zhí)行如同N個(gè)文字的旋轉(zhuǎn)器(rotator)或稱(chēng)循環(huán)移位器(circularshifier)的運(yùn)作。圖4為表格,顯示一個(gè)儲(chǔ)存于圖1的神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器并由該神經(jīng)網(wǎng)絡(luò)單元執(zhí)行的程序。圖5為顯示神經(jīng)網(wǎng)絡(luò)單元執(zhí)行圖4的程序的時(shí)序圖。圖6A為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元執(zhí)行圖4的程序的方塊示意圖。圖6B為流程圖,顯示圖1的處理器執(zhí)行架構(gòu)程序,以利用神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于人工神經(jīng)網(wǎng)絡(luò)的隱藏層的神經(jīng)元的典型乘法累加啟動(dòng)函數(shù)運(yùn)算的運(yùn)作,如同由圖4的程序執(zhí)行的運(yùn)作。圖7為顯示圖1的神經(jīng)處理單元的另一實(shí)施例的方塊示意圖。圖8為顯示圖1的神經(jīng)處理單元的又一實(shí)施例的方塊示意圖。圖9為表格,顯示一個(gè)儲(chǔ)存于圖1的神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器并由該神經(jīng)網(wǎng)絡(luò)單元執(zhí)行的程序。圖10為顯示神經(jīng)網(wǎng)絡(luò)單元執(zhí)行圖9的程序的時(shí)序圖。圖11為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元的一實(shí)施例的方塊示意圖。在圖11的實(shí)施例中,一個(gè)神經(jīng)元分成兩部分,即啟動(dòng)函數(shù)單元部分與算術(shù)邏輯單元部分(此部分還包含移位緩存器部分),而各個(gè)啟動(dòng)函數(shù)單元部分由多個(gè)算術(shù)邏輯單元部分共享。圖12為顯示圖11的神經(jīng)網(wǎng)絡(luò)單元執(zhí)行圖4的程序的時(shí)序圖。圖13為顯示圖11的神經(jīng)網(wǎng)絡(luò)單元執(zhí)行圖4的程序的時(shí)序圖。圖14為方塊示意圖,顯示移動(dòng)至神經(jīng)網(wǎng)絡(luò)(MTNN)架構(gòu)指令以及其對(duì)應(yīng)于圖1的神經(jīng)網(wǎng)絡(luò)單元的部分的運(yùn)作。圖15為方塊示意圖,顯示移動(dòng)至神經(jīng)網(wǎng)絡(luò)(MTNN)架構(gòu)指令以及其對(duì)應(yīng)于圖1的神經(jīng)網(wǎng)絡(luò)單元的部分的運(yùn)作。圖16為顯示圖1的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器的一實(shí)施例的方塊示意圖。圖17為顯示圖1的權(quán)重隨機(jī)存取存儲(chǔ)器與緩沖器的一實(shí)施例的方塊示意圖。圖18為顯示圖1的可動(dòng)態(tài)配置的神經(jīng)處理單元的方塊示意圖。圖19為方塊示意圖,顯示依據(jù)圖18的實(shí)施例,利用圖1的神經(jīng)網(wǎng)絡(luò)單元的N個(gè)神經(jīng)處理單元的2N個(gè)多任務(wù)緩存器,對(duì)于由圖1的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器取得的一列數(shù)據(jù)文字執(zhí)行如同旋轉(zhuǎn)器(rotator)的運(yùn)作。圖20為表格,顯示一個(gè)儲(chǔ)存于圖1的神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器并由該神經(jīng)網(wǎng)絡(luò)單元執(zhí)行的程序,而此神經(jīng)網(wǎng)絡(luò)單元具有如圖18的實(shí)施例所示的神經(jīng)處理單元。圖21為顯示神經(jīng)網(wǎng)絡(luò)單元執(zhí)行圖20的程序的時(shí)序圖,此神經(jīng)網(wǎng)絡(luò)單元具有如圖18所示的神經(jīng)處理單元執(zhí)行于窄配置。圖22為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元的方塊示意圖,此神經(jīng)網(wǎng)絡(luò)單元具有如圖18所示的神經(jīng)處理單元以執(zhí)行圖20的程序。圖23為顯示圖1的可動(dòng)態(tài)配置的神經(jīng)處理單元的另一實(shí)施例的方塊示意圖。圖24為方塊示意圖,顯示由圖1的神經(jīng)網(wǎng)絡(luò)單元使用以執(zhí)行卷積(convolution)運(yùn)算的數(shù)據(jù)結(jié)構(gòu)的一范例。圖25為流程圖,顯示圖1的處理器執(zhí)行架構(gòu)程序以利用神經(jīng)網(wǎng)絡(luò)單元依據(jù)圖24的數(shù)據(jù)陣列執(zhí)行卷積核的卷積運(yùn)算。圖26A為神經(jīng)網(wǎng)絡(luò)單元程序的程序列表,此神經(jīng)網(wǎng)絡(luò)單元程序利用圖24的卷積核執(zhí)行數(shù)據(jù)矩陣的卷積運(yùn)算并將其寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器。圖26B為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元的控制緩存器的某些字段的一實(shí)施例的方塊示意圖。圖27為方塊示意圖,顯示圖1中填入輸入數(shù)據(jù)的權(quán)重隨機(jī)存取存儲(chǔ)器的一范例,此輸入數(shù)據(jù)由圖1的神經(jīng)網(wǎng)絡(luò)單元執(zhí)行共源運(yùn)算(poolingoperation)。圖28為神經(jīng)網(wǎng)絡(luò)單元程序的程序列表,此神經(jīng)網(wǎng)絡(luò)單元程序執(zhí)行圖27的輸入數(shù)據(jù)矩陣的共源運(yùn)算并將其寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器。圖29A為顯示圖1的控制緩存器的一實(shí)施例的方塊示意圖。圖29B為顯示圖1的控制緩存器的另一實(shí)施例的方塊示意圖。圖29C為顯示以?xún)蓚€(gè)部分儲(chǔ)存圖29A的倒數(shù)(reciprocal)的一實(shí)施例的方塊示意圖。圖30為顯示圖2的啟動(dòng)函數(shù)單元(AFU)的一實(shí)施例的方塊示意圖。圖31為顯示圖30的啟動(dòng)函數(shù)單元的運(yùn)作的一范例。圖32為顯示圖30的啟動(dòng)函數(shù)單元的運(yùn)作的第二個(gè)范例。圖33為顯示圖30的啟動(dòng)函數(shù)單元的運(yùn)作的第三個(gè)范例。圖34為顯示圖1的處理器以及神經(jīng)網(wǎng)絡(luò)單元的部分細(xì)節(jié)的方塊示意圖。圖35為方塊圖,顯示具有可變率神經(jīng)網(wǎng)絡(luò)單元的處理器。圖36A為時(shí)序圖,顯示具有神經(jīng)網(wǎng)絡(luò)單元的處理器運(yùn)作于一般模式的一運(yùn)作范例,此一般模式即以主要時(shí)頻率運(yùn)作。圖36B為時(shí)序圖,顯示具有神經(jīng)網(wǎng)絡(luò)單元的處理器運(yùn)作于緩和模式的一運(yùn)作范例,緩和模式的運(yùn)作時(shí)頻率低于主要時(shí)頻率。圖37為流程圖,顯示圖35的處理器的運(yùn)作。圖38為方塊圖,詳細(xì)顯示神經(jīng)網(wǎng)絡(luò)單元的序列。圖39為方塊圖,顯示神經(jīng)網(wǎng)絡(luò)單元的控制與狀態(tài)緩存器的某些字段。圖40為方塊圖,顯示Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)(recurrentneuralnetwork,RNN)的一范例。圖41為方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算時(shí),神經(jīng)網(wǎng)絡(luò)單元的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器與權(quán)重隨機(jī)存取存儲(chǔ)器內(nèi)的數(shù)據(jù)配置的一范例。圖42為表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器的程序,此程序由神經(jīng)網(wǎng)絡(luò)單元執(zhí)行,并依據(jù)圖41的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。圖43為方塊圖顯示Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的一范例。圖44為方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于圖43的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算時(shí),神經(jīng)網(wǎng)絡(luò)單元的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器與權(quán)重隨機(jī)存取存儲(chǔ)器內(nèi)的數(shù)據(jù)配置的一范例。圖45為表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器的程序,此程序由神經(jīng)網(wǎng)絡(luò)單元執(zhí)行,并依據(jù)圖44的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。圖46為方塊圖,顯示長(zhǎng)短期記憶(longshorttermmemory,LSTM)胞的一實(shí)施例。圖47為方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于圖46的長(zhǎng)短期記憶胞層的計(jì)算時(shí),神經(jīng)網(wǎng)絡(luò)單元的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器與權(quán)重隨機(jī)存取存儲(chǔ)器內(nèi)的數(shù)據(jù)配置的一范例。圖48為表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器的程序,此程序由神經(jīng)網(wǎng)絡(luò)單元執(zhí)行并依據(jù)圖47的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成關(guān)聯(lián)于長(zhǎng)短期記憶胞層的計(jì)算。圖49為方塊圖,顯示神經(jīng)網(wǎng)絡(luò)單元的實(shí)施例,此實(shí)施例的神經(jīng)處理單元群組內(nèi)具有輸出緩沖遮蔽與反饋能力。圖50為方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于圖46的長(zhǎng)短期記憶胞層的計(jì)算時(shí),圖49的神經(jīng)網(wǎng)絡(luò)單元的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器,權(quán)重隨機(jī)存取存儲(chǔ)器與輸出緩沖器內(nèi)的數(shù)據(jù)配置的一范例。圖51為表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器的程序,此程序由圖49的神經(jīng)網(wǎng)絡(luò)單元執(zhí)行并依據(jù)圖50的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成關(guān)聯(lián)于長(zhǎng)短期記憶胞層的計(jì)算。圖52為方塊圖,顯示神經(jīng)網(wǎng)絡(luò)單元的實(shí)施例,此實(shí)施例的神經(jīng)處理單元群組內(nèi)具有輸出緩沖遮蔽與反饋能力,并且共享啟動(dòng)函數(shù)單元。圖53為方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于圖46的長(zhǎng)短期記憶胞層的計(jì)算時(shí),圖49的神經(jīng)網(wǎng)絡(luò)單元的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器,權(quán)重隨機(jī)存取存儲(chǔ)器與輸出緩沖器內(nèi)的數(shù)據(jù)配置的另一實(shí)施例。圖54為表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器的程序,此程序由圖49的神經(jīng)網(wǎng)絡(luò)單元執(zhí)行并依據(jù)圖53的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成關(guān)聯(lián)于長(zhǎng)短期記憶胞層的計(jì)算。圖55為方塊圖,顯示本發(fā)明另一實(shí)施例的部分神經(jīng)處理單元。圖56為方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于圖43的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算并利用圖55的實(shí)施例時(shí),神經(jīng)網(wǎng)絡(luò)單元的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器與權(quán)重隨機(jī)存取存儲(chǔ)器內(nèi)的數(shù)據(jù)配置的一范例。圖57為表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元的程序存儲(chǔ)器的程序,此程序由神經(jīng)網(wǎng)絡(luò)單元執(zhí)行并依據(jù)圖56的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。具體實(shí)施方式具有架構(gòu)神經(jīng)網(wǎng)絡(luò)單元的處理器圖1為顯示包含神經(jīng)網(wǎng)絡(luò)單元(neuralnetworkunit,NNU)121的處理器100的方塊示意圖。如圖中所示,此處理器100包含指令擷取單元101,指令快取102,指令轉(zhuǎn)譯器104,重命名單元106,多個(gè)保留站108,多個(gè)媒體緩存器118,多個(gè)通用緩存器116,前述神經(jīng)網(wǎng)絡(luò)單元121外的多個(gè)執(zhí)行單元112與存儲(chǔ)器子系統(tǒng)114。處理器100為電子裝置,作為集成電路的中央處理單元。處理器100接收輸入的數(shù)字?jǐn)?shù)據(jù),依據(jù)由存儲(chǔ)器攫取的指令處理這些數(shù)據(jù),并產(chǎn)生由指令指示的運(yùn)算的處理結(jié)果作為其輸出。此處理器100可用于桌上型計(jì)算機(jī)、行動(dòng)裝置、或平板計(jì)算機(jī),并用于計(jì)算、文字處理、多媒體顯示與網(wǎng)絡(luò)瀏覽等應(yīng)用。此處理器100還可設(shè)置于嵌入系統(tǒng)內(nèi),以控制各種包括設(shè)備、行動(dòng)電話、智能電話、車(chē)輛、與工業(yè)用控制器的裝置。中央處理器透過(guò)對(duì)數(shù)據(jù)執(zhí)行包括算術(shù)、邏輯與輸入/輸出等運(yùn)算,以執(zhí)行計(jì)算機(jī)程序(或稱(chēng)為計(jì)算機(jī)應(yīng)用程序或應(yīng)用程序)指令的電子電路(即硬件)。集成電路為一組制作于小型半導(dǎo)體材料,通常是硅,的電子電路。集成電路也通常被用于表示芯片、微芯片或晶粒。指令擷取單元101控制由系統(tǒng)存儲(chǔ)器(未圖示)攫取架構(gòu)指令103至指令快取102的運(yùn)作。指令擷取單元101提供攫取地址至指令快取102,以指定處理器100攫取至高速緩存102的架構(gòu)指令字節(jié)的快取列的存儲(chǔ)器地址。攫取地址的選定基于處理器100的指令指針(未圖示)的當(dāng)前值或程序計(jì)數(shù)器。一般而言,程序計(jì)數(shù)器會(huì)依照指令大小循序遞增,直到指令串流中出現(xiàn)例如分支、呼叫或返回的控制指令,或是發(fā)生例如中斷、陷阱(trap)、例外或錯(cuò)誤等例外條件,而需要以如分支目標(biāo)地址、返回地址或例外向量等非循序地址更新程序計(jì)數(shù)器??偠灾?,程序計(jì)數(shù)器會(huì)因應(yīng)執(zhí)行單元112/121執(zhí)行指令而進(jìn)行更新。程序計(jì)數(shù)器也可在偵測(cè)到例外條件時(shí)進(jìn)行更新,例如指令轉(zhuǎn)譯器104遭遇到未被定義于處理器100的指令集架構(gòu)的指令103。指令快取102儲(chǔ)存攫取自一個(gè)耦接至處理器100的系統(tǒng)存儲(chǔ)器的架構(gòu)指令103。這些架構(gòu)指令103包括移動(dòng)至神經(jīng)網(wǎng)絡(luò)(MTNN)指令與由神經(jīng)網(wǎng)絡(luò)移出(MFNN)指令,詳如后述。在一實(shí)施例中,架構(gòu)指令103是x86指令集架構(gòu)的指令,并附加上MTNN指令與MFNN指令。在本揭露內(nèi)容中,x86指令集架構(gòu)處理器理解為在執(zhí)行相同機(jī)械語(yǔ)言指令的情況下,與處理器在指令集架構(gòu)層產(chǎn)生相同結(jié)果的處理器。不過(guò),其它指令集架構(gòu),例如,進(jìn)階精簡(jiǎn)指令集機(jī)器架構(gòu)(ARM)、升陽(yáng)(SUN)的可擴(kuò)充處理器架構(gòu)(SPARC)、或是增強(qiáng)精簡(jiǎn)指令集性能運(yùn)算性能優(yōu)化架構(gòu)(PowerPC),也可用于本發(fā)明的其它實(shí)施例。指令快取102提供架構(gòu)指令103至指令轉(zhuǎn)譯器104,以將架構(gòu)指令103轉(zhuǎn)譯為微指令105。微指令105提供至重命名單元106而最終由執(zhí)行單元112/121執(zhí)行。這些微指令105會(huì)實(shí)現(xiàn)架構(gòu)指令。就一較佳實(shí)施例而言,指令轉(zhuǎn)譯器104包括第一部分,用以將頻繁執(zhí)行以及/或是相對(duì)較不復(fù)雜的架構(gòu)指令103轉(zhuǎn)譯為微指令105。此指令轉(zhuǎn)譯器104還包括第二部分,其具有微碼單元(未圖示)。微碼單元具有微碼存儲(chǔ)器裝載微碼指令,以執(zhí)行架構(gòu)指令集中復(fù)雜和/或少用的指令。微碼單元還包括微定序器(microsequencer)提供非架構(gòu)微程序計(jì)數(shù)器(micro-PC)至微碼存儲(chǔ)器。就一較佳實(shí)施例而言,這些微指令經(jīng)由微轉(zhuǎn)譯器(未圖示)轉(zhuǎn)譯為微指令105。選擇器依據(jù)微碼單元當(dāng)前是否具有控制權(quán),選擇來(lái)自第一部分或第二部分的微指令105提供至重命名單元106。重命名單元106會(huì)將架構(gòu)指令103指定的架構(gòu)緩存器重命名為處理器100的實(shí)體緩存器。就一較佳實(shí)施例而言,此處理器100包括重排緩沖器(未圖示)。重命名單元106會(huì)依照程序順序?qū)⒅嘏啪彌_器的項(xiàng)目分配給各個(gè)微指令105。如此即可使處理器100依據(jù)程序順序撤除微指令105以及其相對(duì)應(yīng)的架構(gòu)指令103。在一實(shí)施例中,媒體緩存器118具有256位寬度,而通用緩存器116具有64位寬度。在一實(shí)施例中,媒體緩存器118為x86媒體緩存器,例如先進(jìn)向量擴(kuò)充(AVX)緩存器。在一實(shí)施例中,重排緩沖器的各個(gè)項(xiàng)目具有儲(chǔ)存空間以?xún)?chǔ)存微指令105的結(jié)果。此外,處理器100包括架構(gòu)緩存器檔案,此架構(gòu)緩存器檔案具有實(shí)體緩存器對(duì)應(yīng)于各個(gè)架構(gòu)緩存器,如媒體緩存器118、通用緩存器116以及其它架構(gòu)緩存器。(就一較佳實(shí)施例而言,舉例來(lái)說(shuō),媒體緩存器118與通用緩存器116的大小不同,即可使用分開(kāi)的緩存器檔案對(duì)應(yīng)至這兩種緩存器。)對(duì)于微指令105中指定有一個(gè)架構(gòu)緩存器的各個(gè)源操作數(shù),重命名單元會(huì)利用寫(xiě)入架構(gòu)緩存器的舊有微指令105中最新一個(gè)微指令的重排緩沖器目錄,填入微指令105的源操作數(shù)字段。當(dāng)執(zhí)行單元112/121完成微指令105的執(zhí)行,執(zhí)行單元112/121會(huì)將其結(jié)果寫(xiě)入此微指令105的重排緩沖器項(xiàng)目。當(dāng)微指令105撤除時(shí),撤除單元(未圖示)會(huì)將來(lái)自此微指令的重排緩沖器字段的結(jié)果寫(xiě)入實(shí)體緩存器檔案的緩存器,此實(shí)體緩存器檔案關(guān)聯(lián)于由此撤除微指令105所指定的架構(gòu)目的緩存器。在另一實(shí)施例中,處理器100包括實(shí)體緩存器檔案,其具有的實(shí)體緩存器的數(shù)量多于架構(gòu)緩存器的數(shù)量,不過(guò),此處理器100不包括架構(gòu)緩存器檔案,而且重排緩沖器項(xiàng)目?jī)?nèi)不包括結(jié)果儲(chǔ)存空間。(就一較佳實(shí)施例而言,因?yàn)槊襟w緩存器118與通用緩存器116的大小不同,即可使用分開(kāi)的緩存器檔案對(duì)應(yīng)至這兩種緩存器。)此處理器100還包括指針表,其具有各個(gè)架構(gòu)緩存器的相對(duì)應(yīng)指針。對(duì)于微指令105內(nèi)指定有架構(gòu)緩存器的各個(gè)操作數(shù),重命名單元會(huì)利用一個(gè)指向?qū)嶓w緩存器檔案內(nèi)自由緩存器的指針,填入微指令105內(nèi)的目的操作數(shù)字段。若是實(shí)體緩存器檔案內(nèi)不存在自由緩存器,重命名單元106會(huì)暫時(shí)擱置管線。對(duì)于微指令105內(nèi)指定有架構(gòu)緩存器的各個(gè)源操作數(shù),重命名單元會(huì)利用一個(gè)指向?qū)嶓w緩存器檔案中,指派給寫(xiě)入架構(gòu)緩存器的舊有微指令105中最新微指令的緩存器的指針,填入微指令105內(nèi)的源操作數(shù)字段。當(dāng)執(zhí)行單元112/121完成執(zhí)行微指令105,執(zhí)行單元112/121會(huì)將結(jié)果寫(xiě)入實(shí)體緩存器檔案中微指令105的目的操作數(shù)字段指向的緩存器。當(dāng)微指令105撤除時(shí),撤除單元會(huì)將微指令105的目的操作數(shù)字段值復(fù)制至關(guān)聯(lián)于此撤除微指令105指定的架構(gòu)目的緩存器的指針表的指針。保留站108會(huì)裝載微指令105,直到這些微指令完成發(fā)布至執(zhí)行單元112/121以供執(zhí)行的準(zhǔn)備。當(dāng)一個(gè)微指令105的所有源操作數(shù)都可取用并且執(zhí)行單元112/121也可用于執(zhí)行時(shí),即為此微指令105完成發(fā)布的準(zhǔn)備。執(zhí)行單元112/121由重排緩沖器或前述第一實(shí)施例所述的架構(gòu)緩存器檔案,或是由前述第二實(shí)施例所述的實(shí)體緩存器檔案接收緩存器源操作數(shù)。此外,執(zhí)行單元112/121可直接透過(guò)結(jié)果傳送總線(未圖示)接收緩存器源操作數(shù)。此外,執(zhí)行單元112/121可以從保留站108接收微指令105所指定的立即操作數(shù)。MTNN與MFNN架構(gòu)指令103包括立即操作數(shù)以指定神經(jīng)網(wǎng)絡(luò)單元121所要執(zhí)行的功能,而此功能由MTNN與MFNN架構(gòu)指令103轉(zhuǎn)譯產(chǎn)生的一個(gè)或多個(gè)微指令105所提供,詳如后述。執(zhí)行單元112包括一個(gè)或多個(gè)加載/儲(chǔ)存單元(未圖示),由存儲(chǔ)器子系統(tǒng)114加載數(shù)據(jù)并且儲(chǔ)存數(shù)據(jù)至存儲(chǔ)器子系統(tǒng)114。就一較佳實(shí)施例而言,此存儲(chǔ)器子系統(tǒng)114包括存儲(chǔ)器管理單元(未圖示),此存儲(chǔ)器管理單元可包括,例如多個(gè)轉(zhuǎn)譯查找(lookaside)緩沖器、一個(gè)表移動(dòng)(tablewalk)單元、一個(gè)階層一數(shù)據(jù)快取(與指令快取102)、一個(gè)階層二統(tǒng)一快取與一個(gè)作為處理器100與系統(tǒng)存儲(chǔ)器間的接口的總線接口單元。在一實(shí)施例中,圖1的處理器100以多核處理器的多個(gè)處理核心的其中之一來(lái)表示,而此多核處理器共享一個(gè)最后階層高速緩存。執(zhí)行單元112還可包括多個(gè)整數(shù)單元、多個(gè)媒體單元、多個(gè)浮點(diǎn)單元與一個(gè)分支單元。神經(jīng)網(wǎng)絡(luò)單元121包括權(quán)重隨機(jī)存取存儲(chǔ)器(RAM)124、數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122、N個(gè)神經(jīng)處理單元(NPU)126、一個(gè)程序存儲(chǔ)器129、一個(gè)定序器128與多個(gè)控制與狀態(tài)緩存器127。這些神經(jīng)處理單元126在概念上如同神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元的功能。權(quán)重隨機(jī)存取存儲(chǔ)器124、數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與程序存儲(chǔ)器129均可透過(guò)MTNN與MFNN架構(gòu)指令103分別寫(xiě)入與讀取。權(quán)重隨機(jī)存取存儲(chǔ)器124排列為W列,每列N個(gè)權(quán)重文字,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122排列為D列,每列N個(gè)數(shù)據(jù)文字。各個(gè)數(shù)據(jù)文字與各個(gè)權(quán)重文字均為多個(gè)位,就一較佳實(shí)施例而言,可以是8個(gè)位、9個(gè)位、12個(gè)位或16個(gè)位。各個(gè)數(shù)據(jù)文字作為網(wǎng)絡(luò)中前一層的神經(jīng)元的輸出值(有時(shí)以啟動(dòng)值表示),各個(gè)權(quán)重文字作為網(wǎng)絡(luò)中關(guān)聯(lián)于進(jìn)入網(wǎng)絡(luò)當(dāng)前層的神經(jīng)元的連結(jié)的權(quán)重。雖然在神經(jīng)網(wǎng)絡(luò)單元121的許多應(yīng)用中,裝載于權(quán)重隨機(jī)存取存儲(chǔ)器124的文字或操作數(shù)實(shí)際上就是關(guān)聯(lián)于進(jìn)入神經(jīng)元的連結(jié)的權(quán)重,不過(guò)需要注意的是,在神經(jīng)網(wǎng)絡(luò)單元121的某些應(yīng)用中,裝載于權(quán)重隨機(jī)存取存儲(chǔ)器124的文字并非權(quán)重,不過(guò)因?yàn)檫@些文字是儲(chǔ)存于權(quán)重隨機(jī)存取存儲(chǔ)器124中,所以仍然以“權(quán)重文字”的用語(yǔ)表示。舉例來(lái)說(shuō),在神經(jīng)網(wǎng)絡(luò)單元121的某些應(yīng)用中,例如圖24至圖26A的卷積運(yùn)算的范例或是圖27至圖28的共源運(yùn)算的范例,權(quán)重隨機(jī)存取存儲(chǔ)器124會(huì)裝載權(quán)重以外的對(duì)象,例如數(shù)據(jù)矩陣(如影像像素?cái)?shù)據(jù))的元素。同樣地,雖然在神經(jīng)網(wǎng)絡(luò)單元121的許多應(yīng)用中,裝載于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的文字或操作數(shù)實(shí)質(zhì)上就是神經(jīng)元的輸出值或啟動(dòng)值,不過(guò)需要注意的是,在神經(jīng)網(wǎng)絡(luò)單元121的某些應(yīng)用中,裝載于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的文字并非如此,不過(guò)因?yàn)檫@些文字是儲(chǔ)存于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中,所以仍然以“數(shù)據(jù)文字”的用語(yǔ)表示。舉例來(lái)說(shuō),在神經(jīng)網(wǎng)絡(luò)單元121的某些應(yīng)用中,例如圖24至圖26A的卷積運(yùn)算的范例,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122會(huì)裝載非神經(jīng)元的輸出,例如卷積核的元素。在一實(shí)施例中,神經(jīng)處理單元126與定序器128包括組合邏輯、定序邏輯、狀態(tài)機(jī)器、或是其組合。架構(gòu)指令(例如MFNN指令1500)會(huì)將狀態(tài)緩存器127的內(nèi)容加載其中一個(gè)通用緩存器116,以確認(rèn)神經(jīng)網(wǎng)絡(luò)單元121的狀態(tài),如神經(jīng)網(wǎng)絡(luò)單元121已經(jīng)從程序存儲(chǔ)器129完成一個(gè)命令或是一個(gè)程序的運(yùn)作,或是神經(jīng)網(wǎng)絡(luò)單元121可自由接收一個(gè)新的命令或開(kāi)始一個(gè)新的神經(jīng)網(wǎng)絡(luò)單元程序。神經(jīng)處理單元126的數(shù)量可依據(jù)需求增加,權(quán)重隨機(jī)存取存儲(chǔ)器124與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的寬度與深度也可隨之調(diào)整進(jìn)行擴(kuò)張。就一較佳實(shí)施例而言,權(quán)重隨機(jī)存取存儲(chǔ)器124會(huì)大于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,這是因?yàn)榈湫偷纳窠?jīng)網(wǎng)絡(luò)層中存在許多連結(jié),因而需要較大的儲(chǔ)存空間儲(chǔ)存關(guān)聯(lián)于各個(gè)神經(jīng)元的權(quán)重。本文揭露許多關(guān)于數(shù)據(jù)與權(quán)重文字的大小、權(quán)重隨機(jī)存取存儲(chǔ)器124與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的大小、以及不同神經(jīng)處理單元126數(shù)量的實(shí)施例。在一實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元121具有一個(gè)大小為64KB(8192位x64列)的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,一個(gè)大小為2MB(8192位x2048列)的權(quán)重隨機(jī)存取存儲(chǔ)器124,以及512個(gè)神經(jīng)處理單元126。此神經(jīng)網(wǎng)絡(luò)單元121是以臺(tái)灣集成電路(TSMC)的16納米制程制造,其所占面積大約是3.3平方毫米。定序器128由程序存儲(chǔ)器129攫取指令并執(zhí)行,其執(zhí)行的運(yùn)作還包括產(chǎn)生地址與控制信號(hào)提供給數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122、權(quán)重隨機(jī)存取存儲(chǔ)器124與神經(jīng)處理單元126。定序器128產(chǎn)生存儲(chǔ)器地址123與讀取命令提供給數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,藉以在D列的N個(gè)數(shù)據(jù)文字中選擇其一提供給N個(gè)神經(jīng)處理單元126。定序器128還會(huì)產(chǎn)生存儲(chǔ)器地址125與讀取命令提供給權(quán)重隨機(jī)存取存儲(chǔ)器124,藉以在W列的N個(gè)權(quán)重文字中選擇其一提供給N個(gè)神經(jīng)處理單元126。定序器128產(chǎn)生還提供給神經(jīng)處理單元126的地址123,125的順序即確定神經(jīng)元間的“連結(jié)”。定序器128還會(huì)產(chǎn)生存儲(chǔ)器地址123與寫(xiě)入命令提供給數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,藉以在D列的N個(gè)數(shù)據(jù)文字中選擇其一由N個(gè)神經(jīng)處理單元126進(jìn)行寫(xiě)入。定序器128還會(huì)產(chǎn)生存儲(chǔ)器地址125與寫(xiě)入命令提供給權(quán)重隨機(jī)存取存儲(chǔ)器124,藉以在W列的N個(gè)權(quán)重文字中選擇其一由N個(gè)神經(jīng)處理單元126進(jìn)行寫(xiě)入。定序器128還會(huì)產(chǎn)生存儲(chǔ)器地址131至程序存儲(chǔ)器129以選擇提供給定序器128的神經(jīng)網(wǎng)絡(luò)單元指令,這部分在后續(xù)章節(jié)會(huì)進(jìn)行說(shuō)明。存儲(chǔ)器地址131對(duì)應(yīng)至程序計(jì)數(shù)器(未圖示),定序器128通常是依據(jù)程序存儲(chǔ)器129的位置順序使程序計(jì)數(shù)器遞增,除非定序器128遭遇到控制指令,例如循環(huán)指令(請(qǐng)參照如圖26A所示),在此情況下,定序器128會(huì)將程序計(jì)數(shù)器更新為此控制指令的目標(biāo)地址。定序器128還會(huì)產(chǎn)生控制信號(hào)至神經(jīng)處理單元126,指示神經(jīng)處理單元126執(zhí)行各種不同的運(yùn)算或功能,例如起始化、算術(shù)/邏輯運(yùn)算、轉(zhuǎn)動(dòng)/移位運(yùn)算、啟動(dòng)函數(shù)、以及寫(xiě)回運(yùn)算,相關(guān)的范例在后續(xù)章節(jié)(請(qǐng)參照如圖34的微運(yùn)算3418所示)會(huì)有更詳細(xì)的說(shuō)明。N個(gè)神經(jīng)處理單元126會(huì)產(chǎn)生N個(gè)結(jié)果文字133,這些結(jié)果文字133可被寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124或數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的一列。就一較佳實(shí)施例而言,權(quán)重隨機(jī)存取存儲(chǔ)器124與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122直接耦接至N個(gè)神經(jīng)處理單元126。進(jìn)一步來(lái)說(shuō),權(quán)重隨機(jī)存取存儲(chǔ)器124與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122轉(zhuǎn)屬于這些神經(jīng)處理單元126,而不分享給處理器100中其它的執(zhí)行單元112,這些神經(jīng)處理單元126能夠持續(xù)地在每一個(gè)時(shí)頻周期內(nèi)從權(quán)重隨機(jī)存取存儲(chǔ)器124與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的一或二者取得并完成一列,就一較佳實(shí)施例而言,可采用管線方式處理。在一實(shí)施例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124中的每一個(gè)都可以在每一個(gè)時(shí)頻周期內(nèi)提供8192個(gè)位至神經(jīng)處理單元126。這8192個(gè)位可以視為512個(gè)16字節(jié)或是1024個(gè)8字節(jié)來(lái)進(jìn)行處理,詳如后述。由神經(jīng)網(wǎng)絡(luò)單元121處理的數(shù)據(jù)組大小并不受限于權(quán)重隨機(jī)存取存儲(chǔ)器124與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的大小,而只會(huì)受限于系統(tǒng)存儲(chǔ)器的大小,這是因?yàn)閿?shù)據(jù)與權(quán)重可在系統(tǒng)存儲(chǔ)器與權(quán)重隨機(jī)存取存儲(chǔ)器124以及數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122間透過(guò)MTNN與MFNN指令的使用(例如,透過(guò)媒體緩存器118)而移動(dòng)。在一實(shí)施例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122被賦予雙端口,使能在由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取數(shù)據(jù)文字或?qū)懭霐?shù)據(jù)文字至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的同時(shí),寫(xiě)入數(shù)據(jù)文字至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。另外,包括高速緩存在內(nèi)的存儲(chǔ)器子系統(tǒng)114的大型存儲(chǔ)器階層結(jié)構(gòu)可提供非常大的數(shù)據(jù)頻寬供系統(tǒng)存儲(chǔ)器與神經(jīng)網(wǎng)絡(luò)單元121間進(jìn)行數(shù)據(jù)傳輸。此外,就一較佳實(shí)施例而言,此存儲(chǔ)器子系統(tǒng)114包括硬件數(shù)據(jù)預(yù)攫取器,追蹤存儲(chǔ)器的存取模式,例如由系統(tǒng)存儲(chǔ)器加載的神經(jīng)數(shù)據(jù)與權(quán)重,并對(duì)快取階層結(jié)構(gòu)執(zhí)行數(shù)據(jù)預(yù)攫取以利于在傳輸至權(quán)重隨機(jī)存取存儲(chǔ)器124與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的過(guò)程中達(dá)成高頻寬與低延遲的傳輸。雖然本文的實(shí)施例中,由權(quán)重存儲(chǔ)器提供至各個(gè)神經(jīng)處理單元126的其中一個(gè)操作數(shù)標(biāo)示為權(quán)重,此用語(yǔ)常見(jiàn)于神經(jīng)網(wǎng)絡(luò),不過(guò)需要理解的是,這些操作數(shù)也可以是其它與計(jì)算有關(guān)聯(lián)的類(lèi)型的數(shù)據(jù),而其計(jì)算速度可透過(guò)這些裝置加以提升。圖2為顯示圖1的神經(jīng)處理單元126的方塊示意圖。如圖中所示,此神經(jīng)處理單元126的運(yùn)作可執(zhí)行許多功能或運(yùn)算。尤其是,此神經(jīng)處理單元126可作為人工神經(jīng)網(wǎng)絡(luò)內(nèi)的神經(jīng)元或節(jié)點(diǎn)進(jìn)行運(yùn)作,以執(zhí)行典型的乘積累加功能或運(yùn)算。也就是說(shuō),一般而言,神經(jīng)網(wǎng)絡(luò)單元126(神經(jīng)元)用以:(1)從各個(gè)與其具有連結(jié)的神經(jīng)元接收輸入值,此連結(jié)通常會(huì)但不必然是來(lái)自人工神經(jīng)網(wǎng)絡(luò)中的前一層;(2)將各個(gè)輸出值乘上關(guān)聯(lián)于其連結(jié)的相對(duì)應(yīng)權(quán)重值以產(chǎn)生乘積;(3)將所有乘積加總以產(chǎn)生一總數(shù);(4)對(duì)此總數(shù)執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生神經(jīng)元的輸出。不過(guò),不同于傳統(tǒng)方式需要執(zhí)行關(guān)聯(lián)于所有連結(jié)輸入的所有乘法運(yùn)算并將其乘積加總,本發(fā)明的各個(gè)神經(jīng)元在給定的時(shí)頻周期內(nèi)可執(zhí)行關(guān)聯(lián)于其中一個(gè)連結(jié)輸入的權(quán)重乘法運(yùn)算并將其乘積與關(guān)聯(lián)于該時(shí)點(diǎn)前的時(shí)頻周期內(nèi)所執(zhí)行的連結(jié)輸入的乘積的累加值相加(累加)。假定一共有M個(gè)連結(jié)連接至此神經(jīng)元,在M個(gè)乘積加總后(大概需要M個(gè)時(shí)頻周期的時(shí)間),此神經(jīng)元會(huì)對(duì)此累加數(shù)執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生輸出或結(jié)果。此方式的優(yōu)點(diǎn)在于可減少所需的乘法器的數(shù)量,并且在神經(jīng)元內(nèi)只需要一個(gè)較小、較簡(jiǎn)單且更為快速的加法器電路(例如使用兩個(gè)輸入的加法器),而不需使用能夠?qū)⑺羞B結(jié)輸入的乘積加總或甚至對(duì)其中一子集合加總所需的加法器。此方式也有利于在神經(jīng)網(wǎng)絡(luò)單元121內(nèi)使用極大數(shù)量(N)的神經(jīng)元(神經(jīng)處理單元126),如此,在大約M個(gè)時(shí)頻周期后,神經(jīng)網(wǎng)絡(luò)單元121就可產(chǎn)生此大數(shù)量(N)神經(jīng)元的輸出。最后,對(duì)于大量的不同連結(jié)輸入,由這些神經(jīng)元構(gòu)成的神經(jīng)網(wǎng)絡(luò)單元121就能有效地作為人工神經(jīng)網(wǎng)絡(luò)層執(zhí)行。也就是說(shuō),若是不同層中M的數(shù)量有所增減,產(chǎn)生記憶胞輸出所需的時(shí)頻周期數(shù)也會(huì)相對(duì)應(yīng)地增減,而資源(例如乘法器與累加器)會(huì)被充分利用。相較之下,傳統(tǒng)設(shè)計(jì)對(duì)于較小的M值而言,會(huì)有某些乘法器與加法器的部分未能被利用。因此,因應(yīng)神經(jīng)網(wǎng)絡(luò)單元的連結(jié)輸出數(shù),本文所述的實(shí)施例兼具彈性與效率的優(yōu)點(diǎn),而能提供極高的效能。神經(jīng)處理單元126包括緩存器205、一個(gè)雙輸入多任務(wù)緩存器208、算術(shù)邏輯單元(ALU)204、累加器202、與啟動(dòng)函數(shù)單元(AFU)212。緩存器205由權(quán)重隨機(jī)存取存儲(chǔ)器124接收權(quán)重文字206并在后續(xù)時(shí)頻周期提供其輸出203。多任務(wù)緩存器208在兩個(gè)輸入207,211中選擇其一儲(chǔ)存于其緩存器并在后續(xù)時(shí)頻周期提供于其輸出209。輸入207接收來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的數(shù)據(jù)文字。另一個(gè)輸入211則接收相鄰神經(jīng)處理單元126的輸出209。圖2所示的神經(jīng)處理單元126于圖1所示的N個(gè)神經(jīng)處理單元中標(biāo)示為神經(jīng)處理單元J。也就是說(shuō),神經(jīng)處理單元J是這N個(gè)神經(jīng)處理單元126的一代表范例。就一較佳實(shí)施例而言,神經(jīng)處理單元126的J范例的多任務(wù)緩存器208的輸入211接收神經(jīng)處理單元126的J-1范例的多任務(wù)緩存器208的輸出209,而神經(jīng)處理單元J的多任務(wù)緩存器208的輸出209提供給神經(jīng)處理單元126的J+1范例的多任務(wù)緩存器208的輸入211。如此,N個(gè)神經(jīng)處理單元126的多任務(wù)緩存器208即可共同運(yùn)作,如同N個(gè)文字的旋轉(zhuǎn)器或稱(chēng)循環(huán)移位器,這部分在后續(xù)圖3會(huì)有更詳細(xì)的說(shuō)明。多任務(wù)緩存器208利用控制輸入213控制這兩個(gè)輸入中哪一個(gè)會(huì)被多任務(wù)緩存器208選擇儲(chǔ)存于其緩存器并于后續(xù)提供于輸出209。算術(shù)邏輯單元204具有三個(gè)輸入。其中一個(gè)輸入由緩存器205接收權(quán)重文字203。另一個(gè)輸入接收多任務(wù)緩存器208的輸出209。再另一個(gè)輸入接收累加器202的輸出217。此算術(shù)邏輯單元204會(huì)對(duì)其輸入執(zhí)行算術(shù)和/或邏輯運(yùn)算以產(chǎn)生一結(jié)果提供于其輸出。就一較佳實(shí)施例而言,算術(shù)邏輯單元204執(zhí)行的算術(shù)和/或邏輯運(yùn)算由儲(chǔ)存于程序存儲(chǔ)器129的指令所指定。舉例來(lái)說(shuō),圖4中的乘法累加指令指定乘法累加運(yùn)算,也即,結(jié)果215會(huì)是累加器202數(shù)值217與權(quán)重文字203以及多任務(wù)緩存器208輸出209的數(shù)據(jù)文字的乘積的加總。不過(guò)也可以指定其它運(yùn)算,這些運(yùn)算包括但不限于:結(jié)果215是多任務(wù)緩存器輸出209傳遞的數(shù)值;結(jié)果215是權(quán)重文字203傳遞的數(shù)值;結(jié)果215是零值;結(jié)果215是累加器202數(shù)值217與權(quán)重203的加總;結(jié)果215是累加器202數(shù)值217與多任務(wù)緩存器輸出209的加總;結(jié)果215是累加器202數(shù)值217與權(quán)重203中的最大值;結(jié)果215是累加器202數(shù)值217與多任務(wù)緩存器輸出209中的最大值。算術(shù)邏輯單元204提供其輸出215至累加器202儲(chǔ)存。算術(shù)邏輯單元204包括乘法器242對(duì)權(quán)重文字203與多任務(wù)緩存器208輸出209的數(shù)據(jù)文字進(jìn)行乘法運(yùn)算以產(chǎn)生一乘積246。在一實(shí)施例中,乘法器242將兩個(gè)16位操作數(shù)相乘以產(chǎn)生一個(gè)32位的結(jié)果。此算術(shù)邏輯單元204還包括加法器244在累加器202的輸出217加上乘積246以產(chǎn)生一總數(shù),此總數(shù)即為儲(chǔ)存于累加器202的累加運(yùn)算的結(jié)果215。在一實(shí)施例中,加法器244在累加器202的一個(gè)41位值217加上乘法器242的一個(gè)32位結(jié)果以產(chǎn)生一個(gè)41位結(jié)果。如此,在多個(gè)時(shí)頻周期的期間內(nèi)利用多任務(wù)緩存器208所具有的旋轉(zhuǎn)器特性,神經(jīng)處理單元126即可達(dá)成神經(jīng)網(wǎng)絡(luò)所需的神經(jīng)元的乘積加總運(yùn)算。此算術(shù)邏輯單元204也可包括其它電路組件以執(zhí)行其它如前所述的算術(shù)/邏輯運(yùn)算。在一實(shí)施例中,第二加法器在多任務(wù)緩存器208輸出209的數(shù)據(jù)文字減去權(quán)重文字203以產(chǎn)生一差值,隨后加法器244會(huì)在累加器202的輸出217加上此差值以產(chǎn)生一結(jié)果215,此結(jié)果即為累加器202內(nèi)的累加結(jié)果。如此,在多個(gè)時(shí)頻周期的期間內(nèi),神經(jīng)處理單元126就能達(dá)成差值加總的運(yùn)算。就一較佳實(shí)施例而言,雖然權(quán)重文字203與數(shù)據(jù)文字209的大小相同(以位計(jì)),他們也可具有不同的二進(jìn)制小數(shù)點(diǎn)位置,詳如后述。就一較佳實(shí)施例而言,乘法器242與加法器244為整數(shù)乘法器與加法器,相較于使用浮點(diǎn)運(yùn)算的算術(shù)邏輯單元,此算術(shù)邏輯單元204具有低復(fù)雜度、小型、快速與低耗能的優(yōu)點(diǎn)。不過(guò),在本發(fā)明的其它實(shí)施例中,算術(shù)邏輯單元204也可執(zhí)行浮點(diǎn)運(yùn)算。雖然圖2的算術(shù)邏輯單元204內(nèi)只顯示一個(gè)乘法器242與加法器244,不過(guò),就一較佳實(shí)施例而言,此算術(shù)邏輯單元204還包括有其它組件以執(zhí)行前述其它不同的運(yùn)算。舉例來(lái)說(shuō),此算術(shù)邏輯單元204可包括比較器(未圖示)比較累加器202與數(shù)據(jù)/權(quán)重文字,以及多工器(未圖示)在比較器指定的兩個(gè)數(shù)值中選擇較大者(最大值)儲(chǔ)存至累加器202。在另一個(gè)范例中,算術(shù)邏輯單元204包括選擇邏輯(未圖示),利用數(shù)據(jù)/權(quán)重文字來(lái)跳過(guò)乘法器242,使加法器224在累加器202的數(shù)值217加上此數(shù)據(jù)/權(quán)重文字以產(chǎn)生一總數(shù)儲(chǔ)存至累加器202。這些額外的運(yùn)算會(huì)在后續(xù)章節(jié)如圖18至圖29A有更詳細(xì)的說(shuō)明,而這些運(yùn)算也有助于如卷積運(yùn)算與共源運(yùn)算的執(zhí)行。啟動(dòng)函數(shù)單元212接收累加器202的輸出217。啟動(dòng)函數(shù)單元212會(huì)對(duì)累加器202的輸出執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生圖1的結(jié)果133。一般而言,人工神經(jīng)網(wǎng)絡(luò)的中介層的神經(jīng)元內(nèi)的啟動(dòng)函數(shù)可用來(lái)標(biāo)準(zhǔn)化乘積累加后的總數(shù),尤其可以采用非線性的方式進(jìn)行。為了“標(biāo)準(zhǔn)化”累加總數(shù),當(dāng)前神經(jīng)元的啟動(dòng)函數(shù)會(huì)在連接當(dāng)前神經(jīng)元的其它神經(jīng)元預(yù)期接收作為輸入的數(shù)值范圍內(nèi)產(chǎn)生一結(jié)果值。(標(biāo)準(zhǔn)化后的結(jié)果有時(shí)會(huì)稱(chēng)為“啟動(dòng)”,在本文中,啟動(dòng)是當(dāng)前節(jié)點(diǎn)的輸出,而接收節(jié)點(diǎn)會(huì)將此輸出乘上關(guān)聯(lián)于輸出節(jié)點(diǎn)與接收節(jié)點(diǎn)間連結(jié)的權(quán)重以產(chǎn)生一乘積,而此乘積會(huì)與關(guān)聯(lián)于此接收節(jié)點(diǎn)的其它輸入連結(jié)的乘積累加。)舉例來(lái)說(shuō),在接收/被連結(jié)神經(jīng)元預(yù)期接收作為輸入的數(shù)值介于0與1間的情況下,輸出神經(jīng)元會(huì)需要非線性地?cái)D壓和/或調(diào)整(例如向上移位以將負(fù)值轉(zhuǎn)換為正值)超出0與1的范圍外的累加總數(shù),使其落于此預(yù)期范圍內(nèi)。因此,啟動(dòng)函數(shù)單元212對(duì)累加器202數(shù)值217執(zhí)行的運(yùn)算會(huì)將結(jié)果133帶到已知范圍內(nèi)。N個(gè)神經(jīng)執(zhí)行單元126的結(jié)果133都可被同時(shí)寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124。就一較佳實(shí)施例而言,啟動(dòng)函數(shù)單元212用以執(zhí)行多個(gè)啟動(dòng)函數(shù),而例如來(lái)自控制緩存器127的輸入會(huì)在這些啟動(dòng)函數(shù)中選擇其一執(zhí)行于累加器202的輸出217。這些啟動(dòng)函數(shù)可包括但不限于階梯函數(shù)、校正函數(shù)、S型函數(shù)、雙曲正切函數(shù)與軟加函數(shù)(也稱(chēng)為平滑校正函數(shù))。軟加函數(shù)的解析公式為f(x)=ln(1+ex),也就是1與ex的加總的自然對(duì)數(shù),其中,“e”是歐拉數(shù)(Euler’snumber),x是此函數(shù)的輸入217。就一較佳實(shí)施例而言,啟動(dòng)函數(shù)也可包括傳遞(pass-through)函數(shù),直接傳遞累加器202數(shù)值217或其中一部分,詳如后述。在一實(shí)施例中,啟動(dòng)函數(shù)單元212的電路會(huì)在單一個(gè)時(shí)頻周期內(nèi)執(zhí)行啟動(dòng)函數(shù)。在一實(shí)施例中,啟動(dòng)函數(shù)單元212包括多個(gè)表單,其接收累加值并輸出一數(shù)值,對(duì)某些啟動(dòng)函數(shù),如S型函數(shù)、雙曲正切函數(shù)、軟加函數(shù)等,此數(shù)值會(huì)近似于真正的啟動(dòng)函數(shù)所提供的數(shù)值。就一較佳實(shí)施例而言,累加器202的寬度(以位計(jì))大于啟動(dòng)函數(shù)功能212的輸出133的寬度。舉例來(lái)說(shuō),在一實(shí)施例中,此累加器的寬度為41位,以避免在累加至最多512個(gè)32位的乘積的情況下(這部分在后續(xù)章節(jié)如對(duì)應(yīng)于圖30處會(huì)有更詳細(xì)的說(shuō)明)損失精度,而結(jié)果133的寬度為16位。在一實(shí)施例中,在后續(xù)時(shí)頻周期中,啟動(dòng)函數(shù)單元212會(huì)傳遞累加器202輸出217的其它未經(jīng)處理的部分,并且會(huì)將這些部分寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124,這部分在后續(xù)章節(jié)對(duì)應(yīng)于圖8處會(huì)有更詳細(xì)的說(shuō)明。如此即可將未經(jīng)處理的累加器202數(shù)值透過(guò)MFNN指令載回媒體緩存器118,藉此,在處理器100的其它執(zhí)行單元112執(zhí)行的指令就可以執(zhí)行啟動(dòng)函數(shù)單元212無(wú)法執(zhí)行的復(fù)雜啟動(dòng)函數(shù),例如常見(jiàn)的軟極大(softmax)函數(shù),此函數(shù)也被稱(chēng)為標(biāo)準(zhǔn)化指數(shù)函數(shù)。在一實(shí)施例中,處理器100的指令集架構(gòu)包括執(zhí)行此指數(shù)函數(shù)的指令,通常表示為ex或exp(x),此指令可由處理器100的其它執(zhí)行單元112使用以提升軟極大啟動(dòng)函數(shù)的執(zhí)行速度。在一實(shí)施例中,神經(jīng)處理單元126采用管線設(shè)計(jì)。舉例來(lái)說(shuō),神經(jīng)處理單元126可包括算術(shù)邏輯單元204的緩存器,例如位于乘法器與加法器以及/或是算術(shù)邏輯單元204的其它電路間的緩存器,神經(jīng)處理單元126還可包括一個(gè)裝載啟動(dòng)函數(shù)功能212輸出的緩存器。此神經(jīng)處理單元126的其它實(shí)施例會(huì)在后續(xù)章節(jié)進(jìn)行說(shuō)明。圖3為方塊圖,顯示利用圖1的神經(jīng)網(wǎng)絡(luò)單元121的N個(gè)神經(jīng)處理單元126的N個(gè)多任務(wù)緩存器208,對(duì)于由圖1的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122取得的一列數(shù)據(jù)文字207執(zhí)行如同N個(gè)文字的旋轉(zhuǎn)器(rotator)或稱(chēng)循環(huán)移位器(circularshifter)的運(yùn)作。在圖3的實(shí)施例中,N是512,因此,神經(jīng)網(wǎng)絡(luò)單元121具有512個(gè)多任務(wù)緩存器208,標(biāo)示為0至511,分別對(duì)應(yīng)至512個(gè)神經(jīng)處理單元126。每個(gè)多任務(wù)緩存器208會(huì)接收數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的D列的其中一列上的相對(duì)應(yīng)數(shù)據(jù)文字207。也就是說(shuō),多任務(wù)緩存器0會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列接收數(shù)據(jù)文字0,多任務(wù)緩存器1會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列接收數(shù)據(jù)文字1,多任務(wù)緩存器2會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列接收數(shù)據(jù)文字2,依此類(lèi)推,多任務(wù)緩存器511會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列接收數(shù)據(jù)文字511。此外,多任務(wù)緩存器1會(huì)接收多任務(wù)緩存器0的輸出209作為另一輸入211,多任務(wù)緩存器2會(huì)接收多任務(wù)緩存器1的輸出209作為另一輸入211,多任務(wù)緩存器3會(huì)接收多任務(wù)緩存器2的輸出209作為另一輸入211,依此類(lèi)推,多任務(wù)緩存器511會(huì)接收多任務(wù)緩存器510的輸出209作為另一輸入211,而多任務(wù)緩存器0會(huì)接收多任務(wù)緩存器511的輸出209作為其它輸入211。每個(gè)多任務(wù)緩存器208都會(huì)接收控制輸入213以控制其選擇數(shù)據(jù)文字207或是循環(huán)輸入211。在此運(yùn)作的模式中,控制輸入213會(huì)在第一時(shí)頻周期內(nèi),控制每個(gè)多任務(wù)緩存器208選擇數(shù)據(jù)文字207以?xún)?chǔ)存至緩存器并于后續(xù)步驟提供給算術(shù)邏輯單元204,而在后續(xù)的時(shí)頻周期內(nèi)(如前述M-1個(gè)時(shí)頻周期),控制輸入213會(huì)控制每個(gè)多任務(wù)緩存器208選擇循環(huán)輸入211以?xún)?chǔ)存至緩存器并于后續(xù)步驟提供給算術(shù)邏輯單元204。雖然圖3(以及后續(xù)的圖7與圖19)所描述的實(shí)施例中,多個(gè)神經(jīng)處理單元126可用以將這些多任務(wù)緩存器208/705的數(shù)值向右旋轉(zhuǎn),也即由神經(jīng)處理單元J朝向神經(jīng)處理單元J+1移動(dòng),不過(guò)本發(fā)明并不限于此,在其它的實(shí)施例中(例如對(duì)應(yīng)于圖24至圖26的實(shí)施例),多個(gè)神經(jīng)處理單元126可用以將多任務(wù)緩存器208/705的數(shù)值向左旋轉(zhuǎn),也即由神經(jīng)處理單元J朝向神經(jīng)處理單元J-1移動(dòng)。此外,在本發(fā)明的其它實(shí)施例中,這些神經(jīng)處理單元126可選擇性地將多任務(wù)緩存器208/705的數(shù)值向左或向右旋轉(zhuǎn),舉例來(lái)說(shuō),此選擇可由神經(jīng)網(wǎng)絡(luò)單元指令所指定。圖4為表格,顯示一個(gè)儲(chǔ)存于圖1的神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129并由該神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行的程序。如前所述,此范例程序執(zhí)行與人工神經(jīng)網(wǎng)絡(luò)的一層有關(guān)的計(jì)算。圖4的表格顯示有四列與三行。每一列對(duì)應(yīng)于程序存儲(chǔ)器129中標(biāo)示于第一行的地址。第二行指定相對(duì)應(yīng)的指令,而第三行指出關(guān)聯(lián)于此指令的時(shí)頻周期數(shù)。就一較佳實(shí)施例而言,前述時(shí)頻周期數(shù)表示在管線執(zhí)行的實(shí)施例中每指令時(shí)頻周期值的有效的時(shí)頻周期數(shù),而非指令延遲。如圖中所示,因?yàn)樯窠?jīng)網(wǎng)絡(luò)單元121具有管線執(zhí)行的本質(zhì),每個(gè)指令均有相關(guān)聯(lián)的時(shí)頻周期,位于地址2的指令是一個(gè)例外,此指令實(shí)際上自己會(huì)重復(fù)執(zhí)行511次,因而需要511個(gè)時(shí)頻周期,詳如后述。所有的神經(jīng)處理單元126會(huì)平行處理程序中的每個(gè)指令。也就是說(shuō),所有的N個(gè)神經(jīng)處理單元126都會(huì)在同一個(gè)時(shí)頻周期執(zhí)行第一列的指令,所有的N個(gè)神經(jīng)處理單元126都會(huì)在同一個(gè)時(shí)頻周期執(zhí)行第二列的指令,依此類(lèi)推。不過(guò)本發(fā)明并不限于此,在后續(xù)章節(jié)的其它實(shí)施例中,有些指令則是以部分平行部分序列的方式執(zhí)行,舉例來(lái)說(shuō),如圖11的實(shí)施例所述,在多個(gè)神經(jīng)處理單元126共享一個(gè)啟動(dòng)函數(shù)單元的實(shí)施例中,啟動(dòng)函數(shù)與位于地址3與4的輸出指令即是以此方式執(zhí)行。圖4的范例中假定一層具有512個(gè)神經(jīng)元(神經(jīng)處理單元126),而每個(gè)神經(jīng)元具有512個(gè)來(lái)自前一層的512個(gè)神經(jīng)元的連結(jié)輸入,總共有256K個(gè)連結(jié)。每個(gè)神經(jīng)元會(huì)從每個(gè)連結(jié)輸入接收一個(gè)16位數(shù)據(jù)值,并將此16位數(shù)據(jù)值乘上一個(gè)適當(dāng)?shù)?6位權(quán)重值。位于地址0的第一列(也可指定至其它地址)會(huì)指定初始化神經(jīng)處理單元指令。此初始化指令會(huì)清除累加器202數(shù)值使之為零。在一實(shí)施例中,初始化指令也可在累加器202內(nèi)加載數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124的一列中,由此指令所指定的相對(duì)應(yīng)的文字。此初始化指令也會(huì)將配置值加載控制緩存器127,這部分在后續(xù)圖29A與圖29B會(huì)有更詳細(xì)的說(shuō)明。舉例來(lái)說(shuō),可將數(shù)據(jù)文字207與權(quán)重文字209的寬度加載,供算術(shù)邏輯單元204利用以確認(rèn)電路執(zhí)行的運(yùn)算大小,此寬度也會(huì)影響儲(chǔ)存于累加器202的結(jié)果215。在一實(shí)施例中,神經(jīng)處理單元126包括一電路在算術(shù)邏輯單元204的輸出215儲(chǔ)存于累加器202前填滿(mǎn)此輸出215,而初始化指令會(huì)將配置值加載此電路,此配置值會(huì)影響前述的填滿(mǎn)運(yùn)算。在一實(shí)施例中,也可在算術(shù)邏輯單元函數(shù)指令(如地址1的乘法累加指令)或輸出指令(如地址4的寫(xiě)入起始函數(shù)單元輸出指令)中如此指定,以將累加器202清除至零值。位于地址1的第二列指定乘法累加指令指示這512個(gè)神經(jīng)處理單元126從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的一列加載相對(duì)應(yīng)的數(shù)據(jù)文字以及從權(quán)重隨機(jī)存取存儲(chǔ)器124的一列加載相對(duì)應(yīng)的權(quán)重文字,并且對(duì)此數(shù)據(jù)文字輸入207與權(quán)重文字輸入206執(zhí)行第一乘法累加運(yùn)算,即加上初始化累加器202零值。進(jìn)一步來(lái)說(shuō),此指令會(huì)指示定序器128在控制輸入213產(chǎn)生一數(shù)值以選擇數(shù)據(jù)文字輸入207。在圖4的范例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的指定列為列17,權(quán)重隨機(jī)存取存儲(chǔ)器124的指定列為列0,因此定序器會(huì)被指示輸出數(shù)值17作為數(shù)據(jù)隨機(jī)存取存儲(chǔ)器地址123,輸出數(shù)值0作為權(quán)重隨機(jī)存取存儲(chǔ)器地址125。因此,來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17的512個(gè)數(shù)據(jù)文字提供作為512個(gè)神經(jīng)處理單元126的相對(duì)應(yīng)數(shù)據(jù)輸入207,而來(lái)自權(quán)重隨機(jī)存取存儲(chǔ)器124的列0的512個(gè)權(quán)重文字提供作為512個(gè)神經(jīng)處理單元126的相對(duì)應(yīng)權(quán)重輸入206。位于地址2的第三列指定乘法累加旋轉(zhuǎn)指令,此指令具有一計(jì)數(shù)其數(shù)值為511,以指示這512個(gè)神經(jīng)處理單元126執(zhí)行511次乘法累加運(yùn)算。此指令指示這512個(gè)神經(jīng)處理單元126將511次乘法累加運(yùn)算的每一次運(yùn)算中輸入算術(shù)邏輯單元204的數(shù)據(jù)文字209,作為從鄰近神經(jīng)處理單元126來(lái)的旋轉(zhuǎn)值211。也就是說(shuō),此指令會(huì)指示定序器128在控制輸入213產(chǎn)生一數(shù)值以選擇旋轉(zhuǎn)值211。此外,此指令會(huì)指示這512個(gè)神經(jīng)處理單元126將511次乘法累加運(yùn)算的每一次運(yùn)算中的相對(duì)應(yīng)權(quán)重值加載權(quán)重隨機(jī)存取存儲(chǔ)器124的“下一”列。也就是說(shuō),此指令會(huì)指示定序器128將權(quán)重隨機(jī)存取存儲(chǔ)器地址125從前一個(gè)時(shí)頻周期的數(shù)值增加一,在此范例中,指令的第一時(shí)頻周期是列1,下一個(gè)時(shí)頻周期就是列2,在下一個(gè)時(shí)頻周期就是列3,依此類(lèi)推,第511個(gè)時(shí)頻周期就是列511。在這511個(gè)乘法累加運(yùn)算中的每一個(gè)運(yùn)算中,旋轉(zhuǎn)輸入211與權(quán)重文字輸入206的乘積會(huì)被加入累加器202的前一個(gè)數(shù)值。這512個(gè)神經(jīng)處理單元126會(huì)在511個(gè)時(shí)頻周期內(nèi)執(zhí)行這511個(gè)乘法累加運(yùn)算,每個(gè)神經(jīng)處理單元126會(huì)對(duì)于來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17的不同數(shù)據(jù)文字-也就是,相鄰的神經(jīng)處理單元126在前一個(gè)時(shí)頻周期執(zhí)行運(yùn)算的數(shù)據(jù)文字,以及關(guān)聯(lián)于數(shù)據(jù)文字的不同權(quán)重文字執(zhí)行一個(gè)乘法累加運(yùn)算在概念上即為神經(jīng)元的不同連結(jié)輸入。此范例假設(shè)各個(gè)神經(jīng)處理單元126(神經(jīng)元)具有512個(gè)連結(jié)輸入,因此牽涉到512個(gè)數(shù)據(jù)文字與512個(gè)權(quán)重文字的處理。在列2的乘法累加旋轉(zhuǎn)指令重復(fù)最后一次迭代后,累加器202內(nèi)就會(huì)存放有這512個(gè)連結(jié)輸入的乘積的加總。在一實(shí)施例中,神經(jīng)處理單元126的指令集包括“執(zhí)行”指令以指示算術(shù)邏輯單元204執(zhí)行由初始化神經(jīng)處理單元指令指定的算術(shù)邏輯單元運(yùn)算,例如圖29A的算術(shù)邏輯單元函數(shù)2926所指定者,而非對(duì)于各個(gè)不同類(lèi)型的算術(shù)邏輯運(yùn)算(例如前述的乘法累加、累加器與權(quán)重的最大值等)具有獨(dú)立的指令。位于地址3的第四列指定啟動(dòng)函數(shù)指令。此啟動(dòng)函數(shù)指令指示啟動(dòng)函數(shù)單元212對(duì)于累加器202數(shù)值執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生結(jié)果133。啟動(dòng)函數(shù)的實(shí)施例在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。位于地址4的第五列指定寫(xiě)入啟動(dòng)函數(shù)單元輸出指令,以指示這512個(gè)神經(jīng)處理單元216將其啟動(dòng)函數(shù)單元212輸出作為結(jié)果133寫(xiě)回至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的一列,在此范例中即列16。也就是說(shuō),此指令會(huì)指示定序器128輸出數(shù)值16作為數(shù)據(jù)隨機(jī)存取存儲(chǔ)器地址123以及寫(xiě)入命令(相對(duì)應(yīng)于由地址1的乘法累加指令所指定的讀取命令)。就一較佳實(shí)施例而言,因?yàn)楣芫€執(zhí)行的特性,寫(xiě)入啟動(dòng)函數(shù)單元輸出指令可與其它指令同時(shí)執(zhí)行,因此寫(xiě)入啟動(dòng)函數(shù)單元輸出指令實(shí)際上可以在單一個(gè)時(shí)頻周期內(nèi)執(zhí)行。就一較佳實(shí)施例而言,每個(gè)神經(jīng)處理單元126作為一管線,此管線具有各種不同功能組件,例如多任務(wù)緩存器208(以及圖7的多任務(wù)緩存器705)、算術(shù)邏輯單元204、累加器202、啟動(dòng)函數(shù)單元212、多工器802(請(qǐng)參照?qǐng)D8)、列緩沖器1104與啟動(dòng)函數(shù)單元1112(請(qǐng)參照?qǐng)D11)等,其中某些組件本身即可管線執(zhí)行。除了數(shù)據(jù)文字207與權(quán)重文字206外,此管線還會(huì)從程序存儲(chǔ)器129接收指令。這些指令會(huì)沿著管線流動(dòng)并控制多種功能單元。在另一實(shí)施例中,此程序內(nèi)不包含啟動(dòng)函數(shù)指令,而是由初始化神經(jīng)處理單元指令指定執(zhí)行于累加器202數(shù)值217的啟動(dòng)函數(shù),指出被指定的啟動(dòng)函數(shù)的數(shù)值儲(chǔ)存于配置緩存器,供管線的啟動(dòng)函數(shù)單元212部分在產(chǎn)生最后的累加器202數(shù)值217后,也就是在地址2的乘法累加旋轉(zhuǎn)指令重復(fù)最后一次執(zhí)行后,加以利用。就一較佳實(shí)施例而言,為了節(jié)省耗能,管線的啟動(dòng)函數(shù)單元212部分在寫(xiě)入啟動(dòng)函數(shù)單元輸出指令到達(dá)前會(huì)處于不啟動(dòng)狀態(tài),在指令到達(dá)時(shí),啟動(dòng)函數(shù)單元212會(huì)啟動(dòng)并對(duì)初始化指令指定的累加器202輸出217執(zhí)行啟動(dòng)函數(shù)。圖5為顯示神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行圖4的程序的時(shí)序圖。此時(shí)序圖的每一列對(duì)應(yīng)至第一行指出的連續(xù)時(shí)頻周期。其它行則是分別對(duì)應(yīng)至這512個(gè)神經(jīng)處理單元126中不同的神經(jīng)處理單元126并指出其運(yùn)算。圖中僅顯示神經(jīng)處理單元0,1,511的運(yùn)算以簡(jiǎn)化說(shuō)明。在時(shí)頻周期0,這512個(gè)神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126都會(huì)執(zhí)行圖4的初始化指令,在圖5中即是將零值指派給累加器202。在時(shí)頻周期1,這512個(gè)神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126都會(huì)執(zhí)行圖4中地址1的乘法累加指令。如圖中所示,神經(jīng)處理單元0會(huì)將累加器202數(shù)值(即零)加上數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17的文字0與權(quán)重隨機(jī)存取存儲(chǔ)器124的列0的文字0的乘積;神經(jīng)處理單元1會(huì)將累加器202數(shù)值(即零)加上數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17的文字1與權(quán)重隨機(jī)存取存儲(chǔ)器124的列0的文字1的乘積;依此類(lèi)推,神經(jīng)處理單元511會(huì)將累加器202數(shù)值(即零)加上數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17的文字511與權(quán)重隨機(jī)存取存儲(chǔ)器124的列0的文字511的乘積。在時(shí)頻周期2,這512個(gè)神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126都會(huì)進(jìn)行圖4中地址2的乘法累加旋轉(zhuǎn)指令的第一次迭代。如圖中所示,神經(jīng)處理單元0會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元511的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字511)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列1的文字0的乘積;神經(jīng)處理單元1會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元0的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字0)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列1的文字1的乘積;依此類(lèi)推,神經(jīng)處理單元511會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元510的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字510)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列1的文字511的乘積。在時(shí)頻周期3,這512個(gè)神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126都會(huì)進(jìn)行圖4中地址2的乘法累加旋轉(zhuǎn)指令的第二次迭代。如圖中所示,神經(jīng)處理單元0會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元511的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字510)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列2的文字0的乘積;神經(jīng)處理單元1會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元0的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字511)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列2的文字1的乘積;依此類(lèi)推,神經(jīng)處理單元511會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元510的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字509)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列2的文字511的乘積。如同圖5的省略標(biāo)號(hào)顯示,接下來(lái)509個(gè)時(shí)頻周期會(huì)依此持續(xù)進(jìn)行,直到時(shí)頻周期512。在時(shí)頻周期512,這512個(gè)神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126都會(huì)進(jìn)行圖4中地址2的乘法累加旋轉(zhuǎn)指令的第511次迭代。如圖中所示,神經(jīng)處理單元0會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元511的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字1)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列511的文字0的乘積;神經(jīng)處理單元1會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元0的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字2)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列511的文字1的乘積;依此類(lèi)推,神經(jīng)處理單元511會(huì)將累加器202數(shù)值加上由神經(jīng)處理單元510的多任務(wù)緩存器208輸出209接收的旋轉(zhuǎn)數(shù)據(jù)文字211(即由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字0)與權(quán)重隨機(jī)存取存儲(chǔ)器124的列511的文字511的乘積。在一實(shí)施例中需要多個(gè)時(shí)頻周期從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124讀取數(shù)據(jù)文字與權(quán)重文字以執(zhí)行圖4中地址1的乘法累加指令;不過(guò),數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122、權(quán)重隨機(jī)存取存儲(chǔ)器124與神經(jīng)處理單元126為采用管線配置,如此在第一個(gè)乘法累加運(yùn)算開(kāi)始后(如圖5的時(shí)頻周期1所示),后續(xù)的乘法累加運(yùn)算(如圖5的時(shí)頻周期2-512所示)就會(huì)開(kāi)始在接續(xù)的時(shí)頻周期內(nèi)執(zhí)行。就一較佳實(shí)施例而言,因應(yīng)利用架構(gòu)指令,如MTNN或MFNN指令(在后續(xù)圖14與圖15會(huì)進(jìn)行說(shuō)明),對(duì)于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124的存取動(dòng)作,或是架構(gòu)指令轉(zhuǎn)譯出的微指令,這些神經(jīng)處理單元126會(huì)短暫地?cái)R置。在時(shí)頻周期513,這512個(gè)神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126的啟動(dòng)函數(shù)單元212都會(huì)執(zhí)行圖4中地址3的啟動(dòng)函數(shù)。最后,在時(shí)頻周期514,這512個(gè)神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126會(huì)透過(guò)將其結(jié)果133寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列16中的相對(duì)應(yīng)文字以執(zhí)行圖4中地址4的寫(xiě)入啟動(dòng)函數(shù)單元輸出指令,也就是說(shuō),神經(jīng)處理單元0的結(jié)果133會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的文字0,神經(jīng)處理單元1的結(jié)果133會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的文字1,依此類(lèi)推,神經(jīng)處理單元511的結(jié)果133會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的文字511。對(duì)應(yīng)于前述圖5的運(yùn)算的相對(duì)應(yīng)方塊圖顯示于圖6A。圖6A為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行圖4的程序的方塊示意圖。此神經(jīng)網(wǎng)絡(luò)單元121包括512個(gè)神經(jīng)處理單元126、接收地址輸入123的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,與接收地址輸入125的權(quán)重隨機(jī)存取存儲(chǔ)器124。在時(shí)頻周期0的時(shí)候,這512個(gè)神經(jīng)處理單元126會(huì)執(zhí)行初始化指令。此運(yùn)作在圖中并未顯示。如圖中所示,在時(shí)頻周期1的時(shí)候,列17的512個(gè)16位的數(shù)據(jù)文字會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出并提供至這512個(gè)神經(jīng)處理單元126。在時(shí)頻周期1至512的過(guò)程中,列0至列511的512個(gè)16位的權(quán)重文字會(huì)分別從權(quán)重隨機(jī)存取存儲(chǔ)器122讀出并提供至這512個(gè)神經(jīng)處理單元126。在時(shí)頻周期1的時(shí)候,這512個(gè)神經(jīng)處理單元126會(huì)對(duì)加載的數(shù)據(jù)文字與權(quán)重文字執(zhí)行其相對(duì)應(yīng)的乘法累加運(yùn)算。此運(yùn)作在圖中并未顯示。在時(shí)頻周期2至512的過(guò)程中,512個(gè)神經(jīng)處理單元126的多任務(wù)緩存器208會(huì)如同一個(gè)具有512個(gè)16位文字的旋轉(zhuǎn)器進(jìn)行運(yùn)作,而將先前由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17加載的數(shù)據(jù)文字轉(zhuǎn)動(dòng)至鄰近的神經(jīng)處理單元126,而這些神經(jīng)處理單元126會(huì)對(duì)轉(zhuǎn)動(dòng)后的相對(duì)應(yīng)數(shù)據(jù)文字以及由權(quán)重隨機(jī)存取存儲(chǔ)器124加載的相對(duì)應(yīng)權(quán)重文字執(zhí)行乘法累加運(yùn)算。在時(shí)頻周期513的時(shí)候,這512個(gè)啟動(dòng)函數(shù)單元212會(huì)執(zhí)行啟動(dòng)指令。此運(yùn)作在圖中并未顯示。在時(shí)頻周期514的時(shí)候,這512個(gè)神經(jīng)處理單元126會(huì)將其相對(duì)應(yīng)的512個(gè)16位結(jié)果133寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列16。如圖中所示,產(chǎn)生結(jié)果文字(神經(jīng)元輸出)并寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124需要的時(shí)頻周期數(shù)大致為神經(jīng)網(wǎng)絡(luò)的當(dāng)前層接收到的數(shù)據(jù)輸入(連結(jié))數(shù)量的平方根。舉例來(lái)說(shuō),若是當(dāng)前層具有512個(gè)神經(jīng)元,而各個(gè)神經(jīng)元具有512個(gè)來(lái)自前一層的連結(jié),這些連結(jié)的總數(shù)就是256K,而產(chǎn)生當(dāng)前層結(jié)果需要的時(shí)頻周期數(shù)就會(huì)略大于512。因此,神經(jīng)網(wǎng)絡(luò)單元121在神經(jīng)網(wǎng)絡(luò)計(jì)算方面可提供極高的效能。圖6B為流程圖,顯示圖1的處理器100執(zhí)行架構(gòu)程序,以利用神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行關(guān)聯(lián)于人工神經(jīng)網(wǎng)絡(luò)的隱藏層的神經(jīng)元的典型乘法累加啟動(dòng)函數(shù)運(yùn)算的運(yùn)作,如同由圖4的程序執(zhí)行的運(yùn)作。圖6B的范例假定有四個(gè)隱藏層(標(biāo)示于初始化步驟602的變量NUM_LAYERS),各個(gè)隱藏層具有512個(gè)神經(jīng)元,各個(gè)神經(jīng)元連結(jié)前一層全部的512個(gè)神經(jīng)元(透過(guò)圖4的程序)。不過(guò),需要理解的是,這些層與神經(jīng)元的數(shù)量的選擇為說(shuō)明本發(fā)明,神經(jīng)網(wǎng)絡(luò)單元121當(dāng)可將類(lèi)似的計(jì)算應(yīng)用于不同數(shù)量隱藏層的實(shí)施例,每一層中具有不同數(shù)量神經(jīng)元的實(shí)施例,或是神經(jīng)元未被全部連結(jié)的實(shí)施例。在一實(shí)施例中,對(duì)于這一層中不存在的神經(jīng)元或是不存在的神經(jīng)元連結(jié)的權(quán)重值會(huì)被設(shè)定為零。就一較佳實(shí)施例而言,架構(gòu)程序會(huì)將第一組權(quán)重寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124并啟動(dòng)神經(jīng)網(wǎng)絡(luò)單元121,當(dāng)神經(jīng)網(wǎng)絡(luò)單元121正在執(zhí)行關(guān)聯(lián)于第一層的計(jì)算時(shí),此架構(gòu)程序會(huì)將第二組權(quán)重寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124,如此,一旦神經(jīng)網(wǎng)絡(luò)單元121完成第一隱藏層的計(jì)算,神經(jīng)網(wǎng)絡(luò)單元121就可以開(kāi)始第二層的計(jì)算。如此,架構(gòu)程序會(huì)往返于權(quán)重隨機(jī)存取存儲(chǔ)器124的兩個(gè)區(qū)域,以確保神經(jīng)網(wǎng)絡(luò)單元121可以被充分利用。此流程始于步驟602。在步驟602,如圖6A的相關(guān)章節(jié)所述,執(zhí)行架構(gòu)程序的處理器100將輸入值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的當(dāng)前神經(jīng)元隱藏層,也就是寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17。這些值也可能已經(jīng)位于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17作為神經(jīng)網(wǎng)絡(luò)單元121針對(duì)前一層的運(yùn)算結(jié)果133(例如卷積、共源或輸入層)。其次,架構(gòu)程序會(huì)將變量N初始化為數(shù)值1。變量N代表隱藏層中即將由神經(jīng)網(wǎng)絡(luò)單元121處理的當(dāng)前層。此外,架構(gòu)程序會(huì)將變量NUM_LAYERS初始化為數(shù)值4,因?yàn)樵诒痉独杏兴膫€(gè)隱藏層。接下來(lái)流程前進(jìn)至步驟604。在步驟604,處理器100將層1的權(quán)重文字寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124,例如圖6A所示的列0至511。接下來(lái)流程前進(jìn)至步驟606。在步驟606中,處理器100利用指定函數(shù)1432以寫(xiě)入程序存儲(chǔ)器129的MTNN指令1400,將乘法累加啟動(dòng)函數(shù)程序(如圖4所示)寫(xiě)入神經(jīng)網(wǎng)絡(luò)單元121程序存儲(chǔ)器129。處理器100隨后利用MTNN指令1400以啟動(dòng)神經(jīng)網(wǎng)絡(luò)單元程序,此指令指定函數(shù)1432開(kāi)始執(zhí)行此程序。接下來(lái)流程前進(jìn)至步驟608。在決策步驟608中,架構(gòu)程序確認(rèn)變量N的數(shù)值是否小于NUM_LAYERS。若是,流程就會(huì)前進(jìn)至步驟612;否則就前進(jìn)至步驟614。在步驟612中,處理器100將層N+1的權(quán)重文字寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124,例如列512至1023。因此,架構(gòu)程序就可以在神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行當(dāng)前層的隱藏層計(jì)算時(shí)將下一層的權(quán)重文字寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124,藉此,在完成當(dāng)前層的計(jì)算,也就是寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122后,神經(jīng)網(wǎng)絡(luò)單元121就可以立刻開(kāi)始執(zhí)行下一層的隱藏層計(jì)算。接下來(lái)前進(jìn)至步驟614。在步驟614中,處理器100確認(rèn)正在執(zhí)行的神經(jīng)網(wǎng)絡(luò)單元程序(就層1而言,在步驟606開(kāi)始執(zhí)行,就層2至4而言,則是在步驟618開(kāi)始執(zhí)行)是否已經(jīng)完成執(zhí)行。就一較佳實(shí)施例而言,處理器100會(huì)透過(guò)執(zhí)行MFNN指令1500讀取神經(jīng)網(wǎng)絡(luò)單元121狀態(tài)緩存器127以確認(rèn)是否已經(jīng)完成執(zhí)行。在另一實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元121會(huì)產(chǎn)生一中斷,表示已經(jīng)完成乘法累加啟動(dòng)函數(shù)層程序。接下來(lái)流程前進(jìn)至決策步驟616。在決策步驟616中,架構(gòu)程序確認(rèn)變量N的數(shù)值是否小于NUM_LAYERS。若是,流程會(huì)前進(jìn)至步驟618;否則就前進(jìn)至步驟622。在步驟618中,處理器100會(huì)更新乘法累加啟動(dòng)函數(shù)程序,使能執(zhí)行層N+1的隱藏層計(jì)算。進(jìn)一步來(lái)說(shuō),處理器100會(huì)將圖4中地址1的乘法累加指令的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列值,更新為數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中前一層計(jì)算結(jié)果寫(xiě)入的列(例如更新為列16)并更新輸出列(例如更新為列15)。處理器100隨后開(kāi)始更新神經(jīng)網(wǎng)絡(luò)單元程序。在另一實(shí)施例中,圖4的程序指定地址4的輸出指令的同一列作為地址1的乘法累加指令所指定的列(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取的列)。在此實(shí)施例中,輸入數(shù)據(jù)文字的當(dāng)前列會(huì)被覆寫(xiě)(因?yàn)榇肆袛?shù)據(jù)文字已經(jīng)被讀入多任務(wù)緩存器208并透過(guò)N文字旋轉(zhuǎn)器在這些神經(jīng)處理單元126間進(jìn)行旋轉(zhuǎn),只要這列數(shù)據(jù)文字不需被用于其它目的,這樣的處理方式就是可以被允許的)。在此情況下,在步驟618中就不需要更新神經(jīng)網(wǎng)絡(luò)單元程序,而只需要將其重新啟動(dòng)。接下來(lái)流程前進(jìn)至步驟622。在步驟622中,處理器100從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取層N的神經(jīng)網(wǎng)絡(luò)單元程序的結(jié)果。不過(guò),若是這些結(jié)果只會(huì)被用于下一層,架構(gòu)程序就不須從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取這些結(jié)果,而可將其保留在數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122供下一個(gè)隱藏層計(jì)算之用。接下來(lái)流程前進(jìn)至步驟624。在決策步驟624中,架構(gòu)程序確認(rèn)變量N的數(shù)值是否小于NUM_LAYERS。若是,流程前進(jìn)至步驟626;否則就終止此流程。在步驟626中,架構(gòu)程序會(huì)將N的數(shù)值增加一。接下來(lái)流程會(huì)回到?jīng)Q策步驟608。如同圖6B的范例所示,大致上每512個(gè)時(shí)頻周期,這些神經(jīng)處理單元126就會(huì)對(duì)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122執(zhí)行一次讀取與一次寫(xiě)入(透過(guò)圖4的神經(jīng)網(wǎng)絡(luò)單元程序的運(yùn)算的效果)。此外,這些神經(jīng)處理單元126大致上每個(gè)時(shí)頻周期都會(huì)對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行讀取以讀取一列權(quán)重文字。因此,權(quán)重隨機(jī)存取存儲(chǔ)器124全部的頻寬都會(huì)因?yàn)樯窠?jīng)網(wǎng)絡(luò)單元121以混合方式執(zhí)行隱藏層運(yùn)算而被消耗。此外,假定在一實(shí)施例中具有一個(gè)寫(xiě)入與讀取緩沖器,例如圖17的緩沖器1704,神經(jīng)處理單元126進(jìn)行讀取的同時(shí),處理器100對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行寫(xiě)入,如此緩沖器1704大致上每16個(gè)時(shí)頻周期會(huì)對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124執(zhí)行一次寫(xiě)入以寫(xiě)入權(quán)重文字。因此,在權(quán)重隨機(jī)存取存儲(chǔ)器124為單一端口的實(shí)施例中(如同圖17的相對(duì)應(yīng)章節(jié)所述),大致上每16個(gè)時(shí)頻周期這些神經(jīng)處理單元126就會(huì)暫時(shí)擱置對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行的讀取,而使緩沖器1704能夠?qū)?quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行寫(xiě)入。不過(guò),在雙端口權(quán)重隨機(jī)存取存儲(chǔ)器124的實(shí)施例中,這些神經(jīng)處理單元126就不需被擱置。圖7為顯示圖1的神經(jīng)處理單元126的另一實(shí)施例的方塊示意圖。圖7的神經(jīng)處理單元126類(lèi)似于圖2的神經(jīng)處理單元126。不過(guò),圖7的神經(jīng)處理單元126另外具有一個(gè)雙輸入多任務(wù)緩存器705。此多任務(wù)緩存器705選擇其中一個(gè)輸入206或711儲(chǔ)存于其緩存器,并于后續(xù)時(shí)頻周期提供于其輸出203。輸入206從權(quán)重隨機(jī)存取存儲(chǔ)器124接收權(quán)重文字。另一個(gè)輸入711則是接收相鄰神經(jīng)處理單元126的第二多任務(wù)緩存器705的輸出203。就一較佳實(shí)施例而言,神經(jīng)處理單元J的輸入711會(huì)接收的排列在J-1的神經(jīng)處理單元126的多任務(wù)緩存器705輸出203,而神經(jīng)處理單元J的輸出203則是提供至排列在J+1的神經(jīng)處理單元126的多任務(wù)緩存器705的輸入711。如此,N個(gè)神經(jīng)處理單元126的多任務(wù)緩存器705就可共同運(yùn)作,如同一N個(gè)文字的旋轉(zhuǎn)器,其運(yùn)作類(lèi)似于前述圖3所示的方式,不過(guò)是用于權(quán)重文字而非數(shù)據(jù)文字。多任務(wù)緩存器705利用控制輸入213控制這兩個(gè)輸入中哪一個(gè)會(huì)被多任務(wù)緩存器705選擇儲(chǔ)存于其緩存器并于后續(xù)提供于輸出203。利用多任務(wù)緩存器208和/或多任務(wù)緩存器705(以及如圖18與圖23所示的其它實(shí)施例中的多任務(wù)緩存器),實(shí)際上構(gòu)成一個(gè)大型的旋轉(zhuǎn)器將來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124的一列的數(shù)據(jù)/權(quán)重進(jìn)行旋轉(zhuǎn),神經(jīng)網(wǎng)絡(luò)單元121就不需要在數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124間使用一個(gè)非常大的多工器以提供需要的數(shù)據(jù)/權(quán)重文字至適當(dāng)?shù)纳窠?jīng)網(wǎng)絡(luò)單元。除啟動(dòng)函數(shù)結(jié)果外再寫(xiě)回累加器數(shù)值對(duì)于某些應(yīng)用而言,讓處理器100接收回(例如透過(guò)圖15的MFNN指令接收至媒體緩存器118)未經(jīng)處理的累加器202數(shù)值217,以提供給執(zhí)行于其它執(zhí)行單元112的指令執(zhí)行計(jì)算,確實(shí)有其用處。舉例來(lái)說(shuō),在一實(shí)施例中,啟動(dòng)函數(shù)單元212不針對(duì)軟極大啟動(dòng)函數(shù)的執(zhí)行進(jìn)行配置以降低啟動(dòng)函數(shù)單元212的復(fù)雜度。所以,神經(jīng)網(wǎng)絡(luò)單元121會(huì)輸出未經(jīng)處理的累加器202數(shù)值217或其中一個(gè)子集合至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124,而架構(gòu)程序在后續(xù)步驟可以由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124讀取并對(duì)此未經(jīng)處理的數(shù)值進(jìn)行計(jì)算。不過(guò),對(duì)于未經(jīng)處理的累加器202數(shù)值217的應(yīng)用并不限于執(zhí)行軟極大運(yùn)算,其它應(yīng)用也為本發(fā)明所涵蓋。圖8為顯示圖1的神經(jīng)處理單元126的又一實(shí)施例的方塊示意圖。圖8的神經(jīng)處理單元126類(lèi)似于圖2的神經(jīng)處理單元126。不過(guò),圖8的神經(jīng)處理單元126在啟動(dòng)函數(shù)單元212內(nèi)包括多工器802,而此啟動(dòng)函數(shù)單元212具有控制輸入803。累加器202的寬度(以位計(jì))大于數(shù)據(jù)文字的寬度。多工器802具有多個(gè)輸入以接收累加器202輸出217的數(shù)據(jù)文字寬度部分。在一實(shí)施例中,累加器202的寬度為41個(gè)位,而神經(jīng)處理單元216可用以輸出一個(gè)16位的結(jié)果文字133;如此,舉例來(lái)說(shuō),多工器802(或圖30的多工器3032和/或多工器3037)具有三個(gè)輸入分別接收累加器202輸出217的位[15:0]、位[31:16]與位[47:32]。就一較佳實(shí)施例而言,非由累加器202提供的輸出位(例如位[47:41])會(huì)被強(qiáng)制設(shè)定為零值位。定序器128會(huì)在控制輸入803產(chǎn)生一數(shù)值,控制多工器802在累加器202的文字(如16位)中選擇其一,以因應(yīng)寫(xiě)入累加器指令,例如后續(xù)圖9中位于地址3至5的寫(xiě)入累加器指令。就一較佳實(shí)施例而言,多工器802還具有一個(gè)或多個(gè)輸入以接收啟動(dòng)函數(shù)電路(如圖30中的組件3022,3024,3026,3018,3014與3016)的輸出,而這些啟動(dòng)函數(shù)電路產(chǎn)生的輸出的寬度等于一個(gè)數(shù)據(jù)文字。定序器128會(huì)在控制輸入803產(chǎn)生數(shù)值以控制多工器802在這些啟動(dòng)函數(shù)電路輸出中選擇其,而非在累加器202的文字中選擇其,以因應(yīng)如圖4中地址4的啟動(dòng)函數(shù)單元輸出指令。圖9為表格,顯示一個(gè)儲(chǔ)存于圖1的神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129并由該神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行的程序。圖9的范例程序類(lèi)似于圖4的程序。尤其是,二者在地址0至2的指令完全相同。不過(guò),圖4中地址3與4的指令在圖9中則是由寫(xiě)入累加器指令取代,此指令會(huì)指示512個(gè)神經(jīng)處理單元126將其累加器202輸出217作為結(jié)果133寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的三列,在此范例中即列16至18。也就是說(shuō),此寫(xiě)入累加器指令會(huì)指示定序器128在第時(shí)頻周期輸出數(shù)值為16的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器地址123以及寫(xiě)入命令,在第二時(shí)頻周期輸出數(shù)值為17的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器地址123以及寫(xiě)入命令,在第三時(shí)頻周期則是輸出數(shù)值為18的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器地址123與寫(xiě)入命令。就較佳實(shí)施例而言,寫(xiě)入累加器指令的執(zhí)行時(shí)間可以與其它指令重迭,如此,寫(xiě)入累加器指令就實(shí)際上就可以在這三個(gè)時(shí)頻周期內(nèi)執(zhí)行,其中每個(gè)時(shí)頻周期會(huì)寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列。在實(shí)施例中,使用者指定啟動(dòng)函數(shù)2934與控制緩存器127的輸出命令2956欄的數(shù)值(圖29A),以將累加器202的所需部份寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124。另外,寫(xiě)入累加器指令可以選擇性地寫(xiě)回累加器202的子集,而非寫(xiě)回累加器202的全部?jī)?nèi)容。在實(shí)施例中,可寫(xiě)回標(biāo)準(zhǔn)型的累加器202。這部分在后續(xù)對(duì)應(yīng)于圖29至圖31的章節(jié)會(huì)有更詳細(xì)的說(shuō)明。圖10為顯示神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行圖9的程序的時(shí)序圖。圖10的時(shí)序圖類(lèi)似于圖5的時(shí)序圖,其中時(shí)頻周期0至512均為相同。不過(guò),在時(shí)頻周期513-515,這512個(gè)神經(jīng)處理單元126中每個(gè)神經(jīng)處理單元126的啟動(dòng)函數(shù)單元212會(huì)執(zhí)行圖9中地址3至5的寫(xiě)入累加器指令的其中之一。尤其是,在時(shí)頻周期513,512個(gè)神經(jīng)處理單元126中每一個(gè)神經(jīng)處理單元126會(huì)將累加器202輸出217的位[15:0]作為其結(jié)果133寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列16中的相對(duì)應(yīng)文字;在時(shí)頻周期514,512個(gè)神經(jīng)處理單元126中每一個(gè)神經(jīng)處理單元126會(huì)將累加器202輸出217的位[31:16]作為其結(jié)果133寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17中的相對(duì)應(yīng)文字;而在時(shí)頻周期515,512個(gè)神經(jīng)處理單元126中每一個(gè)神經(jīng)處理單元126會(huì)將累加器202輸出217的位[40:32]作為其結(jié)果133寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列18中的相對(duì)應(yīng)文字。就一較佳實(shí)施例而言,位[47:41]會(huì)被強(qiáng)制設(shè)定為零值。共享啟動(dòng)函數(shù)單元圖11為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元121的一實(shí)施例的方塊示意圖。在圖11的實(shí)施例中,一個(gè)神經(jīng)元分成兩部分,即啟動(dòng)函數(shù)單元部分與算術(shù)邏輯單元部分(此部分還包含移位緩存器部分),而各個(gè)啟動(dòng)函數(shù)單元部分由多個(gè)算術(shù)邏輯單元部分共享。在圖11中,算術(shù)邏輯單元部分指神經(jīng)處理單元126,而共享的啟動(dòng)函數(shù)單元部分則是指啟動(dòng)函數(shù)單元1112。相對(duì)于如圖2的實(shí)施例,各個(gè)神經(jīng)元?jiǎng)t是包含自己的啟動(dòng)函數(shù)單元212。依此,在圖11實(shí)施例的一范例中,神經(jīng)處理單元126(算術(shù)邏輯單元部分)可包括圖2的累加器202、算術(shù)邏輯單元204、多任務(wù)緩存器208與緩存器205,但不包括啟動(dòng)函數(shù)單元212。在圖11的實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元121包括512個(gè)神經(jīng)處理單元126,不過(guò),本發(fā)明并不限于此。在圖11的范例中,這512個(gè)神經(jīng)處理單元126被分成64個(gè)群組,在圖11中標(biāo)示為群組0至63,而每個(gè)群組具有八個(gè)神經(jīng)處理單元126。神經(jīng)網(wǎng)絡(luò)單元121還包括列緩沖器1104與多個(gè)共享的啟動(dòng)函數(shù)單元1112,這些啟動(dòng)函數(shù)單元1112耦接于神經(jīng)處理單元126與列緩沖器1104間。列緩沖器1104的寬度(以位計(jì))與數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124的一列相同,例如512個(gè)文字。每一個(gè)神經(jīng)處理單元126群組具有一個(gè)啟動(dòng)函數(shù)單元1112,也即,每個(gè)啟動(dòng)函數(shù)單元1112對(duì)應(yīng)于神經(jīng)處理單元126群組;如此,在圖11的實(shí)施例中就存在64個(gè)啟動(dòng)函數(shù)單元1112對(duì)應(yīng)至64個(gè)神經(jīng)處理單元126群組。同一個(gè)群組的八個(gè)神經(jīng)處理單元126共享對(duì)應(yīng)于此群組的啟動(dòng)函數(shù)單元1112。本發(fā)明也可應(yīng)用于具有不同數(shù)量的啟動(dòng)函數(shù)單元以及每一個(gè)群組中具有不同數(shù)量的神經(jīng)處理單元的實(shí)施例。舉例來(lái)說(shuō),本發(fā)明也可應(yīng)用于每個(gè)群組中具有兩個(gè)、四個(gè)或十六個(gè)神經(jīng)處理單元126共享同一個(gè)啟動(dòng)函數(shù)單元1112的實(shí)施例。共享啟動(dòng)函數(shù)單元1112有助于縮減神經(jīng)網(wǎng)絡(luò)單元121的尺寸。尺寸縮減會(huì)犧牲效能。也就是說(shuō),依據(jù)共享率的不同,會(huì)需要使用額外的時(shí)頻周期才能產(chǎn)生整個(gè)神經(jīng)處理單元126陣列的結(jié)果133,舉例來(lái)說(shuō),如以下圖12所示,在8∶1的共享率的情況下就需要七個(gè)額外的時(shí)頻周期。不過(guò),一般而言,相較于產(chǎn)生累加總數(shù)所需的時(shí)頻周期數(shù)(舉例來(lái)說(shuō),對(duì)于每個(gè)神經(jīng)元具有512個(gè)連結(jié)的一層,就需要512個(gè)時(shí)頻周期),前述額外增加的時(shí)頻周期數(shù)(例如7)相當(dāng)少。因此,共享啟動(dòng)函數(shù)單元對(duì)效能的影響非常小(例如,增加大約百分之一的計(jì)算時(shí)間),對(duì)于所能縮減神經(jīng)網(wǎng)絡(luò)單元121的尺寸而言會(huì)是一個(gè)合算的成本。在一實(shí)施例中,每一個(gè)神經(jīng)處理單元126包括啟動(dòng)函數(shù)單元212用以執(zhí)行相對(duì)簡(jiǎn)單的啟動(dòng)函數(shù),這些簡(jiǎn)單的啟動(dòng)函數(shù)單元212具有較小的尺寸而能被包含在每個(gè)神經(jīng)處理單元126內(nèi);反之,共享的復(fù)雜啟動(dòng)函數(shù)單元1112則是執(zhí)行相對(duì)復(fù)雜的啟動(dòng)函數(shù),其尺寸會(huì)明顯大于簡(jiǎn)單的啟動(dòng)函數(shù)單元212。在此實(shí)施例中,只有在指定復(fù)雜啟動(dòng)函數(shù)而需要由共享復(fù)雜啟動(dòng)函數(shù)單元1112執(zhí)行的情況下,需要額外的時(shí)頻周期,在指定的啟動(dòng)函數(shù)可以由簡(jiǎn)單啟動(dòng)函數(shù)單元212執(zhí)行的情況下,就不需要此額外的時(shí)頻周期。圖12與圖13為顯示圖11的神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行圖4的程序的時(shí)序圖。圖12的時(shí)序圖類(lèi)似于圖5的時(shí)序圖,二者的時(shí)頻周期0至512均相同。不過(guò),在時(shí)頻周期513的運(yùn)算并不相同,因?yàn)閳D11的神經(jīng)處理單元126會(huì)共享啟動(dòng)函數(shù)單元1112;也即,同一個(gè)群組的神經(jīng)處理單元126會(huì)共享關(guān)聯(lián)于此群組的啟動(dòng)函數(shù)單元1112,而圖11即顯示此共享架構(gòu)。圖13的時(shí)序圖的每一列對(duì)應(yīng)至標(biāo)示于第一行的連續(xù)時(shí)頻周期。其它行則是分別對(duì)應(yīng)至這64個(gè)啟動(dòng)函數(shù)單元1112中不同的啟動(dòng)函數(shù)單元1112并指出其運(yùn)算。圖中僅顯示神經(jīng)處理單元0,1,63的運(yùn)算以簡(jiǎn)化說(shuō)明。圖13的時(shí)頻周期對(duì)應(yīng)至圖12的時(shí)頻周期,但以不同方式顯示神經(jīng)處理單元126共享啟動(dòng)函數(shù)單元1112的運(yùn)算。如圖13所示,在時(shí)頻周期0至512,這64個(gè)啟動(dòng)函數(shù)單元1112都是處于不啟動(dòng)狀態(tài),而神經(jīng)處理單元126執(zhí)行初始化神經(jīng)處理單元指令、乘法累加指令與乘法累加旋轉(zhuǎn)指令。如圖12與圖13所示,在時(shí)頻周期513,啟動(dòng)函數(shù)單元0(關(guān)聯(lián)于群組0的啟動(dòng)函數(shù)單元1112)開(kāi)始對(duì)神經(jīng)處理單元0的累加器202數(shù)值217執(zhí)行所指定的啟動(dòng)函數(shù),神經(jīng)處理單元0即群組0中第一個(gè)神經(jīng)處理單元216,而啟動(dòng)函數(shù)單元1112的輸出將會(huì)被儲(chǔ)存于列緩存器1104的文字0。同樣在時(shí)頻周期513,每個(gè)啟動(dòng)函數(shù)單元1112都會(huì)開(kāi)始對(duì)相對(duì)應(yīng)神經(jīng)處理單元216群組中第一個(gè)神經(jīng)處理單元126的累加器202數(shù)值217執(zhí)行所指定的啟動(dòng)函數(shù)。因此,如圖13所示,在時(shí)頻周期513,啟動(dòng)函數(shù)單元0開(kāi)始對(duì)神經(jīng)處理單元0的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字0的結(jié)果;啟動(dòng)函數(shù)單元1開(kāi)始對(duì)神經(jīng)處理單元8的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字8的結(jié)果;依此類(lèi)推,啟動(dòng)函數(shù)單元63開(kāi)始對(duì)神經(jīng)處理單元504的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字504的結(jié)果。在時(shí)頻周期514,啟動(dòng)函數(shù)單元0(關(guān)聯(lián)于群組0的啟動(dòng)函數(shù)單元1112)開(kāi)始對(duì)神經(jīng)處理單元1的累加器202數(shù)值217執(zhí)行所指定的啟動(dòng)函數(shù),神經(jīng)處理單元1即群組0中第二個(gè)神經(jīng)處理單元216,而啟動(dòng)函數(shù)單元1112的輸出將會(huì)被儲(chǔ)存于列緩存器1104的文字1。同樣在時(shí)頻周期514,每個(gè)啟動(dòng)函數(shù)單元1112都會(huì)開(kāi)始對(duì)相對(duì)應(yīng)神經(jīng)處理單元216群組中第二個(gè)神經(jīng)處理單元126的累加器202數(shù)值217執(zhí)行所指定的啟動(dòng)函數(shù)。因此,如圖13所示,在時(shí)頻周期514,啟動(dòng)函數(shù)單元0開(kāi)始對(duì)神經(jīng)處理單元1的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字1的結(jié)果;啟動(dòng)函數(shù)單元1開(kāi)始對(duì)神經(jīng)處理單元9的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字9的結(jié)果;依此類(lèi)推,啟動(dòng)函數(shù)單元63開(kāi)始對(duì)神經(jīng)處理單元505的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字505的結(jié)果。這樣的處理會(huì)持續(xù)到時(shí)頻周期520,啟動(dòng)函數(shù)單元0(關(guān)聯(lián)于群組0的啟動(dòng)函數(shù)單元1112)開(kāi)始對(duì)神經(jīng)處理單元7的累加器202數(shù)值217執(zhí)行所指定的啟動(dòng)函數(shù),神經(jīng)處理單元7即群組0中第八個(gè)(最后一個(gè))神經(jīng)處理單元216,而啟動(dòng)函數(shù)單元1112的輸出將會(huì)被儲(chǔ)存于列緩存器1104的文字7。同樣在時(shí)頻周期520,每個(gè)啟動(dòng)函數(shù)單元1112都會(huì)開(kāi)始對(duì)相對(duì)應(yīng)神經(jīng)處理單元216群組中第八個(gè)神經(jīng)處理單元126的累加器202數(shù)值217執(zhí)行所指定的啟動(dòng)函數(shù)。因此,如圖13所示,在時(shí)頻周期520,啟動(dòng)函數(shù)單元0開(kāi)始對(duì)神經(jīng)處理單元7的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字7的結(jié)果;啟動(dòng)函數(shù)單元1開(kāi)始對(duì)神經(jīng)處理單元15的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字15的結(jié)果;依此類(lèi)推,啟動(dòng)函數(shù)單元63開(kāi)始對(duì)神經(jīng)處理單元511的累加器202執(zhí)行所指定的啟動(dòng)函數(shù)以產(chǎn)生將會(huì)儲(chǔ)存于列緩存器1104的文字511的結(jié)果。在時(shí)頻周期521,一旦這512個(gè)神經(jīng)處理單元126的全部512個(gè)結(jié)果都已經(jīng)產(chǎn)生并寫(xiě)入列緩存器1104,列緩存器1104就會(huì)開(kāi)始將其內(nèi)容寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或是權(quán)重隨機(jī)存取存儲(chǔ)器124。如此,每一個(gè)神經(jīng)處理單元126群組的啟動(dòng)函數(shù)單元1112都執(zhí)行圖4中地址3的啟動(dòng)函數(shù)指令的一部分。如圖11所示在算術(shù)邏輯單元204群組中共享啟動(dòng)函數(shù)單元1112的實(shí)施例,特別有助于搭配整數(shù)算術(shù)邏輯單元204的使用。這部分在后續(xù)章節(jié)如對(duì)應(yīng)于圖29A至圖33處會(huì)有相關(guān)說(shuō)明。MTNN與MFNN架構(gòu)指令圖14為方塊示意圖,顯示移動(dòng)至神經(jīng)網(wǎng)絡(luò)(MTNN)架構(gòu)指令1400以及其對(duì)應(yīng)于圖1的神經(jīng)網(wǎng)絡(luò)單元121的部分的運(yùn)作。此MTNN指令1400包括執(zhí)行碼字段1402、src1字段1404、src2字段、gpr字段1408與立即字段1412。此MTNN指令為架構(gòu)指令,也即此指令包含在處理器100的指令集架構(gòu)內(nèi)。就一較佳實(shí)施例而言,此指令集架構(gòu)會(huì)利用執(zhí)行碼字段1402的默認(rèn)值,來(lái)區(qū)分MTNN指令1400與指令集架構(gòu)內(nèi)的其它指令。此MTNN指令1400的執(zhí)行碼1402可包括常見(jiàn)于x86架構(gòu)等的前置碼(prefix),也可以不包括。立即字段1412提供一數(shù)值以指定函數(shù)1432至神經(jīng)網(wǎng)絡(luò)單元121的控制邏輯1434。就一較佳實(shí)施例而言,此函數(shù)1432作為圖1的微指令105的立即操作數(shù)。這些可以由神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行的函數(shù)1432包括寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122、寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124、寫(xiě)入程序存儲(chǔ)器129、寫(xiě)入控制緩存器127、開(kāi)始執(zhí)行程序存儲(chǔ)器129內(nèi)的程序、暫停執(zhí)行程序存儲(chǔ)器129內(nèi)的程序、完成執(zhí)行程序存儲(chǔ)器129內(nèi)的程序后的通知請(qǐng)求(例如中斷)、以及重設(shè)神經(jīng)網(wǎng)絡(luò)單元121,但不限于此。就一較佳實(shí)施例而言,此神經(jīng)網(wǎng)絡(luò)單元指令組會(huì)包括一個(gè)指令,此指令的結(jié)果指出神經(jīng)網(wǎng)絡(luò)單元程序已完成。另外,此神經(jīng)網(wǎng)絡(luò)單元指令集包括一個(gè)明確產(chǎn)生中斷指令。就一較佳實(shí)施例而言,對(duì)神經(jīng)網(wǎng)絡(luò)單元121進(jìn)行重設(shè)的運(yùn)作包括將神經(jīng)網(wǎng)絡(luò)單元121中,除了數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122、權(quán)重隨機(jī)存取存儲(chǔ)器124、程序存儲(chǔ)器129的數(shù)據(jù)會(huì)維持完整不動(dòng)外的其它部分,有效地強(qiáng)制回復(fù)至重設(shè)狀態(tài)(例如,清空內(nèi)部狀態(tài)機(jī)器并將其設(shè)定為閑置狀態(tài))。此外,內(nèi)部緩存器,如累加器202,并不會(huì)受到重設(shè)函數(shù)的影響,而必須被明示地清空,例如使用圖4中地址0的初始化神經(jīng)處理單元指令。在一實(shí)施例中,函數(shù)1432可包括直接執(zhí)行函數(shù),其第一來(lái)源緩存器包含微運(yùn)算(舉例來(lái)說(shuō),可參照?qǐng)D34的微運(yùn)算3418)。此直接執(zhí)行函數(shù)指示神經(jīng)網(wǎng)絡(luò)單元121直接執(zhí)行所指定的微運(yùn)算。如此,架構(gòu)程序就可以直接控制神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行運(yùn)算,而非將指令寫(xiě)入程序存儲(chǔ)器129并于后續(xù)指示神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行此位于程序存儲(chǔ)器129內(nèi)的指令或是透過(guò)MTNN指令1400(或圖15的MFNN指令1500)的執(zhí)行。圖14顯示此寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的函數(shù)的一范例。此gpr字段指定通用緩存器檔案116內(nèi)的通用緩存器。在一實(shí)施例中,每個(gè)通用緩存器均為64位。此通用緩存器檔案116提供所選定的通用緩存器的數(shù)值至神經(jīng)網(wǎng)絡(luò)單元121,如圖中所示,而神經(jīng)網(wǎng)絡(luò)單元121將此數(shù)值作為地址1422使用。此地址1422會(huì)選擇函數(shù)1432中指定的存儲(chǔ)器的一列。就數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124而言,此地址1422會(huì)額外選擇一數(shù)據(jù)塊,其大小是此選定列中媒體緩存器的位置的兩倍(如512個(gè)位)。就一較佳實(shí)施例而言,此位置位于一個(gè)512位邊界。在一實(shí)施例中,多工器會(huì)選擇地址1422(或是在以下描述的MFNN指令1400的情況下的地址1422)或是來(lái)自定序器128的地址123/125/131提供至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器124/權(quán)重隨機(jī)存取存儲(chǔ)器124/程序存儲(chǔ)器129。在一實(shí)施例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122具有雙端口,使神經(jīng)處理單元126能夠利用媒體緩存器118對(duì)此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的讀取/寫(xiě)入,同時(shí)讀取/寫(xiě)入此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。在一實(shí)施例中,為了類(lèi)似的目的,權(quán)重隨機(jī)存取存儲(chǔ)器124也具有雙端口。圖中的src1字段1404與src2字段1406均指定媒體緩存器檔案118的一媒體緩存器。在一實(shí)施例中,每個(gè)媒體緩存器118均為256位。媒體緩存器檔案118會(huì)將來(lái)自所選定的媒體緩存器的相連數(shù)據(jù)(例如512個(gè)位)提供至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(或是權(quán)重隨機(jī)存取存儲(chǔ)器124或是程序存儲(chǔ)器129)以寫(xiě)入地址1422指定的選定列1428以及在選定列1428中由地址1422指定的位置,如圖中所示。透過(guò)一系列MTNN指令1400(以及以下所述的MFNN指令1500)的執(zhí)行,執(zhí)行于處理器100的架構(gòu)程序即可填滿(mǎn)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列與權(quán)重隨機(jī)存取存儲(chǔ)器124列并將程序?qū)懭氤绦虼鎯?chǔ)器129,例如本文所述的程序(如圖4與圖9所示的程序)可使神經(jīng)網(wǎng)絡(luò)單元121對(duì)數(shù)據(jù)與權(quán)重以非??斓乃俣冗M(jìn)行運(yùn)算,以完成此人工神經(jīng)網(wǎng)絡(luò)。在一實(shí)施例中,此架構(gòu)程序直接控制神經(jīng)網(wǎng)絡(luò)單元121而非將程序?qū)懭氤绦虼鎯?chǔ)器129。在一實(shí)施例中,MTNN指令1400指定一起始來(lái)源緩存器以及來(lái)源緩存器的數(shù)量,即Q,而非指定兩個(gè)來(lái)源緩存器(如字段1404與1406所指定者)。這種形式的MTNN指令1400會(huì)指示處理器100將指定為起始來(lái)源緩存器的媒體緩存器118以及接下來(lái)Q-1個(gè)接續(xù)的媒體緩存器118寫(xiě)入神經(jīng)網(wǎng)絡(luò)單元121,也就是寫(xiě)入所指定的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124。就一較佳實(shí)施例而言,指令轉(zhuǎn)譯器104會(huì)將MTNN指令1400轉(zhuǎn)譯為寫(xiě)入所有Q個(gè)所指定的媒體緩存器118所需數(shù)量的微指令。舉例來(lái)說(shuō),在一實(shí)施例中,當(dāng)MTNN指令1400將緩存器MR4指定為起始來(lái)源緩存器并且Q為8,指令轉(zhuǎn)譯器104就會(huì)將MTNN指令1400轉(zhuǎn)譯為四個(gè)微指令,其中第一個(gè)微指令寫(xiě)入緩存器MR4與MR5,第二個(gè)微指令寫(xiě)入緩存器MR6與MR7,第三個(gè)微指令寫(xiě)入緩存器MR8與MR9,而第四個(gè)微指令寫(xiě)入緩存器MR10與MR11。在另一個(gè)實(shí)施例中,由媒體緩存器118至神經(jīng)網(wǎng)絡(luò)單元121的數(shù)據(jù)路徑是1024位而非512位,在此情況下,指令轉(zhuǎn)譯器104會(huì)將MTNN指令1400轉(zhuǎn)譯為兩個(gè)微指令,其中第一個(gè)微指令寫(xiě)入緩存器MR4至MR7,第二個(gè)微指令則是寫(xiě)入緩存器MR8至MR11。本發(fā)明也可應(yīng)用于MFNN指令1500指定一起始目的緩存器以及目的緩存器的數(shù)量的實(shí)施例,而使每一個(gè)MFNN指令1500可以從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124的一列讀取大于單一媒體緩存器118的數(shù)據(jù)塊。圖15為方塊示意圖,顯示移動(dòng)至神經(jīng)網(wǎng)絡(luò)(MTNN)架構(gòu)指令1500以及其對(duì)應(yīng)于圖1的神經(jīng)網(wǎng)絡(luò)單元121的部分的運(yùn)作。此MFNN指令1500包括執(zhí)行碼字段1502、dst字段1504、gpr字段1508以及立即字段1512。MFNN指令為架構(gòu)指令,也即此指令包含于處理器100的指令集架構(gòu)內(nèi)。就一較佳實(shí)施例而言,此指令集架構(gòu)會(huì)利用執(zhí)行碼字段1502的默認(rèn)值,來(lái)區(qū)分MFNN指令1500與指令集架構(gòu)內(nèi)的其它指令。此MFNN指令1500的執(zhí)行碼1502可包括常見(jiàn)于x86架構(gòu)等的前置碼(prefix),也可以不包括。立即字段1512提供一數(shù)值以指定函數(shù)1532至神經(jīng)網(wǎng)絡(luò)單元121的控制邏輯1434。就一較佳實(shí)施例而言,此函數(shù)1532作為圖1的微指令105的立即操作數(shù)。這些神經(jīng)網(wǎng)絡(luò)單元121可以執(zhí)行的函數(shù)1532包括讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122、讀取權(quán)重隨機(jī)存取存儲(chǔ)器124、讀取程序存儲(chǔ)器129、以及讀取狀態(tài)緩存器127,但不限于此。圖15的范例顯示讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的函數(shù)1532。此gpr字段1508指定通用緩存器檔案116內(nèi)的通用緩存器。此通用緩存器檔案116提供所選定的通用緩存器的數(shù)值至神經(jīng)網(wǎng)絡(luò)單元121,如圖中所示,而神經(jīng)網(wǎng)絡(luò)單元121將此數(shù)值作為地址1522并以類(lèi)似于圖14的地址1422的方式進(jìn)行運(yùn)算,藉以選擇函數(shù)1532中指定的存儲(chǔ)器的一列。就數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124而言,此地址1522會(huì)額外選擇一數(shù)據(jù)塊,其大小即為此選定列中媒體緩存器(如256個(gè)位)的位置。就一較佳實(shí)施例而言,此位置位于一個(gè)256位邊界。此dst字段1504于一媒體緩存器檔案118內(nèi)指定一媒體緩存器。如圖中所示,媒體緩存器檔案118將來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(或權(quán)重隨機(jī)存取存儲(chǔ)器124或程序存儲(chǔ)器129)的數(shù)據(jù)(如256位)接收至選定的媒體緩存器,此數(shù)據(jù)讀取自數(shù)據(jù)接收中地址1522指定的選定列1528以及選定列1528中地址1522指定的位置。神經(jīng)網(wǎng)絡(luò)單元內(nèi)部隨機(jī)存取存儲(chǔ)器的端口配置圖16為顯示圖1的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的一實(shí)施例的方塊示意圖。此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122包括存儲(chǔ)器陣列1606、讀取端口1602與寫(xiě)入端口1604。存儲(chǔ)器陣列1606裝載數(shù)據(jù)文字,就一較佳實(shí)施例而言,這些數(shù)據(jù)排列成如前所述D列的N個(gè)文字的陣列。在一實(shí)施例中,此存儲(chǔ)器陣列1606包括一個(gè)由64個(gè)水平排列的靜態(tài)隨機(jī)存取記憶胞構(gòu)成的陣列,其中每個(gè)記憶胞具有128位的寬度以及64位的高度,如此即可提供一個(gè)64KB的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,其寬度為8192位并且具有64列,而此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所使用的晶粒面積大致為0.2平方毫米。不過(guò),本發(fā)明并不限于此。就一較佳實(shí)施例而言,寫(xiě)入端口1602以多任務(wù)方式耦接至神經(jīng)處理單元126以及媒體緩存器118。進(jìn)一步來(lái)說(shuō),這些媒體緩存器118可以透過(guò)結(jié)果總線耦接至讀取端口,而結(jié)果總線也用于提供數(shù)據(jù)至重排緩沖器和/或結(jié)果傳送總線以提供至其它執(zhí)行單元112。這些神經(jīng)處理單元126與媒體緩存器118共享此讀取端口1602,以對(duì)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122進(jìn)行讀取。又,就一較佳實(shí)施例而言,寫(xiě)入端口1604也是以多任務(wù)方式耦接至神經(jīng)處理單元126以及媒體緩存器118。這些神經(jīng)處理單元126與媒體緩存器118共享此寫(xiě)入端口1604,以寫(xiě)入此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。如此,媒體緩存器118就可以在神經(jīng)處理單元126對(duì)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122進(jìn)行讀取的同時(shí),寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,而神經(jīng)處理單元126也就可以在媒體緩存器118正在對(duì)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122進(jìn)行讀取的同時(shí),寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。這樣的進(jìn)行方式可以提升效能。舉例來(lái)說(shuō),這些神經(jīng)處理單元126可以讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(例如持續(xù)執(zhí)行計(jì)算),而此同時(shí),媒體緩存器118可以將更多數(shù)據(jù)文字寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。在另一范例中,這些神經(jīng)處理單元126可以將計(jì)算結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,而此同時(shí),媒體緩存器118則可以從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取計(jì)算結(jié)果。在一實(shí)施例中,神經(jīng)處理單元126可以將一列計(jì)算結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,同時(shí)還從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取一列數(shù)據(jù)文字。在一實(shí)施例中,存儲(chǔ)器陣列1606配置成存儲(chǔ)器區(qū)塊(bank)。在神經(jīng)處理單元126存取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的時(shí)候,所有的存儲(chǔ)器區(qū)塊都會(huì)被啟動(dòng)來(lái)存取存儲(chǔ)器陣列1606的一完整列;不過(guò),在媒體緩存器118存取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的時(shí)候,只有所指定的存儲(chǔ)器區(qū)塊會(huì)被啟動(dòng)。在一實(shí)施例中,每個(gè)存儲(chǔ)器區(qū)塊的寬度均為128位,而媒體緩存器118的寬度則是256位,如此,舉例來(lái)說(shuō),每次存取媒體緩存器118就需要啟動(dòng)兩個(gè)存儲(chǔ)器區(qū)塊。在一實(shí)施例中,這些端口1602/1604的其中之一為讀取/寫(xiě)入端口。在一實(shí)施例中,這些端口1602/1604都是讀取/寫(xiě)入端口。讓這些神經(jīng)處理單元126具備如本文所述的旋轉(zhuǎn)器的能力的優(yōu)點(diǎn)在于,相較于為了確保神經(jīng)處理單元126可被充分利用而使架構(gòu)程序(通過(guò)媒體緩存器118)得以持續(xù)提供數(shù)據(jù)至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122并且在神經(jīng)處理單元126執(zhí)行計(jì)算的同時(shí),從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122取回結(jié)果所需要的存儲(chǔ)器陣列,此能力有助于減少數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的存儲(chǔ)器陣列1606的列數(shù),因而可以縮小尺寸。內(nèi)部隨機(jī)存取存儲(chǔ)器緩沖器圖17為顯示圖1的權(quán)重隨機(jī)存取存儲(chǔ)器124與緩沖器1704的一實(shí)施例的方塊示意圖。此權(quán)重隨機(jī)存取存儲(chǔ)器124包括存儲(chǔ)器陣列1706與端口1702。此存儲(chǔ)器陣列1706裝載權(quán)重文字,就一較佳實(shí)施例而言,這些權(quán)重文字排列成如前所述W列的N個(gè)文字的陣列。在一實(shí)施例中,此存儲(chǔ)器陣列1706包括一個(gè)由128個(gè)水平排列的靜態(tài)隨機(jī)存取記憶胞構(gòu)成的陣列,其中每個(gè)記憶胞具有64位的寬度以及2048位的高度,如此即可提供一個(gè)2MB的權(quán)重隨機(jī)存取存儲(chǔ)器124,其寬度為8192位并且具有2048列,而此權(quán)重隨機(jī)存取存儲(chǔ)器124所使用的晶粒面積大致為2.4平方毫米。不過(guò),本發(fā)明并不限于此。就一較佳實(shí)施例而言,此端口1702以多任務(wù)方式耦接至神經(jīng)處理單元126與緩沖器1704。這些神經(jīng)處理單元126與緩沖器1704透過(guò)此端口1702讀取并寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124。緩沖器1704還耦接至圖1的媒體緩存器118,如此,媒體緩存器118即可透過(guò)緩沖器1704讀取并寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124。此方式的優(yōu)點(diǎn)在于,當(dāng)神經(jīng)處理單元126正在讀取或?qū)懭霗?quán)重隨機(jī)存取存儲(chǔ)器124的時(shí)候,媒體緩存器118還可以寫(xiě)入緩沖器118或是從緩沖器118讀取(不過(guò)若是神經(jīng)處理單元126正在執(zhí)行,在較佳的情況下擱置這些神經(jīng)處理單元126,以避免當(dāng)緩沖器1704存取權(quán)重隨機(jī)存取存儲(chǔ)器124時(shí),存取權(quán)重隨機(jī)存取存儲(chǔ)器124)。此方式可以提升效能,特別是因?yàn)槊襟w緩存器118對(duì)于權(quán)重隨機(jī)存取存儲(chǔ)器124的讀取與寫(xiě)入相對(duì)上明顯小于神經(jīng)處理單元126對(duì)于權(quán)重隨機(jī)存取存儲(chǔ)器124的讀取與寫(xiě)入。舉例來(lái)說(shuō),在一實(shí)施例中,神經(jīng)處理單元126一次讀取/寫(xiě)入8192個(gè)位(一列),不過(guò),媒體緩存器118的寬度僅為256位,而每個(gè)MTNN指令1400僅寫(xiě)入兩個(gè)媒體緩存器118,即512位。因此,在架構(gòu)程序執(zhí)行十六個(gè)MTNN指令1400以填滿(mǎn)緩沖器1704的情況下,神經(jīng)處理單元126與存取權(quán)重隨機(jī)存取存儲(chǔ)器124的架構(gòu)程序間發(fā)生沖突的時(shí)間會(huì)少于大致全部時(shí)間的百分之六。在另一實(shí)施例中,指令轉(zhuǎn)譯器104將一個(gè)MTNN指令1400轉(zhuǎn)譯為兩個(gè)微指令105,而每個(gè)微指令會(huì)將單一個(gè)數(shù)據(jù)緩存器118寫(xiě)入緩沖器1704,如此,神經(jīng)處理單元126與架構(gòu)程序在存取權(quán)重隨機(jī)存取存儲(chǔ)器124時(shí)產(chǎn)生沖突的頻率還會(huì)進(jìn)一步減少。在包含緩沖器1704的實(shí)施例中,利用架構(gòu)程序?qū)懭霗?quán)重隨機(jī)存取存儲(chǔ)器124需要多個(gè)MTNN指令1400。一個(gè)或多個(gè)MTNN指令1400指定一函數(shù)1432以寫(xiě)入緩沖器1704中指定的數(shù)據(jù)塊,隨后一MTNN指令1400指定一函數(shù)1432指示神經(jīng)網(wǎng)絡(luò)單元121將緩沖器1704的內(nèi)容寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的一選定列。單一個(gè)數(shù)據(jù)塊的大小為媒體緩存器118的位數(shù)的兩倍,而這些數(shù)據(jù)塊會(huì)自然地排齊于緩沖器1704中。在一實(shí)施例中,每個(gè)指定函數(shù)1432以寫(xiě)入緩沖器1704指定數(shù)據(jù)塊的MTNN指令1400包含一位屏蔽(bitmask),其具有位對(duì)應(yīng)至緩沖器1704的各個(gè)數(shù)據(jù)塊。來(lái)自?xún)蓚€(gè)指定的來(lái)源緩存器118的數(shù)據(jù)被寫(xiě)入緩沖器1704的數(shù)據(jù)塊中,在位屏蔽內(nèi)的對(duì)應(yīng)位為被設(shè)定的各個(gè)數(shù)據(jù)塊。此實(shí)施例有助于權(quán)重隨機(jī)存取存儲(chǔ)器124的一列內(nèi)存在重復(fù)數(shù)據(jù)值的情形。舉例來(lái)說(shuō),為了將緩沖器1704(以及接下去的權(quán)重隨機(jī)存取存儲(chǔ)器124的一列)歸零,程序設(shè)計(jì)者可以將零值加載來(lái)源緩存器并且設(shè)定位屏蔽的所有位。此外,位屏蔽也可以讓程序設(shè)計(jì)者僅寫(xiě)入緩沖器1704中的選定數(shù)據(jù)塊,而使其它數(shù)據(jù)塊維持其先前的數(shù)據(jù)狀態(tài)。在包含緩沖器1704的實(shí)施例中,利用架構(gòu)程序讀取權(quán)重隨機(jī)存取存儲(chǔ)器124需要多個(gè)MFNN指令1500。初始的MFNN指令1500指定一函數(shù)1532將權(quán)重隨機(jī)存取單元124的一指定列加載緩沖器1704,隨后一個(gè)或多個(gè)MFNN指令1500指定一函數(shù)1532將緩沖器1704的一指定數(shù)據(jù)塊讀取至目的緩存器。單一個(gè)數(shù)據(jù)塊的大小即為媒體緩存器118的位數(shù),而這些數(shù)據(jù)塊會(huì)自然地排齊于緩沖器1704中。本發(fā)明的技術(shù)特征也可適用于其它實(shí)施例,如權(quán)重隨機(jī)存取存儲(chǔ)器124具有多個(gè)緩沖器1704,透過(guò)增加神經(jīng)處理單元126執(zhí)行時(shí)架構(gòu)程序的可存取數(shù)量,以進(jìn)一步減少神經(jīng)處理單元126與架構(gòu)程序間因存取權(quán)重隨機(jī)存取存儲(chǔ)器124所產(chǎn)生的沖突,而增加在神經(jīng)處理單元126不須存取權(quán)重隨機(jī)存取存儲(chǔ)器124的時(shí)頻周期內(nèi),改由緩沖器1704進(jìn)行存取的可能性。圖16描述雙端口數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,不過(guò),本發(fā)明并不限于此。本發(fā)明的技術(shù)特征也可適用于權(quán)重隨機(jī)存取存儲(chǔ)器124也為雙端口設(shè)計(jì)的其它實(shí)施例。此外,圖17中描述緩沖器搭配權(quán)重隨機(jī)存取存儲(chǔ)器124使用,不過(guò),本發(fā)明并不限于此。本發(fā)明的技術(shù)特征也可適用于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122具有一個(gè)類(lèi)似于緩沖器1704的相對(duì)應(yīng)緩沖器的實(shí)施例??蓜?dòng)態(tài)配置的神經(jīng)處理單元圖18為顯示圖1的可動(dòng)態(tài)配置的神經(jīng)處理單元126的方塊示意圖。圖18的神經(jīng)處理單元126類(lèi)似于圖2的神經(jīng)處理單元126。不過(guò),圖18的神經(jīng)處理單元126可動(dòng)態(tài)配置以運(yùn)作于兩個(gè)不同配置的其中之一。在第一個(gè)配置中,圖18的神經(jīng)處理單元126的運(yùn)作類(lèi)似于圖2的神經(jīng)處理單元126。也就是說(shuō),在第一個(gè)配置中,在此標(biāo)示為“寬的”配置或“單一個(gè)”配置,神經(jīng)處理單元126的算術(shù)邏輯單元204對(duì)單一個(gè)寬的數(shù)據(jù)文字以及單一個(gè)寬的權(quán)重文字(例如16個(gè)位)執(zhí)行運(yùn)算以產(chǎn)生單一個(gè)寬的結(jié)果。相較之下,在第二個(gè)配置中,即本文標(biāo)示為“窄的”配置或“雙數(shù)”配置,神經(jīng)處理單元126會(huì)對(duì)兩個(gè)窄的數(shù)據(jù)文字以及兩個(gè)窄的權(quán)重文字(例如8個(gè)位)執(zhí)行運(yùn)算分別產(chǎn)生兩個(gè)窄的結(jié)果。在一實(shí)施例中,神經(jīng)處理單元126的配置(寬或窄)由初始化神經(jīng)處理單元指令(例如位于前述圖20中地址0的指令)達(dá)成。另外,此配置也可以由一個(gè)具有函數(shù)1432指定來(lái)設(shè)定神經(jīng)處理單元設(shè)定的配置(寬或窄)的MTNN指令來(lái)達(dá)成。就一較佳實(shí)施例而言,程序存儲(chǔ)器129指令或確定配置(寬或窄)的MTNN指令會(huì)填滿(mǎn)配置緩存器。舉例來(lái)說(shuō),配置緩存器的輸出提供給算術(shù)邏輯單元204、啟動(dòng)函數(shù)單元212以及產(chǎn)生多任務(wù)緩存器控制信號(hào)213的邏輯?;旧希瑘D18的神經(jīng)處理單元126的組件與圖2中相同編號(hào)的組件會(huì)執(zhí)行類(lèi)似的功能,可從中取得參照以了解圖18的實(shí)施例。以下針對(duì)圖18的實(shí)施例包含其與圖2的不同處進(jìn)行說(shuō)明。圖18的神經(jīng)處理單元126包括兩個(gè)緩存器205A與205B、兩個(gè)三輸入多任務(wù)緩存器208A與208B、一個(gè)算術(shù)邏輯單元204、兩個(gè)累加器202A與202B、以及兩個(gè)啟動(dòng)函數(shù)單元212A與212B。緩存器205A/205B分別具有圖2的緩存器205的寬度的一半(如8個(gè)位)。緩存器205A/205B分別從權(quán)重隨機(jī)存取存儲(chǔ)器124接收一相對(duì)應(yīng)的窄權(quán)重文字206A/B206(例如8個(gè)位)并將其輸出203A/203B在一后續(xù)時(shí)頻周期提供至算術(shù)邏輯單元204的操作數(shù)選擇邏輯1898。神經(jīng)處理單元126處于寬配置的時(shí)候,緩存器205A/205B就會(huì)一起運(yùn)作以接收來(lái)自權(quán)重隨機(jī)存取存儲(chǔ)器124的一寬權(quán)重文字206A/206B(例如16個(gè)位),類(lèi)似于圖2的實(shí)施例中的緩存器205;神經(jīng)處理單元126處于窄配置的時(shí)候,緩存器205A/205B實(shí)際上就會(huì)是獨(dú)立運(yùn)作,各自接收來(lái)自權(quán)重隨機(jī)存取存儲(chǔ)器124的一窄權(quán)重文字206A/206B(例如8個(gè)位),如此,神經(jīng)處理單元126實(shí)際上就相當(dāng)于兩個(gè)窄的神經(jīng)處理單元各自獨(dú)立運(yùn)作。不過(guò),不論神經(jīng)處理單元126的配置態(tài)樣為何,權(quán)重隨機(jī)存取存儲(chǔ)器124的相同輸出位都會(huì)耦接并提供至緩存器205A/205B。舉例來(lái)說(shuō),神經(jīng)處理單元0的緩存器205A接收到字節(jié)0、神經(jīng)處理單元0的緩存器205B接收到字節(jié)1、神經(jīng)處理單元1的緩存器205A接收到字節(jié)2、神經(jīng)處理單元1的緩存器205B接收到字節(jié)3、依此類(lèi)推,神經(jīng)處理單元511的緩存器205B就會(huì)接收到字節(jié)1023。多任務(wù)緩存器208A/208B分別具有圖2的緩存器208的寬度的一半(如8個(gè)位)。多任務(wù)緩存器208A會(huì)在輸入207A、211A與1811A中選擇一個(gè)儲(chǔ)存至其緩存器并在后續(xù)時(shí)頻周期由輸出209A提供,多任務(wù)緩存器208B會(huì)在輸入207B、211B與1811B中選擇一個(gè)儲(chǔ)存至其緩存器并在后續(xù)時(shí)頻周期由輸出209B提供至操作數(shù)選擇邏輯1898。輸入207A從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收一窄數(shù)據(jù)文字(例如8個(gè)位),輸入207B從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收一窄數(shù)據(jù)文字。當(dāng)神經(jīng)處理單元126處于寬配置的時(shí)候,多任務(wù)緩存器208A/208B實(shí)際上就會(huì)是一起運(yùn)作以接收來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的一寬數(shù)據(jù)文字207A/207B(例如16個(gè)位),類(lèi)似于圖2的實(shí)施例中的多任務(wù)緩存器208;神經(jīng)處理單元126處于窄配置的時(shí)候,多任務(wù)緩存器208A/208B實(shí)際上就會(huì)是獨(dú)立運(yùn)作,各自接收來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的一窄數(shù)據(jù)文字207A/207B(例如8個(gè)位),如此,神經(jīng)處理單元126實(shí)際上就相當(dāng)于兩個(gè)窄的神經(jīng)處理單元各自獨(dú)立運(yùn)作。不過(guò),不論神經(jīng)處理單元126的配置態(tài)樣為何,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的相同輸出位都會(huì)耦接并提供至多任務(wù)緩存器208A/208B。舉例來(lái)說(shuō),神經(jīng)處理單元0的多任務(wù)緩存器208A接收到字節(jié)0、神經(jīng)處理單元0的多任務(wù)緩存器208B接收到字節(jié)1、神經(jīng)處理單元1的多任務(wù)緩存器208A接收到字節(jié)2、神經(jīng)處理單元1的多任務(wù)緩存器208B接收到字節(jié)3、依此類(lèi)推,神經(jīng)處理單元511的多任務(wù)緩存器208B就會(huì)接收到字節(jié)1023。輸入211A接收鄰近的神經(jīng)處理單元126的多任務(wù)緩存器208A的輸出209A,輸入211B接收鄰近的神經(jīng)處理單元126的多任務(wù)緩存器208B的輸出209B。輸入1811A接收鄰近神經(jīng)處理單元126的多任務(wù)緩存器208B的輸出209B,而輸入1811B接收鄰近神經(jīng)處理單元126的多任務(wù)緩存器208A的輸出209A。圖18所示的神經(jīng)處理單元126屬于圖1所示的N個(gè)神經(jīng)處理單元126的其中之一并標(biāo)示為神經(jīng)處理單元J。也就是說(shuō),神經(jīng)處理單元J是這N個(gè)神經(jīng)處理單元的一代表范例。就一較佳實(shí)施例而言,神經(jīng)處理單元J的多任務(wù)緩存器208A輸入211A會(huì)接收范例J-1的神經(jīng)處理單元126的多任務(wù)緩存器208A輸出209A,而神經(jīng)處理單元J的多任務(wù)緩存器208A輸入1811A會(huì)接收范例J-1的神經(jīng)處理單元126的多任務(wù)緩存器208B輸出209B,并且神經(jīng)處理單元J的多任務(wù)緩存器208A輸出209A會(huì)同時(shí)提供至范例J+1的神經(jīng)處理單元126的多任務(wù)緩存器208A輸入211A以及范例J的神經(jīng)處理單元126的多任務(wù)緩存器208B輸入211B;神經(jīng)處理單元J的多任務(wù)緩存器208B的輸入211B會(huì)接收范例J-1的神經(jīng)處理單元126的多任務(wù)緩存器208B輸出209B,而神經(jīng)處理單元J的多任務(wù)緩存器208B的輸入1811B會(huì)接收范例J的神經(jīng)處理單元126的多任務(wù)緩存器208A輸出209A,并且,神經(jīng)處理單元J的多任務(wù)緩存器208B的輸出209B會(huì)同時(shí)提供至范例J+1的神經(jīng)處理單元126的多任務(wù)緩存器208A輸入1811A以及范例J+1的神經(jīng)處理單元126的多任務(wù)緩存器208B輸入211B??刂戚斎?13控制多任務(wù)緩存器208A/208B中的每一個(gè),從這三個(gè)輸入中選擇其一儲(chǔ)存至其相對(duì)應(yīng)的緩存器,并在后續(xù)步驟提供至相對(duì)應(yīng)的輸出209A/209B。當(dāng)神經(jīng)處理單元126被指示要從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122加載一列時(shí)(例如圖20中地址1的乘法累加指令,詳如后述),無(wú)論此神經(jīng)處理單元126是處于寬配置或是窄配置,控制輸入213會(huì)控制多任務(wù)緩存器208A/208B中的每一個(gè)多任務(wù)緩存器,從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的選定列的相對(duì)應(yīng)窄文字中選擇一相對(duì)應(yīng)的窄數(shù)據(jù)文字207A/207B(如8位)。當(dāng)神經(jīng)處理單元126接收指示需要對(duì)先前接收的數(shù)據(jù)列數(shù)值進(jìn)行旋轉(zhuǎn)時(shí)(例如圖20中地址2的乘法累加旋轉(zhuǎn)指令,詳如后述),若是神經(jīng)處理單元126是處于窄配置,控制輸入213就會(huì)控制多任務(wù)緩存器208A/208B中每一個(gè)多任務(wù)緩存器選擇相對(duì)應(yīng)的輸入1811A/1811B。在此情況下,多任務(wù)緩存器208A/208B實(shí)際上會(huì)是獨(dú)立運(yùn)作而使神經(jīng)處理單元126實(shí)際上就如同兩個(gè)獨(dú)立的窄神經(jīng)處理單元。如此,N個(gè)神經(jīng)處理單元126的多任務(wù)緩存器208A與208B共同運(yùn)作就會(huì)如同一2N個(gè)窄文字的旋轉(zhuǎn)器,這部分在后續(xù)對(duì)應(yīng)于圖19處有更詳細(xì)的說(shuō)明。當(dāng)神經(jīng)處理單元126接收指示需要對(duì)先前接收的數(shù)據(jù)列數(shù)值進(jìn)行旋轉(zhuǎn)時(shí),若是神經(jīng)處理單元126是處于寬配置,控制輸入213就會(huì)控制多任務(wù)緩存器208A/208B中每一個(gè)多任務(wù)緩存器選擇相對(duì)應(yīng)輸入211A/211B。在此情況下,多任務(wù)緩存器208A/208B會(huì)共同運(yùn)作而實(shí)際上就好像這個(gè)神經(jīng)處理單元126是單一個(gè)寬神經(jīng)處理單元126。如此,N個(gè)神經(jīng)處理單元126的多任務(wù)緩存器208A與208B共同運(yùn)作就會(huì)如同一N個(gè)寬文字的旋轉(zhuǎn)器,類(lèi)似對(duì)應(yīng)于圖3所描述的方式。算術(shù)邏輯單元204包括操作數(shù)選擇邏輯1898、一個(gè)寬乘法器242A、一個(gè)窄乘法器242B、一個(gè)寬雙輸入多工器1896A,一個(gè)窄雙輸入多工器1896B,一個(gè)寬加法器244A與一個(gè)窄加法器244B。實(shí)際上,此算術(shù)邏輯單元204可理解為包括操作數(shù)選擇邏輯、一個(gè)寬算術(shù)邏輯單元204A(包括前述寬乘法器242A、前述寬多工器1896A與前述寬加法器244A)與一個(gè)窄算術(shù)邏輯單元204B(包括前述窄乘法器242B、前述窄多工器1896B與前述窄加法器244B)。就一較佳實(shí)施例而言,寬乘法器242A可將兩個(gè)寬文字相乘,類(lèi)似于圖2的乘法器242,例如一個(gè)16位乘16位的乘法器。窄乘法器242B可將兩個(gè)窄文字相乘,例如一個(gè)8位乘8位的乘法器以產(chǎn)生一個(gè)16位的結(jié)果。神經(jīng)處理單元126處于窄配置時(shí),透過(guò)操作數(shù)選擇邏輯1898的協(xié)助,即可充分利用寬乘法器242A,將其作為一個(gè)窄乘法器使兩個(gè)窄文字相乘,如此神經(jīng)處理單元126就會(huì)如同兩個(gè)有效運(yùn)作的窄神經(jīng)處理單元。就一較佳實(shí)施例而言,寬加法器244A會(huì)將寬多工器1896A的輸出與寬累加器202A的輸出217A相加已產(chǎn)生一總數(shù)215A供寬累加器202A使用,其運(yùn)作類(lèi)似于圖2的加法器244。窄加法器244B會(huì)將窄多工器1896B的輸出與窄累加器202B輸出217B相加以產(chǎn)生一總數(shù)215B供窄累加器202B使用。在一實(shí)施例中,窄累加器202B具有28位的寬度,以避免在進(jìn)行多達(dá)1024個(gè)16位乘積的累加運(yùn)算時(shí)會(huì)喪失準(zhǔn)確度。神經(jīng)處理單元126處于寬配置時(shí),窄乘法器244B、窄累加器202B與窄啟動(dòng)函數(shù)單元212B最好是處于不啟動(dòng)狀態(tài)以降低能量耗損。操作數(shù)選擇邏輯1898會(huì)從209A、209B、203A與203B中選擇操作數(shù)提供至算術(shù)邏輯單元204的其它組件,詳如后述。就一較佳實(shí)施例而言,操作數(shù)選擇邏輯1898也具有其它功能,例如執(zhí)行帶符號(hào)數(shù)值數(shù)據(jù)文字與權(quán)重文字的符號(hào)延展。舉例來(lái)說(shuō),若是神經(jīng)處理單元126是處于窄配置,操作數(shù)選擇邏輯1898會(huì)將窄數(shù)據(jù)文字與權(quán)重文字的符號(hào)延展至寬文字的寬度,然后才提供給寬乘法器242A。類(lèi)似地,若是算術(shù)邏輯單元204接受指示要傳遞一個(gè)窄數(shù)據(jù)/權(quán)重文字(利用寬多工器1896A跳過(guò)寬乘法器242A),操作數(shù)選擇邏輯1898會(huì)將窄數(shù)據(jù)文字與權(quán)重文字的符號(hào)延展至寬文字的寬度,然后才提供給寬加法器244A。就一較佳實(shí)施例而言,此執(zhí)行符號(hào)延展功能的邏輯也存在于圖2的神經(jīng)處理單元126的算術(shù)邏輯運(yùn)算204的內(nèi)部。寬多工器1896A接收寬乘法器242A的輸出與來(lái)自操作數(shù)選擇邏輯1898的一操作數(shù),并從這些輸入中選擇其一提供給寬加法器244A,窄多工器1896B接收窄乘法器242B的輸出與來(lái)自操作數(shù)選擇邏輯1898的一操作數(shù),并從這些輸入中選擇其一提供給窄加法器244B。操作數(shù)選擇邏輯1898會(huì)依據(jù)神經(jīng)處理單元126的配置以及算術(shù)邏輯單元204將要執(zhí)行的算術(shù)和/或邏輯運(yùn)算提供操作數(shù),此算術(shù)/邏輯運(yùn)算依據(jù)神經(jīng)處理單元126執(zhí)行的指令所指定的函數(shù)來(lái)決定。舉例來(lái)說(shuō),若是指令指示算術(shù)邏輯單元204執(zhí)行一乘法累加運(yùn)算而神經(jīng)處理單元126處于寬配置,操作數(shù)選擇邏輯1898就將輸出209A與209B串接構(gòu)成的一寬文字提供至寬乘法器242A的一輸入,而將輸出203A與203B串接構(gòu)成的一寬文字提供至另一輸入,而窄乘法器242B則是不啟動(dòng),如此,神經(jīng)處理單元126的運(yùn)作就會(huì)如同單一個(gè)類(lèi)似于圖2的神經(jīng)處理單元126的寬神經(jīng)處理單元126。不過(guò),若是指令指示算術(shù)邏輯單元執(zhí)行一乘法累加運(yùn)算并且神經(jīng)處理單元126是處于窄配置,操作數(shù)選擇邏輯1898就將一延展后或擴(kuò)張后版本的窄數(shù)據(jù)文字209A提供至寬乘法器242A的一輸入,而將延展后版本的窄權(quán)重文字203A提供至另一輸入;此外,操作數(shù)選擇邏輯1898會(huì)將窄數(shù)據(jù)文字209B提供至窄乘法器242B的一輸入,而將窄權(quán)重文字203B提供至另一輸入。為達(dá)成如前所述對(duì)窄文字進(jìn)行延展或擴(kuò)張的運(yùn)算,若是窄文字帶有符號(hào),操作數(shù)選擇邏輯1898就會(huì)對(duì)窄文字進(jìn)行符號(hào)延展;若是窄文字不帶有符號(hào),操作數(shù)選擇邏輯1898就會(huì)在窄文字加入上方零值位。在另一范例中,若是神經(jīng)處理單元126處于寬配置并且指令指示算術(shù)邏輯單元204執(zhí)行一權(quán)重文字的累加運(yùn)算,寬乘法器242A就會(huì)被跳過(guò),而操作數(shù)選擇邏輯1898就會(huì)將輸出203A與203B串接提供至寬多工器1896A以提供給寬加法器244A。不過(guò),若是神經(jīng)處理單元126處于窄配置并且指令指示算術(shù)邏輯單元204執(zhí)行一權(quán)重文字的累加運(yùn)算,寬乘法器242A就會(huì)被跳過(guò),而操作數(shù)選擇邏輯1898就會(huì)將一延展后版本的輸出203A提供至寬多工器1896A以提供給寬加法器244A;此外,窄乘法器242B會(huì)被跳過(guò),操作數(shù)選擇邏輯1898會(huì)將延展后版本的輸出203B提供至窄多工器1896B以提供給窄加法器244B。在另一范例中,若是神經(jīng)處理單元126處于寬配置并且指令指示算術(shù)邏輯單元204執(zhí)行一數(shù)據(jù)文字的累加運(yùn)算,寬乘法器242A就會(huì)被跳過(guò),而操作數(shù)選擇邏輯1898就會(huì)將輸出209A與209B串接提供至寬多工器1896A以提供給寬加法器244A。不過(guò),若是神經(jīng)處理單元126處于窄配置并且指令指示算術(shù)邏輯單元204執(zhí)行一數(shù)據(jù)文字的累加運(yùn)算,寬乘法器242A就會(huì)被跳過(guò),而操作數(shù)選擇邏輯1898就會(huì)將一延展后版本的輸出209A提供至寬多工器1896A以提供給寬加法器244A;此外,窄乘法器242B會(huì)被跳過(guò),操作數(shù)選擇邏輯1898會(huì)將延展后版本的輸出209B提供至窄多工器1896B以提供給窄加法器244B。權(quán)重/數(shù)據(jù)文字的累加計(jì)算有助于平均運(yùn)算,平均運(yùn)算可用如影像處理在內(nèi)的某些人工神經(jīng)網(wǎng)絡(luò)應(yīng)用的共源(pooling)層。就一較佳實(shí)施例而言,神經(jīng)處理單元126還包括第二寬多工器(未圖示),用以跳過(guò)寬加法器244A,以利于將寬配置下的寬數(shù)據(jù)/權(quán)重文字或是窄配置下的延展后的窄數(shù)據(jù)/權(quán)重文字加載寬累加器202A,以及第二窄多工器(未圖示),用以跳過(guò)窄加法器244B,以利于將窄配置下的窄數(shù)據(jù)/權(quán)重文字加載窄累加器202B。就一較佳實(shí)施例而言,此算術(shù)邏輯單元204還包括寬與窄的比較器/多工器組合(未圖示),此比較器/多工器組合接收相對(duì)應(yīng)的累加器數(shù)值217A/217B與相對(duì)應(yīng)的多工器1896A/1896B輸出,藉以在累加器數(shù)值217A/217B與一數(shù)據(jù)/權(quán)重文字209A/209B/203A/203B間選擇最大值,某些人工神經(jīng)網(wǎng)絡(luò)應(yīng)用的共源(pooling)層使用此運(yùn)算,這部分在后續(xù)章節(jié),例如對(duì)應(yīng)于圖27與圖28處,會(huì)有更詳細(xì)的說(shuō)明。此外,操作數(shù)選擇邏輯1898用以提供數(shù)值零的操作數(shù)(用于加零的加法運(yùn)算或是用以清除累加器),并提供數(shù)值一的操作數(shù)(用于乘一的乘法運(yùn)算)。窄啟動(dòng)函數(shù)單元212B接收窄累加器202B的輸出217B并對(duì)其執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生窄結(jié)果133B,寬啟動(dòng)函數(shù)單元212A接收寬累加器202A的輸出217A并對(duì)其執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生寬結(jié)果133A。神經(jīng)處理單元126處于窄配置時(shí),寬啟動(dòng)函數(shù)單元212A會(huì)依此配置理解累加器202A的輸出217A并對(duì)其執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生窄結(jié)果,如8位,這部分在后續(xù)章節(jié)如對(duì)應(yīng)于圖29A至圖30處有更詳細(xì)的說(shuō)明。如前所述,單一個(gè)神經(jīng)處理單元126在處于窄配置時(shí)實(shí)際上可以作為兩個(gè)窄神經(jīng)處理單元來(lái)運(yùn)作,因此,對(duì)于較小的文字而言,相較于寬配置時(shí),大致上可以提供多達(dá)兩倍的處理能力。舉例來(lái)說(shuō),假定神經(jīng)網(wǎng)絡(luò)層具有1024個(gè)神經(jīng)元,而每個(gè)神經(jīng)元從前一層接收1024個(gè)窄輸入(并具有窄權(quán)重文字),如此就會(huì)產(chǎn)生一百萬(wàn)個(gè)連結(jié)。對(duì)于具有512個(gè)神經(jīng)處理單元126的神經(jīng)網(wǎng)絡(luò)單元121而言,在窄配置下(相當(dāng)于1024個(gè)窄神經(jīng)處理單元),雖然處理的是窄文字而非寬文字,不過(guò)其所能處理的連結(jié)數(shù)可以達(dá)到寬配置的四倍(一百萬(wàn)個(gè)連結(jié)對(duì)上256K個(gè)連結(jié)),而所需的時(shí)間大致為一半(約1026個(gè)時(shí)頻周期對(duì)上514個(gè)時(shí)頻周期)。在一實(shí)施例中,圖18的動(dòng)態(tài)配置神經(jīng)處理單元126包括類(lèi)似于多任務(wù)緩存器208A與208B的三輸入多任務(wù)緩存器以取代緩存器205A與205B,以構(gòu)成一旋轉(zhuǎn)器,處理由權(quán)重隨機(jī)存取存儲(chǔ)器124接收的權(quán)重文字列,此運(yùn)作部分類(lèi)似于圖7的實(shí)施例所描述的方式但應(yīng)用于圖18所述的動(dòng)態(tài)配置中。圖19為一方塊示意圖,顯示依據(jù)圖18的實(shí)施例,利用圖1的神經(jīng)網(wǎng)絡(luò)單元121的N個(gè)神經(jīng)處理單元126的2N個(gè)多任務(wù)緩存器208A/208B,對(duì)于由圖1的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122取得的一列數(shù)據(jù)文字207執(zhí)行如同一旋轉(zhuǎn)器的運(yùn)作。在圖19的實(shí)施例中,N是512,神經(jīng)處理單元121具有1024個(gè)多任務(wù)緩存器208A/208B,標(biāo)示為0至511,分別對(duì)應(yīng)至512個(gè)神經(jīng)處理單元126以及實(shí)際上1024個(gè)窄神經(jīng)處理單元。神經(jīng)處理單元126內(nèi)的兩個(gè)窄神經(jīng)處理單元分別標(biāo)示為A與B,在每個(gè)多任務(wù)緩存器208中,其相對(duì)應(yīng)的窄神經(jīng)處理單元亦加以標(biāo)示。進(jìn)一步來(lái)說(shuō),標(biāo)示為0的神經(jīng)處理單元126的多任務(wù)緩存器208A標(biāo)示為0-A,標(biāo)示為0的神經(jīng)處理單元126的多任務(wù)緩存器208B標(biāo)示為0-B,標(biāo)示為1的神經(jīng)處理單元126的多任務(wù)緩存器208A標(biāo)示為1-A,標(biāo)示為1的神經(jīng)處理單元126的多任務(wù)緩存器208B標(biāo)示為1-B,標(biāo)示為511的神經(jīng)處理單元126的多任務(wù)緩存器208A標(biāo)示為511-A,而標(biāo)示為511的神經(jīng)處理單元126的多任務(wù)緩存器208B標(biāo)示為511-B,其數(shù)值亦對(duì)應(yīng)至后續(xù)圖21所述的窄神經(jīng)處理單元。每個(gè)多任務(wù)緩存器208A在數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的D列的其中一列中接收其相對(duì)應(yīng)的窄數(shù)據(jù)文字207A,而每個(gè)多任務(wù)緩存器208B在數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的D列的其中一列中接收其相對(duì)應(yīng)的窄數(shù)據(jù)文字207B。也就是說(shuō),多任務(wù)緩存器0-A接收數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列的窄數(shù)據(jù)文字0,多任務(wù)緩存器0-B接收數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列的窄數(shù)據(jù)文字1,多任務(wù)緩存器1-A接收數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列的窄數(shù)據(jù)文字2,多任務(wù)緩存器1-B接收數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列的窄數(shù)據(jù)文字3,依此類(lèi)推,多任務(wù)緩存器511-A接收數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列的窄數(shù)據(jù)文字1022,而多任務(wù)緩存器511-B則是接收數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列的窄數(shù)據(jù)文字1023。此外,多任務(wù)緩存器1-A接收多任務(wù)緩存器0-A的輸出209A作為其輸入211A,多任務(wù)緩存器1-B接收多任務(wù)緩存器0-B的輸出209B作為其輸入211B,依此類(lèi)推,多任務(wù)緩存器511-A接收多任務(wù)緩存器510-A的輸出209A作為其輸入211A,多任務(wù)緩存器511-B接收多任務(wù)緩存器510-B的輸出209B作為其輸入211B,并且多任務(wù)緩存器0-A接收多任務(wù)緩存器511-A的輸出209A作為其輸入211A,多任務(wù)緩存器0-B接收多任務(wù)緩存器511-B的輸出209B作為其輸入211B。每個(gè)多任務(wù)緩存器208A/208B都會(huì)接收控制輸入213以控制其選擇數(shù)據(jù)文字207A/207B或是旋轉(zhuǎn)后輸入211A/211B或是旋轉(zhuǎn)后輸入1811A/1811B。最后,多任務(wù)緩存器1-A接收多任務(wù)緩存器0-B的輸出209B作為其輸入1811A,多任務(wù)緩存器1-B接收多任務(wù)緩存器1-A的輸出209A作為其輸入1811B,依此類(lèi)推,多任務(wù)緩存器511-A接收多任務(wù)緩存器510-B的輸出209B作為其輸入1811A,多任務(wù)緩存器511-B接收多任務(wù)緩存器511-A的輸出209A作為其輸入1811B,并且多任務(wù)緩存器0-A接收多任務(wù)緩存器511-B的輸出209B作為其輸入1811A,多任務(wù)緩存器0-B接收多任務(wù)緩存器0-A的輸出209A作為其輸入1811B。每個(gè)多任務(wù)緩存器208A/208B都會(huì)接收控制輸入213以控制其選擇數(shù)據(jù)文字207A/207B或是旋轉(zhuǎn)后輸入211A/211B或是旋轉(zhuǎn)后輸入1811A/1811B。在一運(yùn)算模式中,在第一時(shí)頻周期,控制輸入213會(huì)控制每個(gè)多任務(wù)緩存器208A/208B選擇數(shù)據(jù)文字207A/207B儲(chǔ)存至緩存器供后續(xù)提供至算術(shù)邏輯單元204;而在后續(xù)時(shí)頻周期(例如前述的M-1時(shí)頻周期),控制輸入213會(huì)控制每個(gè)多任務(wù)緩存器208A/208B選擇旋轉(zhuǎn)后輸入1811A/1811B儲(chǔ)存至緩存器供后續(xù)提供至算術(shù)邏輯單元204,這部分在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。圖20為一表格,顯示一個(gè)儲(chǔ)存于圖1的神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129并由該神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行的程序,而此神經(jīng)網(wǎng)絡(luò)單元121具有如圖18的實(shí)施例所示的神經(jīng)處理單元126。圖20的范例程序類(lèi)似于圖4的程序。以下針對(duì)其差異進(jìn)行說(shuō)明。位于地址0的初始化神經(jīng)處理單元指令指定神經(jīng)處理單元126將會(huì)進(jìn)入窄配置。此外,如圖中所示,位于地址2的乘法累加旋轉(zhuǎn)指令指定一數(shù)值為1023的計(jì)數(shù)值并需要1023個(gè)時(shí)頻周期。這是因?yàn)閳D20的范例中假定在一層中實(shí)際上具有1024個(gè)窄(如8位)神經(jīng)元(即神經(jīng)處理單元),每個(gè)窄神經(jīng)元具有1024個(gè)來(lái)自前一層的1024個(gè)神經(jīng)元的連結(jié)輸入,因此總共有1024K個(gè)連結(jié)。每個(gè)神經(jīng)元從每個(gè)連結(jié)輸入接收一個(gè)8位數(shù)據(jù)值并將此8位數(shù)據(jù)值乘上一個(gè)適當(dāng)?shù)?位權(quán)重值。圖21為顯示神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行圖20的程序的時(shí)序圖,此神經(jīng)網(wǎng)絡(luò)單元121具有如圖18所示的神經(jīng)處理單元126執(zhí)行于窄配置。圖21的時(shí)序圖類(lèi)似于圖5的時(shí)序圖。以下針對(duì)其差異進(jìn)行說(shuō)明。在圖21的時(shí)序圖中,這些神經(jīng)處理單元126會(huì)處于窄配置,這是因?yàn)槲挥诘刂?的初始化神經(jīng)處理單元指令將其初始化為窄配置。所以,這512個(gè)神經(jīng)處理單元126實(shí)際上運(yùn)作起來(lái)就如同1024個(gè)窄神經(jīng)處理單元(或神經(jīng)元),這1024個(gè)窄神經(jīng)處理單元在字段內(nèi)以神經(jīng)處理單元0-A與神經(jīng)處理單元0-B(標(biāo)示為0的神經(jīng)處理單元126的兩個(gè)窄神經(jīng)處理單元),神經(jīng)處理單元1-A與神經(jīng)處理單元1-B(標(biāo)示為1的神經(jīng)處理單元126的兩個(gè)窄神經(jīng)處理單元),依此類(lèi)推直到神經(jīng)處理單元511-A與神經(jīng)處理單元511-B(標(biāo)示為511的神經(jīng)處理單元126的兩個(gè)窄神經(jīng)處理單元),加以指明。為簡(jiǎn)化說(shuō)明,圖中僅顯示窄神經(jīng)處理單元0-A、0-B與511-B的運(yùn)算。因?yàn)槲挥诘刂?的乘法累加旋轉(zhuǎn)指令所指定的計(jì)數(shù)值為1023,而需要1023個(gè)時(shí)頻周期進(jìn)行運(yùn)作因此,圖21的時(shí)序圖的列數(shù)包括多達(dá)1026個(gè)時(shí)頻周期。在時(shí)頻周期0,這1024個(gè)神經(jīng)處理單元的每一個(gè)都會(huì)執(zhí)行圖4的初始化指令,即圖5所示指派零值至累加器202的運(yùn)作。在時(shí)頻周期1,這1024個(gè)窄神經(jīng)處理單元的每一個(gè)都會(huì)執(zhí)行圖20中位于地址1的乘法累加指令。如圖中所示,窄神經(jīng)處理單元0-A將累加器202A數(shù)值(即零)加上數(shù)據(jù)隨機(jī)存取單元122的列17窄文字0與權(quán)重隨機(jī)存取單元124的列0窄文字0的乘積;窄神經(jīng)處理單元0-B將累加器202B數(shù)值(即零)加上數(shù)據(jù)隨機(jī)存取單元122的列17窄文字1與權(quán)重隨機(jī)存取單元124的列0窄文字1的乘積;依此類(lèi)推直到窄神經(jīng)處理單元511-B將累加器202B數(shù)值(即零)加上數(shù)據(jù)隨機(jī)存取單元122的列17窄文字1023與權(quán)重隨機(jī)存取單元124的列0窄文字1023的乘積。在時(shí)頻周期2,這1024個(gè)窄神經(jīng)處理單元的每一個(gè)都會(huì)執(zhí)行圖20中位于地址2的乘法累加旋轉(zhuǎn)指令的第一次迭代。如圖中所示,窄神經(jīng)處理單元0-A將累加器202A數(shù)值217A加上由窄神經(jīng)處理單元511-B的多任務(wù)緩存器208B輸出209B所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811A(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字1023)與權(quán)重隨機(jī)存取單元124的列1窄文字0的乘積;窄神經(jīng)處理單元0-B將累加器202B數(shù)值217B加上由窄神經(jīng)處理單元0-A的多任務(wù)緩存器208A輸出209A所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811B(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字0)與權(quán)重隨機(jī)存取單元124的列1窄文字1的乘積;依此類(lèi)推,直到窄神經(jīng)處理單元511-B將累加器202B數(shù)值217B加上由窄神經(jīng)處理單元511-A的多任務(wù)緩存器208A輸出209A所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811B(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字1022)與權(quán)重隨機(jī)存取單元124的列1窄文字1023的乘積。在時(shí)頻周期3,這1024個(gè)窄神經(jīng)處理單元的每一個(gè)都會(huì)執(zhí)行圖20中位于地址2的乘法累加旋轉(zhuǎn)指令的第二次迭代。如圖中所示,窄神經(jīng)處理單元0-A將累加器202A數(shù)值217A加上由窄神經(jīng)處理單元511-B的多任務(wù)緩存器208B輸出209B所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811A(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字1022)與權(quán)重隨機(jī)存取單元124的列2窄文字0的乘積;窄神經(jīng)處理單元0-B將累加器202B數(shù)值217B加上由窄神經(jīng)處理單元0-A的多任務(wù)緩存器208A輸出209A所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811B(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字1023)與權(quán)重隨機(jī)存取單元124的列2窄文字1的乘積;依此類(lèi)推,直到窄神經(jīng)處理單元511-B將累加器202B數(shù)值217B加上由窄神經(jīng)處理單元511-A的多任務(wù)緩存器208A輸出209A所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811B(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字1021)與權(quán)重隨機(jī)存取單元124的列2窄文字1023的乘積。如圖21所示,此運(yùn)算會(huì)在后續(xù)1021個(gè)時(shí)頻周期持續(xù)進(jìn)行,直到以下所述的時(shí)頻周期1024。在時(shí)頻周期1024,這1024個(gè)窄神經(jīng)處理單元的每一個(gè)都會(huì)執(zhí)行圖20中位于地址2的乘法累加旋轉(zhuǎn)指令的第1023次迭代。如圖中所示,窄神經(jīng)處理單元0-A將累加器202A數(shù)值217A加上由窄神經(jīng)處理單元511-B的多任務(wù)緩存器208B輸出209B所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811A(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字1)與權(quán)重隨機(jī)存取單元124的列1023窄文字0的乘積;窄神經(jīng)處理單元0-B將累加器202B數(shù)值217B加上由窄神經(jīng)處理單元0-A的多任務(wù)緩存器208A輸出209A所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811B(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字2)與權(quán)重隨機(jī)存取單元124的列1023窄文字1的乘積;依此類(lèi)推,直到窄神經(jīng)處理單元511-B將累加器202B數(shù)值217B加上由窄神經(jīng)處理單元511-A的多任務(wù)緩存器208A輸出209A所接收的旋轉(zhuǎn)后窄數(shù)據(jù)文字1811B(也就是由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所接收的窄數(shù)據(jù)文字0)與權(quán)重隨機(jī)存取單元124的列1023窄文字1023的乘積。在時(shí)頻周期1025,這1024個(gè)窄神經(jīng)處理單元中的每一個(gè)的啟動(dòng)函數(shù)單元212A/212B會(huì)執(zhí)行圖20中位于地址3的啟動(dòng)函數(shù)指令。最后,在時(shí)頻周期1026,這1024個(gè)窄神經(jīng)處理單元中的每一個(gè)會(huì)將其窄結(jié)果133A/133B寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列16中的相對(duì)應(yīng)窄文字,以執(zhí)行圖20中位于地址4的寫(xiě)入啟動(dòng)函數(shù)單元指令。也即,神經(jīng)處理單元0-A的窄結(jié)果133A會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的窄文字0,神經(jīng)處理單元0-B的窄結(jié)果133B會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的窄文字1,依此類(lèi)推,直到神經(jīng)處理單元511-B的窄結(jié)果133B會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的窄文字1023。圖22以方塊圖顯示前述對(duì)應(yīng)于圖21的運(yùn)算。圖22為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元121的方塊示意圖,此神經(jīng)網(wǎng)絡(luò)單元121具有如圖18所示的神經(jīng)處理單元126以執(zhí)行圖20的程序。此神經(jīng)網(wǎng)絡(luò)單元121包括512個(gè)神經(jīng)處理單元126,即1024個(gè)窄神經(jīng)處理單元,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,以及權(quán)重隨機(jī)存取存儲(chǔ)器124,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收其地址輸入123,權(quán)重隨機(jī)存取存儲(chǔ)器124接收其地址輸入125。雖然圖中并未顯示,不過(guò),在時(shí)頻周期0,這1024個(gè)窄神經(jīng)處理單元都會(huì)執(zhí)行圖20的初始化指令。如圖中所示,在時(shí)頻周期1,列17的1024個(gè)8位數(shù)據(jù)文字會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出并提供至這1024個(gè)窄神經(jīng)處理單元。在時(shí)頻周期1至1024,列0至1023的1024個(gè)8位權(quán)重文字會(huì)分別從權(quán)重隨機(jī)存取存儲(chǔ)器124讀出并提供至這1024個(gè)窄神經(jīng)處理單元。雖然圖中并未顯示,不過(guò),在時(shí)頻周期1,這1024個(gè)窄神經(jīng)處理單元會(huì)對(duì)加載的數(shù)據(jù)文字與權(quán)重文字執(zhí)行其相對(duì)應(yīng)的乘法累加運(yùn)算。在時(shí)頻周期2至1024,這1024個(gè)窄神經(jīng)處理單元的多任務(wù)緩存器208A/208B的運(yùn)作如同一個(gè)1024個(gè)8位文字的旋轉(zhuǎn)器,會(huì)將先前加載數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列17的數(shù)據(jù)文字旋轉(zhuǎn)至鄰近的窄神經(jīng)處理單元,而這些窄神經(jīng)處理單元會(huì)對(duì)相對(duì)應(yīng)的旋轉(zhuǎn)后數(shù)據(jù)文字以及由權(quán)重隨機(jī)存取存儲(chǔ)器124加載的相對(duì)應(yīng)窄權(quán)重文字執(zhí)行乘法累加運(yùn)算。雖然圖中并未顯示,在時(shí)頻周期1025,這1024個(gè)窄啟動(dòng)函數(shù)單元212A/212B會(huì)執(zhí)行啟動(dòng)指令。在時(shí)頻周期1026,這1024個(gè)窄神經(jīng)處理單元會(huì)將其相對(duì)應(yīng)的1024個(gè)8位結(jié)果133A/133B寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列16。由此可以發(fā)現(xiàn),相較于圖2的實(shí)施例,圖18的實(shí)施例讓程序設(shè)計(jì)者具有彈性可以選擇使用寬數(shù)據(jù)與權(quán)重文字(如16位)以及窄數(shù)據(jù)與權(quán)重文字(如8位)執(zhí)行計(jì)算,以因應(yīng)特定應(yīng)用下對(duì)于準(zhǔn)確度的需求。從一個(gè)面向來(lái)看,對(duì)于窄數(shù)據(jù)的應(yīng)用而言,圖18的實(shí)施例相較于圖2的實(shí)施例可提供兩倍的效能,但必須增加額外的窄組件(例如多任務(wù)緩存器208B、緩存器205B、窄算術(shù)邏輯單元204B、窄累加器202B、窄啟動(dòng)函數(shù)單元212B)作為代價(jià),這些額外的窄組件會(huì)使神經(jīng)處理單元126增加約50%的面積。三模神經(jīng)處理單元圖23為顯示圖1的可動(dòng)態(tài)配置的神經(jīng)處理單元126的另一實(shí)施例的方塊示意圖。圖23的神經(jīng)處理單元126不但可用于寬配置與窄配置,還可用以第三種配置,在此稱(chēng)為“漏斗(funnel)”配置。圖23的神經(jīng)處理單元126類(lèi)似于圖18的神經(jīng)處理單元126。不過(guò),圖18中的寬加法器244A在圖23的神經(jīng)處理單元126中由一個(gè)三輸入寬加法器2344A所取代,此三輸入寬加法器2344A接收一第三加數(shù)2399,其為窄多工器1896B的輸出的一延伸版本。具有圖23的神經(jīng)處理單元的神經(jīng)網(wǎng)絡(luò)單元所執(zhí)行的程序類(lèi)似于圖20的程序。不過(guò),其中位于地址0的初始化神經(jīng)處理單元指令會(huì)將這些神經(jīng)處理單元126初始化為漏斗配置,而非窄配置。此外,位于地址2的乘法累加旋轉(zhuǎn)指令的計(jì)數(shù)值為511而非1023。處于漏斗配置時(shí),神經(jīng)處理單元126的運(yùn)作類(lèi)似于處于窄配置,當(dāng)執(zhí)行如圖20中地址1的乘法累加指令時(shí),神經(jīng)處理單元126會(huì)接收兩個(gè)窄數(shù)據(jù)文字207A/207B與兩個(gè)窄權(quán)重文字206A/206B;寬乘法器242A會(huì)將數(shù)據(jù)文字209A與權(quán)重文字203A相乘以產(chǎn)生寬多工器1896A選擇的乘積246A;窄乘法器242B會(huì)將數(shù)據(jù)文字209B與權(quán)重文字203B相乘以產(chǎn)生窄多工器1896B選擇的乘積246B。不過(guò),寬加法器2344A會(huì)將乘積246A(由寬多工器1896A選擇)以及乘積246B/2399(由寬多工器1896B選擇)都與寬累加器202A輸出217A相加,而窄加法器244B與窄累加器202B則是不啟動(dòng)。此外,處于漏斗配置而執(zhí)行如圖20中地址2的乘法累加旋轉(zhuǎn)指令時(shí),控制輸入213會(huì)使多任務(wù)緩存器208A/208B旋轉(zhuǎn)兩個(gè)窄文字(如16位),也就是說(shuō),多任務(wù)緩存器208A/208B會(huì)選擇其相對(duì)應(yīng)輸入211A/211B,就如同處于寬配置一樣。不過(guò),寬乘法器242A會(huì)將數(shù)據(jù)文字209A與權(quán)重文字203A相乘以產(chǎn)生寬多工器1896A選擇的乘積246A;窄乘法器242B會(huì)將數(shù)據(jù)文字209B與權(quán)重文字203B相乘以產(chǎn)生窄多工器1896B選擇的乘積246B;并且,寬加法器2344A會(huì)將乘積246A(由寬多工器1896A選擇)以及乘積246B/2399(由寬多工器1896B選擇)都與寬累加器202A輸出217A相加,而窄加法器244B與窄累加器202B如前述則是不啟動(dòng)。最后,處于漏斗配置而執(zhí)行如圖20中地址3的啟動(dòng)函數(shù)指令時(shí),寬啟動(dòng)函數(shù)單元212A會(huì)對(duì)結(jié)果總數(shù)215A執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生一窄結(jié)果133A,而窄啟動(dòng)函數(shù)單元212B則是不啟動(dòng)。如此,只有標(biāo)示為A的窄神經(jīng)處理單元會(huì)產(chǎn)生窄結(jié)果133A,標(biāo)示為B的窄神經(jīng)處理單元所產(chǎn)生的窄結(jié)果133B則是無(wú)效。因此,寫(xiě)回結(jié)果的列(如圖20中地址4的指令所指示的列16)會(huì)包含空洞,這是因?yàn)橹挥姓Y(jié)果133A有效,窄結(jié)果133B則是無(wú)效。因此,在概念上,每個(gè)時(shí)頻周期內(nèi),每個(gè)神經(jīng)元(圖23的神經(jīng)處理單元)會(huì)執(zhí)行兩個(gè)連結(jié)數(shù)據(jù)輸入,即將兩個(gè)窄數(shù)據(jù)文字乘上其相對(duì)應(yīng)的權(quán)重并將這兩個(gè)乘積相加,相較之下,圖2與圖18的實(shí)施例在每個(gè)時(shí)頻周期內(nèi)只執(zhí)行一個(gè)連結(jié)數(shù)據(jù)輸入。在圖23的實(shí)施例中可以發(fā)現(xiàn),產(chǎn)生并寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124的結(jié)果文字(神經(jīng)元輸出)的數(shù)量是所接收數(shù)據(jù)輸入(連結(jié))數(shù)量的平方根的一半,而結(jié)果的寫(xiě)回列具有空洞,即每隔一個(gè)窄文字結(jié)果就是無(wú)效,更精確來(lái)說(shuō),標(biāo)示為B的窄神經(jīng)處理單元結(jié)果不具意義。因此,圖23的實(shí)施例對(duì)于具有連續(xù)兩層的神經(jīng)網(wǎng)絡(luò)特別有效率,舉例來(lái)說(shuō),第一層具有的神經(jīng)元數(shù)量為第二層的兩倍(例如第一層具有1024個(gè)神經(jīng)元充分連接至第二層的512個(gè)神經(jīng)元)。此外,其它的執(zhí)行單元122(例如媒體單元,如x86高級(jí)向量擴(kuò)展單元)在必要時(shí),可對(duì)一分散結(jié)果列(即具有空洞)執(zhí)行合并運(yùn)算(packoperation)以使其緊密(即不具空洞)。后續(xù)當(dāng)神經(jīng)處理單元121在執(zhí)行其它關(guān)聯(lián)于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124的其它列的計(jì)算時(shí),即可將此處理后的數(shù)據(jù)列用于計(jì)算?;旌仙窠?jīng)網(wǎng)絡(luò)單元運(yùn)算:卷積與共源運(yùn)算能力本發(fā)明實(shí)施例所述的神經(jīng)網(wǎng)絡(luò)單元121的優(yōu)點(diǎn)在于,此神經(jīng)網(wǎng)絡(luò)單元121能夠同時(shí)以類(lèi)似于一個(gè)協(xié)處理器執(zhí)行自己內(nèi)部程序的方式運(yùn)作以及以類(lèi)似于一個(gè)處理器的處理單元執(zhí)行所發(fā)布的架構(gòu)指令(或是由架構(gòu)指令轉(zhuǎn)譯出的微指令)。架構(gòu)指令是包含在具有神經(jīng)網(wǎng)絡(luò)單元121的處理器所執(zhí)行的架構(gòu)程序內(nèi)。如此,神經(jīng)網(wǎng)絡(luò)單元121即可以混合方式運(yùn)作,而能維持神經(jīng)處理單元121的高利用率。舉例來(lái)說(shuō),圖24至圖26顯示神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行卷積運(yùn)算的運(yùn)作,其中,神經(jīng)網(wǎng)絡(luò)單元被充分利用,圖27至圖28顯示神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行共源運(yùn)算的運(yùn)作。卷積層、共源層以及其它數(shù)字?jǐn)?shù)據(jù)計(jì)算的應(yīng)用,例如影像處理(如邊緣偵測(cè)、銳利化、模糊化、辨識(shí)/分類(lèi))需要使用到這些運(yùn)算。不過(guò),神經(jīng)處理單元121的混合運(yùn)算并不限于執(zhí)行卷積或共源運(yùn)算,此混合特征也可用于執(zhí)行其它運(yùn)算,例如圖4至圖13所述的傳統(tǒng)神經(jīng)網(wǎng)絡(luò)乘法累加運(yùn)算與啟動(dòng)函數(shù)運(yùn)算。也就是說(shuō),處理器100(更精確地說(shuō),保留站108)會(huì)發(fā)布MTNN指令1400與MFNN指令1500至神經(jīng)網(wǎng)絡(luò)單元121,因應(yīng)此發(fā)布的指令,神經(jīng)網(wǎng)絡(luò)單元121會(huì)將數(shù)據(jù)寫(xiě)入存儲(chǔ)器122/124/129并將結(jié)果從被神經(jīng)網(wǎng)絡(luò)單元121寫(xiě)入的存儲(chǔ)器122/124中讀出,在此同時(shí),為了執(zhí)行處理器100(透過(guò)MTNN1400指令)寫(xiě)入程序存儲(chǔ)器129的程序,神經(jīng)網(wǎng)絡(luò)單元121會(huì)讀取并寫(xiě)入存儲(chǔ)器122/124/129。圖24為一方塊示意圖,顯示由圖1的神經(jīng)網(wǎng)絡(luò)單元121使用以執(zhí)行卷積運(yùn)算的數(shù)據(jù)結(jié)構(gòu)的一范例。此方塊圖包括卷積核2402、數(shù)據(jù)陣列2404、以及圖1的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124。就一較佳實(shí)施例而言,數(shù)據(jù)陣列2404(例如對(duì)應(yīng)于影像像素)裝載于連接至處理器100的系統(tǒng)存儲(chǔ)器(未圖示)并由處理器100透過(guò)執(zhí)行MTNN指令1400加載神經(jīng)網(wǎng)絡(luò)單元121的權(quán)重隨機(jī)存取存儲(chǔ)器124。卷積運(yùn)算將第一陣列與第二陣列進(jìn)行卷積,此第二陣列即為本文所述的卷積核。如本文所述,卷積核為一系數(shù)矩陣,這些系數(shù)也可稱(chēng)為權(quán)重、參數(shù)、元素或數(shù)值。就一較佳實(shí)施例而言,此卷積核2042為處理器100所執(zhí)行的架構(gòu)程序的靜態(tài)數(shù)據(jù)。此數(shù)據(jù)陣列2404為一個(gè)數(shù)據(jù)值的二維陣列,而每個(gè)數(shù)據(jù)值(例如影像像素值)的大小是數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124的文字的尺寸(例如16位或8位)。在此范例中,數(shù)據(jù)值為16位文字,神經(jīng)網(wǎng)絡(luò)單元121為配置有512個(gè)寬配置的神經(jīng)處理單元126。此外,在此實(shí)施例中,神經(jīng)處理單元126包括多任務(wù)緩存器以接收來(lái)自權(quán)重隨機(jī)存取存儲(chǔ)器124的權(quán)重文字206,例如圖7的多任務(wù)緩存器705,藉以對(duì)由權(quán)重隨機(jī)存取存儲(chǔ)器124接收的一列數(shù)據(jù)值執(zhí)行集體旋轉(zhuǎn)器運(yùn)算,這部分在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。在此范例中,數(shù)據(jù)陣列2404為一個(gè)2560行X1600列的像素陣列。如圖中所示,當(dāng)架構(gòu)程序?qū)?shù)據(jù)陣列2404與卷積核2402進(jìn)行卷積計(jì)算時(shí),數(shù)據(jù)陣列2402會(huì)被分為20個(gè)數(shù)據(jù)塊,而每個(gè)數(shù)據(jù)塊分別是512x400的數(shù)據(jù)陣列2406。在此范例中,卷積核2402為一個(gè)由系數(shù)、權(quán)重、參數(shù)、或元素,構(gòu)成的3x3陣列。這些系數(shù)的第一列標(biāo)示為C0,0;C0,1;與C0,2;這些系數(shù)的第二列標(biāo)示為C1,0;C1,1;與C1,2;這些系數(shù)的第三列標(biāo)示為C2,0;C2,1;與C2,2。舉例來(lái)說(shuō),具有以下系數(shù)的卷積核可用于執(zhí)行邊緣偵測(cè):0,1,0,1,-4,1,0,1,0。在另一實(shí)施例中,具有以下系數(shù)的卷積核可用于執(zhí)行高斯模糊運(yùn)算:1,2,1,2,4,2,1,2,1。在此范例中,通常會(huì)對(duì)最終累加后的數(shù)值再執(zhí)行一個(gè)除法,其中,除數(shù)為卷積核2042的各元素的絕對(duì)值的加總,在此范例中即為16。在另一范例中,除數(shù)可以是卷積核2042的元素?cái)?shù)量。在又一個(gè)范例中,除數(shù)可以是將卷積運(yùn)算壓縮至一目標(biāo)數(shù)值范圍所使用的數(shù)值,此除數(shù)由卷積核2042的元素?cái)?shù)值、目標(biāo)范圍以及執(zhí)行卷積運(yùn)算的輸入值陣列的范圍所決定。請(qǐng)參照?qǐng)D24以及詳述其中細(xì)節(jié)的圖25,架構(gòu)程序?qū)⒕矸e核2042的系數(shù)寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。就一較佳實(shí)施例而言,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的連續(xù)九列(卷積核2402內(nèi)的元素?cái)?shù)量)的每列上的所有文字,會(huì)利用卷積核2402的不同元素以列為其主要順序加以寫(xiě)入。也就是說(shuō),如圖中所示,在同一列的每個(gè)文字以第一系數(shù)C0,0寫(xiě)入;下一列則是以第二系數(shù)C0,1寫(xiě)入;下一列則是以第三系數(shù)C0,2寫(xiě)入;再下一列則是以第四系數(shù)C1,0寫(xiě)入;依此類(lèi)推,直到第九列的每個(gè)文字都以第九系數(shù)C2,2寫(xiě)入。為了對(duì)數(shù)據(jù)陣列2404分割出的數(shù)據(jù)塊的數(shù)據(jù)矩陣2406進(jìn)行卷積運(yùn)算,神經(jīng)處理單元126會(huì)依據(jù)順序重復(fù)讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中裝載卷積核2042系數(shù)的九列,這部分在后續(xù)章節(jié),特別是對(duì)應(yīng)于圖26A的部分,會(huì)有更詳細(xì)的說(shuō)明。請(qǐng)參照?qǐng)D24以及詳述其中細(xì)節(jié)的圖25,架構(gòu)程序?qū)?shù)據(jù)矩陣2406的數(shù)值寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124。神經(jīng)網(wǎng)絡(luò)單元程序執(zhí)行卷積運(yùn)算時(shí),會(huì)將結(jié)果陣列寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124。就一較佳實(shí)施例而言,架構(gòu)程序會(huì)將第一數(shù)據(jù)矩陣2406寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124并使神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始運(yùn)作,當(dāng)神經(jīng)網(wǎng)絡(luò)單元121在對(duì)第一數(shù)據(jù)矩陣2406與卷積核2402執(zhí)行卷積運(yùn)算時(shí),架構(gòu)程序會(huì)將第二數(shù)據(jù)矩陣2406寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124,如此,神經(jīng)網(wǎng)絡(luò)單元121完成第一數(shù)據(jù)矩陣2406的卷積運(yùn)算后,即可開(kāi)始執(zhí)行第二數(shù)據(jù)矩陣2406的卷積運(yùn)算,這部分在后續(xù)對(duì)應(yīng)于圖25處有更詳細(xì)的說(shuō)明。以此方式,架構(gòu)程序會(huì)往返于權(quán)重隨機(jī)存取存儲(chǔ)器124的兩個(gè)區(qū)域,以確保神經(jīng)網(wǎng)絡(luò)單元121被充分使用。因此,圖24的范例顯示有第一數(shù)據(jù)矩陣2406A與第二數(shù)據(jù)矩陣2406B,第一數(shù)據(jù)矩陣2406A為對(duì)應(yīng)于占據(jù)權(quán)重隨機(jī)存取存儲(chǔ)器124中列0至399的第一數(shù)據(jù)塊,而第二數(shù)據(jù)矩陣2406B為對(duì)應(yīng)于占據(jù)權(quán)重隨機(jī)存取存儲(chǔ)器124中列500至899的第二數(shù)據(jù)塊。此外,如圖中所示,神經(jīng)網(wǎng)絡(luò)單元121會(huì)將卷積運(yùn)算的結(jié)果寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124的列900-1299以及列1300-1699,隨后架構(gòu)程序會(huì)從權(quán)重隨機(jī)存取存儲(chǔ)器124讀取這些結(jié)果。裝載于權(quán)重隨機(jī)存取存儲(chǔ)器124的數(shù)據(jù)矩陣2406的數(shù)據(jù)值標(biāo)示為“Dx,y”,其中“x”是權(quán)重隨機(jī)存取存儲(chǔ)器124列數(shù),“y”是權(quán)重隨機(jī)存取存儲(chǔ)器的文字、或稱(chēng)行數(shù)。舉例來(lái)說(shuō),位于列399的數(shù)據(jù)文字511在圖24中標(biāo)示為D399,511,此數(shù)據(jù)文字由神經(jīng)處理單元511的多任務(wù)緩存器705接收。圖25為一流程圖,顯示圖1的處理器100執(zhí)行架構(gòu)程序以利用神經(jīng)網(wǎng)絡(luò)單元121對(duì)圖24的數(shù)據(jù)陣列2404執(zhí)行卷積核2042的卷積運(yùn)算。此流程始于步驟2502。在步驟2502中,處理器100,即執(zhí)行有架構(gòu)程序的處理器100,會(huì)將圖24的卷積核2402以圖24所顯示描述的方式寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。此外,架構(gòu)程序會(huì)將變量N初始化為數(shù)值1。變量N標(biāo)示數(shù)據(jù)陣列2404中神經(jīng)網(wǎng)絡(luò)單元121正在處理的數(shù)據(jù)塊。此外,架構(gòu)程序會(huì)將變量NUM_CHUNKS初始化為數(shù)值20。接下來(lái)流程前進(jìn)至步驟2504。在步驟2504中,如圖24所示,處理器100會(huì)將數(shù)據(jù)塊1的數(shù)據(jù)矩陣2406寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124(如數(shù)據(jù)塊1的數(shù)據(jù)矩陣2406A)。接下來(lái)流程前進(jìn)至步驟2506。在步驟2506中,處理器100會(huì)使用一個(gè)指定函數(shù)1432以寫(xiě)入程序存儲(chǔ)器129的MTNN指令1400,將卷積程序?qū)懭肷窠?jīng)網(wǎng)絡(luò)單元121程序存儲(chǔ)器129。處理器100隨后會(huì)使用一個(gè)指定函數(shù)1432以開(kāi)始執(zhí)行程序的MTNN指令1400,以啟動(dòng)神經(jīng)網(wǎng)絡(luò)單元卷積程序。神經(jīng)網(wǎng)絡(luò)單元卷積程序的一范例在對(duì)應(yīng)于圖26A處會(huì)有更詳細(xì)的說(shuō)明。接下來(lái)流程前進(jìn)至步驟2508。在決策步驟2508,架構(gòu)程序確認(rèn)變量N的數(shù)值是否小于NUM_CHUNKS。若是,流程會(huì)前進(jìn)至步驟2512;否則就前進(jìn)至步驟2514。在步驟2512,如圖24所示,處理器100將數(shù)據(jù)塊N+1的數(shù)據(jù)矩陣2406寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124(如數(shù)據(jù)塊2的數(shù)據(jù)矩陣2406B)。因此,當(dāng)神經(jīng)網(wǎng)絡(luò)單元121正在對(duì)當(dāng)前數(shù)據(jù)塊執(zhí)行卷積運(yùn)算的時(shí)候,架構(gòu)程序可將下一個(gè)數(shù)據(jù)塊的數(shù)據(jù)矩陣2406寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124,如此,在完成當(dāng)前數(shù)據(jù)塊的卷積運(yùn)算后,即寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124后,神經(jīng)網(wǎng)絡(luò)單元121可以立即開(kāi)始對(duì)下一個(gè)數(shù)據(jù)塊執(zhí)行卷積運(yùn)算。在步驟2514,處理器100確認(rèn)正在執(zhí)行的神經(jīng)網(wǎng)絡(luò)單元程序(對(duì)于數(shù)據(jù)塊1而是從步驟2506開(kāi)始執(zhí)行,對(duì)于數(shù)據(jù)塊2-20而言則是從步驟2518開(kāi)始執(zhí)行)是否已經(jīng)完成執(zhí)行。就一較佳實(shí)施例而言,處理器100透過(guò)執(zhí)行MFNN指令1500讀取神經(jīng)網(wǎng)絡(luò)單元121狀態(tài)緩存器127以確認(rèn)是否已經(jīng)完成執(zhí)行。在另一實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元121會(huì)產(chǎn)生中斷,表示已經(jīng)完成卷積程序。接下來(lái)流程前進(jìn)至決策步驟2516。在決策步驟2516中,架構(gòu)程序確認(rèn)變量N的數(shù)值是否小于NUM_CHUNKS。若是,流程前進(jìn)至步驟2518;否則就前進(jìn)至步驟2522。在步驟2518中,處理器100會(huì)更新卷積程序以便執(zhí)行于數(shù)據(jù)塊N+1。更精確地說(shuō),處理器100會(huì)將權(quán)重隨機(jī)存取存儲(chǔ)器124中對(duì)應(yīng)于地址0的初始化神經(jīng)處理單元指令的列值更新為數(shù)據(jù)矩陣2406的第一列(例如,更新為數(shù)據(jù)矩陣2406A的列0或是數(shù)據(jù)矩陣2406B的列500),并且會(huì)更新輸出列(例如更新為列900或1300)。隨后處理器100會(huì)開(kāi)始執(zhí)行此更新后的神經(jīng)網(wǎng)絡(luò)單元卷積程序。接下來(lái)流程前進(jìn)至步驟2522。在步驟2522中,處理器100從權(quán)重隨機(jī)存取存儲(chǔ)器124讀取數(shù)據(jù)塊N的神經(jīng)網(wǎng)絡(luò)單元卷積程序的執(zhí)行結(jié)果。接下來(lái)流程前進(jìn)至決策步驟2524。在決策步驟2524中,架構(gòu)程序確認(rèn)變量N的數(shù)值是否小于NUM_CHUNKS。若是,流程前進(jìn)至步驟2526;否則就終止。在步驟2526中,架構(gòu)程序會(huì)將N的數(shù)值增加一。接下來(lái)流程回到?jīng)Q策步驟2508。圖26A為神經(jīng)網(wǎng)絡(luò)單元程序的程序列表,此神經(jīng)網(wǎng)絡(luò)單元程序利用圖24的卷積核2402執(zhí)行數(shù)據(jù)矩陣2406的卷積運(yùn)算并將其寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124。此程序?qū)⒌刂?至9的指令所構(gòu)成的指令循環(huán)循環(huán)一定次數(shù)。位于地址0的初始化神經(jīng)處理單元指令指定每個(gè)神經(jīng)處理單元126執(zhí)行此指令循環(huán)的次數(shù),在圖26A的范例所具有的循環(huán)計(jì)數(shù)值為400,對(duì)應(yīng)于圖24的數(shù)據(jù)矩陣2406內(nèi)的列數(shù),而位于循環(huán)終端的循環(huán)指令(位于地址10)會(huì)使當(dāng)前循環(huán)計(jì)數(shù)值遞減,若是結(jié)果為非零值,就使其回到指令循環(huán)的頂端(即回到地址1的指令)。初始化神經(jīng)處理單元指令也會(huì)將累加器202清除為零。就一較佳實(shí)施例而言,位于地址10的循環(huán)指令也會(huì)將累加器202清除為零。另外,如前述位于地址1的乘法累加指令也可將累加器202清除為零。對(duì)于程序內(nèi)指令循環(huán)的每一次執(zhí)行,這512個(gè)神經(jīng)處理單元126會(huì)同時(shí)執(zhí)行512個(gè)3x3卷積核以及數(shù)據(jù)矩陣2406的512個(gè)相對(duì)應(yīng)的3x3子矩陣的卷積運(yùn)算。卷積運(yùn)算是由卷積核2042的元素與相對(duì)應(yīng)子矩陣內(nèi)的相對(duì)應(yīng)元素計(jì)算出來(lái)的九個(gè)乘積的加總。在圖26A的實(shí)施例中,這512個(gè)相對(duì)應(yīng)3x3子矩陣的每一個(gè)的原點(diǎn)(中央元素)是圖24中的數(shù)據(jù)文字Dx+1,y+1,其中y(行編號(hào))是神經(jīng)處理單元126編號(hào),而x(列編號(hào))是當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124中由圖26A的程序中地址1的乘法累加指令所讀取的列編號(hào)(此列編號(hào)也會(huì)由地址0的初始化神經(jīng)處理單元指令進(jìn)行初始化處理,也會(huì)在執(zhí)行位于地址3與5的乘法累加指令時(shí)遞增,也會(huì)被位于地址9的遞減指令更新)。如此,在此程序的每一個(gè)循環(huán)中,這512個(gè)神經(jīng)處理單元126會(huì)計(jì)算512個(gè)卷積運(yùn)算并將這512個(gè)卷積運(yùn)算的結(jié)果寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124的指令列。在本文中省略邊緣處理(edgehandling)以簡(jiǎn)化說(shuō)明,不過(guò)需要注意的是,利用這些神經(jīng)處理單元126的集體旋轉(zhuǎn)特征會(huì)造成數(shù)據(jù)矩陣2406(對(duì)于影像處理器而言即影像的數(shù)據(jù)矩陣)的多行數(shù)據(jù)中有兩行從其一側(cè)的垂直邊緣到另一個(gè)垂直邊緣間(例如從左側(cè)邊緣到右側(cè)邊緣,反之亦然)產(chǎn)生環(huán)繞(wrapping)。現(xiàn)在針對(duì)指令循環(huán)進(jìn)行說(shuō)明。地址1是乘法累加指令,此指令會(huì)指定數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列0并暗中利用當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124的列,這列最好是裝載在定序器128內(nèi)(并由位于地址0的指令將其初始化為零以執(zhí)行第一次指令循環(huán)傳遞的運(yùn)算)。也就是說(shuō),位于地址1的指令會(huì)使每個(gè)神經(jīng)處理單元126從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列0讀取其相對(duì)應(yīng)文字,從當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列讀取其相對(duì)應(yīng)文字,并對(duì)此二個(gè)文字執(zhí)行一乘法累加運(yùn)算。如此,舉例來(lái)說(shuō),神經(jīng)處理單元5將C0,0與Dx,5相乘(其中“x”是當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列),將結(jié)果加上累加器202數(shù)值217,并將總數(shù)寫(xiě)回累加器202。地址2是一個(gè)乘法累加指令,此指令會(huì)指定數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列遞增(即增加至1),隨后再?gòu)臄?shù)據(jù)隨機(jī)存取存儲(chǔ)器122的遞增后地址讀取這列。此指令并會(huì)指定將每個(gè)神經(jīng)處理單元126的多任務(wù)緩存器705內(nèi)的數(shù)值旋轉(zhuǎn)至鄰近的神經(jīng)處理單元126,在此范例中即為因應(yīng)地址1的指令而從權(quán)重隨機(jī)存取存儲(chǔ)器124讀取的數(shù)據(jù)矩陣2406值的列。在圖24至圖26的實(shí)施例中,這些神經(jīng)處理單元126用以將多任務(wù)緩存器705的數(shù)值向左旋轉(zhuǎn),也即從神經(jīng)處理單元J旋轉(zhuǎn)至神經(jīng)處理單元J-1,而非如前述圖3、圖7與圖19從神經(jīng)處理單元J旋轉(zhuǎn)至神經(jīng)處理單元J+1。值得注意的是,神經(jīng)處理單元126向右旋轉(zhuǎn)的實(shí)施例中,架構(gòu)程序會(huì)將卷積核2042為數(shù)值以不同順序?qū)懭霐?shù)據(jù)隨機(jī)存取存儲(chǔ)器122(例如繞著其中心行旋轉(zhuǎn))以達(dá)到相似卷積結(jié)果的目的。此外,在需要時(shí),架構(gòu)程序可執(zhí)行額外的卷積核預(yù)處理(例如移動(dòng)(transposition))。此外,指令指定的計(jì)數(shù)值為2。因此,位于地址2的指令會(huì)使每個(gè)神經(jīng)處理單元126從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1讀取其相對(duì)應(yīng)文字,將旋轉(zhuǎn)后文字接收至多任務(wù)緩存器705,并對(duì)這兩個(gè)文字執(zhí)行乘法累加運(yùn)算。因?yàn)橛?jì)數(shù)值為2,此指令也會(huì)使每個(gè)神經(jīng)處理單元126重復(fù)前述運(yùn)作。也就是說(shuō),定序器128會(huì)使數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列地址123遞增(即增加至2),而每個(gè)神經(jīng)處理單元126會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列2讀取其相對(duì)應(yīng)文字以及將旋轉(zhuǎn)后文字接收至多任務(wù)緩存器705,并且對(duì)這兩個(gè)文字執(zhí)行乘法累加運(yùn)算。如此,舉例來(lái)說(shuō),假定當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列為27,在執(zhí)行地址2的指令后,神經(jīng)處理單元5會(huì)將C0,1與D27,6的乘積與C0,2與D27,7的乘積累加至其累加器202。如此,完成地址1與地址2的指令后,C0,0與D27,5的乘積、C0,1與D27,6的乘積與C0,2與D27,7就會(huì)累加至累加器202,加入其它所有來(lái)自先前傳遞的指令循環(huán)的累加值。地址3與4的指令所執(zhí)行的運(yùn)算類(lèi)似于地址1與2的指令,利用權(quán)重隨機(jī)存取存儲(chǔ)器124列遞增指針的功效,這些指令會(huì)對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124的下一列進(jìn)行運(yùn)算,并且這些指令會(huì)對(duì)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的后續(xù)三列,即列3至5,進(jìn)行運(yùn)算。也就是說(shuō),以神經(jīng)處理單元5為例,完成地址1至4的指令后,C0,0與D27,5的乘積、C0,1與D27,6的乘積、C0,2與D27,7的乘積、C1,0與D28,5的乘積、C1,1與D28,6的乘積、以及C1,2與D28,7的乘積會(huì)累加至累加器202,加入其它所有來(lái)自先前傳遞的指令循環(huán)的累加值。地址5與6的指令所執(zhí)行的運(yùn)算類(lèi)似于地址3與4的指令,這些指令會(huì)對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124的下一列,以及數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的后續(xù)三列,即列6至8,進(jìn)行運(yùn)算。也就是說(shuō),以神經(jīng)處理單元5為例,完成地址1至6的指令后,C0,0與D27,5的乘積、C0,1與D27,6的乘積、C0,2與D27,7的乘積、C1,0與D28,5的乘積、C1,1與D28,6的乘積、C1,2與D28,7、C2,0與D29,5的乘積、C2,1與D29,6的乘積、以及C2,2與D29,7的乘積會(huì)累加至累加器202,加入其它所有來(lái)自先前傳遞的指令循環(huán)的累加值。也就是說(shuō),完成地址1至6的指令后,假定指令循環(huán)開(kāi)始時(shí),權(quán)重隨機(jī)存取存儲(chǔ)器124列為27,以神經(jīng)處理單元5為例,將會(huì)利用卷積核2042對(duì)以下3x3子矩陣進(jìn)行卷積運(yùn)算:一般而言,完成地址1到6的指令后,這512個(gè)神經(jīng)處理單元126都已經(jīng)使用卷積核2042對(duì)下列3x3子矩陣進(jìn)行卷積運(yùn)算:其中r是指令循環(huán)開(kāi)始時(shí),權(quán)重隨機(jī)存取存儲(chǔ)器124的列地址值,而n是神經(jīng)處理單元126的編號(hào)。地址7的指令會(huì)透過(guò)啟動(dòng)函數(shù)單元121傳遞累加器202數(shù)值217。此傳遞功能會(huì)傳遞一個(gè)文字,其尺寸大小(以位計(jì))等同于由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124讀取的文字(在此范例中即16位)。就一較佳實(shí)施例而言,使用者可指定輸出格式,例如輸出位中有多少位是小數(shù)(fractional)位,這部分在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。另外,此指定可指定一個(gè)除法啟動(dòng)函數(shù),而非指定一個(gè)傳遞啟動(dòng)函數(shù),此除法啟動(dòng)函數(shù)會(huì)將累加器202數(shù)值217除以一個(gè)除數(shù),如本文對(duì)應(yīng)于圖29A與圖30所述,例如利用圖30的“除法器”3014/3016的其中之一。舉例來(lái)說(shuō),就一個(gè)具有系數(shù)的卷積核2042而言,如前述具有十六分之一的系數(shù)的高斯模糊核,地址7的指令會(huì)指定一除法啟動(dòng)函數(shù)(例如除以16),而非指定一傳遞函數(shù)。另外,架構(gòu)程序可以在將卷積核系數(shù)寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122前,對(duì)卷積核2042系數(shù)執(zhí)行此除以16的運(yùn)算,并據(jù)以調(diào)整卷積核2042數(shù)值的二進(jìn)制小數(shù)點(diǎn)的位置,例如使用如下所述圖29的數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922。地址8的指令會(huì)將啟動(dòng)函數(shù)單元212的輸出寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124中由輸出列緩存器的當(dāng)前值所指定的列。此當(dāng)前值會(huì)被地址0的指令初始化,并且由指令內(nèi)的遞增指針在每傳遞經(jīng)過(guò)一次循環(huán)就遞增此數(shù)值。如圖24至圖26具有一3x3卷積核2402的范例所述,神經(jīng)處理單元126大約每三個(gè)時(shí)頻周期會(huì)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124以讀取數(shù)據(jù)矩陣2406的一列,并且大約每十二個(gè)時(shí)頻周期會(huì)將卷積核結(jié)果矩陣寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124。此外,假定在一實(shí)施例中,具有如圖17的緩沖器1704的寫(xiě)入與讀取緩沖器,在神經(jīng)處理單元126進(jìn)行讀取與寫(xiě)入的同時(shí),處理器100可以對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行讀取與寫(xiě)入,緩沖器1704大約每十六個(gè)時(shí)頻周期會(huì)對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器執(zhí)行一次讀取與寫(xiě)入動(dòng)作,以分別讀取數(shù)據(jù)矩陣以及寫(xiě)入卷積核結(jié)果矩陣。因此,權(quán)重隨機(jī)存取存儲(chǔ)器124的大約一半的頻寬會(huì)由神經(jīng)網(wǎng)絡(luò)單元121以混合方式執(zhí)行的卷積核運(yùn)算所消耗。本范例包含一個(gè)3x3卷積核2042,不過(guò),本發(fā)明并不限于此,其它大小的卷積核,如2x2、4x4、5x5、6x6、7x7、8x8等,也可適用于不同的神經(jīng)網(wǎng)絡(luò)單元程序。在使用較大卷積核的情況下,因?yàn)槌朔ɡ奂又噶畹男D(zhuǎn)版本(如圖26A的地址2、4與6的指令,較大的卷積核會(huì)需要使用這些指令)具有較大的計(jì)數(shù)值,神經(jīng)處理單元126讀取權(quán)重隨機(jī)存取存儲(chǔ)器124的時(shí)間占比會(huì)降低,因此,權(quán)重隨機(jī)存取存儲(chǔ)器124的頻寬使用比也會(huì)降低。另外,架構(gòu)程序可使神經(jīng)網(wǎng)絡(luò)單元程序?qū)斎霐?shù)據(jù)矩陣2406中不再需要使用的列進(jìn)行覆寫(xiě),而非將卷積運(yùn)算結(jié)果寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124的不同列(如列900-1299與1300-1699)。舉例來(lái)說(shuō),就一個(gè)3x3的卷積核而言,架構(gòu)程序可以將數(shù)據(jù)矩陣2406寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列2-401,而非寫(xiě)入列0-399,而神經(jīng)處理單元程序則會(huì)從權(quán)重隨機(jī)存取存儲(chǔ)器124的列0開(kāi)始將卷積運(yùn)算結(jié)果寫(xiě)入,而每傳遞經(jīng)過(guò)一次指令循環(huán)就遞增列數(shù)。如此,神經(jīng)網(wǎng)絡(luò)單元程序只會(huì)將不再需要使用的列進(jìn)行覆寫(xiě)。舉例來(lái)說(shuō),在第一次傳遞經(jīng)過(guò)指令循環(huán)之后(或更精確地說(shuō),在執(zhí)行地址1的指令之后其加載權(quán)重隨機(jī)存取存儲(chǔ)器124的列0),列0的數(shù)據(jù)可以被覆寫(xiě),不過(guò),列1-3的數(shù)據(jù)需要留給第二次傳遞經(jīng)過(guò)指令循環(huán)的運(yùn)算而不能被覆寫(xiě);同樣地,在第二次傳遞經(jīng)過(guò)指令循環(huán)之后,列1的數(shù)據(jù)可以被覆寫(xiě),不過(guò),列2-4的數(shù)據(jù)需要留給第三次傳遞經(jīng)過(guò)指令循環(huán)的運(yùn)算而不能被覆寫(xiě);依此類(lèi)推。在此實(shí)施例中,可以增大各個(gè)數(shù)據(jù)矩陣2406(數(shù)據(jù)塊)的高度(如800列),因而可以使用較少的數(shù)據(jù)塊。另外,架構(gòu)程序可以使神經(jīng)網(wǎng)絡(luò)單元程序?qū)⒕矸e運(yùn)算的結(jié)果寫(xiě)回卷積核2402上方的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列(例如在列8上方),而非將卷積運(yùn)算結(jié)果寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124,當(dāng)神經(jīng)網(wǎng)絡(luò)單元121寫(xiě)入結(jié)果時(shí),架構(gòu)程序可以從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取結(jié)果(例如使用圖26中數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的最近寫(xiě)入列2606地址)。此配置適用于具有單端口權(quán)重隨機(jī)存取存儲(chǔ)器124與雙端口數(shù)據(jù)隨機(jī)存取存儲(chǔ)器的實(shí)施例。依據(jù)圖24至圖26A的實(shí)施例中神經(jīng)網(wǎng)絡(luò)單元121的運(yùn)算可以發(fā)現(xiàn),圖26A的程序的每次執(zhí)行會(huì)需要大約5000個(gè)時(shí)頻周期,如此,圖24中整個(gè)2560x1600的數(shù)據(jù)陣列2404的卷積運(yùn)算需要大約100,000個(gè)時(shí)頻周期,明顯少于以傳統(tǒng)方式執(zhí)行相同任務(wù)所需要的時(shí)頻周期數(shù)。圖26B為顯示圖1的神經(jīng)網(wǎng)絡(luò)單元121的控制緩存器127的某些字段的一實(shí)施例的方塊示意圖。此狀態(tài)緩存器127包括一個(gè)字段2602,指出權(quán)重隨機(jī)存取存儲(chǔ)器124中最近被神經(jīng)處理單元126寫(xiě)入的列的地址;一個(gè)字段2606,指出數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中最近被神經(jīng)處理單元126寫(xiě)入的列的地址;一個(gè)字段2604,指出權(quán)重隨機(jī)存取存儲(chǔ)器124中最近被神經(jīng)處理單元126讀取的列的地址;以及一個(gè)字段2608,指出數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中最近被神經(jīng)處理單元126讀取的列的地址。如此,執(zhí)行于處理器100的架構(gòu)程序就可以確認(rèn)神經(jīng)網(wǎng)絡(luò)單元121的處理進(jìn)度,當(dāng)對(duì)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行數(shù)據(jù)的讀取和/或?qū)懭霑r(shí)。利用此能力,加上如前述選擇對(duì)輸入數(shù)據(jù)矩陣進(jìn)行覆寫(xiě)(或是如前述將結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122),如以下的范例所述,圖24的數(shù)據(jù)陣列2404就可以視為5個(gè)512x1600的數(shù)據(jù)塊來(lái)執(zhí)行,而非20個(gè)512x400的數(shù)據(jù)塊。處理器100從權(quán)重隨機(jī)存取存儲(chǔ)器124的列2開(kāi)始寫(xiě)入第一個(gè)512x1600的數(shù)據(jù)塊,并使神經(jīng)網(wǎng)絡(luò)單元程序啟動(dòng)(此程序具有一數(shù)值為1600的循環(huán)計(jì)數(shù),并且將權(quán)重隨機(jī)存取存儲(chǔ)器124輸出列初始化為0)。當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序時(shí),處理器100會(huì)監(jiān)測(cè)權(quán)重隨機(jī)存取存儲(chǔ)器124的輸出位置/地址,藉以(1)(使用MFNN指令1500)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中具有由神經(jīng)網(wǎng)絡(luò)單元121(由列0開(kāi)始)寫(xiě)入的有效卷積運(yùn)算結(jié)果的列;以及(2)將第二個(gè)512x1600數(shù)據(jù)矩陣2406(始于列2)覆寫(xiě)于已經(jīng)被讀取過(guò)的有效卷積運(yùn)算結(jié)果,如此當(dāng)神經(jīng)網(wǎng)絡(luò)單元121對(duì)于第一個(gè)512x1600數(shù)據(jù)塊完成神經(jīng)網(wǎng)絡(luò)單元程序,處理器100在必要時(shí)可以立即更新神經(jīng)網(wǎng)絡(luò)單元程序并再次啟動(dòng)神經(jīng)網(wǎng)絡(luò)單元程序以執(zhí)行于第二個(gè)512x1600數(shù)據(jù)塊。此程序會(huì)再重復(fù)三次執(zhí)行剩下三個(gè)512x1600數(shù)據(jù)塊,以使神經(jīng)網(wǎng)絡(luò)單元121可以被充分使用。在一實(shí)施例中,啟動(dòng)函數(shù)單元212具有能夠?qū)奂悠?02數(shù)值217有效執(zhí)行一有效除法運(yùn)算的能力,這部分在后續(xù)章節(jié)尤其是對(duì)應(yīng)于圖29A、圖29B與圖30處會(huì)有更詳細(xì)的說(shuō)明。舉例來(lái)說(shuō),對(duì)累加器202數(shù)值進(jìn)行除以16的除法運(yùn)算的啟動(dòng)函數(shù)神經(jīng)網(wǎng)絡(luò)單元指令可用于以下所述的高斯模糊矩陣。圖24的范例中所使用的卷積核2402為一個(gè)應(yīng)用于整個(gè)數(shù)據(jù)矩陣2404的小型靜態(tài)卷積核,不過(guò),本發(fā)明并不限于此,此卷積核也可為一大型矩陣,具有特定的權(quán)重對(duì)應(yīng)于數(shù)據(jù)陣列2404的不同數(shù)據(jù)值,例如常見(jiàn)于卷積神經(jīng)網(wǎng)絡(luò)的卷積核。當(dāng)神經(jīng)網(wǎng)絡(luò)單元121以此方式被使用時(shí),架構(gòu)程序會(huì)將數(shù)據(jù)矩陣與卷積核的位置互換,也即將數(shù)據(jù)矩陣放置于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122內(nèi)而將卷積核放置于權(quán)重隨機(jī)存取存儲(chǔ)器124內(nèi),而執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序所需處理的列數(shù)也會(huì)相對(duì)較少。圖27為一方塊示意圖,顯示圖1中填入輸入數(shù)據(jù)的權(quán)重隨機(jī)存取存儲(chǔ)器124的一范例,此輸入數(shù)據(jù)由圖1的神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行共源運(yùn)算(poolingoperation)。共源運(yùn)算是由人工神經(jīng)網(wǎng)絡(luò)的共源層執(zhí)行,透過(guò)取得輸入矩陣的子區(qū)域或子矩陣并計(jì)算子矩陣的最大值或平均值以作為結(jié)果矩陣即共源矩陣,以縮減輸入數(shù)據(jù)矩陣(如影像或是卷積后影像)的大小(dimension)。在圖27與圖28的范例中,共源運(yùn)算計(jì)算各個(gè)子矩陣的最大值。共源運(yùn)算對(duì)于如執(zhí)行對(duì)象分類(lèi)或偵測(cè)的人工神經(jīng)網(wǎng)絡(luò)特別有用。一般而言,共源運(yùn)算實(shí)際上可以使輸入矩陣縮減的因子為所檢測(cè)的子矩陣的元素?cái)?shù),特別是可以將輸入矩陣的各個(gè)維度方向都縮減子矩陣的相對(duì)應(yīng)維度方向的元素?cái)?shù)。在圖27的范例中,輸入數(shù)據(jù)是一個(gè)寬文字(如16位)的512x1600矩陣,儲(chǔ)存于權(quán)重隨機(jī)存取存儲(chǔ)器124的列0至1599。在圖27中,這些文字以其所在列行位置標(biāo)示,如,位于列0行0的文字標(biāo)示為D0,0;位于列0行1的文字標(biāo)示為D0,1;位于列0行2的文字標(biāo)示為D0,2;依此類(lèi)推,位于列0行511的文字標(biāo)示為D0,511。相同地,位于列1行0的文字標(biāo)示為D1,0;位于列1行1的文字標(biāo)示為D1,1;位于列1行2文字標(biāo)示為D1,2;依此類(lèi)推,位于列1行511的文字標(biāo)示為D1,511;如此依此類(lèi)推,位于列1599行0的文字標(biāo)示為D1599,0;位于列1599行1的文字標(biāo)示為D1599,1位于列1599行2的文字標(biāo)示為D1599,2;依此類(lèi)推,位于列1599行511的文字標(biāo)示為D1599,511。圖28為神經(jīng)網(wǎng)絡(luò)單元程序的程序列表,此神經(jīng)網(wǎng)絡(luò)單元程序執(zhí)行圖27的輸入數(shù)據(jù)矩陣的共源運(yùn)算并將其寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124。在圖28的范例中,共源運(yùn)算會(huì)計(jì)算輸入數(shù)據(jù)矩陣中各個(gè)4x4子矩陣的最大值。此程序會(huì)多次執(zhí)行由指令1至10構(gòu)成的指令循環(huán)。位于地址0的初始化神經(jīng)處理單元指令會(huì)指定每個(gè)神經(jīng)處理單元126執(zhí)行指令循環(huán)的次數(shù),在圖28的范例中的循環(huán)計(jì)數(shù)值為400,而在循環(huán)末端(在地址11)的循環(huán)指令會(huì)使當(dāng)前循環(huán)計(jì)數(shù)值遞減,而若是所產(chǎn)生的結(jié)果是非零值,就使其回到指令循環(huán)的頂端(即回到地址1的指令)。權(quán)重隨機(jī)存取存儲(chǔ)器124內(nèi)的輸入數(shù)據(jù)矩陣實(shí)質(zhì)上會(huì)被神經(jīng)網(wǎng)絡(luò)單元程序視為400個(gè)由四個(gè)相鄰列構(gòu)成的互斥群組,即列0-3、列4-7、列8-11、依此類(lèi)推,直到列1596-1599。每一個(gè)由四個(gè)相鄰列構(gòu)成的群組包括128個(gè)4x4子矩陣,這些子矩陣由此群組的四列與四個(gè)相鄰行的交叉處元素所形成的4x4子矩陣,這些相鄰行即行0-3、行4-7、行8-11、依此類(lèi)推直到行508-511。這512個(gè)神經(jīng)處理單元126中,每四個(gè)為一組計(jì)算的第四個(gè)神經(jīng)處理單元126(一共即128個(gè))會(huì)對(duì)一相對(duì)應(yīng)4x4子矩陣執(zhí)行共源運(yùn)算,而其它三個(gè)神經(jīng)處理單元126則不被使用。更精確地說(shuō),神經(jīng)處理單元0、4、8、依此類(lèi)推直到神經(jīng)處理單元508,會(huì)對(duì)其相對(duì)應(yīng)的4x4子矩陣執(zhí)行共源運(yùn)算,而此4x4子矩陣的最左側(cè)行編號(hào)對(duì)應(yīng)于神經(jīng)處理單元編號(hào),而下方列對(duì)應(yīng)于當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124的列值,此數(shù)值會(huì)被地址0的初始化指令初始化為零并且在重復(fù)每次指令循環(huán)后會(huì)增加4,這部分在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。這400次指令循環(huán)的重復(fù)動(dòng)作對(duì)應(yīng)至圖27的輸入數(shù)據(jù)矩陣中的4x4子矩陣群組數(shù)(即輸入數(shù)據(jù)矩陣具有的1600列除以4)。初始化神經(jīng)處理單元指令也會(huì)清除累加器202使其歸零。就一較佳實(shí)施例而言,地址11的循環(huán)指令也會(huì)清除累加器202使其歸零。另外,地址1的maxwacc指令會(huì)指定清除累加器202使其歸零。每次在執(zhí)行程序的指令循環(huán)時(shí),這128個(gè)被使用的神經(jīng)處理單元126會(huì)對(duì)輸入數(shù)據(jù)矩陣的當(dāng)前四列群組中的128個(gè)個(gè)別的4x4子矩陣,同時(shí)執(zhí)行128個(gè)共源運(yùn)算。進(jìn)一步來(lái)說(shuō),此共源運(yùn)算會(huì)確認(rèn)這4x4子矩陣的16個(gè)元素中的最大值元素。在圖28的實(shí)施例中,對(duì)于這128個(gè)被使用的神經(jīng)處理單元126中的每個(gè)神經(jīng)處理單元y而言,4x4子矩陣的下方左側(cè)元素為圖27內(nèi)的元素Dx,y,其中x是指令循環(huán)開(kāi)始時(shí)當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124的列數(shù),而此列數(shù)據(jù)由圖28的程序中地址1的maxwacc指令讀取(此列數(shù)也會(huì)由地址0的初始化神經(jīng)處理單元指令加以初始化,并在每次執(zhí)行地址3、5與7的maxwacc指令時(shí)遞增)。因此,對(duì)于此程序的每一個(gè)循環(huán)而言,這128個(gè)被使用的神經(jīng)處理單元126會(huì)將當(dāng)前列群組的相對(duì)應(yīng)128個(gè)4x4子矩陣的最大值元素,寫(xiě)回權(quán)重隨機(jī)存取記憶124的指定列。以下針對(duì)此指令循環(huán)進(jìn)行描述。地址1的maxwacc指令會(huì)暗中使用當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列,這列最好是裝載在定序器128內(nèi)(并由位于地址0的指令將其初始化為零以執(zhí)行第一次傳遞經(jīng)過(guò)指令循環(huán)的運(yùn)算)。地址1的指令會(huì)使每個(gè)神經(jīng)處理單元126從權(quán)重隨機(jī)存取存儲(chǔ)器124的當(dāng)前列讀取其相對(duì)應(yīng)文字,將此文字與累加器202數(shù)值217相比,并將這兩個(gè)數(shù)值的最大者儲(chǔ)存于累加器202。因此,舉例來(lái)說(shuō),神經(jīng)處理單元8會(huì)確認(rèn)累加器202數(shù)值217與數(shù)據(jù)文字Dx,8(其中“x”是當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列)中的最大值并將其寫(xiě)回累加器202。地址2是一個(gè)maxwacc指令,此指令會(huì)指定將每個(gè)神經(jīng)處理單元126的多任務(wù)緩存器705內(nèi)的數(shù)值旋轉(zhuǎn)至鄰近至神經(jīng)處理單元126,在此即為因應(yīng)地址1的指令剛從權(quán)重隨機(jī)存取存儲(chǔ)器124讀取的一列輸入數(shù)據(jù)陣列值。在圖27至圖28的實(shí)施例中,神經(jīng)處理單元126用以將多工器705數(shù)值向左旋轉(zhuǎn),也即從神經(jīng)處理單元J旋轉(zhuǎn)至神經(jīng)處理單元J-1,如前文對(duì)應(yīng)于圖24至圖26的章節(jié)所述。此外,此指令會(huì)指定一計(jì)數(shù)值為3。如此,地址2的指令會(huì)使每個(gè)神經(jīng)處理單元126將旋轉(zhuǎn)后文字接收至多任務(wù)緩存器705并確認(rèn)此旋轉(zhuǎn)后文字與累加器202數(shù)值中的最大值,然后將這個(gè)運(yùn)算再重復(fù)兩次。也就是說(shuō),每個(gè)神經(jīng)處理單元126會(huì)執(zhí)行三次將旋轉(zhuǎn)后文字接收至多任務(wù)緩存器705并確認(rèn)旋轉(zhuǎn)后文字與累加器202數(shù)值中最大值的運(yùn)算。如此,舉例來(lái)說(shuō),假定開(kāi)始此指令循環(huán)時(shí),當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列為36,以神經(jīng)處理單元8為例,在執(zhí)行地址1與2的指令后,神經(jīng)處理單元8將會(huì)在其累加器202中儲(chǔ)存循環(huán)開(kāi)始時(shí)累加器202以及四個(gè)權(quán)重隨機(jī)存取存儲(chǔ)器124文字D36,8、D36,9、D36,10與D36,11中的最大值。地址3與4的maxwacc指令所執(zhí)行的運(yùn)算類(lèi)似于地址1的指令,利用權(quán)重隨機(jī)存取存儲(chǔ)器124列遞增指針具有的功效,地址3與4的指令會(huì)對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124的下一列執(zhí)行。也就是說(shuō),假定指令循環(huán)開(kāi)始時(shí)當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列是36,以神經(jīng)處理單元8為例,在完成地址1到4的指令后,神經(jīng)處理單元8將會(huì)在其累加器202中儲(chǔ)存循環(huán)開(kāi)始時(shí)累加器202以及八個(gè)權(quán)重隨機(jī)存取存儲(chǔ)器124文字D36,8、D36,9、D36,10、D36,11、D37,8、D37,9、D37,10與D37,11中的最大值。地址5至8的maxwacc指令所執(zhí)行的運(yùn)算類(lèi)似于地址1至4的指令,地址5至8的指令會(huì)對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124的下兩列執(zhí)行。也就是說(shuō),假定指令循環(huán)開(kāi)始時(shí)當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列是36,以神經(jīng)處理單元8為例,在完成地址1到8的指令后,神經(jīng)處理單元8將會(huì)在其累加器202中儲(chǔ)存循環(huán)開(kāi)始時(shí)累加器202以及十六個(gè)權(quán)重隨機(jī)存取存儲(chǔ)器124文字D36,8、D36,9、D36,10、D36,11、D37,8、D37,9、D37,10、D37,11、D38,8、D38,9、D38,10、D38,11、D39,8、D39,9、D39,10與D39,11中的最大值。也就是說(shuō),假定指令循環(huán)開(kāi)始時(shí)當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124列是36,以神經(jīng)處理單元8為例,在完成地址1到8的指令后,神經(jīng)處理單元8將會(huì)完成確認(rèn)下列4x4子矩陣的最大值:基本上,在完成地址1至8的指令后,這128個(gè)被使用的神經(jīng)處理單元126中的每一個(gè)神經(jīng)處理單元126就會(huì)完成確認(rèn)下列4x4子矩陣的最大值:其中r是指令循環(huán)開(kāi)始時(shí)當(dāng)前權(quán)重隨機(jī)存取存儲(chǔ)器124的列地址值,n是神經(jīng)處理單元126編號(hào)。地址9的指令會(huì)透過(guò)啟動(dòng)函數(shù)單元212傳遞累加器202數(shù)值217。此傳遞功能會(huì)傳遞一個(gè)文字,其尺寸大小(以位計(jì))等同于由權(quán)重隨機(jī)存取存儲(chǔ)器124讀取的文字(在此范例中即16位)。就一較佳實(shí)施例而言,使用者可指定輸出格式,例如輸出位中有多少位是小數(shù)(fractional)位,這部分在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。地址10的指令會(huì)將累加器202數(shù)值217寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124中由輸出列緩存器的當(dāng)前值所指定的列,此當(dāng)前值會(huì)被地址0的指令予以初始化,并利用指令內(nèi)的遞增指針在每次傳遞經(jīng)過(guò)循環(huán)后將此數(shù)值遞增。進(jìn)一步來(lái)說(shuō),地址10的指令會(huì)將累加器202的一寬文字(如16位)寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124。就一較佳實(shí)施例而言,此指令會(huì)將這16個(gè)位依照輸出二進(jìn)制小數(shù)點(diǎn)2916來(lái)進(jìn)行寫(xiě)入,這部分在下列對(duì)應(yīng)于圖29A與圖29B處會(huì)有更詳細(xì)的說(shuō)明。如前述,迭代一次指令循環(huán)寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列會(huì)包含具有無(wú)效值的空洞。也就是說(shuō),結(jié)果133的寬文字1至3、5至7、9至11、依此類(lèi)推,直到寬文字509至511都是無(wú)效或未使用的。在一實(shí)施例中,啟動(dòng)函數(shù)單元212包括多工器使能將結(jié)果合并至列緩沖器的相鄰文字,例如圖11的列緩沖器1104,以寫(xiě)回輸出權(quán)重隨機(jī)存取存儲(chǔ)器124列。就一較佳實(shí)施例而言,啟動(dòng)函數(shù)指令會(huì)指定每個(gè)空洞中的文字?jǐn)?shù),而此空洞內(nèi)的文字?jǐn)?shù)控制多工器合并結(jié)果。在一實(shí)施例中,空洞數(shù)可指定為數(shù)值2至6,以合并共源的3x3、4x4、5x5、6x6或7x7子矩陣的輸出。另外,執(zhí)行于處理器100的架構(gòu)程序會(huì)從權(quán)重隨機(jī)存取存儲(chǔ)器124讀取所產(chǎn)生的稀疏(即具有空洞)結(jié)果列,并利用其它執(zhí)行單元112,例如使用架構(gòu)合并指令的媒體單元,如x86單指令多數(shù)據(jù)流擴(kuò)展(SSE)指令,執(zhí)行合并功能。以類(lèi)似于前述同時(shí)進(jìn)行的方式并利用神經(jīng)網(wǎng)絡(luò)單元121的混合本質(zhì),執(zhí)行于處理器100的架構(gòu)程序可以讀取狀態(tài)緩存器127以監(jiān)測(cè)權(quán)重隨機(jī)存取存儲(chǔ)器124的最近寫(xiě)入列(例如圖26B的字段2602)以讀取所產(chǎn)生的一稀疏結(jié)果列,將其合并并寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124的同一列,如此就完成準(zhǔn)備而能作為一輸入數(shù)據(jù)矩陣,提供給神經(jīng)網(wǎng)絡(luò)的下一層使用,例如卷積層或是傳統(tǒng)神經(jīng)網(wǎng)絡(luò)層(也即乘法累加層)。此外,本文所述的實(shí)施例以4x4子矩陣執(zhí)行共源運(yùn)算,不過(guò)本發(fā)明并不限于此,圖28的神經(jīng)網(wǎng)絡(luò)單元程序可經(jīng)調(diào)整,而以其它尺寸的子矩陣,如3x3、5x5、6x6或7x7,執(zhí)行共源運(yùn)算。如前述可以發(fā)現(xiàn),寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的結(jié)果列的數(shù)量是輸入數(shù)據(jù)矩陣的列數(shù)的四分之一。最后,在此范例中并未使用數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。不過(guò),也可利用數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,而非權(quán)重隨機(jī)存取存儲(chǔ)器124,來(lái)執(zhí)行共源運(yùn)算。在圖27與圖28的實(shí)施例中,共源運(yùn)算會(huì)計(jì)算子區(qū)域的最大值。不過(guò),圖28的程序可經(jīng)調(diào)整以計(jì)算子區(qū)域的平均值,利入透過(guò)將maxwacc指令以sumwacc指令取代(將權(quán)重文字與累加器202數(shù)值217加總)并將地址9的啟動(dòng)函數(shù)指令修改為將累加結(jié)果除以各個(gè)子區(qū)域的元素?cái)?shù)(較佳者透過(guò)如下所述的倒數(shù)乘法運(yùn)算),在此范例中為十六。由神經(jīng)網(wǎng)絡(luò)單元121依據(jù)圖27與圖28的運(yùn)算中可以發(fā)現(xiàn),每一次執(zhí)行圖28的程序需要使用大約6000個(gè)時(shí)頻周期來(lái)對(duì)圖27所示的整個(gè)512x1600數(shù)據(jù)矩陣執(zhí)行一次共源運(yùn)算,此運(yùn)算所使用的時(shí)頻周期數(shù)明顯少于傳統(tǒng)方式執(zhí)行相類(lèi)似任務(wù)所需的時(shí)頻周期數(shù)。另外,架構(gòu)程序可使神經(jīng)網(wǎng)絡(luò)單元程序?qū)⒐苍催\(yùn)算的結(jié)果寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122列,而非將結(jié)果寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124,當(dāng)神經(jīng)網(wǎng)絡(luò)單元121將結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122時(shí)(例如使用圖26B的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122最近寫(xiě)入列2606的地址),架構(gòu)程序會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取結(jié)果。此配置適用具有單端口權(quán)重隨機(jī)存取存儲(chǔ)器124與雙端口數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的實(shí)施例。定點(diǎn)算術(shù)運(yùn)算,具有使用者提供二進(jìn)制小數(shù)點(diǎn),全精度定點(diǎn)累加,使用者指定倒數(shù)值,累加器數(shù)值的隨機(jī)舍入,以及可選擇啟動(dòng)/輸出函數(shù)一般而言,在數(shù)字計(jì)算裝置內(nèi)執(zhí)行算術(shù)運(yùn)算的硬件單元依據(jù)其執(zhí)行算術(shù)運(yùn)算的對(duì)象為整數(shù)或浮點(diǎn)數(shù),通??煞譃椤罢麛?shù)”單元與“浮點(diǎn)”單元。浮點(diǎn)數(shù)具有數(shù)值(magnitude)(或尾數(shù))與指數(shù),通常還有符號(hào)。指數(shù)是基數(shù)(radix)點(diǎn)(通常為二進(jìn)制小數(shù)點(diǎn))相對(duì)于數(shù)值的位置的指針。相較之下,整數(shù)不具有指數(shù),而只具有數(shù)值,通常還有符號(hào)。浮點(diǎn)單元可以讓程序設(shè)計(jì)者可以從一個(gè)非常大范圍的不同數(shù)值中取得其工作所要使用的數(shù)字,而硬件則是在需要時(shí)負(fù)責(zé)調(diào)整此數(shù)字的指數(shù)值,而不需程序設(shè)計(jì)者處理。舉例來(lái)說(shuō),假定兩個(gè)浮點(diǎn)數(shù)0.111x1029與0.81x1031相乘。(雖然浮點(diǎn)單元通常工作于2為基礎(chǔ)的浮點(diǎn)數(shù),此范例中所使用的是十進(jìn)制小數(shù),或以10為基礎(chǔ)的浮點(diǎn)數(shù)。)浮點(diǎn)單元會(huì)自動(dòng)負(fù)責(zé)尾數(shù)相乘,指數(shù)相加,隨后再將結(jié)果標(biāo)準(zhǔn)化至數(shù)值.8911x1059。在另一個(gè)范例中,假定同樣的兩個(gè)浮點(diǎn)數(shù)相加。浮點(diǎn)單元會(huì)在相加前自動(dòng)負(fù)責(zé)將尾數(shù)的二進(jìn)制小數(shù)點(diǎn)對(duì)齊以產(chǎn)生數(shù)值為.81111x1031的總數(shù)。不過(guò),眾所周知,這樣復(fù)雜的運(yùn)算而會(huì)導(dǎo)致浮點(diǎn)單元的尺寸增加,耗能增加、每指令所需時(shí)頻周期數(shù)增加、以及/或周期時(shí)間拉長(zhǎng)。因?yàn)檫@個(gè)原因,許多裝置(如嵌入式處理器、微控制器與相對(duì)低成本和/或低功率的微處理器)并不具有浮點(diǎn)單元。由前述范例可以發(fā)現(xiàn),浮點(diǎn)單元的復(fù)雜結(jié)構(gòu)包含執(zhí)行關(guān)聯(lián)于浮點(diǎn)加法與乘法/除法的指數(shù)計(jì)算的邏輯(即對(duì)操作數(shù)的指數(shù)執(zhí)行加/減運(yùn)算以產(chǎn)生浮點(diǎn)乘法/除法的指數(shù)數(shù)值的加法器,將操作數(shù)指數(shù)相減以確認(rèn)浮點(diǎn)加法的二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)偏移量的減法器),包含為了達(dá)成浮點(diǎn)加法中尾數(shù)的二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)的偏移器,包含對(duì)浮點(diǎn)結(jié)果進(jìn)行標(biāo)準(zhǔn)化處理的偏移器。此外,流程的進(jìn)行通常還需要執(zhí)行浮點(diǎn)結(jié)果的舍入運(yùn)算的邏輯、執(zhí)行整數(shù)格式與浮點(diǎn)格式間以及不同浮點(diǎn)格式(例如擴(kuò)增精度、雙精度、單精度、半精度)間的轉(zhuǎn)換的邏輯、前導(dǎo)零與前導(dǎo)一的偵測(cè)器、以及處理特殊浮點(diǎn)數(shù)的邏輯,例如反常值、非數(shù)值與無(wú)窮值。此外,關(guān)于浮點(diǎn)單元的正確度驗(yàn)證會(huì)因?yàn)樵O(shè)計(jì)上需要被驗(yàn)證的數(shù)值空間增加而大幅增加其復(fù)雜度,而會(huì)延長(zhǎng)產(chǎn)品開(kāi)發(fā)周期與上市時(shí)間。此外,如前述,浮點(diǎn)算術(shù)運(yùn)算需要對(duì)用于計(jì)算的每個(gè)浮點(diǎn)數(shù)的尾數(shù)字段與指數(shù)字段分別儲(chǔ)存與使用,而會(huì)增加所需的儲(chǔ)存空間和/或在給定儲(chǔ)存空間以?xún)?chǔ)存整數(shù)的情況下降低精確度。其中許多缺點(diǎn)都可以透過(guò)整數(shù)單元執(zhí)行算術(shù)運(yùn)算來(lái)避免。程序設(shè)計(jì)者通常需要撰寫(xiě)處理小數(shù)的程序,小數(shù)即為非完整數(shù)的數(shù)值。這種程序可能需要在不具有浮點(diǎn)單元的處理器上執(zhí)行,或是處理器雖然具有浮點(diǎn)單元,不過(guò)由處理器的整數(shù)單元執(zhí)行整數(shù)指令會(huì)比較快。為了利用整數(shù)處理器在效能上的優(yōu)勢(shì),程序設(shè)計(jì)者會(huì)對(duì)定點(diǎn)數(shù)值(fixed-pointnumbers)使用習(xí)知的定點(diǎn)算術(shù)運(yùn)算。這樣的程序會(huì)包括執(zhí)行于整數(shù)單元以處理整數(shù)或整數(shù)數(shù)據(jù)的指令。軟件知道數(shù)據(jù)是小數(shù),這個(gè)軟件并包含指令對(duì)整數(shù)數(shù)據(jù)執(zhí)行運(yùn)算而處理這個(gè)數(shù)據(jù)實(shí)際上是小數(shù)的問(wèn)題,例如對(duì)準(zhǔn)偏移器。基本上,定點(diǎn)軟件可手動(dòng)執(zhí)行某些或全部浮點(diǎn)單元所能執(zhí)行的功能。在本文中,一個(gè)“定點(diǎn)”數(shù)(或值或操作數(shù)或輸入或輸出)是一個(gè)數(shù)字,其儲(chǔ)存位被理解為包含位以表示此定點(diǎn)數(shù)的一小數(shù)部分,此位在此稱(chēng)為“小數(shù)位”。定點(diǎn)數(shù)的儲(chǔ)存位包含于存儲(chǔ)器或緩存器內(nèi),例如存儲(chǔ)器或緩存器內(nèi)的一個(gè)8位或16位文字。此外,定點(diǎn)數(shù)的儲(chǔ)存位全部都用來(lái)表達(dá)一個(gè)數(shù)值,而在某些情況下,其中一個(gè)位會(huì)用來(lái)表達(dá)符號(hào),不過(guò),沒(méi)有一個(gè)定點(diǎn)數(shù)的儲(chǔ)存位會(huì)用來(lái)表達(dá)這個(gè)數(shù)的指數(shù)。此外,此定點(diǎn)數(shù)的小數(shù)位數(shù)量或稱(chēng)二進(jìn)制小數(shù)點(diǎn)位置指定于一個(gè)不同于定點(diǎn)數(shù)儲(chǔ)存位的儲(chǔ)存空間內(nèi),并且是以共享或通用的方式指出小數(shù)位的數(shù)量或稱(chēng)二進(jìn)制小數(shù)點(diǎn)位置,分享給一個(gè)包含此定點(diǎn)數(shù)的定點(diǎn)數(shù)集合,例如輸入操作數(shù)、累加數(shù)值或是處理單元陣列的輸出結(jié)果的集合。在此描述的實(shí)施例中,算術(shù)邏輯單元是整數(shù)單元,不過(guò),啟動(dòng)函數(shù)單元?jiǎng)t是包含浮點(diǎn)算術(shù)硬件輔助或加速。如此可以使算術(shù)邏輯單元部分變得更小且更為快速,以利于在給定的芯片空間上使用更多的算術(shù)邏輯單元。這也表示在單位芯片空間上可以設(shè)置更多的神經(jīng)元,而特別有利于神經(jīng)網(wǎng)絡(luò)單元。此外,相較于每個(gè)浮點(diǎn)數(shù)都需要指數(shù)儲(chǔ)存位,本文所述的實(shí)施例中的定點(diǎn)數(shù)以一個(gè)指針表達(dá)全部的數(shù)字集合中屬于小數(shù)位的儲(chǔ)存位的數(shù)量,不過(guò),此指針位于一個(gè)單一、共享的儲(chǔ)存空間而廣泛地指出整個(gè)集合的所有數(shù)字,例如一系列運(yùn)算的輸入集合、一系列運(yùn)算的累加數(shù)的集合、輸出的集合,其中小數(shù)位的數(shù)量。就一較佳實(shí)施例而言,神經(jīng)網(wǎng)絡(luò)單元的使用者可對(duì)此數(shù)字集合指定小數(shù)儲(chǔ)存位的數(shù)量。因此,可以理解的是,雖然在許多情況下(如一般數(shù)學(xué)),“整數(shù)”的用語(yǔ)是指一個(gè)帶符號(hào)完整數(shù),也就是一個(gè)不具有小數(shù)部分的數(shù)字,不過(guò),在本文的脈絡(luò)中,“整數(shù)”的用語(yǔ)可表示具有小數(shù)部分的數(shù)字。此外,在本文的脈絡(luò)中,“整數(shù)”的用語(yǔ)是為了與浮點(diǎn)數(shù)進(jìn)行區(qū)分,對(duì)于浮點(diǎn)數(shù)而言,其各自?xún)?chǔ)存空間內(nèi)的部分位會(huì)用來(lái)表達(dá)浮點(diǎn)數(shù)的指數(shù)。類(lèi)似地,整數(shù)算術(shù)運(yùn)算,如整數(shù)單元執(zhí)行的整數(shù)乘法或加法或比較運(yùn)算,假設(shè)操作數(shù)中不具有指數(shù),因此,整數(shù)單元的整陣列件,如整數(shù)乘法器、整數(shù)加法器、整數(shù)比較器,就不需要包含邏輯來(lái)處理指數(shù),例如不需要為了加法或比較運(yùn)算而移動(dòng)尾數(shù)來(lái)對(duì)準(zhǔn)二進(jìn)制小數(shù)點(diǎn),不需要為了乘法運(yùn)算而將指數(shù)相加。此外,本文所述的實(shí)施例包括一個(gè)大型的硬件整數(shù)累加器以對(duì)一個(gè)大型系列的整數(shù)運(yùn)算進(jìn)行累加(如1000個(gè)乘法累加運(yùn)算)而不會(huì)喪失精確度。如此可避免神經(jīng)網(wǎng)絡(luò)單元處理浮點(diǎn)數(shù),同時(shí)又能使累加數(shù)維持全精度,而不會(huì)使其飽和或因?yàn)橐缥欢a(chǎn)生不準(zhǔn)確的結(jié)果。一旦這系列整數(shù)運(yùn)算加總出一結(jié)果輸入此全精度累加器,此定點(diǎn)硬件輔助會(huì)執(zhí)行必要的縮放與飽和運(yùn)算,藉以利用使用者指定的累加值小數(shù)位數(shù)量指針以及輸出值所需要的小數(shù)位數(shù)量,將此全精度累加值轉(zhuǎn)換為一輸出值,這部分在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。當(dāng)需要將累加值從全精度形式進(jìn)行壓縮以便用于啟動(dòng)函數(shù)的一輸入或是用于傳遞,就一較佳實(shí)施例而言,啟動(dòng)函數(shù)單元可以選擇性地對(duì)累加值執(zhí)行隨機(jī)舍入運(yùn)算,這部分在后續(xù)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。最后,依據(jù)神經(jīng)網(wǎng)絡(luò)的給定層的不同需求,神經(jīng)處理單元可以選擇性地接受指示以使用不同的啟動(dòng)函數(shù)以及/或輸出許多不同形式的累加值。圖29A為顯示圖1的控制緩存器127的一實(shí)施例的方塊示意圖。此控制緩存器127可包括多個(gè)控制緩存器127。如圖中所示,此控制緩存器127包括下列字段:配置2902、帶符號(hào)數(shù)據(jù)2912、帶符號(hào)權(quán)重2914、數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922、權(quán)重二進(jìn)制小數(shù)點(diǎn)2924、算術(shù)邏輯單元函數(shù)2926、舍入控制2932、啟動(dòng)函數(shù)2934、倒數(shù)2942、偏移量2944、輸出隨機(jī)存取存儲(chǔ)器2952、輸出二進(jìn)制小數(shù)點(diǎn)2954、以及輸出命令2956。控制緩存器127值可以利用MTNN指令1400與NNU程序的指令,如啟動(dòng)指令,進(jìn)行寫(xiě)入動(dòng)作。配置2902值指定神經(jīng)網(wǎng)絡(luò)單元121是屬于窄配置、寬配置或是漏斗配置,如前所述。配置2902也設(shè)定了由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124接收的輸入文字的大小。在窄配置與漏斗配置中,輸入文字的大小是窄的(例如8位或9位),不過(guò),在寬配置中,輸入文字的大小則是寬的(例如12位或16位)。此外,配置2902也設(shè)定了與輸入文字大小相同的輸出結(jié)果133的大小。帶符號(hào)數(shù)據(jù)值2912為真的時(shí)候,即表示由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字為帶符號(hào)值,若為假,則表示這些數(shù)據(jù)文字為不帶符號(hào)值。帶符號(hào)權(quán)重值2914為真的時(shí)候,即表示由權(quán)重隨機(jī)存取存儲(chǔ)器122接收的權(quán)重文字為帶符號(hào)值,若為假,則表示這些權(quán)重文字為不帶符號(hào)值。數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922值表示由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收的數(shù)據(jù)文字的二進(jìn)制小數(shù)點(diǎn)位置。就一較佳實(shí)施例而言,對(duì)于二進(jìn)制小數(shù)點(diǎn)的位置而言,數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922值即表示二進(jìn)制小數(shù)點(diǎn)從右側(cè)計(jì)算的位位置數(shù)量。換言之,數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922表示數(shù)據(jù)文字的最低有效位中屬于小數(shù)位的數(shù)量,即位于二進(jìn)制小數(shù)點(diǎn)右側(cè)的位數(shù)。類(lèi)似地,權(quán)重二進(jìn)制小數(shù)點(diǎn)2924值表示由權(quán)重隨機(jī)存取存儲(chǔ)器124接收的權(quán)重文字的二進(jìn)制小數(shù)點(diǎn)位置。就一較佳實(shí)施例而言,當(dāng)算術(shù)邏輯單元函數(shù)2926是一個(gè)乘法與累加或輸出累加,神經(jīng)處理單元126將裝載于累加器202的數(shù)值的二進(jìn)制小數(shù)點(diǎn)右側(cè)的位數(shù)確定為數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922與權(quán)重二進(jìn)制小數(shù)點(diǎn)2924的加總。因此,舉例來(lái)說(shuō),若是數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922的值為5而權(quán)重二進(jìn)制小數(shù)點(diǎn)2924的值為3,累加器202內(nèi)的值就會(huì)在二進(jìn)制小數(shù)點(diǎn)右側(cè)有8個(gè)位。當(dāng)算術(shù)邏輯單元函數(shù)2926是一個(gè)總數(shù)/最大值累加器與數(shù)據(jù)/權(quán)重文字或是傳遞數(shù)據(jù)/權(quán)重文字,神經(jīng)處理單元126會(huì)將裝載于累加器202的數(shù)值的二進(jìn)制小數(shù)點(diǎn)右側(cè)的位數(shù)分別確定為數(shù)據(jù)/權(quán)重二進(jìn)制小數(shù)點(diǎn)2922/2924。在另一實(shí)施例中,則是指定單一個(gè)累加器二進(jìn)制小數(shù)點(diǎn)2923,而不去指定個(gè)別的數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922與權(quán)重二進(jìn)制小數(shù)點(diǎn)2924。這部分在后續(xù)對(duì)應(yīng)于圖29B處會(huì)有更詳細(xì)的說(shuō)明。算術(shù)邏輯單元函數(shù)2926指定由神經(jīng)處理單元126的算術(shù)邏輯單元204執(zhí)行的函數(shù)。如前述,算術(shù)邏輯單元函數(shù)2926可包括以下運(yùn)算但不限于:將數(shù)據(jù)文字209與權(quán)重文字203相乘并將此乘積與累加器202相加;將累加器202與權(quán)重文字203相加;將累加器202與數(shù)據(jù)文字209相加;累加器202與數(shù)據(jù)文字209中的最大值;累加器202與權(quán)重文字209中的最大值;輸出累加器202;傳遞數(shù)據(jù)文字209;傳遞權(quán)重文字209;輸出零值。在一實(shí)施例中,此算術(shù)邏輯單元函數(shù)2926由神經(jīng)網(wǎng)絡(luò)單元初始化指令予以指定,并且由算術(shù)邏輯單元204使用以因應(yīng)一執(zhí)行指令(未圖示)。在一實(shí)施例中,此算術(shù)邏輯單元函數(shù)2926由個(gè)別的神經(jīng)網(wǎng)絡(luò)單元指令予以指定,如前述乘法累加以及maxwacc指令。舍入控制2932指定(圖30中)舍入器3004所使用的舍入運(yùn)算的形式。在一實(shí)施例中,可指定的舍入模式包括但不限于:不舍入、舍入至最近值、以及隨機(jī)舍入。就一較佳實(shí)施例而言,處理器100包括隨機(jī)位來(lái)源3003(請(qǐng)參照?qǐng)D30)以產(chǎn)生隨機(jī)位3005,這些隨機(jī)位3005經(jīng)取樣用以執(zhí)行隨機(jī)舍入以降低產(chǎn)生舍入偏差的可能性。在一實(shí)施例中,當(dāng)舍入位3005為一而黏(sticky)位為零,若是取樣的隨機(jī)位3005為真,神經(jīng)處理單元126就會(huì)向上舍入,若是取樣的隨機(jī)位3005為假,神經(jīng)處理單元126就不會(huì)向上舍入。在一實(shí)施例中,隨機(jī)位來(lái)源3003基于處理器100具有的隨機(jī)電子特性進(jìn)行取樣以產(chǎn)生隨機(jī)位3005,這些隨機(jī)電子特性如半導(dǎo)體二極管或電阻的熱噪聲,不過(guò)本發(fā)明并不限于此。啟動(dòng)函數(shù)2934指定用于累加器202數(shù)值217的函數(shù)以產(chǎn)生神經(jīng)處理單元126的輸出133。如本文所述,啟動(dòng)函數(shù)2934包括但不限于:S型函數(shù);雙曲正切函數(shù);軟加函數(shù);校正函數(shù);除以二的指定冪次方;乘上一個(gè)使用者指定的倒數(shù)值以達(dá)成等效除法;傳遞整個(gè)累加器;以及將累加器以標(biāo)準(zhǔn)尺寸傳遞,這部分在以下章節(jié)會(huì)有更詳細(xì)的說(shuō)明。在一實(shí)施例中,啟動(dòng)函數(shù)由神經(jīng)網(wǎng)絡(luò)單元啟動(dòng)函數(shù)指令所指定。另外,啟動(dòng)函數(shù)也可由初始化指令所指定,并因應(yīng)輸出指令而使用,例如圖4中地址4的啟動(dòng)函數(shù)單元輸出指令,在此實(shí)施例中,位于圖4中地址3的啟動(dòng)函數(shù)指令會(huì)包含于輸出指令內(nèi)。倒數(shù)2942值指定一個(gè)與累加器202數(shù)值217相乘以達(dá)成對(duì)累加器202數(shù)值217進(jìn)行除法運(yùn)算的數(shù)值。也就是說(shuō),使用者所指定的倒數(shù)2942值會(huì)是實(shí)際上想要執(zhí)行的除數(shù)的倒數(shù)。這有利于搭配如本文所述的卷積或共源運(yùn)算。就一較佳實(shí)施例而言,使用者會(huì)將倒數(shù)2942值指定為兩個(gè)部分,這在后續(xù)對(duì)應(yīng)于圖29C處會(huì)有更詳細(xì)的說(shuō)明。在一實(shí)施例中,控制緩存器127包括一字段(未圖示)讓使用者可以在多個(gè)內(nèi)建除數(shù)值中指定一個(gè)進(jìn)行除法,這些內(nèi)建除數(shù)值的大小相當(dāng)于常用的卷積核的大小,如9、25、36或49。在此實(shí)施例中,啟動(dòng)函數(shù)單元212會(huì)儲(chǔ)存這些內(nèi)建除數(shù)的倒數(shù),用以與累加器202數(shù)值217相乘。偏移量2944指定啟動(dòng)函數(shù)單元212的移位器會(huì)將累加器202數(shù)值217右移的位數(shù),以達(dá)成將其除以二的冪次方的運(yùn)算。這有利于搭配尺寸為二的冪次方的卷積核進(jìn)行運(yùn)算。輸出隨機(jī)存取存儲(chǔ)器2952值會(huì)在數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124中指定一個(gè)來(lái)接收輸出結(jié)果133。輸出二進(jìn)制小數(shù)點(diǎn)2954值表示輸出結(jié)果133的二進(jìn)制小數(shù)點(diǎn)的位置。就一較佳實(shí)施例而言,對(duì)于輸出結(jié)果133的二進(jìn)制小數(shù)點(diǎn)的位置而言,輸出二進(jìn)制小數(shù)點(diǎn)2954值即表示從右側(cè)計(jì)算的位位置數(shù)量。換言之,輸出二進(jìn)制小數(shù)點(diǎn)2954表示輸出結(jié)果133的最低有效位中屬于小數(shù)位的數(shù)量,即位于二進(jìn)制小數(shù)點(diǎn)右側(cè)的位數(shù)。啟動(dòng)函數(shù)單元212會(huì)基于輸出二進(jìn)制小數(shù)點(diǎn)2954的數(shù)值(在大部分的情況下,也會(huì)基于數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922、權(quán)重二進(jìn)制小數(shù)點(diǎn)2924、啟動(dòng)函數(shù)2934和/或配置2902的數(shù)值)執(zhí)行舍入、壓縮、飽和與尺寸轉(zhuǎn)換的運(yùn)算。輸出命令2956會(huì)從許多面向控制輸出結(jié)果133。在一實(shí)施例中,啟動(dòng)函數(shù)單元121會(huì)利用標(biāo)準(zhǔn)尺寸的概念,標(biāo)準(zhǔn)尺寸為配置2902指定的寬度大小(以位計(jì))的兩倍。如此,舉例來(lái)說(shuō),若是配置2902設(shè)定由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124接收的輸入文字的大小為8位,標(biāo)準(zhǔn)尺寸就會(huì)是16位;在另一個(gè)范例中,若是配置2902設(shè)定由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124接收的輸入文字的大小為16位,標(biāo)準(zhǔn)尺寸就會(huì)是32位。如本文所述,累加器202的尺寸較大(舉例來(lái)說(shuō),窄的累加器202B為28位,而寬的累加器202A則是41位)以維持中間計(jì)算,如1024與512個(gè)神經(jīng)網(wǎng)絡(luò)單元乘法累加指令,的全精度。如此,累加器202數(shù)值217就會(huì)大于(以位計(jì))標(biāo)準(zhǔn)尺寸,而對(duì)于啟動(dòng)函數(shù)2934的大部分?jǐn)?shù)值(除了傳遞整個(gè)累加器),啟動(dòng)函數(shù)單元212(例如以下對(duì)應(yīng)于圖30的段落所述的標(biāo)準(zhǔn)尺寸壓縮器3008)就會(huì)將累加器202數(shù)值217壓縮至標(biāo)準(zhǔn)尺寸的大小。輸出命令2956的第一默認(rèn)值會(huì)指示啟動(dòng)函數(shù)單元212執(zhí)行指定的啟動(dòng)函數(shù)2934以產(chǎn)生內(nèi)部結(jié)果并將此內(nèi)部結(jié)果作為輸出結(jié)果133輸出,此內(nèi)部結(jié)果的大小等于原始輸入文字的大小,即標(biāo)準(zhǔn)尺寸的一半。輸出命令2956的第二默認(rèn)值會(huì)指示啟動(dòng)函數(shù)單元212執(zhí)行指定的啟動(dòng)函數(shù)2934以產(chǎn)生內(nèi)部結(jié)果并將此內(nèi)部結(jié)果的下半部作為輸出結(jié)果133輸出,此內(nèi)部結(jié)果的大小等于原始輸入文字的大小的兩倍,即標(biāo)準(zhǔn)尺寸;而輸出命令2956的第三默認(rèn)值會(huì)指示啟動(dòng)函數(shù)單元212將標(biāo)準(zhǔn)尺寸的內(nèi)部結(jié)果的上半部作為輸出結(jié)果133輸出。輸出命令2956的第四默認(rèn)值會(huì)指示啟動(dòng)函數(shù)單元212將累加器202的未經(jīng)處理的最低有效文字作為輸出結(jié)果133輸出;而輸出命令2956的第五默認(rèn)值會(huì)指示啟動(dòng)函數(shù)單元212將累加器202的未經(jīng)處理的中間有效文字作為輸出結(jié)果133輸出;輸出命令2956的第六默認(rèn)值會(huì)指示啟動(dòng)函數(shù)單元212將累加器202的未經(jīng)處理的最高有效文字(其寬度由配置2902所指定)作為輸出結(jié)果133輸出,這在前文對(duì)應(yīng)于圖8至圖10的章節(jié)有更詳細(xì)的說(shuō)明。如前述,輸出整個(gè)累加器202尺寸或是標(biāo)準(zhǔn)尺寸的內(nèi)部結(jié)果有助于讓處理器100的其它執(zhí)行單元112可以執(zhí)行啟動(dòng)函數(shù),如軟極大啟動(dòng)函數(shù)。圖29A(以及圖29B與圖29C)所描述的字段位于控制緩存器127內(nèi)部,不過(guò),本發(fā)明并不限于此,其中一個(gè)或多個(gè)字段也可位于神經(jīng)網(wǎng)絡(luò)單元121的其它部分。就一較佳實(shí)施例而言,其中許多字段可以包含在神經(jīng)網(wǎng)絡(luò)單元指令內(nèi)部,并由定序器128予以譯碼以產(chǎn)生微指令3416(請(qǐng)參照?qǐng)D34)控制算術(shù)邏輯單元204以及/或啟動(dòng)函數(shù)單元212。此外,這些字段也可以包含在儲(chǔ)存于媒體緩存器118的微運(yùn)算3414內(nèi)(請(qǐng)參照?qǐng)D34),以控制算術(shù)邏輯單元204以及/或啟動(dòng)函數(shù)單元212。此實(shí)施例可以降低初始化神經(jīng)網(wǎng)絡(luò)單元指令的使用,而在其它實(shí)施例中則可去除此初始化神經(jīng)網(wǎng)絡(luò)單元指令。如前述,神經(jīng)網(wǎng)絡(luò)單元指令可以指定對(duì)存儲(chǔ)器操作數(shù)(如來(lái)自數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器123的文字)或一個(gè)旋轉(zhuǎn)后操作數(shù)(如來(lái)自多任務(wù)緩存器208/705)執(zhí)行算術(shù)邏輯指令運(yùn)算。在一實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元指令還可以將一個(gè)操作數(shù)指定為啟動(dòng)函數(shù)的緩存器輸出(如圖30的緩存器3038的輸出)。此外,如前述,神經(jīng)網(wǎng)絡(luò)單元指令可以指定來(lái)使數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124的當(dāng)前列地址遞增。在一實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元指令可指定立即帶符號(hào)整數(shù)差值加入當(dāng)前列以達(dá)成遞增或遞減一以外數(shù)值的目的。圖29B為顯示圖1的控制緩存器127的另一實(shí)施例的方塊示意圖。圖29B的控制緩存器127類(lèi)似于圖29A的控制緩存器127,不過(guò),圖29B的控制緩存器127包括一個(gè)累加器二進(jìn)制小數(shù)點(diǎn)2923。累加器二進(jìn)制小數(shù)點(diǎn)2923表示累加器202的二進(jìn)制小數(shù)點(diǎn)位置。就一較佳實(shí)施例而言,累加器二進(jìn)制小數(shù)點(diǎn)2923值表示此二進(jìn)制小數(shù)點(diǎn)位置從右側(cè)的位位置數(shù)量。換言之,累加器二進(jìn)制小數(shù)點(diǎn)2923表示累加器202的最低有效位中屬于小數(shù)位的數(shù)量,即位于二進(jìn)制小數(shù)點(diǎn)右側(cè)的位。在此實(shí)施例中,累加器二進(jìn)制小數(shù)點(diǎn)2923明確指示,而非如圖29A的實(shí)施例是暗中確認(rèn)。圖29C為顯示以?xún)蓚€(gè)部分儲(chǔ)存圖29A的倒數(shù)2942的一實(shí)施例的方塊示意圖。第一個(gè)部分2962是一個(gè)偏移值,表示使用者想要乘上累加器202數(shù)值217的真實(shí)倒數(shù)值中被抑制的前導(dǎo)零的數(shù)量2962。前導(dǎo)零的數(shù)量是緊接在二進(jìn)制小數(shù)點(diǎn)右側(cè)連續(xù)排列的零的數(shù)量。第二部分2694是前導(dǎo)零抑制倒數(shù)值,也就是將所有前導(dǎo)零移除后的真實(shí)倒數(shù)值。在一實(shí)施例中,被抑制前導(dǎo)零數(shù)量2962以4位儲(chǔ)存,而前導(dǎo)零抑制倒數(shù)值2964則是以8位不帶符號(hào)值儲(chǔ)存。舉例來(lái)說(shuō),假設(shè)使用者想要將累加器202數(shù)值217乘上數(shù)值49的倒數(shù)值。數(shù)值49的倒數(shù)值以二維呈現(xiàn)并設(shè)定13個(gè)小數(shù)位就會(huì)是0.0000010100111,其中有五個(gè)前導(dǎo)零。如此,使用者會(huì)將被抑制前導(dǎo)零數(shù)量2962填入數(shù)值5,將前導(dǎo)零抑制倒數(shù)值2964填入數(shù)值10100111。在倒數(shù)乘法器“除法器A”3014(請(qǐng)參照?qǐng)D30)將累加器202數(shù)值217與前導(dǎo)零抑制倒數(shù)值2964相乘后,所產(chǎn)生的乘積會(huì)依據(jù)被抑制前導(dǎo)零數(shù)量2962右移。這樣的實(shí)施例有助于利用相對(duì)較少的位來(lái)表達(dá)倒數(shù)2942值達(dá)成高精確度的要求。圖30為顯示圖2的啟動(dòng)函數(shù)單元212的一實(shí)施例的方塊示意圖。此啟動(dòng)函數(shù)單元212包含圖1的控制邏輯127、一個(gè)正類(lèi)型轉(zhuǎn)換器(PFC)與輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器(OBPA)3002以接收累加器202數(shù)值217、一個(gè)舍入器3004以接收累加器202數(shù)值217與輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002移出的位數(shù)量的指針、一個(gè)如前述的隨機(jī)位來(lái)源3003以產(chǎn)生隨機(jī)位3005、一個(gè)第一多工器3006以接收正類(lèi)型轉(zhuǎn)換器與輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002的輸出以及舍入器3004的輸出、一個(gè)標(biāo)準(zhǔn)尺寸壓縮器(CCS)與飽和器3008以接收第一多工器3006的輸出、一個(gè)位選擇器與飽和器3012以接收標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出、一個(gè)校正器3018以接收標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出、一個(gè)倒數(shù)乘法器3014以接收標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出、一個(gè)向右移位器3016以接收標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出、一個(gè)雙曲正切(tanh)模塊3022以接收位選擇器與飽和器3012的輸出、一個(gè)S型模塊3024以接收位選擇器與飽和器3012的輸出、一個(gè)軟加模塊3026以接收位選擇器與飽和器3012的輸出、一個(gè)第二多工器3032以接收雙曲正切模塊3022、S型模塊3024、軟加模塊3026、校正器3018、倒數(shù)乘法器3014與向右移位器3016的輸出以及標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008所傳遞的標(biāo)準(zhǔn)尺寸輸出3028、一個(gè)符號(hào)恢復(fù)器3034以接收第二多工器3032的輸出、一個(gè)尺寸轉(zhuǎn)換器與飽和器3036以接收符號(hào)恢復(fù)器3034的輸出、一第三多工器3037以接收尺寸轉(zhuǎn)換器與飽和器3036的輸出與累加器輸出217、以及一個(gè)輸出緩存器3038以接收多工器3037的輸出,而其輸出即為圖1中的結(jié)果133。正類(lèi)型轉(zhuǎn)換器與輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002接收累加器202值217。就一較佳實(shí)施例而言,如前述,累加器202值217是一個(gè)全精度值。也就是說(shuō),累加器202具有足夠的儲(chǔ)存位數(shù)以裝載累加數(shù),此累加數(shù)是由整數(shù)加法器244將一系列由整數(shù)乘法器242產(chǎn)生的乘積相加所產(chǎn)生的總數(shù),而此運(yùn)算不舍棄乘法器242的個(gè)別乘積或加法器的各個(gè)總數(shù)中的任何一個(gè)位以維持精確度。就一較佳實(shí)施例而言,累加器202至少具有足夠的位數(shù)來(lái)裝載神經(jīng)網(wǎng)絡(luò)單元121可被程序化執(zhí)行產(chǎn)生的乘積累加的最大數(shù)量。舉例來(lái)說(shuō),請(qǐng)參照?qǐng)D4的程序,在寬配置下,神經(jīng)網(wǎng)絡(luò)單元121可被程序化執(zhí)行產(chǎn)生的乘積累加的最大數(shù)量為512,而累加數(shù)202位寬度為41。在另一范例中,請(qǐng)參照?qǐng)D20的程序,在窄配置下,神經(jīng)網(wǎng)絡(luò)單元121可被程序化執(zhí)行產(chǎn)生的乘積累加的最大數(shù)量為1024,而累加數(shù)202位寬度為28?;旧希壤奂悠?02具有至少Q(mào)個(gè)位,其中Q是M與log2P的加總,其中M是乘法器242的整數(shù)乘積的位寬度(舉例來(lái)說(shuō),對(duì)于窄乘法器242而言是16位,對(duì)于寬乘法器242而言是32位),而P是累加器202所能累加的乘積的最大容許數(shù)量。就一較佳實(shí)施例而言,乘積累加的最大數(shù)量是依據(jù)神經(jīng)網(wǎng)絡(luò)單元121的程序設(shè)計(jì)者的程序規(guī)格所指定。在一實(shí)施例中,假定一個(gè)先前乘法累加指令用以從數(shù)據(jù)/權(quán)重隨機(jī)存取存儲(chǔ)器122/124加載數(shù)據(jù)/權(quán)重文字206/207列(如圖4中地址1的指令)的基礎(chǔ)上,定序器128會(huì)執(zhí)行乘法累加神經(jīng)網(wǎng)絡(luò)單元指令(如圖4中地址2的指令)的計(jì)數(shù)的最大值是例如511。利用一個(gè)具有足夠位寬度而能對(duì)所容許累加的最大數(shù)量的全精度值執(zhí)行累加運(yùn)算的累加器202,即可簡(jiǎn)化神經(jīng)處理單元126的算術(shù)邏輯單元204的設(shè)計(jì)。特別是,這樣處理可以緩和需要使用邏輯來(lái)對(duì)整數(shù)加法器244產(chǎn)生的總數(shù)執(zhí)行飽和運(yùn)算的需求,因?yàn)檎麛?shù)加法器244會(huì)使一個(gè)小型累加器產(chǎn)生溢位,而需要持續(xù)追蹤累加器的二進(jìn)制小數(shù)點(diǎn)位置以確認(rèn)是否產(chǎn)生溢位以確認(rèn)是否需要執(zhí)行飽和運(yùn)算。舉例來(lái)說(shuō),對(duì)于具有非全精度累加器但具有飽和邏輯以處理非全精度累加器的溢位的設(shè)計(jì)而言,假定存在以下情況。(1)數(shù)據(jù)文字值的范圍是介于0與1之間而所有儲(chǔ)存位都用以?xún)?chǔ)存小數(shù)位。權(quán)重文字值的范圍是介于-8與+8之間而除了三個(gè)以外的所有儲(chǔ)存位都用以?xún)?chǔ)存小數(shù)位。做為一個(gè)雙曲正切啟動(dòng)函數(shù)的輸入的累加值的范圍是介于-8與8之間,而除了三個(gè)以外的所有儲(chǔ)存位都用以?xún)?chǔ)存小數(shù)位。(2)累加器的位寬度為非全精度(如只有乘積的位寬度)。(3)假定累加器為全精度,最終累加值也大約會(huì)介于-8與8之間(如+4.2);不過(guò),在此序列中“點(diǎn)A”前的乘積會(huì)較頻繁地產(chǎn)生正值,而在點(diǎn)A后的乘積則會(huì)較頻繁地產(chǎn)生負(fù)值。在此情況下,就可能取得不正確的結(jié)果(如+4.2以外的結(jié)果)。這是因?yàn)樵邳c(diǎn)A前方的某些點(diǎn),當(dāng)需要使累加器達(dá)到一個(gè)超過(guò)其飽和最大值+8的數(shù)值,如+8.2,就會(huì)損失多出的0.2。累加器甚至?xí)故O碌某朔e累加結(jié)果維持在飽和值,而會(huì)損失更多正值。因此,累加器的最終值可能會(huì)小于使用具有全精度位寬度的累加器所計(jì)算的數(shù)值(即小于+4.2)。正類(lèi)型轉(zhuǎn)換器3004會(huì)在累加器202數(shù)值217為負(fù)時(shí),將其轉(zhuǎn)換為正類(lèi)型,并產(chǎn)生額外位指出原本數(shù)值的正負(fù),這個(gè)位會(huì)隨同此數(shù)值向下傳遞至啟動(dòng)函數(shù)單元212管線。將負(fù)數(shù)轉(zhuǎn)換為正類(lèi)型可以簡(jiǎn)化后續(xù)啟動(dòng)函數(shù)單元121的運(yùn)算。舉例來(lái)說(shuō),經(jīng)此處理后,只有正值會(huì)輸入雙曲正切模塊3022與S型模塊3024,因而可以簡(jiǎn)化這些模塊的設(shè)計(jì)。此外,也可以簡(jiǎn)化舍入器3004與飽和器3008。輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002會(huì)向右移動(dòng)或縮放此正類(lèi)型值,使其對(duì)準(zhǔn)于控制緩存器127內(nèi)指定的輸出二進(jìn)制小數(shù)點(diǎn)2954。就一較佳實(shí)施例而言,輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002會(huì)計(jì)算累加器202數(shù)值217的小數(shù)位數(shù)(例如由累加器二進(jìn)制小數(shù)點(diǎn)2923所指定或是數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922與權(quán)重二進(jìn)制小數(shù)點(diǎn)2924的加總)減去輸出的小數(shù)位數(shù)(例如由輸出二進(jìn)制小數(shù)點(diǎn)2954所指定)的差值作為偏移量。如此,舉例來(lái)說(shuō),若是累加器202二進(jìn)制小數(shù)點(diǎn)2923為8(即上述實(shí)施例)而輸出二進(jìn)制小數(shù)點(diǎn)2954為3,輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002就會(huì)將此正類(lèi)型數(shù)值右移5個(gè)位以產(chǎn)生提供至多工器3006與舍入器3004的結(jié)果。舍入器3004會(huì)對(duì)累加器202數(shù)值217執(zhí)行舍入運(yùn)算。就一較佳實(shí)施例而言,舍入器3004會(huì)對(duì)正類(lèi)型轉(zhuǎn)換器與輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002產(chǎn)生的正類(lèi)型數(shù)值產(chǎn)生一個(gè)舍入后版本,并將此舍入后版本提供至多工器3006。舍入器3004會(huì)依據(jù)前述舍入控制2932執(zhí)行舍入運(yùn)算,如本文所述,前述舍入控制會(huì)包括使用隨機(jī)位3005的隨機(jī)舍入。多工器3006會(huì)依據(jù)舍入控制2932(如本文所述,可包含隨機(jī)舍入),在其多個(gè)輸入中選擇其一,也就是來(lái)自正類(lèi)型轉(zhuǎn)換器與輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002的正類(lèi)型數(shù)值或是來(lái)自舍入器3004的舍入后版本,并且將選擇后的數(shù)值提供給標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008。就一較佳實(shí)施例而言,若是舍入控制指定不進(jìn)行舍入,多工器3006就會(huì)選擇正類(lèi)型轉(zhuǎn)換器與輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002的輸出,否則就會(huì)選擇舍入器3004的輸出。在其它實(shí)施例中,也可由啟動(dòng)函數(shù)單元212執(zhí)行額外的舍入運(yùn)算。舉例來(lái)說(shuō),在一實(shí)施例中,當(dāng)位選擇器3012對(duì)標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出(如后述)位進(jìn)行壓縮時(shí),位選擇器3012會(huì)基于遺失的低順位位進(jìn)行舍入運(yùn)算。在另一個(gè)范例中,倒數(shù)乘法器3014(如后述)的乘積會(huì)被施以舍入運(yùn)算。在又一個(gè)范例中,尺寸轉(zhuǎn)換器3036需要轉(zhuǎn)換出適當(dāng)?shù)妮敵龀叽?如后述),此轉(zhuǎn)換可能涉及丟去某些用于決定舍入的低順位位,就會(huì)執(zhí)行舍入運(yùn)算。標(biāo)準(zhǔn)尺寸壓縮器3008會(huì)將多工器3006輸出值壓縮至標(biāo)準(zhǔn)尺寸。因此,舉例來(lái)說(shuō),若是神經(jīng)處理單元126是處于窄配置或漏斗配置2902,標(biāo)準(zhǔn)尺寸壓縮器3008可將28位的多工器3006輸出值壓縮至16位;而若是神經(jīng)處理單元126是處于寬配置2902,標(biāo)準(zhǔn)尺寸壓縮器3008可將41位的多工器3006輸出值壓縮至32位。不過(guò),在壓縮至標(biāo)準(zhǔn)尺寸前,若是壓縮前值大于標(biāo)準(zhǔn)型式所能表達(dá)的最大值,飽和器3008就會(huì)使此壓縮前值填滿(mǎn)至標(biāo)準(zhǔn)型式所能表達(dá)的最大值。舉例來(lái)說(shuō),若是壓縮前值中位于最高有效壓縮前值位左側(cè)的任何位都是數(shù)值1,飽和器3008就會(huì)填滿(mǎn)至最大值(如填滿(mǎn)為全部1)。就一較佳實(shí)施例而言,雙曲正切模塊3022、S型模塊3024、以及軟加模塊3026都包含查找表,如可程序化邏輯陣列(PLA)、只讀存儲(chǔ)器(ROM)、組合邏輯閘等等。在一實(shí)施例中,為了簡(jiǎn)化并縮小這些模塊3022/3024/3026的尺寸,提供至這些模塊的輸入值具有3.4的型式,即三個(gè)整數(shù)字元與四個(gè)小數(shù)位,也即輸入值具有四個(gè)位位于二進(jìn)制小數(shù)點(diǎn)右側(cè)并且具有三個(gè)位位于二進(jìn)制小數(shù)點(diǎn)左側(cè)。因?yàn)樵?.4型式的輸入值范圍(-8,+8)的極端處,輸出值會(huì)漸近地靠近其最小/最大值,因此選擇這些數(shù)值。不過(guò),本發(fā)明并不限于此,本發(fā)明也可應(yīng)用于其它將二進(jìn)制小數(shù)點(diǎn)放置在不同位置的實(shí)施例,如以4.3型式或2.5型式。位選擇器3012會(huì)在標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008輸出的位中選擇選擇滿(mǎn)足3.4型式規(guī)范的位,此涉及壓縮處理,也就是會(huì)喪失某些位,因?yàn)闃?biāo)準(zhǔn)型式則具有較多的位數(shù)。不過(guò),在選擇/壓縮標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008輸出值之前,若是壓縮前值大于3.4型式所能表達(dá)的最大值,飽和器3012就會(huì)使壓縮前值填滿(mǎn)至3.4型式所能表達(dá)的最大值。舉例來(lái)說(shuō),若是壓縮前值中位于最高有效3.4型式位左側(cè)的任何位都是數(shù)值1,飽和器3012就會(huì)填滿(mǎn)至最大值(如填滿(mǎn)至全部1)。雙曲正切模塊3022、S型模塊3024與軟加模塊3026會(huì)對(duì)標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008輸出的3.4型式數(shù)值執(zhí)行相對(duì)應(yīng)的啟動(dòng)函數(shù)(如前述)以產(chǎn)生一結(jié)果。就一較佳實(shí)施例而言,雙曲正切模塊3022與S型模塊3024所產(chǎn)生的是一個(gè)0.7型式的7位結(jié)果,即零個(gè)整數(shù)字元與七個(gè)小數(shù)位,也即輸入值具有七個(gè)位位于二進(jìn)制小數(shù)點(diǎn)右側(cè)。就一較佳實(shí)施例而言,軟加模塊3026產(chǎn)生的是一個(gè)3.4型式的7位結(jié)果,即其型式與此模塊3026的輸入型式相同。就一較佳實(shí)施例而言,雙曲正切模塊3022、S型模塊3024與軟加模塊3026的輸出會(huì)被延展至標(biāo)準(zhǔn)型式(例如在必要時(shí)加上前導(dǎo)零)并對(duì)準(zhǔn)而使二進(jìn)制小數(shù)點(diǎn)由輸出二進(jìn)制小數(shù)點(diǎn)2954數(shù)值所指定。校正器3018會(huì)產(chǎn)生標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出值的校正后版本。也就是說(shuō),若是標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出值(如前述其符號(hào)以管線下移)為負(fù),校正器3018會(huì)輸出零值;否則,校正器3018就會(huì)將其輸入值輸出。就一較佳實(shí)施例而言,校正器3018的輸出為標(biāo)準(zhǔn)型式并具有由輸出二進(jìn)制小數(shù)點(diǎn)2954數(shù)值所指定的二進(jìn)制小數(shù)點(diǎn)。倒數(shù)乘法器3014會(huì)將標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出與指定于倒數(shù)值2942的使用者指定倒數(shù)值相乘,以產(chǎn)生標(biāo)準(zhǔn)尺寸的乘積,此乘積實(shí)際上即為標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出值,以倒數(shù)值2942的倒數(shù)作為除數(shù)計(jì)算出來(lái)的商數(shù)。就一較佳實(shí)施例而言,倒數(shù)乘法器3014的輸出為標(biāo)準(zhǔn)型式并具有由輸出二進(jìn)制小數(shù)點(diǎn)2954數(shù)值指定的二進(jìn)制小數(shù)點(diǎn)。向右移位器3016會(huì)將標(biāo)準(zhǔn)尺寸壓縮器與飽和器3008的輸出,以指定于偏移量值2944的使用者指定位數(shù)進(jìn)行移動(dòng),以產(chǎn)生標(biāo)準(zhǔn)尺寸的商數(shù)。就一較佳實(shí)施例而言,向右移位器3016的輸出為標(biāo)準(zhǔn)型式并具有由輸出二進(jìn)制小數(shù)點(diǎn)2954數(shù)值指定的二進(jìn)制小數(shù)點(diǎn)。多工器3032選擇啟動(dòng)函數(shù)2934值所指定的適當(dāng)輸入,并將其選擇提供至符號(hào)恢復(fù)器3034,若是原本的累加器202數(shù)值217為負(fù)值,符號(hào)恢復(fù)器3034就會(huì)將多工器3032輸出的正類(lèi)型數(shù)值轉(zhuǎn)換為負(fù)類(lèi)型,例如轉(zhuǎn)換為二補(bǔ)碼類(lèi)型。尺寸轉(zhuǎn)換器3036會(huì)依據(jù)如圖29A所述的輸出命令2956的數(shù)值,將符號(hào)恢復(fù)器3034的輸出轉(zhuǎn)換至適當(dāng)?shù)某叽?。就一較佳實(shí)施例而言,符號(hào)恢復(fù)器3034的輸出具有一個(gè)由輸出二進(jìn)制小數(shù)點(diǎn)2954數(shù)值指定的二進(jìn)制小數(shù)點(diǎn)。就一較佳實(shí)施例而言,對(duì)于輸出命令的第一默認(rèn)值而言,尺寸轉(zhuǎn)換器3036會(huì)舍棄符號(hào)恢復(fù)器3034輸出的上半部位。此外,若是符號(hào)恢復(fù)器3034的輸出為正并且超過(guò)配置2902指定的文字尺寸所能表達(dá)的最大值,或是輸出為負(fù)并且小于文字尺寸所能表達(dá)的最小值,飽和器3036就會(huì)將其輸出分別填滿(mǎn)至此文字尺寸的可表達(dá)最大/最小值。對(duì)于第二與第三默認(rèn)值,尺寸轉(zhuǎn)換器3036會(huì)傳遞符號(hào)恢復(fù)器3034的輸出。多工器3037會(huì)依據(jù)輸出命令2956,在數(shù)據(jù)轉(zhuǎn)換器與飽和器3036輸出與累加器202輸出217中選擇其一以提供給輸出緩存器3038。進(jìn)一步來(lái)說(shuō),對(duì)于輸出命令2956的第一與第二默認(rèn)值,多工器3037會(huì)選擇尺寸轉(zhuǎn)換器與飽和器3036的輸出的下方文字(尺寸由配置2902指定)。對(duì)于第三默認(rèn)值,多工器3037會(huì)選擇尺寸轉(zhuǎn)換器與飽和器3036的輸出的上方文字。對(duì)于第四默認(rèn)值,多工器3037會(huì)選擇未經(jīng)處理的累加器202數(shù)值217的下方文字;對(duì)于第五默認(rèn)值,多工器3037會(huì)選擇未經(jīng)處理的累加器202數(shù)值217的中間文字;而對(duì)于第六默認(rèn)值,多工器3037會(huì)選擇未經(jīng)處理的累加器202數(shù)值217的上方文字。如前述,就一較佳實(shí)施例而言,啟動(dòng)函數(shù)單元212會(huì)在未經(jīng)處理的累加器202數(shù)值217的上方文字加上零值上方位。圖31為顯示圖30的啟動(dòng)函數(shù)單元212的運(yùn)作的一范例。如圖中所示,神經(jīng)處理單元126的配置2902設(shè)定為窄配置。此外,帶符號(hào)數(shù)據(jù)2912與帶符號(hào)權(quán)重2914值為真。此外,數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2922值表示對(duì)于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122文字而言,其二進(jìn)制小數(shù)點(diǎn)位置右側(cè)有7個(gè)位,神經(jīng)處理單元126所接收的第一數(shù)據(jù)文字的一范例值呈現(xiàn)為0.1001110。此外,權(quán)重二進(jìn)制小數(shù)點(diǎn)2924值表示對(duì)于權(quán)重隨機(jī)存取存儲(chǔ)器124文字而言,其二進(jìn)制小數(shù)點(diǎn)位置右側(cè)有3個(gè)位,神經(jīng)處理單元126所接收的第一權(quán)重文字的范例值呈現(xiàn)為00001.010。第一數(shù)據(jù)與權(quán)重文字的16位乘積(此乘積會(huì)與累加器202的初始零值相加)呈現(xiàn)為000000.1100001100。因?yàn)閿?shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2912是7而權(quán)重二進(jìn)制小數(shù)點(diǎn)2914是3,對(duì)于所隱含的累加器202二進(jìn)制小數(shù)點(diǎn)而言,其右側(cè)會(huì)有10個(gè)位。在窄配置的情況下,如本實(shí)施例所示,累加器202具有28個(gè)位寬。舉例來(lái)說(shuō),完成所有算術(shù)邏輯運(yùn)算后(例如圖20全部1024個(gè)乘法累加運(yùn)算),累加器202的數(shù)值217會(huì)是000000000000000001.1101010100。輸出二進(jìn)制小數(shù)點(diǎn)2954值表示輸出的二進(jìn)制小數(shù)點(diǎn)右側(cè)有7個(gè)位。因此,在傳遞輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002與標(biāo)準(zhǔn)尺寸壓縮器3008之后,累加器202數(shù)值217會(huì)被縮放、舍入與壓縮至標(biāo)準(zhǔn)型式的數(shù)值,即000000001.1101011。在此范例中,輸出二進(jìn)制小數(shù)點(diǎn)地址表示7個(gè)小數(shù)位,而累加器202二進(jìn)制小數(shù)點(diǎn)位置表示10個(gè)小數(shù)位。因此,輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002會(huì)計(jì)算出差值3,并透過(guò)將累加器202數(shù)值217右移3個(gè)位以對(duì)其進(jìn)行縮放。在圖31中即顯示累加器202數(shù)值217會(huì)喪失3個(gè)最低有效位(二進(jìn)制數(shù)100)。此外,在此范例中,舍入控制2932值表示使用隨機(jī)舍入,并且在此范例中假定取樣隨機(jī)位3005為真。如此,如前述,最低有效位就會(huì)被向上舍入,這是因?yàn)槔奂悠?02數(shù)值217的舍入位(這3個(gè)因?yàn)槔奂悠?02數(shù)值217的縮放運(yùn)算而被移出的位中的最高有效位)為一,而黏位(這3個(gè)因?yàn)槔奂悠?02數(shù)值217的縮放運(yùn)算而被移出的位中,2個(gè)最低有效位的布爾或運(yùn)算結(jié)果)為零。在本范例中,啟動(dòng)函數(shù)2934表示所使用的是S型函數(shù)。如此,位選擇器3012就會(huì)選擇標(biāo)準(zhǔn)型式值的位而使S型模塊3024的輸入具有三個(gè)整數(shù)字元與四個(gè)小數(shù)位,如前述,即所示的數(shù)值001.1101。S型模塊3024的輸出數(shù)值會(huì)放入標(biāo)準(zhǔn)型式中,即所示的數(shù)值000000000.1101110。此范例的輸出命令2956指定第一默認(rèn)值,即輸出配置2902表示的文字尺寸,在此情況下即窄文字(8位)。如此,尺寸轉(zhuǎn)換器3036會(huì)將標(biāo)準(zhǔn)S型輸出值轉(zhuǎn)換為一個(gè)8位量,其具有一個(gè)隱含的二進(jìn)制小數(shù)點(diǎn),即在此二進(jìn)制小數(shù)點(diǎn)右側(cè)有7個(gè)位,而產(chǎn)生一個(gè)輸出值01101110,如圖中所示。圖32為顯示圖30的啟動(dòng)函數(shù)單元212的運(yùn)作的第二個(gè)范例。圖32的范例描述當(dāng)啟動(dòng)函數(shù)2934表示以標(biāo)準(zhǔn)尺寸傳遞累加器202數(shù)值217時(shí),啟動(dòng)函數(shù)單元212的運(yùn)算。如圖中所示,此配置2902設(shè)定為神經(jīng)處理單元216的窄配置。在此范例中,累加器202的寬度為28個(gè)位,累加器202二進(jìn)制小數(shù)點(diǎn)的位置右側(cè)有10個(gè)位(這是因?yàn)樵谝粚?shí)施例中數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2912與權(quán)重二進(jìn)制小數(shù)點(diǎn)2914的加總為10,或者在另一實(shí)施例中累加器二進(jìn)制小數(shù)點(diǎn)2923明確被指定為具有數(shù)值10)。舉例來(lái)說(shuō),在執(zhí)行所有算術(shù)邏輯運(yùn)算后,圖32所示的累加器202數(shù)值217為000001100000011011.1101111010。在此范例中,輸出二進(jìn)制小數(shù)點(diǎn)2954值表示對(duì)于輸出而言,二進(jìn)制小數(shù)點(diǎn)右側(cè)有4個(gè)位。因此,在傳遞輸出二進(jìn)制小數(shù)點(diǎn)對(duì)準(zhǔn)器3002與標(biāo)準(zhǔn)尺寸壓縮器3008之后,累加器202數(shù)值217會(huì)飽和并壓縮至所示的標(biāo)準(zhǔn)型式值111111111111.1111,此數(shù)值由多工器3032所接收以作為標(biāo)準(zhǔn)尺寸傳遞值3028。在此范例中顯示兩個(gè)輸出命令2956。第一個(gè)輸出命令2956指定第二默認(rèn)值,即輸出標(biāo)準(zhǔn)型式尺寸的下方文字。因?yàn)榕渲?902所指示的尺寸為窄文字(8位),標(biāo)準(zhǔn)尺寸就會(huì)是16位,而尺寸轉(zhuǎn)換器3036會(huì)選擇標(biāo)準(zhǔn)尺寸傳遞值3028的下方8個(gè)位以產(chǎn)生如圖中所示的8位數(shù)值11111111。第二個(gè)輸出命令2956指定第三默認(rèn)值,即輸出標(biāo)準(zhǔn)型式尺寸的上方文字。如此,尺寸轉(zhuǎn)換器3036會(huì)選擇標(biāo)準(zhǔn)尺寸傳遞值3028的上方8個(gè)位以產(chǎn)生如圖中所示的8位數(shù)值11111111。圖33為顯示圖30的啟動(dòng)函數(shù)單元212的運(yùn)作的第三個(gè)范例。圖33的范例揭示當(dāng)啟動(dòng)函數(shù)2934表示要傳遞整個(gè)未經(jīng)處理的累加器202數(shù)值217時(shí)啟動(dòng)函數(shù)單元212的運(yùn)作。如圖中所示,此配置2902設(shè)定為神經(jīng)處理單元126的寬配置(例如16位的輸入文字)。在此范例中,累加器202的寬度為41個(gè)位,累加器202二進(jìn)制小數(shù)點(diǎn)位置的右側(cè)有8個(gè)位(這是因?yàn)樵谝粚?shí)施例中數(shù)據(jù)二進(jìn)制小數(shù)點(diǎn)2912與權(quán)重二進(jìn)制小數(shù)點(diǎn)2914的加總為8,或者在另一實(shí)施例中累加器二進(jìn)制小數(shù)點(diǎn)2923明確被指定為具有數(shù)值8)。舉例來(lái)說(shuō),在執(zhí)行所有算術(shù)邏輯運(yùn)算后,圖33所示的累加器202數(shù)值217為001000000000000000001100000011011.11011110。此范例中顯示三個(gè)輸出命令2956。第一個(gè)輸出命令指定第四默認(rèn)值,即輸出未經(jīng)處理的累加器202數(shù)值的下方文字;第二個(gè)輸出命令指定第五默認(rèn)值,即輸出未經(jīng)處理的累加器202數(shù)值的中間文字;而第三個(gè)輸出命令指定第六默認(rèn)值,即輸出未經(jīng)處理的累加器202數(shù)值的上方文字。因?yàn)榕渲?902所指示的尺寸為寬文字(16位),如圖33所示,因應(yīng)第一輸出命令2956,多工器3037會(huì)選擇16位值0001101111011110;因應(yīng)第二輸出命令2956,多工器3037會(huì)選擇16位值0000000000011000;而因應(yīng)第三輸出命令2956,多工器3037會(huì)選擇16位值0000000001000000。如前述,神經(jīng)網(wǎng)絡(luò)單元121即可執(zhí)行于整數(shù)數(shù)據(jù)而非浮點(diǎn)數(shù)據(jù)。如此,即有助于簡(jiǎn)化個(gè)個(gè)神經(jīng)處理單元126,或至少其中的算術(shù)邏輯單元204部分。舉例來(lái)說(shuō),這個(gè)算術(shù)邏輯單元204就不需要為了乘法器242而納入在浮點(diǎn)運(yùn)算中需用來(lái)將乘數(shù)的指數(shù)相加的加法器。類(lèi)似地,這個(gè)算術(shù)邏輯單元204就不需要為了加法器234而納入在浮點(diǎn)運(yùn)算中需用來(lái)對(duì)準(zhǔn)加數(shù)的二進(jìn)制小數(shù)點(diǎn)的移位器。所屬
技術(shù)領(lǐng)域:
:具有通常知識(shí)者當(dāng)能理解,浮點(diǎn)單元往往非常復(fù)雜;因此,本文所述的范例僅針對(duì)算術(shù)邏輯單元204進(jìn)行簡(jiǎn)化,利用所述具有硬件定點(diǎn)輔助而讓使用者可指定相關(guān)二進(jìn)制小數(shù)點(diǎn)的整數(shù)實(shí)施例也可用于對(duì)其他部分進(jìn)行簡(jiǎn)化。相較于浮點(diǎn)的實(shí)施例,使用整數(shù)單元作為算術(shù)邏輯單元204可以產(chǎn)生一個(gè)較小(且較快)的神經(jīng)處理單元126,而有利于將一個(gè)大型的神經(jīng)處理單元126陣列整合進(jìn)神經(jīng)網(wǎng)絡(luò)單元121內(nèi)。啟動(dòng)函數(shù)單元212的部分可以基于使用者指定、累加數(shù)需要的小數(shù)位數(shù)量以及輸出值需要的小數(shù)位數(shù)量,來(lái)處理累加器202數(shù)值217的縮放與飽和運(yùn)算,而較佳者基于使用者指定。任何額外復(fù)雜度與伴隨的尺寸增加,以及啟動(dòng)函數(shù)單元212的定點(diǎn)硬件輔助內(nèi)的能源和/或時(shí)間耗損,都可以透過(guò)在算術(shù)邏輯單元204間共享啟動(dòng)函數(shù)單元212的方式來(lái)進(jìn)行分?jǐn)偅@是因?yàn)槿鐖D11的實(shí)施例所示,采用共享方式的實(shí)施例可以減少啟動(dòng)函數(shù)單元1112的數(shù)量。本文所述的實(shí)施例可以享有許多利用整數(shù)算數(shù)單元以降低硬件復(fù)雜度的優(yōu)點(diǎn)(相較于使用浮點(diǎn)算術(shù)單元),而同時(shí)還能用于小數(shù)的算術(shù)運(yùn)算,即具有二進(jìn)制小數(shù)點(diǎn)的數(shù)字。浮點(diǎn)算術(shù)的優(yōu)點(diǎn)在于它可以提供數(shù)據(jù)算術(shù)運(yùn)算給數(shù)據(jù)的個(gè)別數(shù)值落在一個(gè)非常廣的數(shù)值范圍內(nèi)(實(shí)際上只受限于指數(shù)范圍的大小,因此會(huì)是一個(gè)非常大的范圍)。也就是說(shuō),每個(gè)浮點(diǎn)數(shù)具有其潛在獨(dú)一無(wú)二的指數(shù)值。不過(guò),本文所述的實(shí)施例理解到并利用某些應(yīng)用中具有輸入數(shù)據(jù)高度平行且落于一相對(duì)較窄的范圍內(nèi)而使所有平行數(shù)據(jù)具有相同“指數(shù)”的特性。如此,這些實(shí)施例讓使用者將二進(jìn)制小數(shù)點(diǎn)位置一次指定給所有的輸入值和/或累加值。類(lèi)似地,透過(guò)理解并利用平行輸出具有類(lèi)似范圍的特性,這些實(shí)施例讓使用者將二進(jìn)制小數(shù)點(diǎn)位置一次指定給所有的輸出值。人工神經(jīng)網(wǎng)絡(luò)是此種應(yīng)用的一范例,不過(guò)本發(fā)明的實(shí)施例也可應(yīng)用于執(zhí)行其它應(yīng)用的計(jì)算。透過(guò)將二進(jìn)制小數(shù)點(diǎn)位置一次指定給多個(gè)輸入而非給對(duì)個(gè)別的輸入數(shù),相較于使用浮點(diǎn)運(yùn)算,本發(fā)明的實(shí)施例可以更有效率地利用記憶空間(如需要較少的存儲(chǔ)器)以及/或在使用類(lèi)似數(shù)量的存儲(chǔ)器的情況下提升精度,這是因?yàn)橛糜诟↑c(diǎn)運(yùn)算的指數(shù)的位可用來(lái)提升數(shù)值精度。此外,本發(fā)明的實(shí)施例理解到在對(duì)一個(gè)大型系列的整數(shù)運(yùn)算(如溢位或喪失較不重要的小數(shù)位)執(zhí)行累加時(shí)可能喪失精度,因此提供一個(gè)解決方法,主要是利用一個(gè)足夠大的累加器來(lái)避免精度喪失。神經(jīng)網(wǎng)絡(luò)單元微運(yùn)算的直接執(zhí)行圖34為顯示圖1的處理器100以及神經(jīng)網(wǎng)絡(luò)單元121的部分細(xì)節(jié)的方塊示意圖。神經(jīng)網(wǎng)絡(luò)單元121包括神經(jīng)處理單元126的管線級(jí)3401。各個(gè)管線級(jí)3401以級(jí)緩存器區(qū)分,并包括組合邏輯以達(dá)成本文的神經(jīng)處理單元126的運(yùn)算,如布爾邏輯閘、多工器、加法器、乘法器、比較器等等。管線級(jí)3401從多工器3402接收微運(yùn)算3418。微運(yùn)算3418會(huì)向下流動(dòng)至管線級(jí)3401并控制其組合邏輯。微運(yùn)算3418是一個(gè)位集合。就一較佳實(shí)施例而言,微運(yùn)算3418包括數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122存儲(chǔ)器地址123的位、權(quán)重隨機(jī)存取存儲(chǔ)器124存儲(chǔ)器地址125的位、程序存儲(chǔ)器129存儲(chǔ)器地址131的位、多任務(wù)緩存器208/705控制信號(hào)213/713、還有許多控制緩存器217的字段(例如圖29A至圖29C的控制緩存器)。在一實(shí)施例中,微運(yùn)算3418包括大約120個(gè)位。多工器3402從三個(gè)不同的來(lái)源接收微運(yùn)算,并選擇其中一個(gè)作為提供給管線級(jí)3401的微運(yùn)算3418。多工器3402的一個(gè)微運(yùn)算來(lái)源為圖1的定序器128。定序器128會(huì)將由程序存儲(chǔ)器129接收的神經(jīng)網(wǎng)絡(luò)單元指令譯碼并據(jù)以產(chǎn)生一個(gè)微運(yùn)算3416提供至多工器3402的第一輸入。多工器3402的第二個(gè)微運(yùn)算來(lái)源為從圖1的保留站108接收微指令105以及從通用緩存器116與媒體緩存器118接收操作數(shù)的譯碼器3404。就一較佳實(shí)施例而言,如前述,微指令105由指令轉(zhuǎn)譯器104因應(yīng)MTNN指令1400與MFNN指令1500的轉(zhuǎn)譯所產(chǎn)生。微指令105可包括一個(gè)立即字段以指定一特定函數(shù)(由一個(gè)MTNN指令1400或一個(gè)MFNN指令1500所指定),例如程序存儲(chǔ)器129內(nèi)程序的開(kāi)始與停止執(zhí)行、直接從媒體緩存器118執(zhí)行一微運(yùn)算、或是如前述讀取/寫(xiě)入神經(jīng)網(wǎng)絡(luò)單元的存儲(chǔ)器。譯碼器3404會(huì)將微指令105譯碼并據(jù)以產(chǎn)生一個(gè)微運(yùn)算3412提供至多工器的第二輸入。就一較佳實(shí)施例而言,對(duì)于MTNN指令1400/MFNN指令1500的某些函數(shù)1432/1532而言,譯碼器3404不需要產(chǎn)生一個(gè)微運(yùn)算3412向下傳送至管線3401,例如寫(xiě)入控制緩存器127、開(kāi)始執(zhí)行程序存儲(chǔ)器129內(nèi)的程序、暫停執(zhí)行程序存儲(chǔ)器129內(nèi)的程序、等待程序存儲(chǔ)器129內(nèi)的程序完成執(zhí)行、從狀態(tài)緩存器127讀取以及重設(shè)神經(jīng)網(wǎng)絡(luò)單元121。多工器3402的第三個(gè)微運(yùn)算來(lái)源為媒體緩存器118本身。就一較佳實(shí)施例而言,如前文對(duì)應(yīng)于圖14所述,MTNN指令1400可指定一函數(shù)以指示神經(jīng)網(wǎng)絡(luò)單元121直接執(zhí)行一個(gè)由媒體緩存器118提供至多工器3402的第三輸入的微運(yùn)算3414。直接執(zhí)行由架構(gòu)媒體緩存器118提供的微運(yùn)算3414有利于對(duì)神經(jīng)網(wǎng)絡(luò)單元121進(jìn)行測(cè)試,如內(nèi)建自我測(cè)試(BIST),或除錯(cuò)的動(dòng)作。就一較佳實(shí)施例而言,譯碼器3404會(huì)產(chǎn)生一個(gè)模式指針3422控制多工器3402的選擇。當(dāng)MTNN指令1400指定一個(gè)函數(shù)開(kāi)始執(zhí)行一個(gè)來(lái)自程序存儲(chǔ)器129的程序,譯碼器3404會(huì)產(chǎn)生一模式指針3422值使多工器3402選擇來(lái)自定序器128的微運(yùn)算3416,直到發(fā)生錯(cuò)誤或直到譯碼器3404碰到一個(gè)MTNN指令1400指定一個(gè)函數(shù)停止執(zhí)行來(lái)自程序存儲(chǔ)器129的程序。當(dāng)MTNN指令1400指定一個(gè)函數(shù)指示神經(jīng)網(wǎng)絡(luò)單元121直接執(zhí)行由媒體緩存器118提供的一微運(yùn)算3414,譯碼器3404會(huì)產(chǎn)生一個(gè)模式指針3422值使多工器3402選擇來(lái)自所指定的媒體緩存器118的微運(yùn)算3414。否則,譯碼器3404就會(huì)產(chǎn)生一個(gè)模式指針3422值使多工器3402選擇來(lái)自譯碼器3404的微運(yùn)算3412??勺兟噬窠?jīng)網(wǎng)絡(luò)單元在許多情況下,神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行程序后就會(huì)進(jìn)入待機(jī)狀態(tài)(idle)等待處理器100處理一些需要在執(zhí)行下一個(gè)程序前處理的事情。舉例來(lái)說(shuō),假設(shè)處在一個(gè)類(lèi)似于圖3至圖6A所述的情況,神經(jīng)網(wǎng)絡(luò)單元121會(huì)對(duì)一乘法累加啟動(dòng)函數(shù)程序(也可稱(chēng)為前授神經(jīng)網(wǎng)絡(luò)層程序(feedforwardneuralnetworklayerprogram))連續(xù)執(zhí)行兩次或更多次。相較于神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行程序所花費(fèi)的時(shí)間,處理器100明顯需要花費(fèi)較長(zhǎng)的時(shí)間來(lái)將512KB的權(quán)重值寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124以供下一次神經(jīng)網(wǎng)絡(luò)單元程序使用。換言之,神經(jīng)網(wǎng)絡(luò)單元121會(huì)在短時(shí)間內(nèi)執(zhí)行程序,隨后就進(jìn)入待機(jī)狀態(tài),直到處理器100將接下來(lái)的權(quán)重值寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124供下一次程序執(zhí)行使用。此情況可參照?qǐng)D36A,詳如后述。在此情況下,神經(jīng)網(wǎng)絡(luò)單元121可采用較低時(shí)頻率運(yùn)行以延長(zhǎng)執(zhí)行程序的時(shí)間,藉以使執(zhí)行程序所需的能源消耗分散至較長(zhǎng)的時(shí)間范圍,而使神經(jīng)網(wǎng)絡(luò)單元121,乃至于整個(gè)處理器100,維持在較低溫度。此情況稱(chēng)為緩和模式,可參照?qǐng)D36B,詳如后述。圖35為一方塊圖,顯示具有可變率神經(jīng)網(wǎng)絡(luò)單元121的處理器100。此處理器100類(lèi)似于圖1的處理器100,并且圖中具有相同標(biāo)號(hào)的組件也相類(lèi)似。圖35的處理器100并具有時(shí)頻產(chǎn)生邏輯3502耦接至處理器100的功能單元,這些功能單元即指令擷取單元101,指令快取102,指令轉(zhuǎn)譯器104,重命名單元106,保留站108,神經(jīng)網(wǎng)絡(luò)單元121,其它執(zhí)行單元112,存儲(chǔ)器子系統(tǒng)114,通用緩存器116與媒體緩存器118。時(shí)頻產(chǎn)生邏輯3502包括時(shí)頻產(chǎn)生器,例如鎖相回路(PLL),以產(chǎn)生一個(gè)具有主要時(shí)頻率或稱(chēng)時(shí)頻頻率的時(shí)頻信號(hào)。舉例來(lái)說(shuō),此主要時(shí)頻率可以是1GHz,1.5GHz,2GHz等等。時(shí)頻率即表示每秒的周期數(shù),如時(shí)頻信號(hào)在高低狀態(tài)間的震蕩次數(shù)。較佳地,此時(shí)頻信號(hào)具有平衡周期(dutycycle),即此周期的一半為高狀態(tài)而另一半為低狀態(tài);另外,此時(shí)頻信號(hào)也可具有非平衡周期,也就是時(shí)頻信號(hào)處在高狀態(tài)的時(shí)間長(zhǎng)于其處在低狀態(tài)的時(shí)間,反之亦然。較佳地,鎖相回路用以產(chǎn)生多個(gè)時(shí)頻率的主要時(shí)頻信號(hào)。較佳地,處理器100包括電源管理模塊,依據(jù)多種因素自動(dòng)調(diào)整主要時(shí)頻率,這些因素包括處理器100的動(dòng)態(tài)偵測(cè)操作溫度,利用率(utilization),以及來(lái)自系統(tǒng)軟件(如操作系統(tǒng),基本輸入輸出系統(tǒng)(BIOS))指示所需效能和/或節(jié)能指標(biāo)的命令。在一實(shí)施例中,電源管理模塊包括處理器100的微碼。時(shí)頻產(chǎn)生邏輯3502并包括時(shí)頻散布網(wǎng)絡(luò),或時(shí)頻樹(shù)(clocktree)。時(shí)頻樹(shù)會(huì)將主要時(shí)頻信號(hào)散布至處理器100的功能單元,如圖35所示,此散布動(dòng)作就是將時(shí)頻信號(hào)3506-1傳送至指令擷取單元101,將時(shí)頻信號(hào)3506-2傳送至指令快取102,將時(shí)頻信號(hào)3506-10傳送至指令轉(zhuǎn)譯器104,將時(shí)頻信號(hào)3506-9傳送至重命名單元106,將時(shí)頻信號(hào)3506-8傳送至保留站108,將時(shí)頻信號(hào)3506-7傳送至神經(jīng)網(wǎng)絡(luò)單元121,將時(shí)頻信號(hào)3506-4傳送至其它執(zhí)行單元112,將時(shí)頻信號(hào)3506-3傳送至存儲(chǔ)器子系統(tǒng)114,將時(shí)頻信號(hào)3506-5傳送至通用緩存器116,以及將時(shí)頻信號(hào)3506-6傳送至媒體緩存器118,這些信號(hào)集體稱(chēng)為時(shí)頻信號(hào)3506。此時(shí)頻樹(shù)具有節(jié)點(diǎn)或線,以傳送主要時(shí)頻信號(hào)3506至其相對(duì)應(yīng)的功能單元。此外,較佳地,時(shí)頻產(chǎn)生邏輯3502可包括時(shí)頻緩沖器,在需要提供較干凈的時(shí)頻信號(hào)和/或需要提升主要時(shí)頻信號(hào)的電壓準(zhǔn)位時(shí),特別是對(duì)于較遠(yuǎn)的節(jié)點(diǎn),時(shí)頻緩沖器可重新產(chǎn)生主要時(shí)頻信號(hào)。此外,各個(gè)功能單元并具有其自身的子時(shí)頻樹(shù),在需要時(shí)重新產(chǎn)生和/或提升所接收的相對(duì)應(yīng)主要時(shí)頻信號(hào)3506的電壓準(zhǔn)位。神經(jīng)網(wǎng)絡(luò)單元121包括時(shí)頻降低邏輯3504,時(shí)頻降低邏輯3504接收緩和指針3512與主要時(shí)頻信號(hào)3506-7,以產(chǎn)生第二時(shí)頻信號(hào)。第二時(shí)頻信號(hào)具有時(shí)頻率。此時(shí)頻率若非相同于主要時(shí)頻率,就是處于緩和模式從主要時(shí)頻率降低數(shù)值以減少熱能產(chǎn)生,此數(shù)值程序化至緩和指針3512。時(shí)頻降低邏輯3504類(lèi)似于時(shí)頻產(chǎn)生邏輯3502,其具有時(shí)頻散布網(wǎng)絡(luò),或時(shí)頻樹(shù),以散布第二時(shí)頻信號(hào)至神經(jīng)網(wǎng)絡(luò)單元121的多種功能方塊,此散布動(dòng)作就是將時(shí)頻信號(hào)3508-1傳送至神經(jīng)處理單元陣列126,將時(shí)頻信號(hào)3508-2傳送至定序器128以即將時(shí)頻信號(hào)3508-3傳送至接口邏輯3514,這些信號(hào)集體稱(chēng)為第二時(shí)頻信號(hào)3508。較佳地,這些神經(jīng)處理單元126包括多個(gè)管線級(jí)3401,如圖34所示,管線級(jí)3401包括管線分級(jí)緩存器,用以從時(shí)頻降低邏輯3504接收第二時(shí)頻信號(hào)3508-1。神經(jīng)網(wǎng)絡(luò)單元121還具有接口邏輯3514以接收主要時(shí)頻信號(hào)3506-7與第二時(shí)頻信號(hào)3508-3。接口邏輯3514耦接于處理器100前端的下部分(例如保留站108,媒體緩存器118與通用緩存器116)與神經(jīng)網(wǎng)絡(luò)單元121的多種功能方塊間,這些功能方塊實(shí)時(shí)頻降低邏輯3504,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,權(quán)重隨機(jī)存取存儲(chǔ)器124,程序存儲(chǔ)器129與定序器128。接口邏輯3514包括數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522,權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524,圖34的譯碼器3404,以及緩和指針3512。緩和指針3512裝載一數(shù)值,此數(shù)值指定神經(jīng)處理單元陣列126會(huì)以多慢的速度執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序指令。較佳地,緩和指針3512指定一除數(shù)值N,時(shí)頻降低邏輯3504將主要時(shí)頻信號(hào)3506-7除以此除數(shù)值以產(chǎn)生第二時(shí)頻信號(hào)3508,如此,第二時(shí)頻信號(hào)的時(shí)頻率就會(huì)是1/N。較佳地,N的數(shù)值可程序化為多個(gè)不同默認(rèn)值中的任何一個(gè),這些默認(rèn)值可使時(shí)頻降低邏輯3504對(duì)應(yīng)產(chǎn)生多個(gè)具有不同時(shí)頻率的第二時(shí)頻信號(hào)3508,這些時(shí)頻率小于主要時(shí)頻率。在一實(shí)施例中,時(shí)頻降低邏輯3504包括時(shí)頻除法器電路,用以將主要時(shí)頻信號(hào)3506-7除以緩和指針3512數(shù)值。在一實(shí)施例中,時(shí)頻降低邏輯3504包括時(shí)頻閘(如AND閘),時(shí)頻閘可透過(guò)一啟動(dòng)信號(hào)來(lái)門(mén)控主要時(shí)頻信號(hào)3506-7,啟動(dòng)信號(hào)在主要時(shí)頻信號(hào)的每N個(gè)周期中只會(huì)產(chǎn)生一次真值。以一個(gè)包含計(jì)數(shù)器以產(chǎn)生啟動(dòng)信號(hào)的電路為例,此計(jì)數(shù)器可向上計(jì)數(shù)至N。當(dāng)伴隨的邏輯電路偵測(cè)到計(jì)數(shù)器的輸出與N匹配,邏輯電路就會(huì)在第二時(shí)頻信號(hào)3508產(chǎn)生一真值脈沖并重設(shè)計(jì)數(shù)器。較佳地,緩和指針3512數(shù)值可由架構(gòu)指令予以程序化,例如圖14的MTNN指令1400。較佳地,在架構(gòu)程序指示神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序前,運(yùn)作于處理器100的架構(gòu)程序會(huì)將緩和值程序化至緩和指針3512,這部分在后續(xù)對(duì)應(yīng)于圖37處會(huì)有更詳細(xì)的說(shuō)明。權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524耦接于權(quán)重隨機(jī)存取存儲(chǔ)器124與媒體緩存器118之間作為其間數(shù)據(jù)傳輸?shù)木彌_。較佳地,權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524類(lèi)似于圖17的緩沖器1704的一個(gè)或多個(gè)實(shí)施例。較佳地,權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524從媒體緩存器118接收數(shù)據(jù)的部分以具有主要時(shí)頻率的主要時(shí)頻信號(hào)3506-7作為時(shí)頻,而權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524從權(quán)重隨機(jī)存取存儲(chǔ)器124接收數(shù)據(jù)的部分以具有第二時(shí)頻率的第二時(shí)頻信號(hào)3508-3作為時(shí)頻,第二時(shí)頻率可依據(jù)程序化于緩和指針3512的數(shù)值從主要時(shí)頻率調(diào)降或否,也即依據(jù)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行于緩和或正常模式來(lái)進(jìn)行調(diào)降或否。在一實(shí)施例中,權(quán)重隨機(jī)存取存儲(chǔ)器124為單端口,如前文圖17所述,權(quán)重隨機(jī)存取存儲(chǔ)器124還可由媒體緩存器118透過(guò)權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524,以及由神經(jīng)處理單元126或圖11的列緩沖1104,以仲裁方式(arbitratedfashion)存取。在另一實(shí)施例中,權(quán)重隨機(jī)存取存儲(chǔ)器124為雙端口,如前文圖16所述,各個(gè)端口可由媒體緩存器118透過(guò)權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524以及由神經(jīng)處理單元126或列緩沖器1104以并行方式存取。類(lèi)似于權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522耦接于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與媒體緩存器118之間作為其間數(shù)據(jù)傳送的緩沖。較佳地,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522類(lèi)似于圖17的緩沖器1704的一個(gè)或多個(gè)實(shí)施例。較佳地,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522從媒體緩存器118接收數(shù)據(jù)的部分以具有主要時(shí)頻率的主要時(shí)頻信號(hào)3506-7作為時(shí)頻,而數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122接收數(shù)據(jù)的部分以具有第二時(shí)頻率的第二時(shí)頻信號(hào)3508-3作為時(shí)頻,第二時(shí)頻率可依據(jù)程序化于緩和指針3512的數(shù)值從主要時(shí)頻率調(diào)降或否,也即依據(jù)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行于緩和或正常模式來(lái)進(jìn)行調(diào)降或否。在一實(shí)施例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122為單端口,如前文圖17所述,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122還可由媒體緩存器118透過(guò)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522,以及由神經(jīng)處理單元126或圖11的列緩沖1104,以仲裁方式存取。在另一實(shí)施例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122為雙端口,如前文圖16所述,各個(gè)端口可由媒體緩存器118透過(guò)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522以及由神經(jīng)處理單元126或列緩沖器1104以并行方式存取。較佳地,不論數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124為單端口或雙端口,接口邏輯3514會(huì)包括數(shù)據(jù)隨機(jī)存取存儲(chǔ)器緩沖3522與權(quán)重隨機(jī)存取存儲(chǔ)器緩沖3524以同步主要時(shí)頻域與第二時(shí)頻域。較佳地,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,權(quán)重隨機(jī)存取存儲(chǔ)器124與程序存儲(chǔ)器129都具有靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM),其中包含個(gè)別的讀取使能信號(hào),寫(xiě)入使能信號(hào)與存儲(chǔ)器選擇使能信號(hào)。如前述,神經(jīng)網(wǎng)絡(luò)單元121是處理器100的執(zhí)行單元。執(zhí)行單元是處理器中執(zhí)行架構(gòu)指令轉(zhuǎn)譯出的微指令或是執(zhí)行架構(gòu)指令本身的功能單元,例如執(zhí)行圖1中架構(gòu)指令103轉(zhuǎn)譯出的微指令105或是架構(gòu)指令103本身。執(zhí)行單元從處理器的通用緩存器接收操作數(shù),例如從通用緩存器116與媒體緩存器118。執(zhí)行單元執(zhí)行微指令或架構(gòu)指令后會(huì)產(chǎn)生一結(jié)果,此結(jié)果會(huì)被寫(xiě)入通用緩存器。圖14與圖15所述的MTNN指令1400與MFNN指令1500為架構(gòu)指令103的范例。微指令用以實(shí)現(xiàn)架構(gòu)指令。更精確來(lái)說(shuō),執(zhí)行單元對(duì)于架構(gòu)指令轉(zhuǎn)譯出的一個(gè)或多個(gè)微指令的集體執(zhí)行,就會(huì)是對(duì)于架構(gòu)指令所指定的輸入執(zhí)行架構(gòu)指令所指定的運(yùn)算,以產(chǎn)生架構(gòu)指令定義的結(jié)果。圖36A為一時(shí)序圖,顯示處理器100具有神經(jīng)網(wǎng)絡(luò)單元121運(yùn)作于一般模式的一運(yùn)作范例,此一般模式即以主要時(shí)頻率運(yùn)作。在時(shí)序圖中,時(shí)間的進(jìn)程是由左而右。處理器100以主要時(shí)頻率執(zhí)行架構(gòu)程序。更精確來(lái)說(shuō),處理器100的前端(例如指令擷取單元101,指令快取102,指令轉(zhuǎn)譯器104,重命名單元106與保留站108)以主要時(shí)頻率攫取,譯碼且發(fā)布架構(gòu)指令至神經(jīng)網(wǎng)絡(luò)單元121與其它執(zhí)行單元112。起初,架構(gòu)程序執(zhí)行架構(gòu)指令(如MTNN指令1400),處理器前端100將此架構(gòu)指令發(fā)布至神經(jīng)網(wǎng)絡(luò)單元121以指示神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始執(zhí)行其程序存儲(chǔ)器129內(nèi)的神經(jīng)網(wǎng)絡(luò)單元程序。在之前,架構(gòu)程序會(huì)執(zhí)行架構(gòu)指令將指定主要時(shí)頻率的數(shù)值寫(xiě)入緩和指針3512,也即使神經(jīng)網(wǎng)絡(luò)單元處于一般模式。更精確地說(shuō),程序化至緩和指針3512的數(shù)值會(huì)使時(shí)頻降低邏輯3504以主要時(shí)頻信號(hào)3506的主要時(shí)頻率產(chǎn)生第二時(shí)頻信號(hào)3508。較佳地,在此范例中,時(shí)頻降低邏輯3504的時(shí)頻緩沖器單純提升主要時(shí)頻信號(hào)3506的電壓準(zhǔn)位。另外在之前,架構(gòu)程序會(huì)執(zhí)行架構(gòu)指令以寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,權(quán)重隨機(jī)存取存儲(chǔ)器124并將神經(jīng)網(wǎng)絡(luò)單元程序?qū)懭氤绦虼鎯?chǔ)器129。因應(yīng)神經(jīng)網(wǎng)絡(luò)單元程序MTNN指令1400,神經(jīng)網(wǎng)絡(luò)單元121會(huì)開(kāi)始以主要時(shí)頻率執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序,這是因?yàn)榫徍椭羔?512是以主要時(shí)頻率值予以程序化。神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始執(zhí)行后,架構(gòu)程序會(huì)持續(xù)以主要時(shí)頻率執(zhí)行架構(gòu)指令,包括主要是以MTNN指令1400寫(xiě)入和/或讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124,以完成對(duì)于神經(jīng)網(wǎng)絡(luò)單元程序的下一次范例(instance),或稱(chēng)調(diào)用(invocation)或執(zhí)行(run)的準(zhǔn)備。在圖36A的范例中,相較于架構(gòu)程序完成對(duì)于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124寫(xiě)入/讀取所花費(fèi)的時(shí)間,神經(jīng)網(wǎng)絡(luò)單元121能夠以明顯較少的時(shí)間(例如四分之一的時(shí)間)完成神經(jīng)網(wǎng)絡(luò)單元程序的執(zhí)行。舉例來(lái)說(shuō),以主要時(shí)頻率運(yùn)作的情況下,神經(jīng)網(wǎng)絡(luò)單元121花費(fèi)大約1000個(gè)時(shí)頻周期來(lái)執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序,不過(guò),架構(gòu)程序會(huì)花費(fèi)大約4000個(gè)時(shí)頻周期。如此,神經(jīng)網(wǎng)絡(luò)單元121在剩下的時(shí)間內(nèi)就會(huì)處于待機(jī)狀態(tài),在此范例中,這是一個(gè)相當(dāng)長(zhǎng)的時(shí)間,如大約3000個(gè)主要時(shí)頻率周期。如圖36A的范例所示,依據(jù)神經(jīng)網(wǎng)絡(luò)的大小與配置的不同,會(huì)再次執(zhí)行前述模式,并可能持續(xù)執(zhí)行許多次。因?yàn)樯窠?jīng)網(wǎng)絡(luò)單元121是處理器100中一個(gè)相當(dāng)大且晶體管密集的功能單元,神經(jīng)網(wǎng)絡(luò)單元121的運(yùn)作將會(huì)產(chǎn)生大量的熱能,尤其是以主要時(shí)頻率運(yùn)作的時(shí)候。圖36B為一時(shí)序圖,顯示處理器100具有神經(jīng)網(wǎng)絡(luò)單元121運(yùn)作于緩和模式的一運(yùn)作范例,緩和模式的運(yùn)作時(shí)頻率低于主要時(shí)頻率。圖36B的時(shí)序圖類(lèi)似于圖36A,在圖36A中,處理器100以主要時(shí)頻率執(zhí)行架構(gòu)程序。此范例假定圖36B中的架構(gòu)程序與神經(jīng)網(wǎng)絡(luò)單元程序相同于圖36A的架構(gòu)程序與神經(jīng)網(wǎng)絡(luò)單元程序。不過(guò),在啟動(dòng)神經(jīng)網(wǎng)絡(luò)單元程序之前,架構(gòu)程序會(huì)執(zhí)行MTNN指令1400以一數(shù)值程序化緩和指針3512,此數(shù)值會(huì)使時(shí)頻降低邏輯3504以小于主要時(shí)頻率的第二時(shí)頻率產(chǎn)生第二時(shí)頻信號(hào)3508。也就是說(shuō),架構(gòu)程序會(huì)使神經(jīng)網(wǎng)絡(luò)單元121處于圖36B的緩和模式,而非圖36A的一般模式。如此,神經(jīng)處理單元126就會(huì)以第二時(shí)頻率執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序,在緩和模式下,第二時(shí)頻率小于主要時(shí)頻率。此范例中假定緩和指針3512是以一個(gè)將第二時(shí)頻率指定為四分之一主要時(shí)頻率的數(shù)值予以程序化。如此,神經(jīng)網(wǎng)絡(luò)單元121在緩和模式下執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序所花費(fèi)的時(shí)間會(huì)是其于一般模式下花費(fèi)時(shí)間的四倍,如圖36A與圖36B所示,透過(guò)比較此二圖可發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)單元121處于待機(jī)狀態(tài)的時(shí)間長(zhǎng)度會(huì)明顯地縮短。如此,圖36B中神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序消耗能量的持續(xù)時(shí)間大約會(huì)是圖36A中神經(jīng)網(wǎng)絡(luò)單元121在一般模式下執(zhí)行程序的四倍。因此,圖36B中神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序在單位時(shí)間內(nèi)產(chǎn)生的熱能大約會(huì)是圖36A的四分之一,而具有本文所述的優(yōu)點(diǎn)。圖37為一流程圖,顯示圖35的處理器100的運(yùn)作。此流程圖描述的運(yùn)作類(lèi)似于前文對(duì)應(yīng)于圖35,圖36A與圖36B圖的運(yùn)作。此流程始于步驟3702。在步驟3702中,處理器100執(zhí)行MTNN指令1400而將權(quán)重寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124并且將數(shù)據(jù)寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。接下來(lái)流程前進(jìn)至步驟3704。在步驟3704中,處理器100執(zhí)行MTNN指令1400而以一個(gè)數(shù)值程序化緩和指針3512,此數(shù)值指定一個(gè)低于主要時(shí)頻率的時(shí)頻率,也即使神經(jīng)網(wǎng)絡(luò)單元121處于緩和模式。接下來(lái)流程前進(jìn)至步驟3706。在步驟3706中,處理器100執(zhí)行MTNN指令1400指示神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序,即類(lèi)似圖36B所呈現(xiàn)的方式。接下來(lái)流程前進(jìn)至步驟3708。在步驟3708中,神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始執(zhí)行此神經(jīng)網(wǎng)絡(luò)單元程序。同時(shí),處理器100會(huì)執(zhí)行MTNN指令1400而將新的權(quán)重寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124(可能也會(huì)將新的數(shù)據(jù)寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122),以及/或執(zhí)行MFNN指令1500而從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取結(jié)果(可能也會(huì)從權(quán)重隨機(jī)存取存儲(chǔ)器124讀取結(jié)果)。接下來(lái)流程前進(jìn)至步驟3712。在步驟3712中,處理器100執(zhí)行MFNN指令1500(例如讀取狀態(tài)緩存器127),以偵測(cè)神經(jīng)網(wǎng)絡(luò)單元121已結(jié)束程序執(zhí)行。假設(shè)架構(gòu)程序選擇一個(gè)好的緩和指針3512數(shù)值,神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序所花費(fèi)的時(shí)間就會(huì)相同于處理器100執(zhí)行部分架構(gòu)程序以存取權(quán)重隨機(jī)存取存儲(chǔ)器124和/或數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所花費(fèi)的時(shí)間,如圖36B所示。接下來(lái)流程前進(jìn)至步驟3714。在步驟3714,處理器100執(zhí)行MTNN指令1400而利用一數(shù)值程序化緩和指針3512,此數(shù)值指定主要時(shí)頻率,也即使神經(jīng)網(wǎng)絡(luò)單元121處于一般模式。接下來(lái)前進(jìn)至步驟3716。在步驟3716中,處理器100執(zhí)行MTNN指令1400指示神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序,即類(lèi)似圖36A所呈現(xiàn)的方式。接下來(lái)流程前進(jìn)至步驟3718。在步驟3718中,神經(jīng)網(wǎng)絡(luò)單元121開(kāi)始以一般模式執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序。此流程終止于步驟3718。如前述,相較于在一般模式下執(zhí)行神經(jīng)網(wǎng)絡(luò)單元程序(即以處理器的主要時(shí)頻率執(zhí)行),在緩和模式下執(zhí)行可以分散執(zhí)行時(shí)間而能避免產(chǎn)生高溫。進(jìn)一步來(lái)說(shuō),當(dāng)神經(jīng)網(wǎng)絡(luò)單元在緩和模式執(zhí)行程序時(shí),神經(jīng)網(wǎng)絡(luò)單元是以較低的時(shí)頻率產(chǎn)生熱能,這些熱能可以順利地經(jīng)由神經(jīng)網(wǎng)絡(luò)單元(例如半導(dǎo)體裝置,金屬層與下方的基材)與周?chē)姆庋b體以及冷卻機(jī)構(gòu)(如散熱片,風(fēng)扇)排出,也因此,神經(jīng)網(wǎng)絡(luò)單元內(nèi)的裝置(如晶體管,電容,導(dǎo)線)就比較可能在較低的溫度下運(yùn)作。整體來(lái)看,在緩和模式下運(yùn)作也有助于降低處理器晶粒的其它部分內(nèi)的裝置溫度。較低的運(yùn)作溫度,特別是對(duì)于這些裝置的接面溫度而言,可以減輕漏電流的產(chǎn)生。此外,因?yàn)閱挝粫r(shí)間內(nèi)流入的電流量降低,電感噪聲與IR壓降噪聲也會(huì)降低。此外,溫度降低對(duì)于處理器內(nèi)的金氧半場(chǎng)效晶體管(MOSFET)的負(fù)偏壓溫度不穩(wěn)定性(NBTI)與正偏壓不穩(wěn)定性(PBSI)也有正面影響,而能提升可靠度和/或裝置以及處理器部分的壽命。溫度降低并可減輕處理器的金屬層內(nèi)的焦耳熱與電遷移效應(yīng)。關(guān)于神經(jīng)網(wǎng)絡(luò)單元共享資源的架構(gòu)程序與非架構(gòu)程序間的溝通機(jī)制如前述,在圖24至圖28與圖35至圖37的范例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124的資源是共享的。神經(jīng)處理單元126與處理器100的前端共享數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124。更精確地說(shuō),神經(jīng)處理單元126與處理器100的前端,如媒體緩存器118,都會(huì)對(duì)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行讀取與寫(xiě)入。換句話說(shuō),執(zhí)行于處理器100的架構(gòu)程序與執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的神經(jīng)網(wǎng)絡(luò)單元程序會(huì)共享數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124,而在某些情況下,如前所述,需要對(duì)于架構(gòu)程序與神經(jīng)網(wǎng)絡(luò)單元程序間的流程進(jìn)行控制。程序存儲(chǔ)器129的資源在一定程度下也是共享的,這是因?yàn)榧軜?gòu)程序會(huì)對(duì)其進(jìn)行寫(xiě)入,而定序器128會(huì)對(duì)其進(jìn)行讀取。本文所述的實(shí)施例提供一高效能的解決方案,以控制架構(gòu)程序與神經(jīng)網(wǎng)絡(luò)單元程序間存取共享資源的流程。在本文所述的實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元程序也稱(chēng)為非架構(gòu)程序,神經(jīng)網(wǎng)絡(luò)單元指令也稱(chēng)為非架構(gòu)指令,而神經(jīng)網(wǎng)絡(luò)單元指令集(如前所述也稱(chēng)為神經(jīng)處理單元指令集)也稱(chēng)為非架構(gòu)指令集。非架構(gòu)指令集不同于架構(gòu)指令集。在處理器100內(nèi)包含指令轉(zhuǎn)譯器104將架構(gòu)指令轉(zhuǎn)譯出微指令的實(shí)施例中,非架構(gòu)指令集也不同于微指令集。圖38為一方塊圖,詳細(xì)顯示神經(jīng)網(wǎng)絡(luò)單元121的序列器128。序列器128提供存儲(chǔ)器地址至程序存儲(chǔ)器129,以選擇提供給序列器128的非架構(gòu)指令,如前所述。如圖38所示,存儲(chǔ)器地址裝載于定序器128的程序計(jì)數(shù)器3802內(nèi)。定序器128通常會(huì)以程序存儲(chǔ)器129的地址順序循序遞增,除非定序器128遭遇到非架構(gòu)指令,例如循環(huán)或分支指令,而在此情況下,定序器128會(huì)將程序計(jì)數(shù)器3802更新為控制指令的目標(biāo)地址,即更新為位于控制指令的目標(biāo)的非架構(gòu)指令的地址。因此,裝載于程序計(jì)數(shù)器3802的地址131會(huì)指定當(dāng)前被攫取以供神經(jīng)處理單元126執(zhí)行的非架構(gòu)程序的非架構(gòu)指令在程序存儲(chǔ)器129中的地址。程序計(jì)數(shù)器3802的數(shù)值可由架構(gòu)程序透過(guò)狀態(tài)緩存器127的神經(jīng)網(wǎng)絡(luò)單元程序計(jì)數(shù)器字段3912而取得,如后續(xù)圖39所述。如此可使架構(gòu)程序依據(jù)非架構(gòu)程序的進(jìn)度,決定對(duì)于數(shù)據(jù)隨機(jī)存存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124讀取/寫(xiě)入數(shù)據(jù)的位置。定序器128還包括循環(huán)計(jì)數(shù)器3804,此循環(huán)計(jì)數(shù)器3804會(huì)搭配非架構(gòu)循環(huán)指令進(jìn)行運(yùn)作,例如圖26A中地址10的循環(huán)至1指令與圖28中地址11的循環(huán)至1指令。在圖26A與圖28的范例中,循環(huán)計(jì)數(shù)器3804內(nèi)加載地址0的非架構(gòu)初始化指令所指定的數(shù)值,例如加載數(shù)值400。每一次定序器128遭遇到循環(huán)指令而跳躍至目標(biāo)指令(如圖26A中位于地址1的乘法累加指令或是圖28中位于地址1的maxwacc指令),定序器128就會(huì)使循環(huán)計(jì)數(shù)器3804遞減。一旦循環(huán)計(jì)數(shù)器3804減少到零,定序器128就轉(zhuǎn)向排序在下一個(gè)的非架構(gòu)指令。在另一實(shí)施例中,首次遭遇到循環(huán)指令時(shí)會(huì)在循環(huán)計(jì)數(shù)器內(nèi)加載一個(gè)循環(huán)指令中指定的循環(huán)計(jì)數(shù)值,以省去利用非架構(gòu)初始化指令初始化循環(huán)計(jì)數(shù)器3804的需求。因此,循環(huán)計(jì)數(shù)器3804的數(shù)值會(huì)指出非架構(gòu)程序的循環(huán)組尚待執(zhí)行的次數(shù)。循環(huán)計(jì)數(shù)器3804的數(shù)值可由架構(gòu)程序透過(guò)狀態(tài)緩存器127的循環(huán)計(jì)數(shù)字段3914取得,如后續(xù)圖39所示。如此可使架構(gòu)程序依據(jù)非架構(gòu)程序的進(jìn)度,決定對(duì)于數(shù)據(jù)隨機(jī)存存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124讀取/寫(xiě)入數(shù)據(jù)的位置。在一實(shí)施例中,定序器包括三個(gè)額外的循環(huán)計(jì)數(shù)器以搭配非架構(gòu)程序內(nèi)的巢套循環(huán),這三個(gè)循環(huán)計(jì)數(shù)器的數(shù)值也可透過(guò)狀態(tài)緩存器127讀取。循環(huán)指令中具有一位以指示這四個(gè)循環(huán)計(jì)數(shù)器中哪一個(gè)是提供給當(dāng)前的循環(huán)指令使用。定序器128還包括迭代次數(shù)計(jì)數(shù)器3806。迭代次數(shù)計(jì)數(shù)器3806搭配非架構(gòu)指令,例如圖4,圖9,圖20與圖26A中地址2的乘法累加指令,以及圖28中地址2的maxwacc指令,這些指令在此后將會(huì)被稱(chēng)為“執(zhí)行”指令。在前述范例中,各個(gè)執(zhí)行指令分別指定執(zhí)行計(jì)數(shù)511,511,1023,2與3。當(dāng)定序器128遭遇到一個(gè)指定一非零迭代計(jì)數(shù)的執(zhí)行指令時(shí),定序器128會(huì)以此指定值加載迭代次數(shù)計(jì)數(shù)器3806。此外,定序器128會(huì)產(chǎn)生適當(dāng)?shù)奈⑦\(yùn)算3418以控制圖34中神經(jīng)處理單元126管線級(jí)3401內(nèi)的邏輯執(zhí)行,并且使迭代次數(shù)計(jì)數(shù)器3806遞減。若是迭代次數(shù)計(jì)數(shù)器3806大于零,定序器128會(huì)再次產(chǎn)生適當(dāng)?shù)奈⑦\(yùn)算3418控制神經(jīng)處理單元126內(nèi)的邏輯并使迭代次數(shù)計(jì)數(shù)器3806遞減。定序器128會(huì)持續(xù)以此方式運(yùn)作,直到迭代次數(shù)計(jì)數(shù)器3806的數(shù)值歸零。因此,迭代次數(shù)計(jì)數(shù)器3806的數(shù)值即為非架構(gòu)執(zhí)行指令內(nèi)指定尚待執(zhí)行的運(yùn)算次數(shù)(這些運(yùn)算如對(duì)于累加值與數(shù)據(jù)/權(quán)重文字進(jìn)行乘法累加,取最大值,加總運(yùn)算等)。迭代次數(shù)計(jì)數(shù)器3806的數(shù)值可利用架構(gòu)程序透過(guò)狀態(tài)緩存器127的迭代次數(shù)計(jì)數(shù)字段3916取得,如后續(xù)圖39所述。如此可使架構(gòu)程序依據(jù)非架構(gòu)程序的進(jìn)度,決定對(duì)于數(shù)據(jù)隨機(jī)存存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124讀取/寫(xiě)入數(shù)據(jù)的位置。圖39為一方塊圖,顯示神經(jīng)網(wǎng)絡(luò)單元121的控制與狀態(tài)緩存器127的若干字段。這些字段包括包括神經(jīng)處理單元126執(zhí)行非架構(gòu)程序最近寫(xiě)入的權(quán)重隨機(jī)存取存儲(chǔ)器列的地址2602,神經(jīng)處理單元126執(zhí)行非架構(gòu)程序最近讀取的權(quán)重隨機(jī)存取存儲(chǔ)器列的地址2604,神經(jīng)處理單元126執(zhí)行非架構(gòu)程序最近寫(xiě)入的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器列的地址2606,以及神經(jīng)處理單元126執(zhí)行非架構(gòu)程序最近讀取的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器列的地址2608,如前述圖26B所示。此外,這些字段還包括神經(jīng)網(wǎng)絡(luò)單元程序計(jì)數(shù)器3912字段,循環(huán)計(jì)數(shù)器3914字段,與迭代次數(shù)計(jì)數(shù)器3916字段。如前述,架構(gòu)程序可將狀態(tài)緩存器127內(nèi)的數(shù)據(jù)讀取至媒體緩存器118和/或通用緩存器116,例如透過(guò)MFNN指令1500讀取包括神經(jīng)網(wǎng)絡(luò)單元程序計(jì)數(shù)器3912,循環(huán)計(jì)數(shù)器3914與迭代次數(shù)計(jì)數(shù)器3916字段的數(shù)值。程序計(jì)數(shù)器字段3912的數(shù)值反映圖38中程序計(jì)數(shù)器3802的數(shù)值。循環(huán)計(jì)數(shù)器字段3914的數(shù)值反映循環(huán)計(jì)數(shù)器3804的數(shù)值。迭代次數(shù)計(jì)數(shù)器字段3916的數(shù)值反映迭代次數(shù)計(jì)數(shù)器3806的數(shù)值。在一實(shí)施例中,定序器128在每次需要調(diào)整程序計(jì)數(shù)器3802,循環(huán)計(jì)數(shù)器3804,或迭代次數(shù)計(jì)數(shù)器3806時(shí),都會(huì)更新程序計(jì)數(shù)器字段3912,循環(huán)計(jì)數(shù)器字段3914與迭代次數(shù)計(jì)數(shù)器字段3916的數(shù)值,如此,當(dāng)架構(gòu)程序讀取時(shí)這些字段的數(shù)值就會(huì)是當(dāng)下的數(shù)值。在另一實(shí)施例中,當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行架構(gòu)指令以讀取狀態(tài)緩存器127時(shí),神經(jīng)網(wǎng)絡(luò)單元121僅僅取得程序計(jì)數(shù)器3802,循環(huán)計(jì)數(shù)器3804與迭代次數(shù)計(jì)數(shù)器3806的數(shù)值并將其提供回架構(gòu)指令(例如提供至媒體緩存器118或通用緩存器116)。由此可以發(fā)現(xiàn),圖39的狀態(tài)緩存器127的字段的數(shù)值可以理解為非架構(gòu)指令由神經(jīng)網(wǎng)絡(luò)單元執(zhí)行的過(guò)程中,其執(zhí)行進(jìn)度的信息。關(guān)于非架構(gòu)程序執(zhí)行進(jìn)度的某些特定面向,如程序計(jì)數(shù)器3802數(shù)值,循環(huán)計(jì)數(shù)器3804數(shù)值,迭代次數(shù)計(jì)數(shù)器3806數(shù)值,最近讀取/寫(xiě)入的權(quán)重隨機(jī)存取存儲(chǔ)器124地址125的字段2602/2604,以及最近讀取/寫(xiě)入的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122地址123的字段2606/2608,已于先前的章節(jié)進(jìn)行描述。執(zhí)行于處理器100的架構(gòu)程序可以從狀態(tài)緩存器127讀取圖39的非架構(gòu)程序進(jìn)度值并利用這些信息來(lái)做決策,例如透過(guò)如比較與分支指令等架構(gòu)指令來(lái)進(jìn)行。舉例來(lái)說(shuō),架構(gòu)程序會(huì)決定對(duì)于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行數(shù)據(jù)/權(quán)重的讀取/寫(xiě)入的列,以控制數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124的數(shù)據(jù)的流入與流出,尤其是針對(duì)大型數(shù)據(jù)組和/或不同非架構(gòu)指令的重迭執(zhí)行。這些利用架構(gòu)程序進(jìn)行決策的范例可參照本文前后章節(jié)的描述。舉例來(lái)說(shuō),如前文圖26A所述,架構(gòu)程序設(shè)定非架構(gòu)程序?qū)⒕矸e運(yùn)算的結(jié)果寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122中卷積核2402上方的列(如列8上方),而當(dāng)神經(jīng)網(wǎng)絡(luò)單元121利用最近寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列2606的地址寫(xiě)入結(jié)果時(shí),架構(gòu)程序會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取此結(jié)果。在另一范例中,如前文圖26B所述,架構(gòu)程序利用來(lái)自圖38的狀態(tài)緩存器127字段的信息確認(rèn)非架構(gòu)程序?qū)D24的數(shù)據(jù)陣列2404分成5個(gè)512x1600的數(shù)據(jù)塊以執(zhí)行卷積運(yùn)算的進(jìn)度。架構(gòu)程序?qū)⒋?560x1600數(shù)據(jù)陣列的第一個(gè)512x1600數(shù)據(jù)塊寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124并啟動(dòng)非架構(gòu)程序,其循環(huán)計(jì)數(shù)為1600而權(quán)重隨機(jī)存取存儲(chǔ)器124初始化的輸出列為0。神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行非架構(gòu)程序時(shí),架構(gòu)程序會(huì)讀取狀態(tài)緩存器127以確認(rèn)權(quán)重隨機(jī)存取存儲(chǔ)器124的最近寫(xiě)入列2602,如此架構(gòu)程序就可讀取由非架構(gòu)程序?qū)懭氲挠行Ь矸e運(yùn)算結(jié)果,并且在讀取后利用下一個(gè)512x1600數(shù)據(jù)塊覆寫(xiě)此有效卷積運(yùn)算結(jié)果,如此,在神經(jīng)網(wǎng)絡(luò)單元121完成非架構(gòu)程序?qū)τ诘谝粋€(gè)512x1600數(shù)據(jù)塊的執(zhí)行后,處理器100在必要時(shí)就可立即更新非架構(gòu)程序并再次啟動(dòng)非架構(gòu)程序以執(zhí)行下一個(gè)512x1600數(shù)據(jù)塊。在另一范例中,假定架構(gòu)程序使神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行一系列典型的神經(jīng)網(wǎng)絡(luò)乘法累加啟動(dòng)函數(shù),其中,權(quán)重被儲(chǔ)存于權(quán)重隨機(jī)存取存儲(chǔ)器124而結(jié)果會(huì)被寫(xiě)回?cái)?shù)據(jù)隨機(jī)存取存儲(chǔ)器122。在此情況下,架構(gòu)程序讀取權(quán)重隨機(jī)存取存儲(chǔ)器124的一列后就不會(huì)再對(duì)其進(jìn)行讀取。如此,在當(dāng)前的權(quán)重已經(jīng)被非架構(gòu)程序讀取/使用后,就可以利用架構(gòu)程序開(kāi)始將新的權(quán)重復(fù)寫(xiě)權(quán)重隨機(jī)存取存儲(chǔ)器124上的權(quán)重,以提供非架構(gòu)程序的下一次范例(例如下一個(gè)神經(jīng)網(wǎng)絡(luò)層)使用。在此情況下,架構(gòu)程序會(huì)讀取狀態(tài)緩存器127以取得權(quán)重隨機(jī)存取存儲(chǔ)器的最近讀取列2604的地址以決定其于權(quán)重隨機(jī)存取存儲(chǔ)器124中寫(xiě)入新權(quán)重組的位置。在另一個(gè)范例中,假定架構(gòu)程序知道非架構(gòu)程序內(nèi)包括一個(gè)具有大迭代次數(shù)計(jì)數(shù)的執(zhí)行指令,如圖20中地址2的非架構(gòu)乘法累加指令。在此情況下,架構(gòu)程序需要知道迭代次數(shù)計(jì)數(shù)3916,方能知道大致上還需要多少個(gè)時(shí)頻周期才能完成此非架構(gòu)指令以決定架構(gòu)程序接下來(lái)所要采取兩個(gè)或多個(gè)動(dòng)作之一的何者。舉例來(lái)說(shuō),若是需要很長(zhǎng)的時(shí)間才能完成執(zhí)行,架構(gòu)程序就會(huì)放棄控制給另一個(gè)架構(gòu)程序,例如操作系統(tǒng)。類(lèi)似地,假定架構(gòu)程序知道非架構(gòu)程序包括一個(gè)具有相當(dāng)大的循環(huán)計(jì)數(shù)的循環(huán)組,例如圖28的非架構(gòu)程序。在此情況下,架構(gòu)程序會(huì)需要知道循環(huán)計(jì)數(shù)3914,方能知道大致上還需要多少個(gè)時(shí)頻周期才能完成此非架構(gòu)指令以決定接下來(lái)所要采取兩個(gè)或多個(gè)動(dòng)作之一的何者。在另一范例中,假定架構(gòu)程序使神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行類(lèi)似于圖27與圖28所述的共源運(yùn)算,其中所要共源的數(shù)據(jù)是儲(chǔ)存在權(quán)重隨機(jī)存取存儲(chǔ)器124而結(jié)果會(huì)被寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124。不過(guò),不同于圖27與圖28的范例,假定此范例的結(jié)果會(huì)被寫(xiě)回權(quán)重隨機(jī)存取存儲(chǔ)器124的最上方400列,例如列1600至1999。在此情況下,非架構(gòu)程序完成讀取四列其所要共源的權(quán)重隨機(jī)存取存儲(chǔ)器124數(shù)據(jù)后,非架構(gòu)程序就不會(huì)再次進(jìn)行讀取。因此,一旦當(dāng)前四列數(shù)據(jù)都已被非架構(gòu)程序讀取/使用后,即可利用架構(gòu)程序開(kāi)始將新數(shù)據(jù)(如非架構(gòu)程序的下一次范例的權(quán)重,舉例來(lái)說(shuō),例如對(duì)取得數(shù)據(jù)執(zhí)行典型乘法累加啟動(dòng)函數(shù)運(yùn)算的非架構(gòu)程序)覆寫(xiě)權(quán)重隨機(jī)存取存儲(chǔ)器124的數(shù)據(jù)。在此情況下,架構(gòu)程序會(huì)讀取狀態(tài)緩存器127以取得權(quán)重隨機(jī)存取存儲(chǔ)器的最近讀取列2604的地址,以決定新的權(quán)重組寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的位置。時(shí)間遞歸(recurrent)神經(jīng)網(wǎng)絡(luò)加速傳統(tǒng)前饋神經(jīng)網(wǎng)絡(luò)不具有儲(chǔ)存網(wǎng)絡(luò)先前輸入的存儲(chǔ)器。前饋神經(jīng)網(wǎng)絡(luò)通常被用于執(zhí)行在任務(wù)中隨時(shí)間輸入網(wǎng)絡(luò)的多個(gè)輸入是各自獨(dú)立,且多個(gè)輸出也是如此的任務(wù)。相較之下,時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)通常有助于執(zhí)行在任務(wù)中隨時(shí)間輸入至神經(jīng)網(wǎng)絡(luò)的輸入順序具有重要性的任務(wù)。(此處的順序通常被稱(chēng)為時(shí)間步驟。)因此,時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)包括一個(gè)概念上的存儲(chǔ)器或稱(chēng)內(nèi)部狀態(tài),以裝載網(wǎng)絡(luò)因應(yīng)序列中的先前輸入所執(zhí)行的計(jì)算而產(chǎn)生的信息,時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的輸出關(guān)聯(lián)于此內(nèi)部狀態(tài)與下一個(gè)時(shí)間步驟的輸入。下列任務(wù),如語(yǔ)音辨識(shí),語(yǔ)言模型,文字產(chǎn)生,語(yǔ)言翻譯,影像描述產(chǎn)生以及某些形式的手寫(xiě)辨識(shí),是時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)可以執(zhí)行良好的例子。三種習(xí)知的時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的范例為Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)與長(zhǎng)短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)。Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)包含內(nèi)容節(jié)點(diǎn)以記憶當(dāng)前時(shí)間步驟中時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的隱藏層狀態(tài),此狀態(tài)在下一個(gè)時(shí)間步驟中會(huì)作為對(duì)于隱藏層的輸入。Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)類(lèi)似于Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),除了其中的內(nèi)容節(jié)點(diǎn)會(huì)記憶時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的輸出層狀態(tài)而非隱藏層狀態(tài)。長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)包括由長(zhǎng)短期記憶胞構(gòu)成的一長(zhǎng)短期記憶層。每個(gè)長(zhǎng)短期記憶胞具有當(dāng)前時(shí)間步驟的當(dāng)前狀態(tài)與當(dāng)前輸出,以及一個(gè)新的或后續(xù)時(shí)間步驟的新的狀態(tài)與新的輸出。長(zhǎng)短期記憶胞包括輸入閘與輸出閘,以及遺忘閘,遺忘閘可以使神經(jīng)元失去其所記憶的狀態(tài)。這三種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)在后續(xù)章節(jié)會(huì)有更詳細(xì)的描述。如本文所述,對(duì)于時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)而言,如Elman或Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)單元每次執(zhí)行都會(huì)使用時(shí)間步驟,取得一組輸入層節(jié)點(diǎn)值,并執(zhí)行必要計(jì)算使其透過(guò)時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行傳播,以產(chǎn)生輸出層節(jié)點(diǎn)值以及隱藏層與內(nèi)容層節(jié)點(diǎn)值。因此,輸入層節(jié)點(diǎn)值會(huì)關(guān)聯(lián)于計(jì)算隱藏,輸出與內(nèi)容層節(jié)點(diǎn)值的時(shí)間步驟;而隱藏,輸出與內(nèi)容層節(jié)點(diǎn)值會(huì)關(guān)聯(lián)于產(chǎn)生這些節(jié)點(diǎn)值的時(shí)間步驟。輸入層節(jié)點(diǎn)值是時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)所仿真的系統(tǒng)的取樣值,如影像,語(yǔ)音取樣,商業(yè)市場(chǎng)數(shù)據(jù)的快照。對(duì)于長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)而言,神經(jīng)網(wǎng)絡(luò)單元的每次執(zhí)行都會(huì)使用一時(shí)間步驟,取得一組記憶胞輸入值并執(zhí)行必要計(jì)算以產(chǎn)生記憶胞輸出值(以及記憶胞狀態(tài)與輸入閘,遺忘閘以及輸出閘數(shù)值),這也可以理解為是透過(guò)長(zhǎng)短期記憶層記憶胞傳播記憶胞輸入值。因此,記憶胞輸入值會(huì)關(guān)聯(lián)于計(jì)算記憶胞狀態(tài)以及輸入閘,遺忘閘與輸出閘數(shù)值的時(shí)間步驟;而記憶胞狀態(tài)以及輸入閘,遺忘閘與輸出閘數(shù)值會(huì)關(guān)聯(lián)于產(chǎn)生這些節(jié)點(diǎn)值的時(shí)間步驟。內(nèi)容層節(jié)點(diǎn)值,也稱(chēng)為狀態(tài)節(jié)點(diǎn),是神經(jīng)網(wǎng)絡(luò)的狀態(tài)值,此狀態(tài)值基于關(guān)聯(lián)于先前時(shí)間步驟的輸入層節(jié)點(diǎn)值,而不僅只關(guān)聯(lián)于當(dāng)前時(shí)間步驟的輸入層節(jié)點(diǎn)值。神經(jīng)網(wǎng)絡(luò)單元對(duì)于時(shí)間步驟所執(zhí)行的計(jì)算(例如對(duì)于Elman或Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的隱藏層節(jié)點(diǎn)值計(jì)算)是先前時(shí)間步驟產(chǎn)生的內(nèi)容層節(jié)點(diǎn)值的一函數(shù)。因此,時(shí)間步驟開(kāi)始時(shí)的網(wǎng)絡(luò)狀態(tài)值(內(nèi)容節(jié)點(diǎn)值)會(huì)影響此時(shí)間步驟的過(guò)程中產(chǎn)生的輸出層節(jié)點(diǎn)值。此外,時(shí)間步驟結(jié)束時(shí)的網(wǎng)絡(luò)狀態(tài)值會(huì)受到此時(shí)間步驟的輸入節(jié)點(diǎn)值與時(shí)間步驟開(kāi)始時(shí)的網(wǎng)絡(luò)狀態(tài)值影響。類(lèi)似地,對(duì)于長(zhǎng)短期記憶胞而言,記憶胞狀態(tài)值關(guān)聯(lián)于先前時(shí)間步驟的記憶胞輸入值,而非僅只關(guān)聯(lián)于當(dāng)前時(shí)間步驟的記憶胞輸入值。因?yàn)樯窠?jīng)網(wǎng)絡(luò)單元對(duì)于時(shí)間步驟執(zhí)行的計(jì)算(例如下一個(gè)記憶胞狀態(tài)的計(jì)算)是先前時(shí)間步驟產(chǎn)生的記憶胞狀態(tài)值的函數(shù),時(shí)間步驟開(kāi)始時(shí)的網(wǎng)絡(luò)狀態(tài)值(記憶胞狀態(tài)值)會(huì)影響此時(shí)間步驟中產(chǎn)生的記憶胞輸出值,而此時(shí)間步驟結(jié)束時(shí)的網(wǎng)絡(luò)狀態(tài)值會(huì)受到此時(shí)間步驟的記憶胞輸入值與先前網(wǎng)絡(luò)狀態(tài)值影響。圖40為一方塊圖,顯示Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的一范例。圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)包括輸入層節(jié)點(diǎn),或神經(jīng)元,標(biāo)示為D0,D1至Dn,集體稱(chēng)為多個(gè)輸入層節(jié)點(diǎn)D而個(gè)別通稱(chēng)為輸入層節(jié)點(diǎn)D;隱藏層節(jié)點(diǎn)/神經(jīng)元,標(biāo)示為Z0,Z1至Zn,集體稱(chēng)為多個(gè)隱藏層節(jié)點(diǎn)Z而個(gè)別通稱(chēng)為隱藏層節(jié)點(diǎn)Z;輸出層節(jié)點(diǎn)/神經(jīng)元,標(biāo)示為Y0,Y1至Yn,集體稱(chēng)為多個(gè)輸出層節(jié)點(diǎn)Y而個(gè)別通稱(chēng)為輸出層節(jié)點(diǎn)Y;以及內(nèi)容層節(jié)點(diǎn)/神經(jīng)元,標(biāo)示為C0,C1至Cn,集體稱(chēng)為多個(gè)內(nèi)容層節(jié)點(diǎn)C而個(gè)別通稱(chēng)為內(nèi)容層節(jié)點(diǎn)C。在圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的范例中,各個(gè)隱藏層節(jié)點(diǎn)Z具有一輸入連結(jié)至各個(gè)輸入層節(jié)點(diǎn)D的輸出,并具有一輸入連結(jié)至各個(gè)內(nèi)容層節(jié)點(diǎn)C的輸出;各個(gè)輸出層節(jié)點(diǎn)Y具有一輸入連結(jié)至各個(gè)隱藏層節(jié)點(diǎn)Z的輸出;而各個(gè)內(nèi)容層節(jié)點(diǎn)C具有一輸入連結(jié)至相對(duì)應(yīng)隱藏層節(jié)點(diǎn)Z的輸出。在許多方面,Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的運(yùn)作類(lèi)似于傳統(tǒng)的前饋人工神經(jīng)網(wǎng)絡(luò)。也就是說(shuō),對(duì)于給定節(jié)點(diǎn)而言,此節(jié)點(diǎn)的各個(gè)輸入連結(jié)都會(huì)有一個(gè)相關(guān)聯(lián)的權(quán)重;節(jié)點(diǎn)在一輸入連結(jié)收到的數(shù)值會(huì)和關(guān)聯(lián)的權(quán)重相乘以產(chǎn)生一乘積;此節(jié)點(diǎn)會(huì)將關(guān)聯(lián)于所有輸入連結(jié)的乘積相加以產(chǎn)生一總數(shù)(此總數(shù)內(nèi)可能還會(huì)包含一偏移項(xiàng));一般而言,對(duì)此總數(shù)還會(huì)執(zhí)行啟動(dòng)函數(shù)以產(chǎn)生節(jié)點(diǎn)的輸出值,此輸出值有時(shí)稱(chēng)為此節(jié)點(diǎn)的啟動(dòng)值。對(duì)于傳統(tǒng)的前饋網(wǎng)絡(luò)而言,數(shù)據(jù)總是沿著輸入層至輸出層的方向流動(dòng)。也就是說(shuō),輸入層提供一數(shù)值至隱藏層(通常會(huì)有多個(gè)隱藏層),而隱藏層會(huì)產(chǎn)生其輸出值提供至輸出層,而輸出層會(huì)產(chǎn)生可被取用的輸出。不過(guò),不同于傳統(tǒng)的前饋網(wǎng)絡(luò),Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)還包括一些反饋連結(jié),也就是圖40中從隱藏層節(jié)點(diǎn)Z至內(nèi)容層節(jié)點(diǎn)C的連結(jié)。Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的運(yùn)作如下,當(dāng)輸入層節(jié)點(diǎn)D在一個(gè)新的時(shí)間步驟提供一輸入值至隱藏層節(jié)點(diǎn)Z,內(nèi)容節(jié)點(diǎn)C會(huì)提供一數(shù)值至隱藏層Z,此數(shù)值為隱藏層節(jié)點(diǎn)Z因應(yīng)先前輸入,也就是當(dāng)前時(shí)間步驟,的輸出值。從這個(gè)意義上來(lái)說(shuō),Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的內(nèi)容節(jié)點(diǎn)C是一個(gè)基于先前時(shí)間步驟的輸入值的存儲(chǔ)器。圖41與圖42將會(huì)對(duì)執(zhí)行關(guān)聯(lián)于圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算的神經(jīng)網(wǎng)絡(luò)單元121的運(yùn)作實(shí)施例進(jìn)行說(shuō)明。為了說(shuō)明本發(fā)明,Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)是一個(gè)包含至少一個(gè)輸入節(jié)點(diǎn)層,一個(gè)隱藏節(jié)點(diǎn)層,一個(gè)輸出節(jié)點(diǎn)層與一個(gè)內(nèi)容節(jié)點(diǎn)層的時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。對(duì)于一給定時(shí)間步驟,內(nèi)容節(jié)點(diǎn)層會(huì)儲(chǔ)存隱藏節(jié)點(diǎn)層于前一個(gè)時(shí)間步驟產(chǎn)生且反饋至內(nèi)容節(jié)點(diǎn)層的結(jié)果。此反饋至內(nèi)容層的結(jié)果可以是啟動(dòng)函數(shù)的執(zhí)行結(jié)果或是隱藏節(jié)點(diǎn)層執(zhí)行累加運(yùn)算而未執(zhí)行啟動(dòng)函數(shù)的結(jié)果。圖41為一方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行關(guān)聯(lián)于圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算時(shí),神經(jīng)網(wǎng)絡(luò)單元121的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124內(nèi)的數(shù)據(jù)配置的一范例。在圖41的范例中假定圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)具有512個(gè)輸入節(jié)點(diǎn)D,512個(gè)隱藏節(jié)點(diǎn)Z,512個(gè)內(nèi)容節(jié)點(diǎn)C,與512個(gè)輸出節(jié)點(diǎn)Y。此外,也假定此Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)為完全連結(jié),即全部512個(gè)輸入節(jié)點(diǎn)D均連結(jié)各個(gè)隱藏節(jié)點(diǎn)Z作為輸入,全部512個(gè)內(nèi)容節(jié)點(diǎn)C均連結(jié)各個(gè)隱藏節(jié)點(diǎn)Z作為輸入,而全部512個(gè)隱藏節(jié)點(diǎn)Z均連結(jié)各個(gè)輸出節(jié)點(diǎn)Y作為輸入。此外,此神經(jīng)網(wǎng)絡(luò)單元121配置為512個(gè)神經(jīng)處理單元126或神經(jīng)元,例如采寬配置。最后,此范例假定關(guān)聯(lián)于內(nèi)容節(jié)點(diǎn)C至隱藏節(jié)點(diǎn)Z的連結(jié)的權(quán)重均為數(shù)值1,因而不需儲(chǔ)存這些為一的權(quán)重值。如圖中所示,權(quán)重隨機(jī)存取存儲(chǔ)器124的下方512列(列0至511)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D與隱藏節(jié)點(diǎn)Z間的連結(jié)的權(quán)重值。更精確地說(shuō),如圖中所示,列0裝載關(guān)聯(lián)于由輸入節(jié)點(diǎn)D0至隱藏節(jié)點(diǎn)Z的輸入連結(jié)的權(quán)重,也即,文字0會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D0與隱藏節(jié)點(diǎn)Z0間的連結(jié)的權(quán)重,文字1會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D0與隱藏節(jié)點(diǎn)Z1間的連結(jié)的權(quán)重,文字2會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D0與隱藏節(jié)點(diǎn)Z2間的連結(jié)的權(quán)重,依此類(lèi)推,文字511會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D0與隱藏節(jié)點(diǎn)Z511間的連結(jié)的權(quán)重;列1裝載關(guān)聯(lián)于由輸入節(jié)點(diǎn)D1至隱藏節(jié)點(diǎn)Z的輸入連結(jié)的權(quán)重,也即,文字0會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D1與隱藏節(jié)點(diǎn)Z0間的連結(jié)的權(quán)重,文字1會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D1與隱藏節(jié)點(diǎn)Z1間的連結(jié)的權(quán)重,文字2會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D1與隱藏節(jié)點(diǎn)Z2間的連結(jié)的權(quán)重,依此類(lèi)推,文字511會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D1與隱藏節(jié)點(diǎn)Z511間的連結(jié)的權(quán)重;直到列511,列511裝載關(guān)聯(lián)于由輸入節(jié)點(diǎn)D511至隱藏節(jié)點(diǎn)Z的輸入連結(jié)的權(quán)重,也即,文字0會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D511與隱藏節(jié)點(diǎn)Z0間的連結(jié)的權(quán)重,文字1會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D511與隱藏節(jié)點(diǎn)Z1間的連結(jié)的權(quán)重,文字2會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D511與隱藏節(jié)點(diǎn)Z2間的連結(jié)的權(quán)重,依此類(lèi)推,文字511會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D511與隱藏節(jié)點(diǎn)Z511間的連結(jié)的權(quán)重。此配置與用途類(lèi)似于前文對(duì)應(yīng)于圖4至圖6A所述的實(shí)施例。如圖中所示,權(quán)重隨機(jī)存取存儲(chǔ)器124的后續(xù)512列(列512至1023)是以類(lèi)似的方式裝載關(guān)聯(lián)于隱藏節(jié)點(diǎn)Z與輸出節(jié)點(diǎn)Y間的連結(jié)的權(quán)重。數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122裝載Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)節(jié)點(diǎn)值供一系列時(shí)間步驟使用。進(jìn)一步來(lái)說(shuō),數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122以三列為組裝載提供給定時(shí)間步驟的節(jié)點(diǎn)值。如圖中所示,以一個(gè)具有64列的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122為例,此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122可裝載供20個(gè)不同時(shí)間步驟使用的節(jié)點(diǎn)值。在圖41的范例中,列0至2裝載供時(shí)間步驟0使用的節(jié)點(diǎn)值,列3至5裝載供時(shí)間步驟1使用的節(jié)點(diǎn)值,依此類(lèi)推,列57至59裝載供時(shí)間步驟19使用的節(jié)點(diǎn)值。各組中的第一列裝載此時(shí)間步驟的輸入節(jié)點(diǎn)D的數(shù)值。各組中的第二列裝載此時(shí)間步驟的隱藏節(jié)點(diǎn)Z的數(shù)值。各組中的第三列裝載此時(shí)間步驟的輸出節(jié)點(diǎn)Y的數(shù)值。如圖中所示,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的各行裝載其相對(duì)應(yīng)的神經(jīng)元或神經(jīng)處理單元126的節(jié)點(diǎn)值。也就是說(shuō),行0裝載關(guān)聯(lián)于節(jié)點(diǎn)D0,Z0與Y0的節(jié)點(diǎn)值,其計(jì)算是由神經(jīng)處理單元0所執(zhí)行;行1裝載關(guān)聯(lián)于節(jié)點(diǎn)D1,Z1與Y1的節(jié)點(diǎn)值,其計(jì)算是由神經(jīng)處理單元1所執(zhí)行;依此類(lèi)推,行511裝載關(guān)聯(lián)于節(jié)點(diǎn)D511,Z511與Y511的節(jié)點(diǎn)值,其計(jì)算是由神經(jīng)處理單元511所執(zhí)行,這部分在后續(xù)對(duì)應(yīng)于圖42處會(huì)有更詳細(xì)的說(shuō)明。如圖41所指出,對(duì)于一給定時(shí)間步驟而言,位于各組三列存儲(chǔ)器的第二列的隱藏節(jié)點(diǎn)Z的數(shù)值會(huì)是下一個(gè)時(shí)間步驟的內(nèi)容節(jié)點(diǎn)C的數(shù)值。也就是說(shuō),神經(jīng)處理單元126在一時(shí)間步驟內(nèi)計(jì)算并寫(xiě)入的節(jié)點(diǎn)Z的數(shù)值,會(huì)成為此神經(jīng)處理單元126在下一個(gè)時(shí)間步驟內(nèi)用于計(jì)算節(jié)點(diǎn)Z的數(shù)值所使用的節(jié)點(diǎn)C的數(shù)值(連同此下一個(gè)時(shí)間步驟的輸入節(jié)點(diǎn)D的數(shù)值)。內(nèi)容節(jié)點(diǎn)C的初始值(在時(shí)間步驟0用以計(jì)算列1中的節(jié)點(diǎn)Z的數(shù)值所使用的節(jié)點(diǎn)C的數(shù)值)假定為零。這在后續(xù)對(duì)應(yīng)于圖42的非架構(gòu)程序的相關(guān)章節(jié)會(huì)有更詳細(xì)的說(shuō)明。較佳地,輸入節(jié)點(diǎn)D的數(shù)值(圖41的范例中的列0,3,依此類(lèi)推至列57的數(shù)值)由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MTNN指令1400寫(xiě)入/填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,并且是由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序讀取/使用,例如圖42的非架構(gòu)程序。相反地,隱藏/輸出節(jié)點(diǎn)Z/Y的數(shù)值(圖41的范例中的列1與2,4與5,依此類(lèi)推至列58與59的數(shù)值)則是由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序?qū)懭?填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,并且是由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MFNN指令1500讀取/使用。圖41的范例假定此架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)于20個(gè)不同的時(shí)間步驟,將輸入節(jié)點(diǎn)D的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(列0,3,依此類(lèi)推至列57);(2)啟動(dòng)圖42的非架構(gòu)程序;(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出節(jié)點(diǎn)Y的數(shù)值(列2,5,依此類(lèi)推至列59);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù),例如對(duì)手機(jī)使用者的話語(yǔ)進(jìn)行辨識(shí)所需的計(jì)算。在另一種執(zhí)行方式中,架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)單一個(gè)時(shí)間步驟,以輸入節(jié)點(diǎn)D的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(如列0);(2)啟動(dòng)非架構(gòu)程序(圖42非架構(gòu)程序的修正后版本,不需循環(huán),并且只存取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的單一組三列);(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出節(jié)點(diǎn)Y的數(shù)值(如列2);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù)。此二種方式何者為優(yōu)可依據(jù)時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的輸入值的取樣方式而定。舉例來(lái)說(shuō),若是此任務(wù)容許在多個(gè)時(shí)間步驟對(duì)輸入進(jìn)行取樣(例如大約20個(gè)時(shí)間步驟)并執(zhí)行計(jì)算,第一種方式就較為理想,因?yàn)榇朔绞娇赡軒?lái)更多計(jì)算資源效率和/或較佳的效能,不過(guò),若是此任務(wù)只容許在單一個(gè)時(shí)間步驟執(zhí)行取樣,就需要使用第二種方式。第三實(shí)施例類(lèi)似于前述第二種方式,不過(guò),不同于第二種方式使用單一組三列數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,此方式的非架構(gòu)程序使用多組三列存儲(chǔ)器,也就是在各個(gè)時(shí)間步驟使用不同組三列存儲(chǔ)器,此部分類(lèi)似于第一種方式。在此第三實(shí)施例中,較佳地,架構(gòu)程序在步驟(2)前包含一步驟,此步驟中,架構(gòu)程序會(huì)在非架構(gòu)程序啟動(dòng)前對(duì)其進(jìn)行更新,例如將地址1的指令內(nèi)的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列更新為指向下一組三列存儲(chǔ)器。圖42為一表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129的一程序,此程序由神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行,并依據(jù)圖41的配置使用數(shù)據(jù)與權(quán)重以達(dá)成Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。圖42(以及圖45,圖48,圖51,圖54與圖57)的非架構(gòu)程序中的若干指令詳如前述(例如乘法累加(MULT-ACCUM),循環(huán)(LOOP),初始化(INITIALIZE)指令),以下段落假定這些指令與前述說(shuō)明內(nèi)容一致,除非有不同的說(shuō)明。圖42的范例程序包含13個(gè)非架構(gòu)指令,分別位于地址0至12。地址0的指令(INITIALIZENPU,LOOPCNT=20)清除累加器202并且將循環(huán)計(jì)數(shù)器3804初始化至數(shù)值20,以執(zhí)行20次循環(huán)組(地址4至11的指令)。較佳地,此初始化指令也會(huì)使神經(jīng)網(wǎng)絡(luò)單元121處于寬配置,如此,神經(jīng)網(wǎng)絡(luò)單元121就會(huì)配置為512個(gè)神經(jīng)處理單元126。如同后續(xù)章節(jié)所述,在地址1至3以及地址7至11的指令執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126作為512個(gè)相對(duì)應(yīng)的隱藏層節(jié)點(diǎn)Z進(jìn)行運(yùn)作,而在地址4至6的指令執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126作為512個(gè)相對(duì)應(yīng)的輸出層節(jié)點(diǎn)Y進(jìn)行運(yùn)作。地址1至3的指令不屬于程序的循環(huán)組而只會(huì)執(zhí)行一次。這些指令計(jì)算隱藏層節(jié)點(diǎn)Z的初始值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1供地址4至6的指令的第一次執(zhí)行使用,以計(jì)算出第一時(shí)間步驟(時(shí)間步驟0)的輸出層節(jié)點(diǎn)Y。此外,這些由地址1至3的指令計(jì)算并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1的隱藏層節(jié)點(diǎn)Z的數(shù)值會(huì)變成內(nèi)容層節(jié)點(diǎn)C的數(shù)值供地址7與8的指令的第一次執(zhí)行使用,以計(jì)算出隱藏層節(jié)點(diǎn)Z的數(shù)值供第二時(shí)間步驟(時(shí)間步驟1)使用。在地址1與2的指令的執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將位于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列0的512個(gè)輸入節(jié)點(diǎn)D數(shù)值乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列0至511中相對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202。在地址3的指令的執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元的512個(gè)累加器202的數(shù)值會(huì)被傳遞并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1。也就是說(shuō),地址3的輸出指令會(huì)將512個(gè)神經(jīng)處理單元中的各個(gè)神經(jīng)處理單元512的累加器202數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1,此數(shù)值即為初始的隱藏層Z數(shù)值,隨后,此指令會(huì)清除累加器202。圖42的非架構(gòu)程序的地址1至2的指令所執(zhí)行的運(yùn)算類(lèi)似于圖4的非架構(gòu)指令的地址1至2的指令所執(zhí)行的運(yùn)算。進(jìn)一步來(lái)說(shuō),地址1的指令(MULT_ACCUMDRROW0)會(huì)指示這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列0的相對(duì)應(yīng)文字讀入其多任務(wù)緩存器208,將權(quán)重隨機(jī)存取存儲(chǔ)器124的列0的相對(duì)應(yīng)文字讀入其多任務(wù)緩存器705,將數(shù)據(jù)文字與權(quán)重文字相乘產(chǎn)生乘積并將此乘積加入累加器202。地址2的指令(MULT-ACCUMROTATE,WRROW+1,COUNT=511)指示這512個(gè)神經(jīng)處理單元中的各個(gè)神經(jīng)處理單元126將來(lái)自相鄰神經(jīng)處理單元126的文字轉(zhuǎn)入其多任務(wù)緩存器208(利用由神經(jīng)網(wǎng)絡(luò)單元121的512個(gè)多任務(wù)緩存器208集體運(yùn)作構(gòu)成的512個(gè)文字的旋轉(zhuǎn)器,這些緩存器即為地址1的指令指示將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列讀入的緩存器),將權(quán)重隨機(jī)存取存儲(chǔ)器124的下一列的相對(duì)應(yīng)文字讀入其多任務(wù)緩存器705,將數(shù)據(jù)文字與權(quán)重文字相乘產(chǎn)生乘積并將此乘積加入累加器202,并且執(zhí)行前述運(yùn)算511次。此外,圖42中地址3的單一非架構(gòu)輸出指令(OUTPUTPASSTHRU,DROUTROW1,CLRACC)會(huì)將啟動(dòng)函數(shù)指令的運(yùn)算與圖4中地址3與4的寫(xiě)入輸出指令合并(雖然圖42的程序傳遞累加器202數(shù)值,而圖4的程序則是對(duì)累加器202數(shù)值執(zhí)行啟動(dòng)函數(shù))。也就是說(shuō),在圖42的程序中,執(zhí)行于累加器202數(shù)值的啟動(dòng)函數(shù),如果有的話,輸出指令中指定(也在地址6與11的輸出指令中指定),而非如圖4的程序所示于一個(gè)不同的非架構(gòu)啟動(dòng)函數(shù)指令中指定。圖4(以及圖20,圖26A與圖28)的非架構(gòu)程序的另一實(shí)施例,也即將啟動(dòng)函數(shù)指令的運(yùn)算與寫(xiě)入輸出指令(如圖4的地址3與4)合并為如圖42所示的單一非架構(gòu)輸出指令也屬于本發(fā)明的范疇。圖42的范例假定隱藏層(Z)的節(jié)點(diǎn)不會(huì)對(duì)累加器數(shù)值執(zhí)行啟動(dòng)函數(shù)。不過(guò),隱藏層(Z)對(duì)累加器數(shù)值執(zhí)行啟動(dòng)函數(shù)的實(shí)施例也屬本發(fā)明的范疇,這些實(shí)施例可利用地址3與11的指令進(jìn)行運(yùn)算,如S型,雙曲正切,校正函數(shù)等。相較于地址1至3的指令只會(huì)執(zhí)行一次,地址4至11的指令則是位于程序循環(huán)內(nèi)而會(huì)被執(zhí)行若干次數(shù),此次數(shù)由循環(huán)計(jì)數(shù)所指定(例如20)。地址7至11的指令的前十九次執(zhí)行計(jì)算隱藏層節(jié)點(diǎn)Z的數(shù)值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122供地址4至6的指令的第二至二十次執(zhí)行使用以計(jì)算剩余時(shí)間步驟的輸出層節(jié)點(diǎn)Y(時(shí)間步驟1至19)。(地址7至11的指令的最后/第二十次執(zhí)行計(jì)算隱藏層節(jié)點(diǎn)Z的數(shù)值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列61,不過(guò),這些數(shù)值并未被使用。)在地址4與5的指令(MULT-ACCUMDRROW+1,WRROW512andMULT-ACCUMROTATE,WRROW+1,COUNT=511)的第一次執(zhí)行中(對(duì)應(yīng)于時(shí)間步驟0),這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1的512個(gè)隱藏節(jié)點(diǎn)Z的數(shù)值(這些數(shù)值由地址1至3的指令的單一次執(zhí)行而產(chǎn)生與寫(xiě)入)乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列512至1023中對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202。在地址6的指令(OUTPUTACTIVATIONFUNCTION,DROUTROW+1,CLRACC)的第一次執(zhí)行中,會(huì)對(duì)于這512個(gè)累加數(shù)值執(zhí)行啟動(dòng)函數(shù)(例如S型,雙曲正切,校正函數(shù))以計(jì)算輸出層節(jié)點(diǎn)Y的數(shù)值,執(zhí)行結(jié)果會(huì)寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列2。在地址4與5的指令的第二次執(zhí)行中(對(duì)應(yīng)于時(shí)間步驟1),這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列4的512個(gè)隱藏節(jié)點(diǎn)Z的數(shù)值(這些數(shù)值由地址7至11的指令的第一次執(zhí)行而產(chǎn)生與寫(xiě)入)乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列512至1023中對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202,而在地址6的指令的第二次執(zhí)行中,會(huì)對(duì)于這512個(gè)累加數(shù)值執(zhí)行啟動(dòng)函數(shù)以計(jì)算輸出層節(jié)點(diǎn)Y的數(shù)值,此結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列5;在地址4與5的指令的第三次執(zhí)行中(對(duì)應(yīng)于時(shí)間步驟2),這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列7的512個(gè)隱藏節(jié)點(diǎn)Z的數(shù)值(這些數(shù)值由地址7至11的指令的第二次執(zhí)行而產(chǎn)生與寫(xiě)入)乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列512至1023中對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202,而在地址6的指令的第三次執(zhí)行中,會(huì)對(duì)于這512個(gè)累加數(shù)值執(zhí)行啟動(dòng)函數(shù)以計(jì)算輸出層節(jié)點(diǎn)Y的數(shù)值,此結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列8;依此類(lèi)推,在地址4與5的指令的第二十次執(zhí)行中(對(duì)應(yīng)于時(shí)間步驟19),這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列58的512個(gè)隱藏節(jié)點(diǎn)Z的數(shù)值(這些數(shù)值由地址7至11的指令的第十九次執(zhí)行而產(chǎn)生與寫(xiě)入)乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列512至1023中對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202,而在地址6的指令的第二十次執(zhí)行中,會(huì)對(duì)于這512個(gè)累加數(shù)值執(zhí)行啟動(dòng)函數(shù)以計(jì)算輸出層節(jié)點(diǎn)Y的數(shù)值,執(zhí)行結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列59。在地址7與8的指令的第一次執(zhí)行中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1的512個(gè)內(nèi)容節(jié)點(diǎn)C的數(shù)值累加至其累加器202,這些數(shù)值由地址1至3的指令的單一次執(zhí)行所產(chǎn)生。進(jìn)一步來(lái)說(shuō),地址7的指令(ADD_D_ACCDRROW+0)會(huì)指示這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122當(dāng)前列(在第一次執(zhí)行的過(guò)程中即為列0)的相對(duì)應(yīng)文字讀入其多任務(wù)緩存器208,并將此文字加入累加器202。地址8的指令(ADD_D_ACCROTATE,COUNT=511)指示這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126將來(lái)自相鄰神經(jīng)處理單元126的文字轉(zhuǎn)入其多任務(wù)緩存器208(利用由神經(jīng)網(wǎng)絡(luò)單元121的512個(gè)多任務(wù)緩存器208集體運(yùn)作構(gòu)成的512個(gè)文字的旋轉(zhuǎn)器,這些多任務(wù)緩存器即為地址7的指令指示讀入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列的緩存器),將此文字加入累加器202,并且執(zhí)行前述運(yùn)算511次。在地址7與8的指令的第二次執(zhí)行中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)將將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列4的512個(gè)內(nèi)容節(jié)點(diǎn)C的數(shù)值累加至其累加器202,這些數(shù)值由地址9至11的指令的第一次執(zhí)行所產(chǎn)生并寫(xiě)入;在地址7與8的指令的第三次執(zhí)行中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)將將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列7的512個(gè)內(nèi)容節(jié)點(diǎn)C的數(shù)值累加至其累加器202,這些數(shù)值由地址9至11的指令的第二次執(zhí)行所產(chǎn)生并寫(xiě)入;依此類(lèi)推,在地址7與8的指令的第二十次執(zhí)行中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)將將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列58的512個(gè)內(nèi)容節(jié)點(diǎn)C的數(shù)值累加至其累加器202,這些數(shù)值由地址9至11的指令的第十九次執(zhí)行所產(chǎn)生并寫(xiě)入。如前述,圖42的范例假定關(guān)聯(lián)于內(nèi)容節(jié)點(diǎn)C至隱藏層節(jié)點(diǎn)Z的連結(jié)的權(quán)重具有為一的值。不過(guò),在另一實(shí)施例中,這些位于Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)內(nèi)的連結(jié)則是具有非零權(quán)重值,這些權(quán)重在圖42的程序執(zhí)行前放置于權(quán)重隨機(jī)存取存儲(chǔ)器124(例如列1024至1535),地址7的程序指令為MULT-ACCUMDRROW+0,WRROW1024,而地址8的程序指令為MULT-ACCUMROTATE,WRROW+1,COUNT=511。較佳地,地址8的指令并不存取權(quán)重隨機(jī)存取存儲(chǔ)器124,而是旋轉(zhuǎn)地址7的指令從權(quán)重隨機(jī)存取存儲(chǔ)器124讀入多任務(wù)緩存器705的數(shù)值。在511個(gè)執(zhí)行地址8指令的時(shí)頻周期內(nèi)不對(duì)權(quán)重隨機(jī)存取存儲(chǔ)器124進(jìn)行存取即可保留更多頻寬供架構(gòu)程序存取權(quán)重隨機(jī)存取存儲(chǔ)器124使用。在地址9與10的指令(MULT-ACCUMDRROW+2,WRROW0andMULT-ACCUMROTATE,WRROW+1,COUNT=511)的第一次執(zhí)行中(對(duì)應(yīng)于時(shí)間步驟1),這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列3的512個(gè)輸入節(jié)點(diǎn)D的數(shù)值乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列0至511中對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重以產(chǎn)生512個(gè)乘積,連同地址7與8的指令對(duì)于512個(gè)內(nèi)容節(jié)點(diǎn)C數(shù)值所執(zhí)行的累加運(yùn)算,累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202以計(jì)算隱藏層節(jié)點(diǎn)Z的數(shù)值,在地址11的指令(OUTPUTPASSTHRU,DROUTROW+2,CLRACC)的第一次執(zhí)行中,這512個(gè)神經(jīng)處理單元126的512個(gè)累加器202數(shù)值被傳遞并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列4,而累加器202會(huì)被清除;在地址9與10的指令的第二次執(zhí)行中(對(duì)應(yīng)于時(shí)間步驟2),這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列6的512個(gè)輸入節(jié)點(diǎn)D的數(shù)值乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列0至511中對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積,連同地址7與8的指令對(duì)于512個(gè)內(nèi)容節(jié)點(diǎn)C數(shù)值所執(zhí)行的累加運(yùn)算,累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202以計(jì)算隱藏層節(jié)點(diǎn)Z的數(shù)值,在地址11的指令的第二次執(zhí)行中,這512個(gè)神經(jīng)處理單元126的512個(gè)累加器202數(shù)值被傳遞并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列7,而累加器202則會(huì)被清除;依此類(lèi)推,在地址9與10的指令的第十九次執(zhí)行中(對(duì)應(yīng)于時(shí)間步驟19),這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512個(gè)乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列57的512個(gè)輸入節(jié)點(diǎn)D的數(shù)值乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列0至511中對(duì)應(yīng)此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積,連同地址7與8的指令對(duì)于512個(gè)內(nèi)容節(jié)點(diǎn)C數(shù)值所執(zhí)行的累加運(yùn)算,累加于相對(duì)應(yīng)神經(jīng)處理單元126的累加器202以計(jì)算隱藏層節(jié)點(diǎn)Z的數(shù)值,而在地址11的指令的第十九次執(zhí)行中,這512個(gè)神經(jīng)處理單元126的512個(gè)累加器202數(shù)值被傳遞并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列58,而累加器202則會(huì)被清除。如前所述,在地址9與10的指令的第二十次執(zhí)行中所產(chǎn)生并寫(xiě)入的隱藏層節(jié)點(diǎn)Z的數(shù)值并不會(huì)被使用。地址12的指令(LOOP4)會(huì)使循環(huán)計(jì)數(shù)器3804遞減并且在新的循環(huán)計(jì)數(shù)器3804數(shù)值大于零的情況下回到地址4的指令。圖43為一方塊圖顯示Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的一范例。圖43的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)類(lèi)似于圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),具有輸入層節(jié)點(diǎn)/神經(jīng)元D,隱藏層節(jié)點(diǎn)/神經(jīng)元Z,輸出層節(jié)點(diǎn)/神經(jīng)元Y,與內(nèi)容層節(jié)點(diǎn)/神經(jīng)元C。不過(guò),在圖43的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)中,內(nèi)容層節(jié)點(diǎn)C以來(lái)自其相對(duì)應(yīng)輸出層節(jié)點(diǎn)Y的輸出回饋?zhàn)鳛槠漭斎脒B結(jié),而非如圖40的Elman時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)中來(lái)自隱藏層節(jié)點(diǎn)Z的輸出作為其輸入連結(jié)。為了說(shuō)明本發(fā)明,Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)是一個(gè)包含至少一個(gè)輸入節(jié)點(diǎn)層,一個(gè)隱藏節(jié)點(diǎn)層,一個(gè)輸出節(jié)點(diǎn)層與一個(gè)內(nèi)容節(jié)點(diǎn)層的時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。在一給定時(shí)間步驟的開(kāi)始,內(nèi)容節(jié)點(diǎn)層會(huì)儲(chǔ)存輸出節(jié)點(diǎn)層于前一個(gè)時(shí)間步驟產(chǎn)生且回饋至內(nèi)容節(jié)點(diǎn)層的結(jié)果。此回饋至內(nèi)容層的結(jié)果可以是啟動(dòng)函數(shù)的結(jié)果或是輸出節(jié)點(diǎn)層執(zhí)行累加運(yùn)算而未執(zhí)行啟動(dòng)函數(shù)的結(jié)果。圖44為一方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行關(guān)聯(lián)于圖43的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算時(shí),神經(jīng)網(wǎng)絡(luò)單元121的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124內(nèi)的數(shù)據(jù)配置的一范例。在圖44的范例中假定圖43的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)具有512個(gè)輸入節(jié)點(diǎn)D,512個(gè)隱藏節(jié)點(diǎn)Z,512個(gè)內(nèi)容節(jié)點(diǎn)C,與512個(gè)輸出節(jié)點(diǎn)Y。此外,也假定此Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)為完全連結(jié),即全部512個(gè)輸入節(jié)點(diǎn)D均連結(jié)各個(gè)隱藏節(jié)點(diǎn)Z作為輸入,全部512個(gè)內(nèi)容節(jié)點(diǎn)C均連結(jié)各個(gè)隱藏節(jié)點(diǎn)Z作為輸入,而全部512個(gè)隱藏節(jié)點(diǎn)Z均連結(jié)各個(gè)輸出節(jié)點(diǎn)Y作為輸入。圖44的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的范例雖然會(huì)對(duì)累加器202數(shù)值施以啟動(dòng)函數(shù)以產(chǎn)生輸出層節(jié)點(diǎn)Y的數(shù)值,不過(guò),此范例假定會(huì)將施以啟動(dòng)函數(shù)前的累加器202數(shù)值傳遞至內(nèi)容層節(jié)點(diǎn)C,而非真正的輸出層節(jié)點(diǎn)Y數(shù)值。此外,神經(jīng)網(wǎng)絡(luò)單元121設(shè)置有512個(gè)神經(jīng)處理單元126,或神經(jīng)元,例如采取寬配置。最后,此范例假定關(guān)聯(lián)于由內(nèi)容節(jié)點(diǎn)C至隱藏節(jié)點(diǎn)Z的連結(jié)的權(quán)重均具有數(shù)值1;因而不需儲(chǔ)存這些為一的權(quán)重值。如同圖41的范例,如圖中所示,權(quán)重隨機(jī)存取存儲(chǔ)器124的下方512列(列0至511)會(huì)裝載關(guān)聯(lián)于輸入節(jié)點(diǎn)D與隱藏節(jié)點(diǎn)Z間的連結(jié)的權(quán)重值,而權(quán)重隨機(jī)存取存儲(chǔ)器124的后續(xù)512列(列512至1023)會(huì)裝載關(guān)聯(lián)于隱藏節(jié)點(diǎn)Z與輸出節(jié)點(diǎn)Y間的連結(jié)的權(quán)重值。數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122裝載Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)節(jié)點(diǎn)值供一系列類(lèi)似于圖41的范例中的時(shí)間步驟使用;不過(guò),圖44的范例中以一組四列的存儲(chǔ)器裝載提供給定時(shí)間步驟的節(jié)點(diǎn)值。如圖中所示,在具有64列的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的實(shí)施例中,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122可以裝載15個(gè)不同時(shí)間步驟所需的節(jié)點(diǎn)值。在圖44的范例中,列0至3裝載供時(shí)間步驟0使用的節(jié)點(diǎn)值,列4至7裝載供時(shí)間步驟1使用的節(jié)點(diǎn)值,依此類(lèi)推,列60至63裝載供時(shí)間步驟15使用的節(jié)點(diǎn)值。此四列一組存儲(chǔ)器的第一列裝載此時(shí)間步驟的輸入節(jié)點(diǎn)D的數(shù)值。此四列一組存儲(chǔ)器的第二列裝載此時(shí)間步驟的隱藏節(jié)點(diǎn)Z的數(shù)值。此四列一組存儲(chǔ)器的第三列裝載此時(shí)間步驟的內(nèi)容節(jié)點(diǎn)C的數(shù)值。此四列一組存儲(chǔ)器的第四列則是裝載此時(shí)間步驟的輸出節(jié)點(diǎn)Y的數(shù)值。如圖中所示,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的各行裝載其相對(duì)應(yīng)的神經(jīng)元或神經(jīng)處理單元126的節(jié)點(diǎn)值。也就是說(shuō),行0裝載關(guān)聯(lián)于節(jié)點(diǎn)D0,Z0,C0與Y0的節(jié)點(diǎn)值,其計(jì)算是由神經(jīng)處理單元0執(zhí)行;行1裝載關(guān)聯(lián)于節(jié)點(diǎn)D1,Z1,C1與Y1的節(jié)點(diǎn)值,其計(jì)算是由神經(jīng)處理單元1執(zhí)行;依此類(lèi)推,行511裝載關(guān)聯(lián)于節(jié)點(diǎn)D511,Z511,C511與Y511的節(jié)點(diǎn)值,其計(jì)算是由神經(jīng)處理單元511執(zhí)行。這部分在后續(xù)對(duì)應(yīng)于圖44處會(huì)有更詳細(xì)的說(shuō)明。圖44中給定時(shí)間步驟的內(nèi)容節(jié)點(diǎn)C的數(shù)值于此時(shí)間步驟內(nèi)產(chǎn)生并作為下一個(gè)時(shí)間步驟的輸入。也就是說(shuō),神經(jīng)處理單元126在此時(shí)間步驟內(nèi)計(jì)算并寫(xiě)入的節(jié)點(diǎn)C的數(shù)值,會(huì)成為此神經(jīng)處理單元126在下一個(gè)時(shí)間步驟內(nèi)用于計(jì)算節(jié)點(diǎn)Z的數(shù)值所使用的節(jié)點(diǎn)C的數(shù)值(連同此下一個(gè)時(shí)間步驟的輸入節(jié)點(diǎn)D的數(shù)值)。內(nèi)容節(jié)點(diǎn)C的初始值(即時(shí)間步驟0計(jì)算列1節(jié)點(diǎn)Z的數(shù)值所使用的節(jié)點(diǎn)C的數(shù)值)假定為零。這部分在后續(xù)對(duì)應(yīng)于圖45的非架構(gòu)程序的章節(jié)會(huì)有更詳細(xì)的說(shuō)明。如前文圖41所述,較佳地,輸入節(jié)點(diǎn)D的數(shù)值(圖44的范例中的列0,4,依此類(lèi)推至列60的數(shù)值)由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MTNN指令1400寫(xiě)入/填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,并且是由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序讀取/使用,例如圖45的非架構(gòu)程序。相反地,隱藏節(jié)點(diǎn)Z/內(nèi)容節(jié)點(diǎn)C/輸出節(jié)點(diǎn)Y的數(shù)值(圖44的范例中分別為列1/2/3,5/6/7,依此類(lèi)推至列61/62/63的數(shù)值)由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序?qū)懭?填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,并且是由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MFNN指令1500讀取/使用。圖44的范例假定此架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)于15個(gè)不同的時(shí)間步驟,將輸入節(jié)點(diǎn)D的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(列0,4,依此類(lèi)推至列60);(2)啟動(dòng)圖45的非架構(gòu)程序;(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出節(jié)點(diǎn)Y的數(shù)值(列3,7,依此類(lèi)推至列63);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù),例如對(duì)手機(jī)使用者的話語(yǔ)進(jìn)行辨識(shí)所需的計(jì)算。在另一種執(zhí)行方式中,架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)單一個(gè)時(shí)間步驟,以輸入節(jié)點(diǎn)D的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(如列0);(2)啟動(dòng)非架構(gòu)程序(圖45非架構(gòu)程序的修正后版本,不需循環(huán),并且只存取數(shù)據(jù)隨機(jī)存存儲(chǔ)器122的單一組四列);(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出節(jié)點(diǎn)Y的數(shù)值(如列3);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù)。此二種方式何者為優(yōu)可依據(jù)時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的輸入值的取樣方式而定。舉例來(lái)說(shuō),若是此任務(wù)容許在多個(gè)時(shí)間步驟內(nèi)對(duì)輸入進(jìn)行取樣(例如大約15個(gè)時(shí)間步驟)并執(zhí)行計(jì)算,第一種方式就較為理想,因?yàn)榇朔绞娇蓭?lái)更多計(jì)算資源效率和/或較佳的效能,不過(guò),若是此任務(wù)只容許在單一個(gè)時(shí)間步驟內(nèi)執(zhí)行取樣,就需要使用第二種方式。第三實(shí)施例類(lèi)似于前述第二種方式,不過(guò),不同于第二種方式使用單一組四個(gè)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列,此方式的非架構(gòu)程序使用多組四列存儲(chǔ)器,也就是在各個(gè)時(shí)間步驟使用不同組四列存儲(chǔ)器,此部分類(lèi)似于第一種方式。在此第三實(shí)施例中,較佳地,架構(gòu)程序在步驟(2)前包含一步驟,在此步驟中,架構(gòu)程序會(huì)在非架構(gòu)程序啟動(dòng)前對(duì)其進(jìn)行更新,例如將地址1的指令內(nèi)的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列更新為指向下一組四列存儲(chǔ)器。圖45為一表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129的程序,此程序由神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行,并依據(jù)圖44的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。圖45的非架構(gòu)程序類(lèi)似于圖42的非架構(gòu)程序,二者的差異可參照本文相關(guān)章節(jié)的說(shuō)明。圖45的范例程序包括14個(gè)非架構(gòu)指令,分別位于地址0至13。地址0的指令是一個(gè)初始化指令,用以清除累加器202并將循環(huán)計(jì)數(shù)器3804初始化至數(shù)值15,以執(zhí)行15次循環(huán)組(地址4至12的指令)。較佳地,此初始化指令并會(huì)使神經(jīng)網(wǎng)絡(luò)單元121處于寬配置而配置為512個(gè)神經(jīng)處理單元126。如本文所述,在地址1至3以及地址8至12的指令執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126對(duì)應(yīng)并作為512個(gè)隱藏層節(jié)點(diǎn)Z進(jìn)行運(yùn)作,而在地址4,5與7的指令執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126對(duì)應(yīng)并作為512個(gè)輸出層節(jié)點(diǎn)Y進(jìn)行運(yùn)作。地址1至5與地址7的指令與圖42中地址1至6的指令相同并具有相同功能。地址1至3的指令計(jì)算隱藏層節(jié)點(diǎn)Z的初始值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1供地址4,5與7的指令的第一次執(zhí)行使用,以計(jì)算出第一時(shí)間步驟(時(shí)間步驟0)的輸出層節(jié)點(diǎn)Y。在地址6的輸出指令的第一次執(zhí)行的過(guò)程中,這512個(gè)由地址4與5的指令累加產(chǎn)生的累加器202數(shù)值(接下來(lái)這些數(shù)值會(huì)被地址7的輸出指令使用以計(jì)算并寫(xiě)入輸出層節(jié)點(diǎn)Y的數(shù)值)會(huì)被傳遞并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列2,這些數(shù)值即為第一時(shí)間步驟(時(shí)間步驟0)中產(chǎn)生的內(nèi)容層節(jié)點(diǎn)C數(shù)值并于第二時(shí)間步驟(時(shí)間步驟1)中使用;在地址6的輸出指令的第二次執(zhí)行的過(guò)程中,這512個(gè)由地址4與5的指令累加產(chǎn)生的累加器202數(shù)值(接下來(lái),這些數(shù)值會(huì)被地址7的輸出指令使用以計(jì)算并寫(xiě)入輸出層節(jié)點(diǎn)Y的數(shù)值)會(huì)被傳遞并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列6,這些數(shù)值即為第二時(shí)間步驟(時(shí)間步驟1)中產(chǎn)生的內(nèi)容層節(jié)點(diǎn)C數(shù)值并于第三時(shí)間步驟(時(shí)間步驟2)中使用;依此類(lèi)推,在地址6的輸出指令的第十五次執(zhí)行的過(guò)程中,這512個(gè)由地址4與5的指令累加產(chǎn)生的累加器202數(shù)值(接下來(lái)這些數(shù)值會(huì)被地址7的輸出指令使用以計(jì)算并寫(xiě)入輸出層節(jié)點(diǎn)Y的數(shù)值)會(huì)被傳遞并寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列58,這些數(shù)值即為第十五時(shí)間步驟(時(shí)間步驟14)中產(chǎn)生的內(nèi)容層節(jié)點(diǎn)C數(shù)值(并由地址8的指令讀取,但不會(huì)被使用)。地址8至12的指令與圖42中地址7至11的指令大致相同并具有相同功能,二者僅具有一差異點(diǎn)。此差異點(diǎn)即,圖45中地址8的指令(ADD_D_ACCDRROW+1)會(huì)使數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列數(shù)增加一,而圖42中地址7的指令(ADD_D_ACCDRROW+0)會(huì)使數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列數(shù)增加零。此差異導(dǎo)因于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122內(nèi)的數(shù)據(jù)配置的不同,特別是,圖44中四列一組的配置包括一獨(dú)立列供內(nèi)容層節(jié)點(diǎn)C數(shù)值使用(如列2,6,10等),而圖41中三列一組的配置則不具有此獨(dú)立列,而是讓內(nèi)容層節(jié)點(diǎn)C的數(shù)值與隱藏層節(jié)點(diǎn)Z的數(shù)值共享同一列(如列1,4,7等)。地址8至12的指令的十五次執(zhí)行會(huì)計(jì)算出隱藏層節(jié)點(diǎn)Z的數(shù)值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(寫(xiě)入列5,9,13,依此類(lèi)推直到列57)供地址4,5與7的指令的第二至十六次執(zhí)行使用以計(jì)算第二至十五時(shí)間步驟的輸出層節(jié)點(diǎn)Y(時(shí)間步驟1至14)。(地址8至12的指令的最后/第十五次執(zhí)行計(jì)算隱藏層節(jié)點(diǎn)Z的數(shù)值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列61,不過(guò)這些數(shù)值并未被使用。)地址13的循環(huán)指令會(huì)使循環(huán)計(jì)數(shù)器3804遞減并且在新的循環(huán)計(jì)數(shù)器3804數(shù)值大于零的情況下回到地址4的指令。在另一實(shí)施例中,Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)利用內(nèi)容節(jié)點(diǎn)C裝載輸出節(jié)點(diǎn)Y的啟動(dòng)函數(shù)值,此啟動(dòng)函數(shù)值即啟動(dòng)函數(shù)執(zhí)行后的累加值。在此實(shí)施例中,因?yàn)檩敵龉?jié)點(diǎn)Y的數(shù)值與內(nèi)容節(jié)點(diǎn)C的數(shù)值相同,地址6的非架構(gòu)指令并不包含于非架構(gòu)程序內(nèi)。因而可以減少數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122內(nèi)使用的列數(shù)。更精確的說(shuō),圖44中的各個(gè)裝載內(nèi)容節(jié)點(diǎn)C數(shù)值的列(例如列2,6,59)都不存在于本實(shí)施例。此外,此實(shí)施例的各個(gè)時(shí)間步驟僅需要數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的三列,而會(huì)搭配20個(gè)時(shí)間步驟,而非15個(gè),圖45中非架構(gòu)程序的指令的地址也會(huì)進(jìn)行適當(dāng)?shù)恼{(diào)整。長(zhǎng)短期記憶胞長(zhǎng)短期記憶胞用于時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)是本
技術(shù)領(lǐng)域:
:所習(xí)知的概念。舉例來(lái)說(shuō),LongShort-TermMemory,SeppHochreiterandJürgenSchmidhuber,NeuralComputation,November15,1997,Vol.9,No.8,Pages1735-1780;LearningtoForget:ContinualPredictionwithLSTM,F(xiàn)elixA.Gers,JürgenSchmidhuber,andFredCummins,NeuralComputation,October2000,Vol.12,No.10,Pages2451-2471;這些文獻(xiàn)都可以從麻省理工出版社期刊(MITPressJournals)取得。長(zhǎng)短期記憶胞可以建構(gòu)為多種不同型式。以下所述圖46的長(zhǎng)短期記憶胞4600以網(wǎng)址http://deeplearning.net/tutorial/lstm.html標(biāo)題為用于情緒分析的長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTMNetworksforSentimentAnalysis)的教程所描述的長(zhǎng)短期記憶胞為模型,此教程的副本于2015年10月19日下載(以下稱(chēng)為“長(zhǎng)短期記憶教程”)并提供于本案的美國(guó)申請(qǐng)案數(shù)據(jù)揭露陳報(bào)書(shū)內(nèi)。此長(zhǎng)短期記憶胞4600可用于一般性地描述本文所述的神經(jīng)網(wǎng)絡(luò)單元121實(shí)施例能夠有效執(zhí)行關(guān)聯(lián)于長(zhǎng)短期記憶的計(jì)算的能力。值得注意的是,這些神經(jīng)網(wǎng)絡(luò)單元121的實(shí)施例,包括圖49所述的實(shí)施例,都可以有效執(zhí)行關(guān)聯(lián)于圖46所述的長(zhǎng)短期記憶胞以外的其它長(zhǎng)短期記憶胞的計(jì)算。較佳地,神經(jīng)網(wǎng)絡(luò)單元121可用以針對(duì)一個(gè)具有長(zhǎng)短期記憶胞層連結(jié)其它層級(jí)的時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)執(zhí)行計(jì)算。舉例來(lái)說(shuō),在此長(zhǎng)短期記憶教程中,網(wǎng)絡(luò)包含均值共源層以接收長(zhǎng)短期記憶層的長(zhǎng)短期記憶胞的輸出(H),以及邏輯回歸層以接收均值共源層的輸出。圖46為一方塊圖,顯示長(zhǎng)短期記憶胞4600的一實(shí)施例。如圖中所示,此長(zhǎng)短期記憶胞4600包括記憶胞輸入(X),記憶胞輸出(H),輸入閘(I),輸出閘(O),遺忘閘(F),記憶胞狀態(tài)(C)與候選記憶胞狀態(tài)(C’)。輸入閘(I)可門(mén)控記憶胞輸入(X)至記憶胞狀態(tài)(C)的信號(hào)傳遞,而輸出閘(O)可門(mén)控記憶胞狀態(tài)(C)至記憶胞輸出(H)的信號(hào)傳遞。此記憶胞狀態(tài)(C)會(huì)反饋為一時(shí)間步驟的候選記憶胞狀態(tài)(C’)。遺忘閘(F)可門(mén)控此候選記憶胞狀態(tài)(C’),此候選記憶胞狀態(tài)會(huì)反饋并變成下一個(gè)時(shí)間步驟的記憶胞狀態(tài)(C)。圖46的實(shí)施例使用下列等式來(lái)計(jì)算前述各種不同數(shù)值:(1)I=SIGMOID(Wi*X+Ui*H+Bi)(2)F=SIGMOID(Wf*X+Uf*H+Bf)(3)C’=TANH(Wc*X+Uc*H+Bc)(4)C=I*C’+F*C(5)O=SIGMOID(Wo*X+Uo*H+Bo)(6)H=O*TANH(C)Wi與Ui是關(guān)聯(lián)于輸入閘(I)的權(quán)重值,而B(niǎo)i是關(guān)聯(lián)于輸入閘(I)的偏移值。Wf與Uf是關(guān)聯(lián)于遺忘閘(F)的權(quán)重值,而B(niǎo)f是關(guān)聯(lián)于遺忘閘(F)的偏移值。Wo與Uo是關(guān)聯(lián)于輸出閘(O)的權(quán)重值,而B(niǎo)o是關(guān)聯(lián)于輸出閘(O)的偏移值。如前述,等式(1),(2)與(5)分別計(jì)算輸入閘(I),遺忘閘(F)與輸出閘(O)。等式(3)計(jì)算候選記憶胞狀態(tài)(C’),而等式(4)計(jì)算以當(dāng)前記憶胞狀態(tài)(C)為輸入的候選記憶胞狀態(tài)(C’),當(dāng)前記憶胞狀態(tài)(C)即當(dāng)前時(shí)間步驟的記憶胞狀態(tài)(C)。等式(6)計(jì)算記憶胞輸出(H)。不過(guò)本發(fā)明并不限于此。使用他種方式計(jì)算輸入閘,遺忘閘,輸出閘,候選記憶胞狀態(tài),記憶胞狀態(tài)與記憶胞輸出的長(zhǎng)短期記憶胞的實(shí)施例也為本發(fā)明所涵蓋。為了說(shuō)明本發(fā)明,長(zhǎng)短期記憶胞包括記憶胞輸入,記憶胞輸出,記憶胞狀態(tài),候選記憶胞狀態(tài),輸入閘,輸出閘與遺忘閘。對(duì)各個(gè)時(shí)間步驟而言,輸入閘,輸出閘,遺忘閘與候選記憶胞狀態(tài)為當(dāng)前時(shí)間步驟的存儲(chǔ)器記憶胞輸入與先前時(shí)間步驟的記憶胞輸出與相關(guān)權(quán)重的函數(shù)。此時(shí)間步驟的記憶胞狀態(tài)為先前時(shí)間步驟的記憶胞狀態(tài),候選記憶胞狀態(tài),輸入閘與輸出閘的函數(shù)。從這個(gè)意義上說(shuō),記憶胞狀態(tài)會(huì)反饋用于計(jì)算下一個(gè)時(shí)間步驟的記憶胞狀態(tài)。此時(shí)間步驟的記憶胞輸出是此時(shí)間步驟計(jì)算出的記憶胞狀態(tài)與輸出閘的函數(shù)。長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)是一個(gè)具有一個(gè)長(zhǎng)短期記憶胞層的神經(jīng)網(wǎng)絡(luò)。圖47為一方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行關(guān)聯(lián)于圖46的長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)的長(zhǎng)短期記憶胞4600層的計(jì)算時(shí),神經(jīng)網(wǎng)絡(luò)單元121的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124內(nèi)的數(shù)據(jù)配置的一范例。在圖47的范例中,神經(jīng)網(wǎng)絡(luò)單元121配置為512個(gè)神經(jīng)處理單元126或神經(jīng)元,例如采寬配置,不過(guò),只有128個(gè)神經(jīng)處理單元126(如神經(jīng)處理單元0至127)所產(chǎn)生的數(shù)值會(huì)被使用,這是因?yàn)樵诖朔独拈L(zhǎng)短期記憶層只有128個(gè)長(zhǎng)短期記憶胞4600。如圖中所示,權(quán)重隨機(jī)存取存儲(chǔ)器124會(huì)裝載神經(jīng)網(wǎng)絡(luò)單元121的相對(duì)應(yīng)神經(jīng)處理單元0至127的權(quán)重值,偏移值與居間值。權(quán)重隨機(jī)存取存儲(chǔ)器124的行0至127裝載神經(jīng)網(wǎng)絡(luò)單元121的相對(duì)應(yīng)神經(jīng)處理單元0至127的權(quán)重值,偏移值與居間值。列0至14中的各列則是裝載128個(gè)下列對(duì)應(yīng)于前述等式(1)至(6)的數(shù)值以提供給神經(jīng)處理單元0至127,這些數(shù)值為:Wi,Ui,Bi,Wf,Uf,Bf,Wc,Uc,Bc,C’,TANH(C),C,Wo,Uo,Bo。較佳地,權(quán)重值與偏移值-Wi,Ui,Bi,Wf,Uf,Bf,Wc,Uc,Bc,Wo,Uo,Bo(位于列0至8與列12至14)-由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MTNN指令1400寫(xiě)入/填入權(quán)重隨機(jī)存取存儲(chǔ)器124,并由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序讀取/使用,如圖48的非架構(gòu)程序。較佳地,居間值-C’,TANH(C),C(位于列9至11)-由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序?qū)懭?填入權(quán)重隨機(jī)存取存儲(chǔ)器124并進(jìn)行讀取/使用,詳如后述。如圖中所示,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122裝載輸入(X),輸出(H),輸入閘(I),遺忘閘(F)與輸出閘(O)數(shù)值供一系列時(shí)間步驟使用。進(jìn)一步來(lái)說(shuō),此存儲(chǔ)器五列一組裝載X,H,I,F(xiàn)與O的數(shù)值供一給定時(shí)間步驟使用。以一個(gè)具有64列的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122為例,如圖中所示,此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122可裝載供12個(gè)不同時(shí)間步驟使用的記憶胞數(shù)值。在圖47的范例中,列0至4裝載供時(shí)間步驟0使用的記憶胞數(shù)值,列5至9裝載供時(shí)間步驟1使用的記憶胞數(shù)值,依此類(lèi)推,列55至59裝載供時(shí)間步驟11使用的記憶胞數(shù)值。此五列一組存儲(chǔ)器中的第一列裝載此時(shí)間步驟的X數(shù)值。此五列一組存儲(chǔ)器中的第二列裝載此時(shí)間步驟的H數(shù)值。此五列一組存儲(chǔ)器中的第三列裝載此時(shí)間步驟的I數(shù)值。此五列一組存儲(chǔ)器中的第四列裝載此時(shí)間步驟的F數(shù)值。此五列一組存儲(chǔ)器中的第五列裝載此時(shí)間步驟的O數(shù)值。如圖中所示,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122內(nèi)的各行裝載供相對(duì)應(yīng)神經(jīng)元或神經(jīng)處理單元126使用的數(shù)值。也就是說(shuō),行0裝載關(guān)聯(lián)于長(zhǎng)短期記憶胞0的數(shù)值,而其計(jì)算是由神經(jīng)處理單元0所執(zhí)行;行1裝載關(guān)聯(lián)于長(zhǎng)短期記憶胞1的數(shù)值,而其計(jì)算是由神經(jīng)處理單元1所執(zhí)行;依此類(lèi)推,行127裝載關(guān)聯(lián)于長(zhǎng)短期記憶胞127的數(shù)值,而其計(jì)算是由神經(jīng)處理單元127所執(zhí)行,詳如后續(xù)圖48所述。較佳地,X數(shù)值(位于列0,5,9,依此類(lèi)推至列55)由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MTNN指令1400寫(xiě)入/填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,并由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序進(jìn)行讀取/使用,如圖48所示的非架構(gòu)程序。較佳地,I數(shù)值,F(xiàn)數(shù)值與O數(shù)值(位于列2/3/4,7/8/9,12/13/14,依此類(lèi)推至列57/58/59)由執(zhí)行于神經(jīng)處理單元121的非架構(gòu)程序?qū)懭?填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,詳如后述。較佳地,H數(shù)值(位于列1,6,10,依此類(lèi)推至列56)由執(zhí)行于神經(jīng)處理單元121的非架構(gòu)程序?qū)懭?填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122并進(jìn)行讀取/使用,并且由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MFNN指令1500進(jìn)行讀取。圖47的范例假定此架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)于12個(gè)不同的時(shí)間步驟,將輸入X的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(列0,5,依此類(lèi)推至列55);(2)啟動(dòng)圖48的非架構(gòu)程序;(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出H的數(shù)值(列1,6,依此類(lèi)推至列59);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù),例如對(duì)手機(jī)使用者的話語(yǔ)進(jìn)行辨識(shí)所需的計(jì)算。在另一種執(zhí)行方式中,架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)單一個(gè)時(shí)間步驟,以輸入X的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(如列0);(2)啟動(dòng)非架構(gòu)程序(圖48非架構(gòu)程序的修正后版本,不需循環(huán),并且只存取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的單一組五列);(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出H的數(shù)值(如列1);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù)。此二種方式何者為優(yōu)可依據(jù)長(zhǎng)短期記憶層的輸入X數(shù)值的取樣方式而定。舉例來(lái)說(shuō),若是此任務(wù)容許在多個(gè)時(shí)間步驟對(duì)輸入進(jìn)行取樣(例如大約12個(gè)時(shí)間步驟)并執(zhí)行計(jì)算,第一種方式就較為理想,因?yàn)榇朔绞娇赡軒?lái)更多計(jì)算資源效率和/或較佳的效能,不過(guò),若是此任務(wù)只容許在單一個(gè)時(shí)間步驟執(zhí)行取樣,就需要使用第二種方式。第三實(shí)施例類(lèi)似于前述第二種方式,不過(guò),不同于第二種方式使用單一組五列數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,此方式的非架構(gòu)程序使用多組五列存儲(chǔ)器,也就是在各個(gè)時(shí)間步驟使用不同的五列一組存儲(chǔ)器,此部分類(lèi)似于第一種方式。在此第三實(shí)施例中,較佳地,架構(gòu)程序在步驟(2)前包含一步驟,此步驟中,架構(gòu)程序會(huì)在非架構(gòu)程序啟動(dòng)前對(duì)其進(jìn)行更新,例如將地址0的指令內(nèi)的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列更新為指向下一組五列存儲(chǔ)器。圖48為一表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129的程序,此程序由神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行并依據(jù)圖47的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成關(guān)聯(lián)于長(zhǎng)短期記憶胞層的計(jì)算。圖48的范例程序包括24個(gè)非架構(gòu)指令分別位于地址0至23。地址0的指令(INITIALIZENPU,CLRACC,LOOPCNT=12,DRINROW=-1,DROUTROW=2)會(huì)清除累加器202并將循環(huán)計(jì)數(shù)器3804初始化至數(shù)值12,以執(zhí)行12次循環(huán)組(地址1至22的指令)。此初始化指令并會(huì)將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的待讀取列初始化為數(shù)值-1,而在地址1的指令的第一次執(zhí)行后,此數(shù)值會(huì)增加為零。此初始化指令并會(huì)將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的待寫(xiě)入列(例如圖26與圖39的緩存器2606)初始化為列2。較佳地,此初始化指令并會(huì)使神經(jīng)網(wǎng)絡(luò)單元121處于寬配置,如此,神經(jīng)網(wǎng)絡(luò)單元121就會(huì)配置有512個(gè)神經(jīng)處理單元126。如同后續(xù)章節(jié)所述,在地址0至23的指令執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126其中的128個(gè)神經(jīng)處理單元126對(duì)應(yīng)并作為128個(gè)長(zhǎng)短期記憶胞4600進(jìn)行運(yùn)作。在地址1至4的指令的第一次執(zhí)行中,這128個(gè)神經(jīng)處理單元126(即神經(jīng)處理單元0至127)中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第一時(shí)間步驟(時(shí)間步驟0)計(jì)算輸入閘(I)數(shù)值并將I數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列2的相對(duì)應(yīng)文字;在地址1至4的指令的第二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第二時(shí)間步驟(時(shí)間步驟1)計(jì)算I數(shù)值并將I數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列7的相對(duì)應(yīng)文字;依此類(lèi)推,在地址1至4的指令的第十二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第十二時(shí)間步驟(時(shí)間步驟11)計(jì)算I數(shù)值并將I數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列57的相對(duì)應(yīng)文字,如圖47所示。進(jìn)一步來(lái)說(shuō),地址1的乘法累加指令會(huì)讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122當(dāng)前列后方的下一列(在第一執(zhí)行即為列0,在第二執(zhí)行即為列5,依此類(lèi)推,在第十二執(zhí)行即為列55),此列包含關(guān)聯(lián)于當(dāng)前時(shí)間步驟的記憶胞輸入(X)值,此指令并會(huì)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含Wi數(shù)值的列0,并且將前述讀取數(shù)值相乘以產(chǎn)生第一乘積累加至剛剛由地址0的初始化指令或地址22的指令清除的累加器202。隨后,地址2的乘法累加指令會(huì)讀取下一個(gè)數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列(在第一執(zhí)行即為列1,在第二執(zhí)行即為列6,依此類(lèi)推,在第十二執(zhí)行即為列56),此列包含關(guān)聯(lián)于當(dāng)前時(shí)間步驟的記憶胞輸出(H)值,此指令并會(huì)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含Ui數(shù)值的列1,并且將前述數(shù)值相乘以產(chǎn)生第二乘積累加至累加器202。關(guān)聯(lián)于當(dāng)前時(shí)間步驟的H數(shù)值由地址2的指令(以及地址6,10與18的指令)由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀取,在先前時(shí)間步驟產(chǎn)生,并由地址22的輸出指令寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122;不過(guò),在第一次執(zhí)行中,地址2的指令會(huì)以一初始值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器的列1作為H數(shù)值。較佳地,架構(gòu)程序會(huì)在啟動(dòng)圖48的非架構(gòu)程序前將初始H數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1(例如使用MTNN指令1400);不過(guò),本發(fā)明并不限于此,非架構(gòu)程序內(nèi)包含有初始化指令將初始H數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列1的其它實(shí)施例也屬于本發(fā)明的范疇。在一實(shí)施例中,此初始H數(shù)值為零。接下來(lái),地址3的將權(quán)重文字加入累加器的指令(ADD_W_ACCWRROW2)會(huì)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含Bi數(shù)值的列2并將其加入累加器202。最后,地址4的輸出指令(OUTPUTSIGMOID,DROUTROW+0,CLRACC)會(huì)對(duì)累加器202數(shù)值執(zhí)行一S型啟動(dòng)函數(shù)并將執(zhí)行結(jié)果寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的當(dāng)前輸出列(在第一執(zhí)行即為列2,在第二執(zhí)行即為列7,依此類(lèi)推,在第十二執(zhí)行即為列57)并且清除累加器202。在地址5至8的指令的第一次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第一時(shí)間步驟(時(shí)間步驟0)計(jì)算其遺忘閘(F)數(shù)值并將F數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列3的相對(duì)應(yīng)文字;在地址5至8的指令的第二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第二時(shí)間步驟(時(shí)間步驟1)計(jì)算其遺忘閘(F)數(shù)值并將F數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列8的相對(duì)應(yīng)文字;依此類(lèi)推,在地址5至8的指令的第十二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第十二時(shí)間步驟(時(shí)間步驟11)計(jì)算其遺忘閘(F)數(shù)值并將F數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列58的相對(duì)應(yīng)文字,如圖47所示。地址5至8的指令計(jì)算F數(shù)值的方式類(lèi)似于前述地址1至4的指令,不過(guò),地址5至7的指令會(huì)分別從權(quán)重隨機(jī)存取存儲(chǔ)器124的列3,列4與列5讀取Wf,Uf與Bf數(shù)值以執(zhí)行乘法和/或加法運(yùn)算。在地址9至12的指令的十二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的相對(duì)應(yīng)時(shí)間步驟計(jì)算其候選記憶胞狀態(tài)(C’)數(shù)值并將C’數(shù)值寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列9的相對(duì)應(yīng)文字。地址9至12的指令計(jì)算C’數(shù)值的方式類(lèi)似于前述地址1至4的指令,不過(guò),地址9至11的指令會(huì)分別從權(quán)重隨機(jī)存取存儲(chǔ)器124的列6,列7與列8讀取Wc,Uc與Bc數(shù)值以執(zhí)行乘法和/或加法運(yùn)算。此外,地址12的輸出指令會(huì)執(zhí)行雙曲正切啟動(dòng)函數(shù)而非(如地址4的輸出指令執(zhí)行)S型啟動(dòng)函數(shù)。進(jìn)一步來(lái)說(shuō),地址9的乘法累加指令會(huì)讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的當(dāng)前列(在第一次執(zhí)行即為列0,在第二次執(zhí)行即為列5,依此類(lèi)推,在第十二次執(zhí)行即為列55),此當(dāng)前列包含關(guān)聯(lián)于當(dāng)前時(shí)間步驟的記憶胞輸入(X)值,此指令并會(huì)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含Wc數(shù)值的列6,并且將前述數(shù)值相乘以產(chǎn)生第一乘積累加至剛剛由地址8的指令清除的累加器202。接下來(lái),地址10的乘法累加指令會(huì)讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的次一列(在第一次執(zhí)行即為列1,在第二次執(zhí)行即為列6,依此類(lèi)推,在第十二次執(zhí)行即為列56),此列包含關(guān)聯(lián)于當(dāng)前時(shí)間步驟的記憶胞輸出(H)值,此指令并會(huì)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含Uc數(shù)值的列7,并且將前述數(shù)值相乘以產(chǎn)生第二乘積累加至累加器202。接下來(lái),地址11的將權(quán)重文字加入累加器的指令會(huì)讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含Bc數(shù)值的列8并將其加入累加器202。最后,地址12的輸出指令(OUTPUTTANH,WROUTROW9,CLRACC)會(huì)對(duì)累加器202數(shù)值執(zhí)行雙曲正切啟動(dòng)函數(shù)并將執(zhí)行結(jié)果寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列9,并且清除累加器202。在地址13至16的指令的十二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的相對(duì)應(yīng)時(shí)間步驟計(jì)算新的記憶胞狀態(tài)(C)數(shù)值并將此新的C數(shù)值寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器122的列11的相對(duì)應(yīng)文字,各個(gè)神經(jīng)處理單元126還會(huì)計(jì)算tanh(C)并將其寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列10的相對(duì)應(yīng)文字。進(jìn)一步來(lái)說(shuō),地址13的乘法累加指令會(huì)讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122當(dāng)前列后方的下一列(在第一次執(zhí)行即為列2,在第二次執(zhí)行即為列7,依此類(lèi)推,在第十二次執(zhí)行即為列57),此列包含關(guān)聯(lián)于當(dāng)前時(shí)間步驟的輸入閘(I)數(shù)值,此指令并讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含候選記憶胞狀態(tài)(C’)數(shù)值的列9(剛剛由地址12的指令寫(xiě)入),并且將前述數(shù)值相乘以產(chǎn)生第一乘積累加至剛剛由地址12的指令清除的累加器202。接下來(lái),地址14的乘法累加指令會(huì)讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的下一列(在第一次執(zhí)行即為列3,在第二次執(zhí)行即為列8,依此類(lèi)推,在第十二次執(zhí)行即為列58),此列包含關(guān)聯(lián)于當(dāng)前時(shí)間步驟的遺忘閘(F)數(shù)值,此指令并讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含于先前時(shí)間步驟中計(jì)算的當(dāng)前記憶胞狀態(tài)(C)數(shù)值(由地址15的指令的最近一次執(zhí)行進(jìn)行寫(xiě)入)的列11,并且將前述數(shù)值相乘以產(chǎn)生第二乘積加入累加器202。接下來(lái),地址15的輸出指令(OUTPUTPASSTHRU,WROUTROW11)會(huì)傳遞此累加器202數(shù)值并將其寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列11。需要理解的是,地址14的指令由數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列11讀取的C數(shù)值即為地址13至15的指令于最近一次執(zhí)行中產(chǎn)生并寫(xiě)入的C數(shù)值。地址15的輸出指令并不會(huì)清除累加器202,如此,其數(shù)值即可由地址16的指令使用。最后,地址16的輸出指令(OUTPUTTANH,WROUTROW10,CLRACC)會(huì)對(duì)累加器202數(shù)值執(zhí)行雙曲正切啟動(dòng)函數(shù)并將其執(zhí)行結(jié)果寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列10供地址21的指令使用以計(jì)算記憶胞輸出(H)值。地址16的指令會(huì)清除累加器202。在地址17至20的指令的第一次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第一時(shí)間步驟(時(shí)間步驟0)計(jì)算其輸出閘(O)數(shù)值并將O數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列4的相對(duì)應(yīng)文字;在地址17至20的指令的第二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第二時(shí)間步驟(時(shí)間步驟1)計(jì)算其輸出閘(O)數(shù)值并將O數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列9的相對(duì)應(yīng)文字;依此類(lèi)推,在地址17至20的指令的第十二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第十二時(shí)間步驟(時(shí)間步驟11)計(jì)算其輸出閘(O)數(shù)值并將O數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列58的相對(duì)應(yīng)文字,如圖47所示。地址17至20的指令計(jì)算O數(shù)值的方式類(lèi)似于前述地址1至4的指令,不過(guò),地址17至19的指令會(huì)分別從權(quán)重隨機(jī)存取存儲(chǔ)器124的列12,列13與列14讀取Wo,Uo與Bo數(shù)值以執(zhí)行乘法和/或加法運(yùn)算。在地址21至22的指令的第一次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第一時(shí)間步驟(時(shí)間步驟0)計(jì)算其記憶胞輸出(H)值并將H數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列6的相對(duì)應(yīng)文字;在地址21至22的指令的第二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第二時(shí)間步驟(時(shí)間步驟1)計(jì)算其記憶胞輸出(H)值并將H數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列11的相對(duì)應(yīng)文字;依此類(lèi)推,在地址21至22的指令的第十二次執(zhí)行中,這128個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)針對(duì)相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的第十二時(shí)間步驟(時(shí)間步驟11)計(jì)算其記憶胞輸出(H)值并將H數(shù)值寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列60的相對(duì)應(yīng)文字,如圖47所示。進(jìn)一步來(lái)說(shuō),地址21的乘法累加指令會(huì)讀取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122當(dāng)前列后方的第三列(在第一次執(zhí)行即為列4,在第二次執(zhí)行即為列9,依此類(lèi)推,在第十二次執(zhí)行即為列59),此列包含關(guān)聯(lián)于當(dāng)前時(shí)間步驟的輸出閘(O)數(shù)值,此指令并讀取權(quán)重隨機(jī)存取存儲(chǔ)器124中包含tanh(C)數(shù)值的列10(由地址16的指令寫(xiě)入),并且將前述數(shù)值相乘以產(chǎn)生一乘積累加至剛剛由地址20的指令清除的累加器202。隨后,地址22的輸出指令會(huì)傳遞累加器202數(shù)值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的接下來(lái)第二個(gè)輸出列11(在第一次執(zhí)行即為列6,在第二次執(zhí)行即為列11,依此類(lèi)推,在第十二次執(zhí)行即為列61),并且清除累加器202。需要理解的是,由地址22的指令寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列的H數(shù)值(在第一次執(zhí)行即為列6,在第二次執(zhí)行即為列11,依此類(lèi)推,在第十二次執(zhí)行即為列61)即為地址2,6,10與18的指令的后續(xù)執(zhí)行中所消耗/讀取的H數(shù)值。不過(guò),第十二次執(zhí)行中寫(xiě)入列61的H數(shù)值并不會(huì)被地址2,6,10與18的指令的執(zhí)行所消耗/讀取;就一較佳實(shí)施例而言,此數(shù)值會(huì)是由架構(gòu)程序所消耗/讀取。地址23的指令(LOOP1)會(huì)使循環(huán)計(jì)數(shù)器3804遞減并且在新的循環(huán)計(jì)數(shù)器3804數(shù)值大于零的情況下回到地址1的指令。圖49為一方塊圖,顯示神經(jīng)網(wǎng)絡(luò)單元121的實(shí)施例,此實(shí)施例的神經(jīng)處理單元群組內(nèi)具有輸出緩沖遮蔽與反饋能力。圖49顯示單一個(gè)由四個(gè)神經(jīng)處理單元126構(gòu)成的神經(jīng)處理單元群組4901。雖然圖49僅顯示單一個(gè)神經(jīng)處理單元群組4901,不過(guò)需要理解的是,神經(jīng)網(wǎng)絡(luò)單元121中的各個(gè)神經(jīng)處理單元126都會(huì)包含于一個(gè)神經(jīng)處理單元群組4901內(nèi),因此,一共會(huì)有N/J個(gè)神經(jīng)處理單元群組4901,其中N是神經(jīng)處理單元126的數(shù)量(舉例來(lái)說(shuō),就寬配置而言為512,就窄配置而言為1024)而J是單一個(gè)群組4901內(nèi)的神經(jīng)處理單元126的數(shù)量(舉例來(lái)說(shuō),就圖49的實(shí)施例而言即為四)。圖49中將神經(jīng)處理單元群組4901內(nèi)的四個(gè)神經(jīng)處理單元126稱(chēng)為神經(jīng)處理單元0,神經(jīng)處理單元1,神經(jīng)處理單元2與神經(jīng)處理單元3。圖49的實(shí)施例中的各個(gè)神經(jīng)處理單元類(lèi)似于前述圖7的神經(jīng)處理單元126,并且圖中具有相同標(biāo)號(hào)的組件也相類(lèi)似。不過(guò),多任務(wù)緩存器208經(jīng)調(diào)整以包含四個(gè)額外的輸入4905,多任務(wù)緩存器705經(jīng)調(diào)整以包含四個(gè)額外的輸入4907,選擇輸入213經(jīng)調(diào)整而能從原本的輸入211與207以及額外輸入4905中進(jìn)行選擇提供至輸出209,并且,選擇輸入713經(jīng)調(diào)整而能從原本的輸入711與206以及額外輸入4907中進(jìn)行選擇提供至輸出203。如圖中所示,圖11的列緩沖器1104在圖49中即為輸出緩沖器1104。進(jìn)一步來(lái)說(shuō),圖中所示的輸出緩沖器1104的文字0,1,2與3接收關(guān)聯(lián)于神經(jīng)處理單元0,1,2與3的四個(gè)啟動(dòng)函數(shù)單元212的相對(duì)應(yīng)輸出。此部分的輸出緩沖器1104包含N個(gè)文字對(duì)應(yīng)于神經(jīng)處理單元群組4901,這些文字稱(chēng)為一個(gè)輸出緩沖文字群組。在圖49的實(shí)施例中,N為四。輸出緩沖器1104的這四個(gè)文字反饋至多任務(wù)緩存器208與705,并作為四個(gè)額外輸入4905由多任務(wù)緩存器208所接收以及作為四個(gè)額外輸入4907由多任務(wù)緩存器705所接收。輸出緩沖文字群組反饋至其相對(duì)應(yīng)神經(jīng)處理單元群組4901的反饋動(dòng)作,使非架構(gòu)程序的算術(shù)指令能夠從關(guān)聯(lián)于神經(jīng)處理單元群組4901的輸出緩沖器1104的文字(即輸出緩沖文字群組)中選擇一個(gè)或兩個(gè)文字作為其輸入,其范例請(qǐng)參照后續(xù)圖51的非架構(gòu)程序,如圖中地址4,8,11,12與15的指令。也就是說(shuō),指定于非架構(gòu)指令內(nèi)的輸出緩沖器1104文字會(huì)確認(rèn)選擇輸入213/713產(chǎn)生的數(shù)值。這個(gè)能力實(shí)際上使輸出緩沖器1104可以作為一個(gè)類(lèi)別草稿存儲(chǔ)器(scratchpadmemory),能夠讓非架構(gòu)程序減少寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122和/或權(quán)重隨機(jī)存取存儲(chǔ)器124以及后續(xù)從中讀取的次數(shù),例如減少過(guò)程中居間產(chǎn)生與使用的數(shù)值。較佳地,輸出緩沖器1104,或稱(chēng)列緩沖器1104,包括一個(gè)一維的緩存器陣列,用以?xún)?chǔ)存1024個(gè)窄文字或是512個(gè)寬文字。較佳地,對(duì)于輸出緩沖器1104的讀取可以在單一個(gè)時(shí)頻周期內(nèi)執(zhí)行,而對(duì)于輸出緩沖器1104的寫(xiě)入也可以在單一個(gè)時(shí)頻周期內(nèi)執(zhí)行。不同于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124,可由架構(gòu)程序與非架構(gòu)程序進(jìn)行存取,輸出緩沖器1104無(wú)法由架構(gòu)程序進(jìn)行存取,而只能由非架構(gòu)程序進(jìn)行存取。輸出緩沖器1104將經(jīng)調(diào)整以接收屏蔽輸入(maskinput)4903。較佳地,屏蔽輸入4903包括四個(gè)位對(duì)應(yīng)至輸出緩沖器1104的四個(gè)文字,此四個(gè)文字關(guān)聯(lián)于神經(jīng)處理單元群組4901的四個(gè)神經(jīng)處理單元126。較佳地,若是此對(duì)應(yīng)至輸出緩沖器1104的文字的屏蔽輸入4903位為真,此輸出緩沖器1104的文字就會(huì)維持其當(dāng)前值;否則,此輸出緩沖器1104的文字就會(huì)被啟動(dòng)函數(shù)單元212的輸出所更新。也就是說(shuō),若是此對(duì)應(yīng)至輸出緩沖器1104的文字的屏蔽輸入4903位為假,啟動(dòng)函數(shù)單元212的輸出就會(huì)被寫(xiě)入輸出緩沖器1104的文字。如此,非架構(gòu)程序的輸出指令即可選擇性地將啟動(dòng)函數(shù)單元212的輸出寫(xiě)入輸出緩沖器1104的某些文字并使輸出緩沖器1104的其它文字的當(dāng)前數(shù)值維持不變,其范例請(qǐng)參照后續(xù)圖51的非架構(gòu)程序的指令,如圖中地址6,10,13與14的指令。也就是說(shuō),指定于非架構(gòu)程序內(nèi)的輸出緩沖器1104的文字即決產(chǎn)生于屏蔽輸入4903的數(shù)值。為了簡(jiǎn)化說(shuō)明,圖49中并未顯示多任務(wù)緩存器208/705的輸入1811(如圖18,圖19與圖23所示)。不過(guò),同時(shí)支持可動(dòng)態(tài)配置神經(jīng)處理單元126與輸出緩沖器1104的反饋/屏蔽的實(shí)施例亦屬本發(fā)明的范疇。較佳地,在此等實(shí)施例中,輸出緩沖文字群組為可相對(duì)應(yīng)地動(dòng)態(tài)配置。需要理解的是,雖然此實(shí)施例的神經(jīng)處理單元群組4901內(nèi)的神經(jīng)處理單元126的數(shù)量為四,不過(guò),本發(fā)明并不限于此,群組內(nèi)神經(jīng)處理單元126數(shù)量較多或較少的實(shí)施例均屬于本發(fā)明的范疇。此外,就一個(gè)具有共享啟動(dòng)函數(shù)單元1112的實(shí)施例而言,如圖52所示,一個(gè)神經(jīng)處理單元群組4901內(nèi)的神經(jīng)處理單元126數(shù)量與一個(gè)啟動(dòng)函數(shù)單元212群組內(nèi)的神經(jīng)處理單元126數(shù)量會(huì)有協(xié)同影響。神經(jīng)處理單元群組內(nèi)輸出緩沖器1104的遮蔽與反饋能力特別有助于提升關(guān)聯(lián)于長(zhǎng)短期記憶胞4600的計(jì)算效率,詳如后續(xù)圖50與圖51所述。圖50為一方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行關(guān)聯(lián)于圖46中由128個(gè)長(zhǎng)短期記憶胞4600構(gòu)成的一層級(jí)的計(jì)算時(shí),圖49的神經(jīng)網(wǎng)絡(luò)單元121的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,權(quán)重隨機(jī)存取存儲(chǔ)器124與輸出緩沖器1104內(nèi)的數(shù)據(jù)配置的一范例。在圖50的范例中,神經(jīng)網(wǎng)絡(luò)單元121配置為512個(gè)神經(jīng)處理單元126或神經(jīng)元,例如采取寬配置。如同圖47與圖48的范例,在圖50與圖51的范例中的長(zhǎng)短期記憶層中只具有128個(gè)長(zhǎng)短期記憶胞4600。不過(guò),在圖50的范例中,全部512個(gè)神經(jīng)處理單元126(如神經(jīng)處理單元0至127)產(chǎn)生的數(shù)值都會(huì)被使用。在執(zhí)行圖51的非架構(gòu)程序的時(shí)候,各個(gè)神經(jīng)處理單元群組4901會(huì)集體做為一個(gè)長(zhǎng)短期記憶胞4600進(jìn)行運(yùn)作。如圖中所示,數(shù)據(jù)隨機(jī)存存儲(chǔ)器122裝載記憶胞輸入(X)與輸出(H)值供一系列時(shí)間步驟使用。進(jìn)一步來(lái)說(shuō),對(duì)于一給定時(shí)間步驟,會(huì)有一對(duì)兩列存儲(chǔ)器分別裝載X數(shù)值與H數(shù)值。以一個(gè)具有64列的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122為例,如圖中所示,此數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所裝載的記憶胞數(shù)值可供31個(gè)不同時(shí)間步驟使用。在圖50的范例中,列2與3裝載供時(shí)間步驟0使用的數(shù)值,列4與5裝載供時(shí)間步驟1使用的數(shù)值,依此類(lèi)推,列62與63裝載供時(shí)間步驟30使用的數(shù)值。這對(duì)兩列存儲(chǔ)器中的第一列裝載此時(shí)間步驟的X數(shù)值,而第二列則是裝載此時(shí)間步驟的H數(shù)值。如圖中所示,數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中各組四行對(duì)應(yīng)至神經(jīng)處理單元群組4901的存儲(chǔ)器裝載供其對(duì)應(yīng)長(zhǎng)短期記憶胞4600使用的數(shù)值。也就是說(shuō),行0至3裝載關(guān)聯(lián)于長(zhǎng)短期記憶胞0的數(shù)值,其計(jì)算是由神經(jīng)處理單元0-3執(zhí)行,即神經(jīng)處理單元群組0執(zhí)行;行4至7裝載關(guān)聯(lián)于長(zhǎng)短期記憶胞1的數(shù)值,其計(jì)算是由神經(jīng)處理單元4-7執(zhí)行,即神經(jīng)處理單元群組1執(zhí)行;依此類(lèi)推,行508至511裝載關(guān)聯(lián)于長(zhǎng)短期記憶胞127的數(shù)值,其計(jì)算是由神經(jīng)處理單元508-511執(zhí)行,即神經(jīng)處理單元群組127執(zhí)行,詳如后續(xù)圖51所示。如圖中所示,列1并未被使用,列0裝載初始的記憶胞輸出(H)值,就一較佳實(shí)施例而言,可由架構(gòu)程序填入零值,不過(guò),本發(fā)明并不限于此,利用非架構(gòu)程序指令填入列0的初始記憶胞輸出(H)數(shù)值也屬于本發(fā)明的范疇。較佳地,X數(shù)值(位于列2,4,6依此類(lèi)推至列62)由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MTNN指令1400寫(xiě)入/填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,并由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序進(jìn)行讀取/使用,例如圖50所示的非架構(gòu)程序。較佳地,H數(shù)值(位于列3,5,7依此類(lèi)推至列63)由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序?qū)懭?填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122并進(jìn)行讀取/使用,詳如后述。較佳地,H數(shù)值并由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MFNN指令1500進(jìn)行讀取。需要注意的是,圖51的非架構(gòu)程序假定對(duì)應(yīng)至神經(jīng)處理單元群組4901的各組四行存儲(chǔ)器(如行0-3,行4-7,行5-8,依此類(lèi)推至行508-511)中,在一給定列的四個(gè)X數(shù)值填入相同的數(shù)值(例如由架構(gòu)程序填入)。類(lèi)似地,圖51的非架構(gòu)程序會(huì)在對(duì)應(yīng)至神經(jīng)處理單元群組4901的各組四行存儲(chǔ)器中,計(jì)算并對(duì)一給定列的四個(gè)H數(shù)值寫(xiě)入相同數(shù)值。如圖中所示,權(quán)重隨機(jī)存取存儲(chǔ)器124裝載神經(jīng)網(wǎng)絡(luò)單元121的神經(jīng)處理單元所需的權(quán)重,偏移與記憶胞狀態(tài)(C)值。在對(duì)應(yīng)至神經(jīng)處理單元群組121的各組四行存儲(chǔ)器中(例如行0-3,行4-7,行5-8依此類(lèi)推至行508-511):(1)行編號(hào)除以4的余數(shù)等于3的行,會(huì)在其列0,1,2與6分別裝載Wc,Uc,Bc,與C的數(shù)值;(2)行編號(hào)除以4的余數(shù)等于2的行,會(huì)在其列3,4與5分別裝載Wo,Uo與Bo的數(shù)值;(3)行編號(hào)除以4的余數(shù)等于1的行,會(huì)在其列3,4與5分別裝載Wf,Uf與Bf的數(shù)值;以及(4)行編號(hào)除以4的余數(shù)等于0的行,會(huì)在其列3,4與5分別裝載Wi,Ui與Bi的數(shù)值。較佳地,這些權(quán)重與偏移值-Wi,Ui,Bi,Wf,Uf,Bf,Wc,Uc,Bc,Wo,Uo,Bo(在列0至5)-由執(zhí)行于處理器100的架構(gòu)程序透過(guò)MTNN指令1400寫(xiě)入/填入權(quán)重隨機(jī)存取存儲(chǔ)器124,并由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序進(jìn)行讀取/使用,如圖51的非架構(gòu)程序。較佳地,居間的C值由執(zhí)行于神經(jīng)網(wǎng)絡(luò)單元121的非架構(gòu)程序?qū)懭?填入權(quán)重隨機(jī)存取存儲(chǔ)器124并進(jìn)行讀取/使用,詳如后述。圖50的范例假定架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)于31個(gè)不同的時(shí)間步驟,將輸入X的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(列2,4,依此類(lèi)推至列62);(2)啟動(dòng)圖51的非架構(gòu)程序;(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出H的數(shù)值(列3,5,依此類(lèi)推至列63);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù),例如對(duì)手機(jī)使用者的話語(yǔ)進(jìn)行辨識(shí)所需的計(jì)算。在另一種執(zhí)行方式中,架構(gòu)程序會(huì)執(zhí)行以下步驟:(1)對(duì)單一個(gè)時(shí)間步驟,以輸入X的數(shù)值填入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122(如列2);(2)啟動(dòng)非架構(gòu)程序(圖51非架構(gòu)程序的修正后版本,不需循環(huán),并且只存取數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的單一對(duì)兩列);(3)偵測(cè)非架構(gòu)程序是否執(zhí)行完畢;(4)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122讀出輸出H的數(shù)值(如列3);以及(5)重復(fù)步驟(1)至(4)若干次直到完成任務(wù)。此二種方式何者為優(yōu)可依據(jù)長(zhǎng)短期記憶層的輸入X數(shù)值的取樣方式而定。舉例來(lái)說(shuō),若是此任務(wù)容許在多個(gè)時(shí)間步驟對(duì)輸入進(jìn)行取樣(例如大約31個(gè)時(shí)間步驟)并執(zhí)行計(jì)算,第一種方式就較為理想,因?yàn)榇朔绞娇赡軒?lái)更多計(jì)算資源效率和/或較佳的效能,不過(guò),若是此任務(wù)只容許在單一個(gè)時(shí)間步驟執(zhí)行取樣,就需要使用第二種方式。第三實(shí)施例類(lèi)似于前述第二種方式,不過(guò),不同于第二種方式使用單一對(duì)兩列數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,此方式的非架構(gòu)程序使用多對(duì)存儲(chǔ)器列,也就是在各個(gè)時(shí)間步驟使用不同對(duì)存儲(chǔ)器列,此部分類(lèi)似于第一種方式。較佳地,此第三實(shí)施例的架構(gòu)程序在步驟(2)前包含一步驟,在此步驟中,架構(gòu)程序會(huì)在非架構(gòu)程序啟動(dòng)前對(duì)其進(jìn)行更新,例如將地址1的指令內(nèi)的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122列更新為指向下一對(duì)兩列存儲(chǔ)器。如圖中所示,對(duì)于神經(jīng)網(wǎng)絡(luò)單元121的神經(jīng)處理單元0至511,在圖51的非架構(gòu)程序中不同地址的指令執(zhí)行后,輸出緩沖器1104裝載記憶胞輸出(H),候選記憶胞狀態(tài)(C’),輸入閘(I),遺忘閘(F),輸出閘(O),記憶胞狀態(tài)(C)與tanh(C)的居間值,每一個(gè)輸出緩沖文字群組中(例如輸出緩沖器1104對(duì)應(yīng)至神經(jīng)處理單元群組4901的四個(gè)文字的群組,如文字0-3,4-7,5-8依此類(lèi)推至508-511),文字編號(hào)除以4的余數(shù)為3的文字表示為OUTBUF[3],文字編號(hào)除以4的余數(shù)為2的文字表示為OUTBUF[2],文字編號(hào)除以4的余數(shù)為1的文字表示為OUTBUF[1],而文字編號(hào)除以4的余數(shù)為0的文字表示為OUTBUF[0]。如圖中所示,在圖51的非架構(gòu)程序中地址2的指令執(zhí)行后,對(duì)于各個(gè)神經(jīng)處理單元群組4901而言,輸出緩沖器1104的全部四個(gè)文字都會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的初始記憶胞輸出(H)值。在地址6的指令執(zhí)行后,對(duì)于各個(gè)神經(jīng)處理單元群組4901而言,輸出緩沖器1104的OUTBUF[3]文字會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的候選記憶胞狀態(tài)(C’)值,而輸出緩沖器1104的其它三個(gè)文字則會(huì)維持其先前數(shù)值。在地址10的指令執(zhí)行后,對(duì)于各個(gè)神經(jīng)處理單元群組4901而言,輸出緩沖器1104的OUTBUF[0]文字會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的輸入閘(I)數(shù)值,OUTBUF[1]文字會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的遺忘閘(F)數(shù)值,OUTBUF[2]文字會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的輸出閘(O)數(shù)值,而OUTBUF[3]文字則是維持其先前數(shù)值。在地址13的指令執(zhí)行后,對(duì)于各個(gè)神經(jīng)處理單元群組4901而言,輸出緩沖器1104的OUTBUF[3]文字會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的新的記憶胞狀態(tài)(C)值(對(duì)于輸出緩沖器1104而言,包含槽(slot)3的C數(shù)值,寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列6,詳如后續(xù)圖51所述),而輸出緩沖器1104的其它三個(gè)文字則是維持其先前數(shù)值。在地址14的指令執(zhí)行后,對(duì)于各個(gè)神經(jīng)處理單元群組4901而言,輸出緩沖器1104的OUTBUF[3]文字會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的tanh(C)數(shù)值,而輸出緩沖器1104的其它三個(gè)文字則是維持其先前數(shù)值。在地址16的指令執(zhí)行后,對(duì)于各個(gè)神經(jīng)處理單元群組4901而言,輸出緩沖器1104的全部四個(gè)文字都會(huì)寫(xiě)入相對(duì)應(yīng)長(zhǎng)短期記憶胞4600的新的記憶胞輸出(H)值。前述地址6至16的執(zhí)行流程(也就是排除地址2的執(zhí)行,這是因?yàn)榈刂?不屬于程序循環(huán)的一部分)會(huì)再重復(fù)三十次,作為地址17回到地址3的程序循環(huán)。圖51為一表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129的程序,此程序由圖49的神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行并依據(jù)圖50的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成關(guān)聯(lián)于長(zhǎng)短期記憶胞層的計(jì)算。圖51的范例程序包含18個(gè)非架構(gòu)指令分別位于地址0至17。地址0的指令是一個(gè)初始化指令,用以清除累加器202并將循環(huán)計(jì)數(shù)器3804初始化至數(shù)值31,以執(zhí)行31次循環(huán)組(地址1至17的指令)。此初始化指令并會(huì)將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的待寫(xiě)入列(例如圖26/圖39的緩存器2606)初始化為數(shù)值1,而在地址16的指令的第一次執(zhí)行后,此數(shù)值會(huì)增加至3。較佳地,此初始化指令并會(huì)使神經(jīng)網(wǎng)絡(luò)單元121處于寬配置,如此,神經(jīng)網(wǎng)絡(luò)單元121就會(huì)配置有512個(gè)神經(jīng)處理單元126。如后續(xù)章節(jié)所述,在地址0至17的指令執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126構(gòu)成的128個(gè)神經(jīng)處理單元群組4901作為128個(gè)相對(duì)應(yīng)的長(zhǎng)短期記憶胞4600進(jìn)行運(yùn)作。地址1與2的指令不屬于程序的循環(huán)組而只會(huì)執(zhí)行一次。這些指令會(huì)產(chǎn)生初始記憶胞輸出(H)值(例如0)并將其寫(xiě)入輸出緩沖器1104的所有文字。地址1的指令會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的列0讀取初始H數(shù)值并將其放置于由地址0的指令清除的累加器202。地址2的指令(OUTPUTPASSTHRU,NOP,CLRACC)會(huì)將累加器202數(shù)值傳遞至輸出緩沖器1104,如圖50所示。地址2的輸出指令(以及圖51的其它輸出指令)中的“NOP”標(biāo)示表示輸出值只會(huì)被寫(xiě)入輸出緩沖器1104,而不會(huì)被寫(xiě)入存儲(chǔ)器,也就是不會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122或權(quán)重隨機(jī)存取存儲(chǔ)器124。地址2的指令并會(huì)清除累加器202。地址3至17的指令位于循環(huán)組內(nèi),其執(zhí)行次數(shù)為循環(huán)計(jì)數(shù)的數(shù)值(如31)。地址3至6的指令的每一次執(zhí)行會(huì)計(jì)算當(dāng)前時(shí)間步驟的tanh(C’)數(shù)值并將其寫(xiě)入文字OUTBUF[3],此文字將會(huì)被地址11的指令使用。更精確地說(shuō),地址3的乘法累加指令會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的當(dāng)前讀取列(如列2,4,6依此類(lèi)推至列62)讀取關(guān)聯(lián)于此時(shí)間步驟的記憶胞輸入(X)值,從權(quán)重隨機(jī)存取存儲(chǔ)器124的列0讀取Wc數(shù)值,并將前述數(shù)值相乘以產(chǎn)生一乘積加入由地址2的指令清除的累加器202。地址4的乘法累加指令(MULT-ACCUMOUTBUF[0],WRROW1)會(huì)從文字OUTBUF[0]讀取H數(shù)值(即神經(jīng)處理單元群組4901的全部四個(gè)神經(jīng)處理單元126),從權(quán)重隨機(jī)存取存儲(chǔ)器124的列1讀取Uc數(shù)值,并將前述數(shù)值相乘以產(chǎn)生一第二乘積加入累加器202。地址5的將權(quán)重文字加入累加器指令(ADD_W_ACCWRROW2)會(huì)從權(quán)重隨機(jī)存取存儲(chǔ)器124的列2讀取Bc數(shù)值并將其加入累加器202。地址6的輸出指令(OUTPUTTANH,NOP,MASK[0:2],CLRACC)會(huì)對(duì)累加器202數(shù)值執(zhí)行雙曲正切啟動(dòng)函數(shù),并且只將執(zhí)行結(jié)果寫(xiě)入文字OUTBUF[3](也即,只有神經(jīng)處理單元群組4901中編號(hào)除4的余數(shù)為3的神經(jīng)處理單元126會(huì)寫(xiě)入此結(jié)果),并且,累加器202會(huì)被清除。也就是說(shuō),地址6的輸出指令會(huì)遮蔽文字OUTBUF[0],OUTBUF[1]與OUTBUF[2](如指令術(shù)語(yǔ)MASK[0:2]所表示)而維持其當(dāng)前數(shù)值,如圖50所示。此外,地址6的輸出指令并不會(huì)寫(xiě)入存儲(chǔ)器(如指令術(shù)語(yǔ)NOP所表示)。地址7至10的指令的每一次執(zhí)行會(huì)計(jì)算當(dāng)前時(shí)間步驟的輸入閘(I)數(shù)值,遺忘閘(F)數(shù)值與輸出閘(O)數(shù)值并將其分別寫(xiě)入文字OUTBUF[0],OUTBUF[1],與OUTBUF[2],這些數(shù)值將會(huì)被地址11,12與15的指令使用。更精確地說(shuō),地址7的乘法累加指令會(huì)從數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的當(dāng)前讀取列(如列2,4,6依此類(lèi)推至列62)讀取關(guān)聯(lián)于此時(shí)間步驟的記憶胞輸入(X)值,從權(quán)重隨機(jī)存取存儲(chǔ)器124的列3讀取Wi,Wf與Wo數(shù)值,并將前述數(shù)值相乘以產(chǎn)生一乘積加入由地址6的指令清除的累加器202。更精確地說(shuō),在神經(jīng)處理單元群組4901中,編號(hào)除4的余數(shù)為0的神經(jīng)處理單元126會(huì)計(jì)算x與Wi的乘積,編號(hào)除4的余數(shù)為1的神經(jīng)處理單元126會(huì)計(jì)算X與Wf的乘積,而編號(hào)除4的余數(shù)為2的神經(jīng)處理單元126會(huì)計(jì)算X與Wo的乘積。地址8的乘法累加指令會(huì)從文字OUTBUF[0]讀取H數(shù)值(即神經(jīng)處理單元群組4901的全部四個(gè)神經(jīng)處理單元126),從權(quán)重隨機(jī)存取存儲(chǔ)器124的列4讀取Ui,Uf與Uo數(shù)值,并將前述數(shù)值相乘以產(chǎn)生一第二乘積加入累加器202。更精確地說(shuō),在神經(jīng)處理單元群組4901中,編號(hào)除4的余數(shù)為0的神經(jīng)處理單元126會(huì)計(jì)算H與Ui的乘積,編號(hào)除4的余數(shù)為1的神經(jīng)處理單元126會(huì)計(jì)算H與Uf的乘積,而編號(hào)除4的余數(shù)為2的神經(jīng)處理單元126會(huì)計(jì)算H與Uo的乘積。地址9的將權(quán)重文字加入累加器指令(ADD_W_ACCWRROW2)會(huì)從權(quán)重隨機(jī)存取存儲(chǔ)器124的列5讀取Bi,Bf與Bo數(shù)值并將其加入累加器202。更精確地說(shuō),,在神經(jīng)處理單元群組4901中,編號(hào)除4的余數(shù)為0的神經(jīng)處理單元126會(huì)執(zhí)行Bi數(shù)值的加法計(jì)算,編號(hào)除4的余數(shù)為1的神經(jīng)處理單元126會(huì)執(zhí)行Bf數(shù)值的加法計(jì)算,而編號(hào)除4的余數(shù)為2的神經(jīng)處理單元126會(huì)執(zhí)行Bo數(shù)值的加法計(jì)算。地址10的輸出指令(OUTPUTSIGMOID,NOP,MASK[3],CLRACC)會(huì)對(duì)累加器202數(shù)值執(zhí)行S型啟動(dòng)函數(shù)并將計(jì)算出來(lái)的I,F(xiàn)與O數(shù)值分別寫(xiě)入文字OUTBUF[0],OUTBUF[1]與OUTBUF[2],此指令并會(huì)清除累加器202,而不寫(xiě)入存儲(chǔ)器。也就是說(shuō),地址10的輸出指令會(huì)遮蔽文字OUTBUF[3](如指令術(shù)語(yǔ)MASK[3]所表示)而維持此文字的當(dāng)前數(shù)值(也就是C’),如圖50所示。地址11至13的指令的每一次執(zhí)行會(huì)計(jì)算當(dāng)前時(shí)間步驟產(chǎn)生的新的記憶胞狀態(tài)(C)值并將其寫(xiě)入權(quán)重隨機(jī)存取存儲(chǔ)器124的列6供下一個(gè)時(shí)間步驟使用(也就是供地址12的指令在下一次循環(huán)執(zhí)行時(shí)使用),更精確的說(shuō),此數(shù)值寫(xiě)入列6對(duì)應(yīng)于神經(jīng)處理單元群組4901的四行文字中標(biāo)號(hào)除4的余數(shù)為3的文字。此外,地址14的指令的每一次執(zhí)行都會(huì)將tanh(C)數(shù)值寫(xiě)入OUTBUF[3]供地址15的指令使用。更精確地說(shuō),地址11的乘法累加指令(MULT-ACCUMOUTBUF[0],OUTBUF[3])會(huì)從文字OUTBUF[0]讀取輸入閘(I)數(shù)值,從文字OUTBUF[3]讀取候選記憶胞狀態(tài)(C’)值,并將前述數(shù)值相乘以產(chǎn)生一第一乘積加入由地址10的指令清除的累加器202。更精確地說(shuō),神經(jīng)處理單元群組4901的四個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126都會(huì)計(jì)算I數(shù)值與C’數(shù)值的第一乘積。地址12的乘法累加指令(MULT-ACCUMOUTBUF[1],WRROW6)會(huì)指示神經(jīng)處理單元126從文字OUTBUF[1]讀取遺忘閘(F)數(shù)值,從權(quán)重隨機(jī)存取存儲(chǔ)器124的列6讀取其相對(duì)應(yīng)文字,并將其相乘以產(chǎn)生第二乘積與地址11的指令產(chǎn)生于累加器202內(nèi)的第一乘積相加。更精確地說(shuō),對(duì)于神經(jīng)處理單元群組4901內(nèi)標(biāo)號(hào)除4的余數(shù)為3的神經(jīng)處理單元126而言,從列6讀取的文字是先前時(shí)間步驟計(jì)算出的當(dāng)前記憶胞狀態(tài)(C)值,第一乘積與第二乘積的加總即為此新的記憶胞狀態(tài)(C)。不過(guò),對(duì)于神經(jīng)處理單元群組4901的其它三個(gè)神經(jīng)處理單元126而言,從列6讀取的文字是不需理會(huì)的數(shù)值,這是因?yàn)檫@些數(shù)值所產(chǎn)生的累加值將不被使用,也即不會(huì)被地址13與14的指令放入輸出緩沖器1104而會(huì)被地址14的指令所清除。也就是說(shuō),只有神經(jīng)處理單元群組4901中標(biāo)號(hào)除4的余數(shù)為3的神經(jīng)處理單元126所產(chǎn)生的新的記憶胞狀態(tài)(C)值將會(huì)被使用,即被地址13與14的指令使用。就地址12的指令的第二至三十一次執(zhí)行而言,從權(quán)重隨機(jī)存取存儲(chǔ)器124的列6讀取的C數(shù)值是循環(huán)組的前次執(zhí)行中由地址13的指令寫(xiě)入的數(shù)值。不過(guò),對(duì)于地址12的指令的第一次執(zhí)行而言,列6的C數(shù)值則是由架構(gòu)程序在啟動(dòng)圖51的非架構(gòu)程序前或是由非架構(gòu)程序的一調(diào)整后版本寫(xiě)入的初始值。地址13的輸出指令(OUTPUTPASSTHRU,WRROW6,MASK[0:2])只會(huì)傳遞累加器202數(shù)值,即計(jì)算出的C數(shù)值,至文字OUTBUF[3](也就是說(shuō),只有神經(jīng)處理單元群組4901中標(biāo)號(hào)除4的余數(shù)為3的神經(jīng)處理單元126會(huì)將其計(jì)算出的C數(shù)值寫(xiě)入輸出緩沖器1104),而權(quán)重隨機(jī)存取存儲(chǔ)器124的列6則是以更新后的輸出緩沖器1104寫(xiě)入,如圖50所示。也就是說(shuō),地址13的輸出指令會(huì)遮蔽文字OUTBUF[0],OUTBUF[1]與OUTBUF[2]而維持其當(dāng)前數(shù)值(即I,F(xiàn)與O數(shù)值)。如前述,只有列6對(duì)應(yīng)于神經(jīng)處理單元群組4901的四行文字中標(biāo)號(hào)除4的余數(shù)為3的文字內(nèi)的C數(shù)值會(huì)被使用,也就是由地址12的指令使用;因此,非架構(gòu)程序不會(huì)理會(huì)權(quán)重隨機(jī)存取存儲(chǔ)器124的列6中位于行0-2,行4-6,依此類(lèi)推至行508-510的數(shù)值,如圖50所示(即I,F(xiàn)與O數(shù)值)。地址14的輸出指令(OUTPUTTANH,NOP,MASK[0:2],CLRACC)會(huì)對(duì)累加器202數(shù)值執(zhí)行雙曲正切啟動(dòng)函數(shù),并將計(jì)算出來(lái)的tanh(C)數(shù)值寫(xiě)入文字OUTBUF[3],此指令并會(huì)清除累加器202,而不寫(xiě)入存儲(chǔ)器。地址14的輸出指令,如同地址13的輸出指令,會(huì)遮蔽文字OUTBUF[0],OUTBUF[1]與OUTBUF[2]而維持其原本數(shù)值,如圖50所示。地址15至16的指令的每一次執(zhí)行會(huì)計(jì)算當(dāng)前時(shí)間步驟產(chǎn)生的記憶胞輸出(H)值并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的當(dāng)前輸出列后方第二列,其數(shù)值將會(huì)由架構(gòu)程序讀取并用于下一次時(shí)間步驟(也即在下一次循環(huán)執(zhí)行中由地址3及7的指令使用)。更精確地說(shuō),地址15的乘法累加指令會(huì)從文字OUTBUF[2]讀取輸出閘(O)數(shù)值,從文字OUTBUF[3]讀取tanh(C)數(shù)值,并將其相乘以產(chǎn)生一乘積加入由地址14的指令清除的累加器202。更精確地說(shuō),神經(jīng)處理單元群組4901的四個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126都會(huì)計(jì)算數(shù)值O與tanh(C)的乘積。地址16的輸出指令會(huì)傳遞累加器202數(shù)值并在第一次執(zhí)行中將計(jì)算出的H數(shù)值寫(xiě)入列3,在第二次執(zhí)行中將計(jì)算出的H數(shù)值寫(xiě)入列5,依此類(lèi)推在第三十一次執(zhí)行中將計(jì)算出的H數(shù)值寫(xiě)入列63,如圖50所示,接下來(lái)這些數(shù)值會(huì)由地址4與8的指令使用。此外,如圖50所示,這些計(jì)算出來(lái)的H數(shù)值會(huì)被放入輸出緩沖器1104供地址4與8的指令后續(xù)使用。地址16的輸出指令并會(huì)清除累加器202。在一實(shí)施例中,長(zhǎng)短期記憶胞4600的設(shè)計(jì)使地址16的輸出指令(以及/或圖48中地址22的輸出指令)具有一啟動(dòng)函數(shù),如S型或雙曲正切函數(shù),而非傳遞累加器202數(shù)值。地址17的循環(huán)指令會(huì)使循環(huán)計(jì)數(shù)器3804遞減并且在新的循環(huán)計(jì)數(shù)器3804數(shù)值大于零的情況下回到地址3的指令。由此可發(fā)現(xiàn),因?yàn)閳D49的神經(jīng)網(wǎng)絡(luò)單元121實(shí)施例中的輸出緩沖器1104的反饋與屏蔽能力,圖51的非架構(gòu)程序的循環(huán)組內(nèi)的指令數(shù)相較于圖48的非架構(gòu)指令大致減少34%。此外,因?yàn)閳D49的神經(jīng)網(wǎng)絡(luò)單元121實(shí)施例中的輸出緩沖器1104的反饋與屏蔽能力,圖51非架構(gòu)程序的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中的存儲(chǔ)器配置所搭配的時(shí)間步驟數(shù)大致為圖48的三倍。前述改善有助于某些利用神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行長(zhǎng)短期記憶胞層計(jì)算的架構(gòu)程序應(yīng)用,特別是針對(duì)長(zhǎng)短期記憶胞層中的長(zhǎng)短期記憶胞4600數(shù)量少于或等于128的應(yīng)用。圖47至圖51的實(shí)施例假定各個(gè)時(shí)間步驟中的權(quán)重與偏移值維持不變。不過(guò),本發(fā)明并不限于此,其它權(quán)重與偏移值隨時(shí)間步驟改變的實(shí)施例也屬本發(fā)明的范疇,其中,權(quán)重隨機(jī)存取存儲(chǔ)器124并非如圖47至圖50所示填入單一組權(quán)重與偏移值,而是在各個(gè)時(shí)間步驟填入不同組權(quán)重與偏移值而圖48至圖51的非架構(gòu)程序的權(quán)重隨機(jī)存取存儲(chǔ)器124地址會(huì)隨之調(diào)整?;旧希谇笆鰣D47至圖51的實(shí)施例中,權(quán)重,偏移與居間值(如C,C’數(shù)值)儲(chǔ)存于權(quán)重隨機(jī)存取存儲(chǔ)器124,而輸入與輸出值(如X,H數(shù)值)則是儲(chǔ)存于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。此特征有利于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122為雙端口而權(quán)重隨機(jī)存取存儲(chǔ)器124為單端口的實(shí)施例,這是因?yàn)閺姆羌軜?gòu)程序與架構(gòu)程序至數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122會(huì)有更多的流量。不過(guò),因?yàn)闄?quán)重隨機(jī)存取存儲(chǔ)器124較大,在本發(fā)明的另一實(shí)施例中則是互換儲(chǔ)存非架構(gòu)與架構(gòu)程序?qū)懭霐?shù)值的存儲(chǔ)器(即互換數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124)。也就是說(shuō),W,U,B,C’,tanh(C)與C數(shù)值儲(chǔ)存于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122而X,H,I,F(xiàn)與O數(shù)值則是儲(chǔ)存于權(quán)重隨機(jī)存取存儲(chǔ)器124(圖47的調(diào)整后實(shí)施例);以及W,U,B,與C數(shù)值儲(chǔ)存于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122而X與H數(shù)值則是儲(chǔ)存于權(quán)重隨機(jī)存取存儲(chǔ)器124(圖50的調(diào)整后實(shí)施例)。因?yàn)闄?quán)重隨機(jī)存取存儲(chǔ)器124較大,這些實(shí)施例在一個(gè)批次中可處理較多時(shí)間步驟。對(duì)于利用神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行計(jì)算的架構(gòu)程序的應(yīng)用而言,此特征有利于某些能從較多的時(shí)間步驟得利的應(yīng)用并且可以為單端口設(shè)計(jì)的存儲(chǔ)器(如權(quán)重隨機(jī)存取存儲(chǔ)器124)提供足夠頻寬。圖52為一方塊圖,顯示神經(jīng)網(wǎng)絡(luò)單元121的實(shí)施例,此實(shí)施例的神經(jīng)處理單元群組內(nèi)具有輸出緩沖遮蔽與反饋能力,并且共享啟動(dòng)函數(shù)單元1112。圖52的神經(jīng)網(wǎng)絡(luò)單元121類(lèi)似于圖47的神經(jīng)網(wǎng)絡(luò)單元121,并且圖中具有相同標(biāo)號(hào)的組件也相類(lèi)似。不過(guò),圖49的四個(gè)啟動(dòng)函數(shù)單元212在本實(shí)施例中則是由單一個(gè)共享啟動(dòng)函數(shù)單元1112所取代,此單一個(gè)啟動(dòng)函數(shù)單元會(huì)接收四個(gè)來(lái)自四個(gè)累加器202的輸出217并產(chǎn)生四個(gè)輸出至文字OUTBUF[0],OUTBUF[1],OUTBUF[2]與OUTBUF[3]。圖52的神經(jīng)網(wǎng)絡(luò)單元212的運(yùn)作方式類(lèi)似于前文圖49至圖51所述的實(shí)施例,并且其運(yùn)作共享啟動(dòng)函數(shù)單元1112的方式類(lèi)似于前文圖11至圖13所述的實(shí)施例。圖53為一方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行關(guān)聯(lián)于圖46中一個(gè)具有128個(gè)長(zhǎng)短期記憶胞4600的層級(jí)的計(jì)算時(shí),圖49的神經(jīng)網(wǎng)絡(luò)單元121的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,權(quán)重隨機(jī)存取存儲(chǔ)器124與輸出緩沖器1104內(nèi)的數(shù)據(jù)配置的另一實(shí)施例。圖53的范例類(lèi)似于圖50的范例。不過(guò),在圖53中,Wi,Wf與Wo值位于列0(而非如圖50位于列3);Ui,Uf與Uo值位于列1(而非如圖50位于列4);Bi,Bf與Bo值位于列2(而非如圖50位于列5);C值位于列3(而非如圖50位于列6)。另外,圖53的輸出緩沖器1104的內(nèi)容類(lèi)似于圖50,不過(guò),因?yàn)閳D54與圖51的非架構(gòu)程序的差異,第三列的內(nèi)容(即I,F(xiàn),O與C’數(shù)值)是在地址7的指令執(zhí)行后出現(xiàn)在輸出緩沖器1104(而非如圖50是地址10的指令);第四列的內(nèi)容(即I,F(xiàn),O與C數(shù)值)是在地址10的指令執(zhí)行后出現(xiàn)在輸出緩沖器1104(而非如圖50是地址13的指令);第五列的內(nèi)容(即I,F(xiàn),O與tanh(C)數(shù)值)是在地址11的指令執(zhí)行后出現(xiàn)在輸出緩沖器1104(而非如圖50是地址14的指令);并且第六列的內(nèi)容(即H數(shù)值)是在地址13的指令執(zhí)行后出現(xiàn)在輸出緩沖器1104(而非如圖50是地址16的指令),詳如后述。圖54為一表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129的程序,此程序由圖49的神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行并依據(jù)圖53的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成關(guān)聯(lián)于長(zhǎng)短期記憶胞層的計(jì)算。圖54的范例程序類(lèi)似于圖51的程序。更精確地說(shuō),圖54與圖51中,地址0至5的指令相同;圖54中地址7與8的指令相同于圖51中地址10與11的指令;并且圖54中地址10到14的指令相同于圖51中地址13到17的指令。不過(guò),圖54中地址6的指令并不會(huì)清除累加器202(相較之下,圖51中地址6的指令則會(huì)清除累加器202)。此外,圖51中地址7至9的指令并不出現(xiàn)在圖54的非架構(gòu)程序內(nèi)。最后,就圖54中地址9的指令與圖51中地址12的指令而言,除了圖54中地址9的指令讀取權(quán)重隨機(jī)存取存儲(chǔ)器124的列3而圖51中地址12的指令則是讀取權(quán)重隨機(jī)存取存儲(chǔ)器的列6外,其它部分均相同。因?yàn)閳D54的非架構(gòu)程序與圖51的非架構(gòu)程序的差異,圖53的配置使用的權(quán)重隨機(jī)存取存儲(chǔ)器124的列數(shù)會(huì)減少三個(gè),而程序循環(huán)內(nèi)的指令數(shù)也會(huì)減少三個(gè)。圖54的非架構(gòu)程序內(nèi)的循環(huán)組尺寸實(shí)質(zhì)上只有圖48的非架構(gòu)程序內(nèi)的循環(huán)組尺寸的一半,并且大致只有圖51的非架構(gòu)程序內(nèi)的循環(huán)組尺寸的80%。圖55為一方塊圖,顯示本發(fā)明另一實(shí)施例的神經(jīng)處理單元126的部分。更精確地說(shuō),對(duì)于圖49的多個(gè)神經(jīng)處理單元126中的單一個(gè)神經(jīng)處理單元126而言,圖中顯示多任務(wù)緩存器208與其相關(guān)聯(lián)輸入207,211與4905,以及多任務(wù)緩存器705與其相關(guān)聯(lián)輸入206,711與4907。除了圖49的輸入外,神經(jīng)處理單元126的多任務(wù)緩存器208與多任務(wù)緩存器705個(gè)別接收一群組內(nèi)編號(hào)(index_within_group)輸入5599。群組內(nèi)編號(hào)輸入5599指出特定神經(jīng)處理單元126在其神經(jīng)處理單元群組4901內(nèi)的編號(hào)。因此,舉例來(lái)說(shuō),以各個(gè)神經(jīng)處理單元群組4901具有四個(gè)神經(jīng)處理單元126的實(shí)施例為例,在各個(gè)神經(jīng)處理單元群組4901內(nèi),其中一個(gè)神經(jīng)處理單元126在其群組內(nèi)編號(hào)輸入5599中接收數(shù)值零,其中一個(gè)神經(jīng)處理單元126在其群組內(nèi)編號(hào)輸入5599中接收數(shù)值一,其中一個(gè)神經(jīng)處理單元126在其群組內(nèi)編號(hào)輸入5599中接收數(shù)值二,而其中一個(gè)神經(jīng)處理單元126在其群組內(nèi)編號(hào)輸入5599中接收數(shù)值三。換句話說(shuō),神經(jīng)處理單元126所接收的群組內(nèi)編號(hào)輸入5599數(shù)值就是此神經(jīng)處理單元126在神經(jīng)網(wǎng)絡(luò)單元121內(nèi)的編號(hào)除以J的余數(shù),其中J是神經(jīng)處理單元群組4901內(nèi)的神經(jīng)處理單元126的數(shù)量。因此,舉例來(lái)說(shuō),神經(jīng)處理單元73在其群組內(nèi)編號(hào)輸入5599接收數(shù)值一,神經(jīng)處理單元353在其群組內(nèi)編號(hào)輸入5599接收數(shù)值三,而神經(jīng)處理單元6在其群組內(nèi)編號(hào)輸入5599接收數(shù)值二。此外,當(dāng)控制輸入213指定一默認(rèn)值,在此表示為“SELF”,多任務(wù)緩存器208會(huì)選擇對(duì)應(yīng)于群組內(nèi)編號(hào)輸入5599數(shù)值的輸出緩沖器1104輸出4905。因此,當(dāng)非架構(gòu)指令以SELF的數(shù)值指定接收來(lái)自輸出緩沖器1104的數(shù)據(jù)(在圖57地址2與7的指令中標(biāo)示為OUTBUF[SELF]),各個(gè)神經(jīng)處理單元126的多任務(wù)緩存器208會(huì)從輸出緩沖器1104接收其相對(duì)應(yīng)文字。因此,舉例來(lái)說(shuō),當(dāng)神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行圖57中地址2與7的非架構(gòu)指令,神經(jīng)處理單元73的多任務(wù)緩存器208會(huì)在四個(gè)輸入4905中選擇第二個(gè)(編號(hào)1)輸入以接收來(lái)自輸出緩沖器1104的文字73,神經(jīng)處理單元353的多任務(wù)緩存器208會(huì)在四個(gè)輸入4905中選擇第四個(gè)(編號(hào)3)輸入以接收來(lái)自輸出緩沖器1104的文字353,而神經(jīng)處理單元6的多任務(wù)緩存器208會(huì)在四個(gè)輸入4905中選擇第三個(gè)(編號(hào)2)輸入以接收來(lái)自輸出緩沖器1104的文字6。雖然并未使用于圖57的非架構(gòu)程序,不過(guò),非架構(gòu)指令也可利用SELF數(shù)值(OUTBUF[SELF])指定接收來(lái)自輸出緩沖器1104的數(shù)據(jù)而使控制輸入713指定默認(rèn)值使各個(gè)神經(jīng)處理單元126的多任務(wù)緩存器705從輸出緩沖器1104接收其相對(duì)應(yīng)文字。圖56為一方塊圖,顯示當(dāng)神經(jīng)網(wǎng)絡(luò)單元執(zhí)行關(guān)聯(lián)于圖43的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算并利用圖55的實(shí)施例時(shí),神經(jīng)網(wǎng)絡(luò)單元121的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122與權(quán)重隨機(jī)存取存儲(chǔ)器124內(nèi)的數(shù)據(jù)配置的一范例。圖中權(quán)重隨機(jī)存取存儲(chǔ)器124內(nèi)的權(quán)重配置相同于圖44的范例。圖中數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122內(nèi)的數(shù)值的配置相似于圖44的范例,除了在本范例中,各個(gè)時(shí)間步驟具有相對(duì)應(yīng)的一對(duì)兩列存儲(chǔ)器以裝載輸入層節(jié)點(diǎn)D值與輸出層節(jié)點(diǎn)Y值,而非如圖44的范例使用一組四列的存儲(chǔ)器。也就是說(shuō),在本范例中,隱藏層Z數(shù)值與內(nèi)容層C數(shù)值并不寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122。而是將輸出緩沖器1104作為隱藏層Z數(shù)值與內(nèi)容層C數(shù)值的類(lèi)別草稿存儲(chǔ)器,詳如圖57的非架構(gòu)程序所述。前述OUTBUF[SELF]輸出緩沖器1104的反饋特征,可以使非架構(gòu)程序的運(yùn)作更為快速(這是將對(duì)于數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122執(zhí)行的兩次寫(xiě)入與兩次讀取動(dòng)作,以對(duì)于輸出緩沖器1104執(zhí)行的兩次寫(xiě)入與兩次讀取動(dòng)作來(lái)取代)并減少各個(gè)時(shí)間步驟使用的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122的空間,而使本實(shí)施例的數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122所裝載的數(shù)據(jù)可用于大約兩倍于圖44與圖45的實(shí)施例所具有的時(shí)間步驟,如圖中所示,即32個(gè)時(shí)間步驟。圖57為一表格,顯示儲(chǔ)存于神經(jīng)網(wǎng)絡(luò)單元121的程序存儲(chǔ)器129的程序,此程序由神經(jīng)網(wǎng)絡(luò)單元121執(zhí)行并依據(jù)圖56的配置使用數(shù)據(jù)與權(quán)重,以達(dá)成Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。圖57的非架構(gòu)程序類(lèi)似于圖45的非架構(gòu)程序,其差異處如下所述。圖57的范例程序具有12個(gè)非架構(gòu)指令分別位于地址0至11。地址0的初始化指令會(huì)清除累加器202并將循環(huán)計(jì)數(shù)器3804的數(shù)值初始化為32,使循環(huán)組(地址2至11的指令)執(zhí)行32次。地址1的輸出指令會(huì)將累加器202(由地址0的指令所清除)的零值放入輸出緩沖器1104。由此可觀察到,在地址2至6的指令的執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126對(duì)應(yīng)并作為512個(gè)隱藏層節(jié)點(diǎn)Z進(jìn)行運(yùn)作,而在地址7至10的指令的執(zhí)行過(guò)程中,對(duì)應(yīng)并作為512個(gè)輸出層節(jié)點(diǎn)Y進(jìn)行運(yùn)作。也就是說(shuō),地址2至6的指令的32次執(zhí)行會(huì)計(jì)算32個(gè)相對(duì)應(yīng)時(shí)間步驟的隱藏層節(jié)點(diǎn)Z數(shù)值,并將其放入輸出緩沖器1104供地址7至9的指令的相對(duì)應(yīng)32次執(zhí)行使用,以計(jì)算這32個(gè)相對(duì)應(yīng)時(shí)間步驟的輸出層節(jié)點(diǎn)Y并將其寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122,并提供地址10的指令的相對(duì)應(yīng)32次執(zhí)行使用,以將這32個(gè)相對(duì)應(yīng)時(shí)間步驟的內(nèi)容層節(jié)點(diǎn)C放入輸出緩沖器1104。(放入輸出緩沖器1104中第32個(gè)時(shí)間步驟的內(nèi)容層節(jié)點(diǎn)C并不會(huì)被使用。)在地址2與3的指令(ADD_D_ACCOUTBUF[SELF]與ADD_D_ACCROTATE,COUNT=511)的第一次執(zhí)行中,512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)將輸出緩沖器1104的512個(gè)內(nèi)容節(jié)點(diǎn)C值累加至其累加器202,這些內(nèi)容節(jié)點(diǎn)C值由地址0至1的指令執(zhí)行所產(chǎn)生與寫(xiě)入。在地址2與3的指令的第二次執(zhí)行中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)將輸出緩沖器1104的512個(gè)內(nèi)容節(jié)點(diǎn)C值累加至其累加器202,這些內(nèi)容節(jié)點(diǎn)C值由地址7至8與10的指令執(zhí)行所產(chǎn)生與寫(xiě)入。更精確地說(shuō),地址2的指令會(huì)指示各個(gè)神經(jīng)處理單元126的多任務(wù)緩存器208選擇其相對(duì)應(yīng)輸出緩沖器1104文字,如前所述,并將其加入累加器202;地址3的指令會(huì)指示神經(jīng)處理單元126在512個(gè)文字的旋轉(zhuǎn)器內(nèi)旋轉(zhuǎn)內(nèi)容節(jié)點(diǎn)C值,此512個(gè)文字的旋轉(zhuǎn)器由這512個(gè)神經(jīng)處理單元中相連接的多任務(wù)緩存器208的集體運(yùn)作所構(gòu)成,而使各個(gè)神經(jīng)處理單元126可以將這512個(gè)內(nèi)容節(jié)點(diǎn)C值累加至其累加器202。地址3的指令并不會(huì)清除累加器202,如此地址4與5的指令即可將輸入層節(jié)點(diǎn)D值(乘上其相對(duì)應(yīng)權(quán)重)加上由地址2與3的指令累加出的內(nèi)容層節(jié)點(diǎn)C值。在地址4與5的指令(MULT-ACCUMDRROW+2,WRROW0與MULT-ACCUMROTATE,WRROW+1,COUNT=511)的各次執(zhí)行中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512次乘法運(yùn)算,將數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中關(guān)聯(lián)于當(dāng)前時(shí)間步驟的列(例如:對(duì)于時(shí)間步驟0而言即為列0,對(duì)于時(shí)間步驟1而言即為列2,依此類(lèi)推,對(duì)于對(duì)于時(shí)間步驟31而言即為列62)的512個(gè)輸入節(jié)點(diǎn)D值,乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列0至511中對(duì)應(yīng)于此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積,而連同這地址2與3的指令對(duì)于這512個(gè)內(nèi)容節(jié)點(diǎn)C值執(zhí)行的累加結(jié)果,一并累加至相對(duì)應(yīng)神經(jīng)處理單元126的累加器202以計(jì)算隱藏節(jié)點(diǎn)Z層數(shù)值。在地址6的指令(OUTPUTPASSTHRU,NOP,CLRACC)的各次執(zhí)行中,這512個(gè)神經(jīng)處理單元126的512個(gè)累加器202數(shù)值傳遞并寫(xiě)入輸出緩沖器1104的相對(duì)應(yīng)文字,并且累加器202會(huì)被清除。在地址7與8的指令(MULT-ACCUMOUTBUF[SELF],WRROW512與MULT-ACCUMROTATE,WRROW+1,COUNT=511)的執(zhí)行過(guò)程中,這512個(gè)神經(jīng)處理單元126中的各個(gè)神經(jīng)處理單元126會(huì)執(zhí)行512次乘法運(yùn)算,將輸出緩沖器1104中的512個(gè)隱藏節(jié)點(diǎn)Z值(由地址2至6的指令的相對(duì)應(yīng)次執(zhí)行所產(chǎn)生并寫(xiě)入),乘上權(quán)重隨機(jī)存取存儲(chǔ)器124的列512至1023中對(duì)應(yīng)于此神經(jīng)處理單元126的行的權(quán)重,以產(chǎn)生512個(gè)乘積累加至相對(duì)應(yīng)神經(jīng)處理單元126的累加器202。在地址9的指令(OUTPUTACTIVATIONFUNCTION,DROUTROW+2)的各次執(zhí)行中,會(huì)對(duì)于這512個(gè)累加值執(zhí)行啟動(dòng)函數(shù)(如雙曲正切函數(shù),S型函數(shù),校正函數(shù))以計(jì)算輸出節(jié)點(diǎn)Y值,此輸出節(jié)點(diǎn)Y值會(huì)被寫(xiě)入數(shù)據(jù)隨機(jī)存取存儲(chǔ)器122中對(duì)應(yīng)于當(dāng)前時(shí)間步驟的列(例如:對(duì)于時(shí)間步驟0而言即為列1,對(duì)于時(shí)間步驟1而言即為列3,依此類(lèi)推,對(duì)于時(shí)間步驟31而言即為列63)。地址9的指令并不會(huì)清除累加器202。在地址10的指令(OUTPUTPASSTHRU,NOP,CLRACC)的各次執(zhí)行中,地址7與8的指令累加出的512個(gè)數(shù)值會(huì)被放入輸出緩沖器1104供地址2與3的指令的下一次執(zhí)行使用,并且累加器202會(huì)被清除。地址11的循環(huán)指令會(huì)使循環(huán)計(jì)數(shù)器3804的數(shù)值遞減,而若是新的循環(huán)計(jì)數(shù)器3804數(shù)值仍然大于零,就指示回到地址2的指令。如同對(duì)應(yīng)于圖44的章節(jié)所述,在利用圖57的非架構(gòu)程序執(zhí)行Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的范例中,雖然會(huì)對(duì)于累加器202數(shù)值施以啟動(dòng)函數(shù)以產(chǎn)生輸出層節(jié)點(diǎn)Y值,不過(guò),此范例假定在施以啟動(dòng)函數(shù)前,累加器202數(shù)值就傳遞至內(nèi)容層節(jié)點(diǎn)C,而非傳遞真正的輸出層節(jié)點(diǎn)Y值。不過(guò),對(duì)于將啟動(dòng)函數(shù)施加于累加器202數(shù)值以產(chǎn)生內(nèi)容層節(jié)點(diǎn)C的Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)而言,地址10的指令將會(huì)從圖57的非架構(gòu)程序中移除。在本文所述的實(shí)施例中,Elman或Jordan時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)具有單一個(gè)隱藏節(jié)點(diǎn)層(如圖40與圖42),不過(guò),需要理解的是,這些處理器100與神經(jīng)網(wǎng)絡(luò)單元121的實(shí)施例可以使用類(lèi)似于本文所述的方式,有效地執(zhí)行關(guān)聯(lián)于具有多個(gè)隱藏層的時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算。如前文對(duì)應(yīng)于圖2的章節(jié)所述,各個(gè)神經(jīng)處理單元126作為一個(gè)人工神經(jīng)網(wǎng)絡(luò)內(nèi)的神經(jīng)元進(jìn)行運(yùn)作,而神經(jīng)網(wǎng)絡(luò)單元121內(nèi)所有的神經(jīng)處理單元126會(huì)以大規(guī)模平行處理的方式有效地計(jì)算此網(wǎng)絡(luò)的一層級(jí)的神經(jīng)元輸出值。此神經(jīng)網(wǎng)絡(luò)單元的平行處理方式,特別是使用神經(jīng)處理單元多任務(wù)緩存器集體構(gòu)成的旋轉(zhuǎn)器,并非傳統(tǒng)上計(jì)算神經(jīng)元層輸出的方式所能直覺(jué)想到。進(jìn)一步來(lái)說(shuō),傳統(tǒng)方式通常涉及關(guān)聯(lián)于單一個(gè)神經(jīng)元或是一個(gè)非常小的神經(jīng)元子集合的計(jì)算(例如,使用平行算術(shù)單元執(zhí)行乘法與加法計(jì)算),然后就繼續(xù)執(zhí)行關(guān)聯(lián)于同一層級(jí)的下一個(gè)神經(jīng)元的計(jì)算,依此類(lèi)推以序列方式繼續(xù)執(zhí)行,直到完成對(duì)于此層級(jí)中所有的神經(jīng)元的計(jì)算。相較之下,本發(fā)明在各個(gè)時(shí)頻周期內(nèi),神經(jīng)網(wǎng)絡(luò)單元121的所有神經(jīng)處理單元126(神經(jīng)元)會(huì)平行執(zhí)行關(guān)聯(lián)于產(chǎn)生所有神經(jīng)元輸出所需計(jì)算中的一個(gè)小集合(例如單一個(gè)乘法與累加計(jì)算)。在大約M個(gè)時(shí)頻周期結(jié)束后-M是當(dāng)前層級(jí)內(nèi)連結(jié)的節(jié)點(diǎn)數(shù)-神經(jīng)網(wǎng)絡(luò)單元121就會(huì)計(jì)算出所有神經(jīng)元的輸出。在許多人工神經(jīng)網(wǎng)絡(luò)配置中,因?yàn)榇嬖诖罅可窠?jīng)處理單元126,神經(jīng)網(wǎng)絡(luò)單元121就可以在M個(gè)時(shí)頻周期結(jié)束時(shí)對(duì)于整層級(jí)的所有神經(jīng)元計(jì)算其神經(jīng)元輸出值。如本文所述,此計(jì)算對(duì)于所有類(lèi)型的人工神經(jīng)網(wǎng)絡(luò)計(jì)算而言都具效率,這些人工神經(jīng)網(wǎng)絡(luò)包含但不限于前饋與時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),如Elman,Jordan與長(zhǎng)短期記憶網(wǎng)絡(luò)。最后,雖然本文的實(shí)施例中,神經(jīng)網(wǎng)絡(luò)單元121配置為512個(gè)神經(jīng)處理單元126(例如采取寬文字配置)以執(zhí)行時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)的計(jì)算,不過(guò),本發(fā)明并不限于此,將神經(jīng)網(wǎng)絡(luò)單元121配置為1024個(gè)神經(jīng)處理單元126(例如采取窄文字配置)以執(zhí)行時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)單元的計(jì)算的實(shí)施例,以及如前述具有512與1024以外其它數(shù)量的神經(jīng)處理單元126的神經(jīng)網(wǎng)絡(luò)單元121,也屬本發(fā)明的范疇。惟以上所述者,僅為本發(fā)明的較佳實(shí)施例而已,當(dāng)不能以此限定本發(fā)明實(shí)施的范圍,即大凡依本發(fā)明申請(qǐng)專(zhuān)利范圍及發(fā)明說(shuō)明內(nèi)容所作的簡(jiǎn)單的等效變化與修飾,皆仍屬本發(fā)明專(zhuān)利涵蓋的范圍內(nèi)。舉例來(lái)說(shuō),軟件可以執(zhí)行本發(fā)明所述的裝置與方法的功能、制造、形塑、仿真、描述以及/或測(cè)試等。這可由一般的程序語(yǔ)言(如C、C++)、硬件描述語(yǔ)言(HDL)包含VerilogHDL,VHDL等,或是其它既有程序來(lái)達(dá)成。此軟件可以設(shè)置于任何已知的計(jì)算機(jī)可利用媒介,如磁帶、半導(dǎo)體、磁盤(pán)、光盤(pán)(如CD-ROM、DVD-ROM等)、網(wǎng)絡(luò)接線、無(wú)線或是其它通訊媒介。此處描述的裝置與方法的實(shí)施例可被包含于半導(dǎo)體智財(cái)核心,例如微處理核心(如以硬件描述語(yǔ)言的實(shí)施方式)并且透過(guò)集成電路的制作轉(zhuǎn)換為硬件。此外,本文所描述的裝置與方法也可包含硬件與軟件的結(jié)合。因此,本文所述的任何實(shí)施例,并非用以限定本發(fā)明的范圍。此外,本發(fā)明可應(yīng)用于一般通用計(jì)算機(jī)的微處理器裝置。最后,所屬
技術(shù)領(lǐng)域:
:具有通常知識(shí)者利用本發(fā)明所揭露的觀念與實(shí)施例作為基礎(chǔ),來(lái)設(shè)計(jì)并調(diào)整出不同的結(jié)構(gòu)已達(dá)成相同的目的,也不超出本發(fā)明的范圍。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3