TWI667612B - 裝置與運作裝置之方法 - Google Patents

裝置與運作裝置之方法 Download PDF

Info

Publication number
TWI667612B
TWI667612B TW106140991A TW106140991A TWI667612B TW I667612 B TWI667612 B TW I667612B TW 106140991 A TW106140991 A TW 106140991A TW 106140991 A TW106140991 A TW 106140991A TW I667612 B TWI667612 B TW I667612B
Authority
TW
Taiwan
Prior art keywords
processing unit
register
data
output
random access
Prior art date
Application number
TW106140991A
Other languages
English (en)
Other versions
TW201826115A (zh
Inventor
G 葛蘭 亨利
金C 霍克
帕爾維茲 帕朗查爾
Original Assignee
大陸商上海兆芯集成電路有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 大陸商上海兆芯集成電路有限公司 filed Critical 大陸商上海兆芯集成電路有限公司
Publication of TW201826115A publication Critical patent/TW201826115A/zh
Application granted granted Critical
Publication of TWI667612B publication Critical patent/TWI667612B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

第一/第二記憶體係裝載由N個權重/資料文字構成之列。N個處理單元中之處理單元J包含一暫存器,一累加器,一算術單元與一多工邏輯。累加器具有一輸出。算術單元執行運算以產生結果,其第一輸入接收累加器之輸出,第二輸入接收第一記憶體輸出之相對應權重文字,第三輸入接收暫存器輸出之相對應資料文字。多工邏輯接收第二記憶體之相對應資料文字以及處理單元J-1之暫存器之資料文字,並輸出選定資料文字至該暫存器。對處理單元0而言,處理單元J-1是處理單元N-1。處理單元N/4與3N/4之多工邏輯分別接收處理單元(3N/4)-1與(N/4)-1之暫存器輸出之資料文字。

Description

裝置與運作裝置之方法
本申請案係關聯於下列美國非臨時申請案。這些關聯申請案之全文併入本案以供參考。
前述各個美國非臨時申請案係主張下列美國臨時申請案之優先權。這些臨時申請案之全文係併入本案以供參考。
本申請案亦關聯於下列美國非臨時申請案。這些關聯申請案之全文併入本案以供參考。
本申請案亦關聯於下列美國非臨時申請案。這些關聯申請案之全文併入本案以供參考。
近年來,人工神經網路(artificial neural networks,ANN)重新吸引了人們的注意。這些研究通常被稱為深度學習(deep learning)、電腦學習(computer learning)等類似術語。通用處理器運算能力的提升也推升了人們在數十年後的現在對於人工神經網路的興趣。人工神經網路近期的應用包括語言與影像辨識等。對於提升人工神經網路之運算效能與效率的需求似乎正在增加。
有鑑於此,本發明提供一種裝置。 此裝置包含一第一記憶體,一第二記憶體,與一個由N個處理單元構成之陣列。第一記憶體 係裝載多個由N個權重文字構成之列,其中N至少是512。第二記憶體,裝載多個由N個資料文字構成之列。N個處理單元係賦予0至N-1之索引。索引J之處理單元包含一暫存器,一累加器,一算術單元與一多工邏輯。累加器具有一輸出。算術單元具有第一,第二與第三輸入,並執行一運算以產生一結果儲存於該累加器,該第一輸入接收該累加器之該輸出,該第二輸入接收該第一記憶體輸出之一相對應權重文字,該第三輸入接收該暫存器輸出之一相對應資料文字。多工邏輯接收該第二記憶體輸出之一相對應資料文字,接收處理單元J-1之該暫存器輸出之一資料文字,並輸出一選定資料文字至該暫存器。其中,對於處理單元0而言,處理單元J-1是處理單元N-1。其中,處理單元N/4之該多工邏輯並接收處理單元(3N/4)-1之該暫存器輸出之該資料文字,並且,處理單元3N/4之該多工邏輯並接收處理單元(N/4)-1之該暫存器輸出之該資料文字。
本發明並提供一種運作一裝置之方法。此裝置具有一第一記憶體,一第二記憶體,以及一個由N個處理單元構成之陣列,其中,該第一記憶體裝載多個由N個權重文字構成之列,其中N至少是512,該第二記憶體裝載多個由N個資料文字構成之列,該N個處理單元 係賦予0至N-1之索引,其中,索引J之處理單元具有一暫存器,一累加器,一算術單元與一多工邏輯,其中,該累加器具有一輸出,該算術單元具有第一,第二與第三輸入,並執行一運算以產生一結果儲存於該累加器,該第一輸入接收該累加器之該輸出,該第二輸入接收該第一記憶體輸出之一相對應權重文字,該第三輸入接收該暫存器輸出之一相對應資料文字,該多工邏輯係接收該第二記憶體輸出之一相對應資料文字,接收處理單元J-1之該暫存器輸出之一資料文字,並輸出一選定資料文字至該暫存器,其中,對於處理單元0而言,處理單元J-1是處理單元N-1,其中,處理單元N/4之該多工邏輯並接收處理單元(3N/4)-1之該暫存器輸出之該資料文字,並且,處理單元3N/4之該多工邏輯並接收處理單元(N/4)-1之該暫存器輸出之該資料文字。此方法包含:在一第一模式下,利用處理單元N/4之該多工邏輯,選擇處理單元(3N/4)-1之該暫存器輸出之該資料文字;利用處理單元3N/4之該多工邏輯,選擇處理單元(N/4)-1之該暫存器輸出之該資料文字;並且利用剩下的處理單元之該多工邏輯,選擇處理單元J-1之該暫存器輸出之該資料文字。
本發明並提供一種裝置。此裝置包含一第一記憶體,一第二記憶體,與一個由N 個處理單元構成之陣列。第一記憶體係裝載多個由N個權重文字構成之列,其中N至少是512。第二記憶體,裝載多個由N個資料文字構成之列。N個處理單元係賦予0至N-1之索引。 索引J之處理單元包含一暫存器,一累加器,一算術單元與一多工邏輯。累加器具有一輸出。 算術單元具有第一,第二與第三輸入,並執行一運算以產生一結果儲存於該累加器,該第一輸入接收該累加器之該輸出,該第二輸入接收該第一記憶體輸出之一相對應權重文字,該第三輸入接收該暫存器輸出之一相對應資料文字。多工邏輯接收該第二記憶體輸出之一相對應資料文字,接收處理單元J-1之該暫存器輸出之一資料文字,並輸出一選定資料文字至該暫存器。其中,對於處理單元0而言,處理單元J-1是處理單元N-1。其中,其中,處理單元K之該多工邏輯並接收處理單元K+N/2-1之該暫存器輸出之該資料文字,其中,K係介於0與N/2-1之間,處理單元L之該多工邏輯並接收處理單元L-N/2-1之該暫存器輸出之該資料文字,其中,L係介於N/2與N-1之間,並且,L=K+N/2。
本發明所採用的具體實施例,將藉由以下之實施例及圖式作進一步之說明。
100‧‧‧處理器
101‧‧‧指令攫取單元
102‧‧‧指令快取
103‧‧‧架構指令
104‧‧‧指令轉譯器
105‧‧‧微指令
106‧‧‧重命名單元
108‧‧‧保留站
112‧‧‧其他執行單元
114‧‧‧記憶體子系統
116‧‧‧通用暫存器
118‧‧‧媒體暫存器
121‧‧‧神經網路單元
122‧‧‧資料隨機存取記憶體
124‧‧‧權重隨機存取記憶體
126‧‧‧神經處理單元
127‧‧‧控制與狀態暫存器
128‧‧‧定序器
129‧‧‧程式記憶體
123,125,131‧‧‧記憶體位址
133,215,133A,133B,215A,215B‧‧‧結果
202‧‧‧累加器
204‧‧‧算術邏輯單元
203,209,217,203A,203B,209A,209B,217A,217B‧‧‧輸出
205,205A,205B‧‧‧暫存器
206,207,211,1811,206A,206B,207A,207B,211A,211B,1811A,1811B,711‧‧‧輸入
208,705,208A,208B‧‧‧多工暫存器
213,713,803‧‧‧控制輸入
212‧‧‧啟動函數單元
242‧‧‧乘法器
244‧‧‧加法器
246,246A,246B‧‧‧乘積
802‧‧‧多工器
1104‧‧‧列緩衝器
1112‧‧‧啟動函數單元
1400‧‧‧MTNN指令
1500‧‧‧MFNN指令
1432,1532‧‧‧函數
1402,1502‧‧‧執行碼欄位
1404‧‧‧src1欄位
1406‧‧‧src2欄位
1408,1508‧‧‧gpr欄位
1412,1512‧‧‧立即欄位
1422,1522‧‧‧位址
1424,1426,1524‧‧‧資料塊
1428,1528‧‧‧選定列
1434‧‧‧控制邏輯
1504‧‧‧dst欄位
1602‧‧‧讀取埠
1604‧‧‧寫入埠
1606‧‧‧記憶體陣列
1702‧‧‧埠
1704‧‧‧緩衝器
1898‧‧‧運算元選擇邏輯
1896A‧‧‧寬多工器
1896B‧‧‧窄多工器
242A‧‧‧寬乘法器
242B‧‧‧窄乘法器
244A‧‧‧寬加法器
244B‧‧‧窄加法器
204A‧‧‧寬算術邏輯單元
204B‧‧‧窄算術邏輯單元
202A‧‧‧寬累加器
202B‧‧‧窄累加器
212A‧‧‧寬啟動函數單元
212B‧‧‧窄啟動函數單元
2402‧‧‧卷積核
2404‧‧‧資料陣列
2406A,2406B‧‧‧資料矩陣
2602,2604,2606,2608,2902,2912,2914,2922,2924,2926,2932,2934,2942,2944,2952,2954,2956,2923,2962,2964‧‧‧欄位
3003‧‧‧隨機位元來源
3005‧‧‧隨機位元
3002‧‧‧正類型轉換器與輸出二維點對準器
3004‧‧‧捨入器
3006‧‧‧多工器
3008‧‧‧標準尺寸壓縮器與飽
和器
3012‧‧‧位元選擇與飽和器
3018‧‧‧校正器
3014‧‧‧倒數乘法器
3016‧‧‧向右移位器
3028‧‧‧標準尺寸傳遞值
3022‧‧‧雙曲正切模組
3024‧‧‧S型模組
3026‧‧‧軟加模組
3032‧‧‧多工器
3034‧‧‧符號恢復器
3036‧‧‧尺寸轉換器與飽和器
3037‧‧‧多工器
3038‧‧‧輸出暫存器
3402‧‧‧多工器
3401‧‧‧神經處理單元管線級
3404‧‧‧解碼器
3412,3414,3418‧‧‧微運算
3416‧‧‧微指令
3422‧‧‧模式指標
3502‧‧‧時頻產生邏輯
3504‧‧‧時頻降低邏輯
3514‧‧‧介面邏輯
3522‧‧‧資料隨機存取記憶體
緩衝
3524‧‧‧權重隨機存取記憶體
緩衝
3512‧‧‧緩和指標
3802‧‧‧程式計數器
3804‧‧‧迴圈計數器
3806‧‧‧執行次數計數器
3912,3914,3916‧‧‧欄位
4901‧‧‧神經處理單元群組
4903‧‧‧遮罩
4905,4907,5599‧‧‧輸入
5800‧‧‧神經網路
5802‧‧‧輸入
5804‧‧‧濾波器
5808‧‧‧輸出
5900‧‧‧裝置
5902‧‧‧輸入方塊
5904‧‧‧濾波器方塊
5906‧‧‧神經處理單元方塊
5908‧‧‧輸出方塊
6000,6300,6500,6700,6900‧‧‧虛擬程式碼
6101‧‧‧輸入方塊群組
6102‧‧‧濾波器方塊群組
6104‧‧‧間隙濾波器方塊群組
6209‧‧‧濾波器方塊群組之縱
向部分
6215‧‧‧輸入方塊群組之縱向
部分
6401‧‧‧輸入方塊群組之配置
6402‧‧‧濾波器方塊群組之配置
6602‧‧‧濾波器方塊群組之配置
6802‧‧‧濾波器方塊群組之配置
720X,721X,7202,7204,7206,7212‧‧‧額外輸入
7399‧‧‧控制邏輯
7602‧‧‧寫入多工器
7604‧‧‧輸出
7606,713‧‧‧控制信號
7497‧‧‧額外位元
7498‧‧‧額外位元
第一圖係顯示一包含一神經網路單元(neural network unit,NNU)之處理器之方塊示意圖。
第二圖係顯示第一圖之一神經處理單元(neural processing unit,NPU)之方塊示意圖。
第三圖係一方塊圖,顯示利用第一圖之神經網路單元之N個神經處理單元之N個多工暫存器,對於由第一圖之資料隨機存取記憶體取得之一列資料文字執行如同一N個文字之旋轉器(rotator)或循環移位器(circular shifter)之運作。
第四圖係一表格,顯示一個儲存於第一圖之神經網路單元之程式記憶體並由該神經網路單元執行之程式。
第五圖係顯示神經網路單元執行第四圖之程式之時序圖。
第六A圖係顯示第一圖之神經網路單元執行第四圖之程式之方塊示意圖。
第六B圖係一流程圖,顯示第一圖之處理器執行一架構程式,以利用神經網路單元執行關聯於一人工神經網路之隱藏層之神經元之典型乘法累加啟動函數運算之運作,如同由第四圖之程式執行之運作。
第七圖係顯示第一圖之神經處理單元之另一實施例之方塊示意圖。
第八圖係顯示第一圖之神經處理單元之又一實施例之方塊示意圖。
第九圖係一表格,顯示一個儲存於第一圖之神經網路單元之程式記憶體並由該神經網路單元執行之程式。
第十圖係顯示神經網路單元執行第九圖之程式之時序圖。
第十一圖係顯示第一圖之神經網路單元之一實施例之方塊示意圖。在第十一圖之實施例中,一個神經元係分成兩部分,即啟動函數單元部分與算術邏輯單元部分(此部分並包含移位暫存器部分),而各個啟動函數單元部分係由多個算術邏輯單元部分共享。
第十二圖係顯示第十一圖之神經網路單元執行第四圖之程式之時序圖。
第十三圖係顯示第十一圖之神經網路單元執行第四圖之程式之時序圖。
第十四圖係一方塊示意圖,顯示一移動至神經網路(MTNN)架構指令以及其對應於第一圖之神經網路單元之部分之運作。
第十五圖係一方塊示意圖,顯示一移動至神經網路(MTNN)架構指令以及其對應於第一圖之神經網路單元之部分之運作。
第十六圖係顯示第一圖之資料隨機存取記憶體之一實施例之方塊示意圖。
第十七圖係顯示第一圖之權重隨機存取記憶體與一緩衝器之一實施例之方塊示意圖。
第十八圖係顯示第一圖之一可動態配置之神經處理單元之方塊示意圖。
第十九圖係一方塊示意圖,顯示依據第十八圖之實施例,利用第一圖之神經網路單元之N個神經處理單元之2N個多工暫存器,對於由第一圖之資料隨機存取記憶體取得之一列資料文字執行如同一旋轉器(rotator)之運作。
第二十圖係一表格,顯示一個儲存於第一圖之神經網路單元之程式記憶體並由該神經網路單元執行之程式,而此神經網路單元具有如第十八圖之實施例所示之神經處理單元。
第二十一圖係顯示一神經網路單元執行第二十圖之程式之時序圖,此神經網路單元具有如第十八圖所示之神經處理單元執行於窄配置。
第二十二圖係顯示第一圖之神經網路單元之方塊示意圖,此神經網路單元具有如第十八圖所示之神經處理單元以執行第二十圖之程式。
第二十三圖係顯示第一圖之一可動態配置之神經處理單元之另一實施例之方塊示意圖。
第二十四圖係一方塊示意圖,顯示由第一圖之神經網路單元使用以執行一卷積(convolution)運作之資料結構之一範例。
第二十五圖係一流程圖,顯示第一圖之處理器 執行一架構程式以利用神經網路單元依據第二十四圖之資料陣列執行卷積核之卷積運算。
第二十六A圖係一神經網路單元程式之一程式列表,此神經網路單元程式係利用第二十四圖之卷積核心執行一資料矩陣之卷積運算並將其寫回權重隨機存取記憶體。
第二十六B圖係顯示第一圖之神經網路單元之控制暫存器之某些欄位之一實施例之方塊示意圖。
第二十七圖係一方塊示意圖,顯示第一圖中填入輸入資料之權重隨機存取記憶體之一範例,此輸入資料係由第一圖之神經網路單元執行共源運作(pooling operation)。
第二十八圖係一神經網路單元程式之一程式列表,此神經網路單元程式係執行第二十七圖之輸入資料矩陣之共源運作並將其寫回權重隨機存取記憶體。
第二十九A圖係顯示第一圖之控制暫存器之一實施例之方塊示意圖。
第二十九B圖係顯示第一圖之控制暫存器之另一實施例之方塊示意圖。
第二十九C圖係顯示以兩個部分儲存第二十九A圖之倒數(reciprocal)之一實施例之方塊示意圖。
第三十圖係顯示第二圖之啟動函數單元(AFU) 之一實施例之方塊示意圖。
第三十一圖係顯示第三十圖之啟動函數單元之運作之一範例。
第三十二圖係顯示第三十圖之啟動函數單元之運作之第二個範例。
第三十三圖係顯示第三十圖之啟動函數單元之運作之第三個範例。
第三十四圖係顯示第一圖之處理器以及神經網路單元之部分細節之方塊示意圖。
第三十五圖係一方塊圖,顯示具有一可變率神經網路單元之處理器。
第三十六A圖係一時序圖,顯示一具有神經網路單元之處理器運作於一般模式之一運作範例,此一般模式即以主要時頻率運作。
第三十六B圖係一時序圖,顯示一具有神經網路單元之處理器運作於緩和模式之一運作範例,緩和模式之運作時頻率低於主要時頻率。
第三十七圖係一流程圖,顯示第三十五圖之處理器之運作。
第三十八圖係一方塊圖,詳細顯示神經網路單元之序列。
第三十九圖係一方塊圖,顯示神經網路單元之控制與狀態暫存器之某些欄位。
第四十圖係一方塊圖,顯示Elman時間遞歸神經網路(recurrent neural network,RNN)之一範 例。
第四十一圖係一方塊圖,顯示當神經網路單元執行關聯於第四十圖之Elman時間遞歸神經網路之計算時,神經網路單元之資料隨機存取記憶體與權重隨機存取記憶體內之資料配置之一範例。
第四十二圖係一表格,顯示儲存於神經網路單元之程式記憶體之一程式,此程式係由神經網路單元執行,並依據第四十一圖之配置使用資料與權重,以達成Elman時間遞歸神經網路第四十三圖係一方塊圖顯示Jordan時間遞歸神經網路之一範例。
第四十四圖係一方塊圖,顯示當神經網路單元執行關聯於第四十三圖之Jordan時間遞歸神經網路之計算時,神經網路單元之資料隨機存取記憶體與權重隨機存取記憶體內之資料配置之一範例。
第四十五圖係一表格,顯示儲存於神經網路單元之程式記憶體之一程式,此程式係由神經網路單元執行,並依據第四十四圖之配置使用資料與權重,以達成Jordan時間遞歸神經網路。
第四十六圖係一方塊圖,顯示長短期記憶(long short term memory,LSTM)胞之一實施例。
第四十七圖係一方塊圖,顯示當神經網路單元執行關聯於第四十六圖之長短期記憶胞層之計 算時,神經網路單元之資料隨機存取記憶體與權重隨機存取記憶體內之資料配置之一範例。
第四十八圖係一表格,顯示儲存於神經網路單元之程式記憶體之一程式,此程式係由神經網路單元執行並依據第四十七圖之配置使用資料與權重,以達成關聯於長短期記憶胞層之計算。
第四十九圖係一方塊圖,顯示一神經網路單元之實施例,此實施例之神經處理單元群組內具有輸出緩衝遮蔽與反饋能力。
第五十圖係一方塊圖,顯示當神經網路單元執行關聯於第四十六圖之長短期記憶胞層之計算時,第四十九圖之神經網路單元之資料隨機存取記憶體,權重隨機存取記憶體與輸出緩衝器內之資料配置之一範例。
第五十一圖係一表格,顯示儲存於神經網路單元之程式記憶體之一程式,此程式係由第四十九圖之神經網路單元執行並依據第五十圖之配置使用資料與權重,以達成關聯於長短期記憶胞層之計算。
第五十二圖係一方塊圖,顯示一神經網路單元之實施例,此實施例之神經處理單元群組內具有輸出緩衝遮蔽與反饋能力,並且共享啟動函數單元。
第五十三圖係一方塊圖,顯示當神經網路單元執行關聯於第四十六圖之長短期記憶胞層之計 算時,第四十九圖之神經網路單元之資料隨機存取記憶體,權重隨機存取記憶體與輸出緩衝器內之資料配置之另一實施例。
第五十四圖係一表格,顯示儲存於神經網路單元之程式記憶體之一程式,此程式係由第四十九圖之神經網路單元執行並依據第五十三圖之配置使用資料與權重,以達成關聯於長短期記憶胞層之計算。
第五十五圖係一方塊圖,顯示本發明另一實施例之部分神經處理單元。
第五十六圖係一方塊圖,顯示當神經網路單元執行關聯於第四十三圖之Jordan時間遞歸神經網路之計算並利用第五十五圖之實施例時,神經網路單元之資料隨機存取記憶體與權重隨機存取記憶體內之資料配置之一範例。
第五十七圖係一表格,顯示儲存於神經網路單元之程式記憶體之一程式,此程式係由神經網路單元執行並依據第五十六圖之配置使用資料與權重,以達成Jordan時間遞歸神經網路。
第五十八圖係一方塊圖,顯示一三維卷積運算任務,例如一卷積神經網路經常執行之三維卷積運算任務。
第五十九圖係一方塊圖,顯示將一資料隨機存取記憶體列分割為多個輸入方塊,將一權重隨機存取記憶體列分割為多個濾波器方塊,將神 經處理單元陣列分割為多個神經處理單元方塊,以及將一資料隨機存取記憶體列分割為多個輸出方塊。
第六十圖係一虛擬程式碼(pseudocode),描述一非架構程式在神經網路單元上執行如第五十八圖所示之三維卷積任務時,所執行之運算。
第六十一A與六十一B圖,整體稱為第六十一圖,係一方塊圖,顯示本發明對一12x12x20之輸入,利用50個5x5之濾波器執行卷積運算,以產生50個8x8之輸出之一實施例中,資料隨機存取記憶體內之輸入方塊群組(group)之配置以及權重隨機存取記憶體內之濾波器方塊群組之配置。
第六十二圖係一方塊圖,顯示第六十一圖之一輸入方塊群組I[c];一個5x5之濾波器f的縱向部分以及一個通道c;第六十一圖之一濾波器方塊群組F[f,c];以及第五十九圖之一輸出方塊。
第六十三圖係一虛擬程式碼(pseudocode),描述一非架構程式,在一具有N=1024個神經處理單元之神經網路單元上,搭配第六十一圖之資料隨機存取記憶體與權重隨機存取記憶體之配置,對一12x12x20之輸入,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出,所執行之運算。
第六十四A與六十四B圖,整體稱為第六十四 圖,係一方塊圖,顯示本發明對一12x12x20之輸入,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出,而不包含間隙輸入/濾波器方塊群組之另一實施例中,資料隨機存取記憶體內之輸入方塊群組之配置以及權重隨機存取記憶體內之濾波器方塊群組之配置。
第六十五圖係一虛擬程式碼,描述一非架構程式,在一具有N=2048個神經處理單元之神經網路單元上,搭配第六十四圖之資料隨機存取記憶體與權重隨機存取記憶體之配置,對一12x12x20之輸入方塊,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出方塊,所執行之運算。
第六十六A與六十六B圖,整體稱為第六十六圖,係一方塊圖,顯示本發明對一12x12x20之輸入,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出之另一實施例中,權重隨機存取記憶體內之濾波器方塊群組之配置。
第六十七圖係一虛擬程式碼,描述一非架構程式,在一具有N=1024個神經處理單元之神經網路單元上,搭配第六十一圖之資料隨機存取記憶體與第六十六圖之權重隨機存取記憶體之配置,對一12x12x20之輸入方塊,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出方塊,所執行之運算。
第六十八A與六十八B圖,整體稱為第六十八圖,係一方塊圖,顯示本發明對一12x12x20之輸入,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出,而不包含間隙輸入/濾波器方塊群組之另一實施例中,權重隨機存取記憶體內之濾波器方塊群組之配置。
第六十九圖係一虛擬程式碼,描述一非架構程式,在一具有N=2048個神經處理單元之神經網路單元上,搭配第六十四圖之資料隨機存取記憶體與第六十八圖之權重隨機存取記憶體之配置,對一12x12x20之輸入方塊,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出方塊,所執行之運算。
第七十圖係一方塊圖,顯示本發明另一個支援多文字距離轉動運算之實施例之神經處理單元之一部分。
第七十一圖係顯示四個指令,描述神經網路單元之多文字距離轉動特性,此神經網路單元包含多個具有如第七十圖所示之多工暫存器之神經處理單元。
第七十二圖係一方塊圖,顯示第一圖之一神經處理單元。
第七十三圖係一方塊圖,顯示神經網路單元執行運算所處於之一普通模式。
第七十四圖係一方塊圖,顯示神經網路單元執 行運算可處於之一窄高(narrow-tall)模式。
第七十五圖係一方塊圖,詳述第七十二圖之資料多工暫存器與權重多工暫存器,藉以在普通模式之外,還能支援第七十四圖之窄高模式。
第七十六圖係一方塊圖,顯示一寫入多工器,藉以在普通模式之外,還能支援第七十四圖之窄高模式。
第七十七圖係一方塊圖,顯示神經網路單元執行運算可處於之一分割旋轉器(split-rotator)模式。
第七十八圖係一方塊圖,詳述神經處理單元0與神經處理單元N/2內之第七十二圖之資料多工暫存器,以及神經處理單元J之一普通(generic)資料多工暫存器,藉以在普通模式外,還能支援第七十七圖之分割旋轉器模式。
第七十九圖係一方塊圖,顯示N=4096個神經處理單元之多工暫存器,耦接作為單一個4096文字之旋轉器以選擇性執行於普通模式,或做為兩個2048文字之旋轉器選擇性執行於分割旋轉器模式。
第八十圖係一方塊圖,顯示神經網路單元執行運算可處於之一第二分割旋轉器模式。
第八十一圖係一方塊圖,詳述神經處理單元0,神經處理單元N/4,神經處理單元N/2與神經處理單元3N/4內之第七十二圖之資料多工 暫存器,藉以在普通模式外,還能支援第七十七與八十圖所示之第一與第二分割旋轉器模式。
第八十二圖係一方塊圖,顯示N=4096個神經處理單元之多工暫存器,耦接作為單一個4096文字之旋轉器以選擇性執行於普通模式,或做為兩個2048文字之旋轉器選擇性執行於第一分割旋轉器模式,或做為四個1024文字之旋轉器選擇性執行於第二分割旋轉器模式。
第八十三圖係一方塊圖,顯示神經網路單元執行運算可處於之一混合模式。
第八十四圖係一方塊圖,詳述第七十二圖之資料多工暫存器與權重多工暫存器,藉以在普通模式外,還能支援第八十三圖所示之混合模式。
第八十五圖係一方塊圖,顯示神經網路單元執行運算可處於之一窄高半轉動(narrow-tall-half-rotate)模式。
第八十六圖係一方塊圖,詳述第七十二圖之資料多工暫存器與權重多工暫存器,藉以在普通模式外,還能支援第八十五圖所示之窄高半轉動模式。
第八十七圖係一方塊圖,顯示神經網路單元執行運算可處於之一分割旋轉器模式之另一實施例。
第八十八圖係一方塊圖,詳述神經處理單元N/4 與神經處理單元3N/4(即神經處理單元1024與神經處理單元3072)內之第七十二圖之資料多工暫存器,以及神經處理單元J之一普通資料多工暫存器,藉以在普通模式外,還能支援第八十七圖之交替分割旋轉器模式。
第八十九圖係一方塊圖,顯示N=4096個神經處理單元之多工暫存器,耦接作為單一個4096文字之旋轉器以選擇性執行於普通模式,或做為兩個2048文字之旋轉器選擇性執行於此交替分割旋轉器模式。
第九十圖係一方塊圖,顯示本發明一實施例之部分神經網路單元之實體配置。
第九十一圖係一方塊圖,顯示本發明另一實施例之部分神經網路單元之實體配置,此實施例係將神經處理單元陣列分裂為四個旋轉器。
具有架構神經網路單元之處理器
第一圖係顯示一包含一神經網路單元(neural network unit,NNU)121之處理器100之方塊示意圖。如圖中所示,此處理器100包含一指令攫取單元101,一指令快取102,一指令轉譯器104,一重命名單元106,多個保留站108,多個媒體暫存器118,多個通用暫存器116,前述神經網路單元121外之多個執行單元 112與一記憶體子系統114。
處理器100係一電子裝置,作為積體電路之中央處理單元。處理器100接收輸入的數位資料,依據由記憶體攫取之指令處理這些資料,並產生由指令指示之運算的處理結果作為其輸出。此處理器100可用於一桌上型電腦、行動裝置、或平板電腦,並用於計算、文字處理、多媒體顯示與網路瀏覽等應用。此處理器100並可設置於一嵌入系統內,以控制各種包括設備、行動電話、智能電話、車輛、與工業用控制器之裝置。中央處理器係透過對資料執行包括算術、邏輯與輸入/輸出等運算,以執行電腦程式(或稱為電腦應用程式或應用程式)指令之電子電路(即硬體)。積體電路係一組製作於一小型半導體材料,通常是矽,之電子電路。 積體電路也通常被用於表示晶片、微晶片或晶粒。
指令攫取單元101控制由系統記憶體(未圖示)攫取架構指令103至指令快取102之運作。指令攫取單元101提供一攫取位址至指令快取102,以指定處理器100攫取至指令快取102之架構指令位元組之快取列的記憶體位址。攫取位址之選定係基於處理器100之指令指標(未圖示)的當前值或程式計數器。一般而言,程式計數器會依照指令大小循序遞增,直 到指令串流中出現例如分支、呼叫或返回之控制指令,或是發生例如中斷、岔斷(trap)、例外或錯誤等例外條件,而需要以如分支目標位址、返回位址或例外向量等非循序位址更新程式計數器。總而言之,程式計數器會因應執行單元112/121執行指令而進行更新。程式計數器亦可在偵測到例外條件時進行更新,例如指令轉譯器104遭遇到未被定義於處理器100之指令集架構之指令103。
指令快取102係儲存攫取自一個耦接至處理器100之系統記憶體之架構指令103。 這些架構指令103包括一移動至神經網路(MTNN)指令與一由神經網路移出(MFNN)指令,詳如後述。在一實施例中,架構指令103是x86指令集架構之指令,並附加上MTNN指令與MFNN指令。在本揭露內容中,x86指令集架構處理器係理解為在執行相同機械語言指令之情況下,與Intel® 80386®處理器在指令集架構層產生相同結果之處理器。不過,其他指令集架構,例如,進階精簡指令集機器架構(ARM)、昇陽(SUN)之可擴充處理器架構(SPARC)、或是增強精簡指令集性能運算性能優化架構(PowerPC),亦可用於本發明之其他實施例。指令快取102提供架構指令103至指令轉譯器104,以將架構指令103轉譯為微指令105。
微指令105係提供至重命名單元106而最終由執行單元112/121執行。這些微指令105會實現架構指令。就一較佳實施例而言,指令轉譯器104包括一第一部分,用以將頻繁執行以及/或是相對較不複雜之架構指令103轉譯為微指令105。此指令轉譯器104並包括一第二部分,其具有一微碼單元(未圖示)。微碼單元具有一微碼記憶體裝載微碼指令,以執行架構指令集中複雜與/或少用的指令。微碼單元並包括一微定序器(microsequencer)提供一非架構微程式計數器(micro-PC)至微碼記憶體。就一較佳實施例而言,這些微指令係經由微轉譯器(未圖示)轉譯為微指令105。選擇器依據微碼單元當前是否具有控制權,選擇來自第一部分或第二部分之微指令105提供至重命名單元106。
重命名單元106會將架構指令103指定之架構暫存器重命名為處理器100之實體暫存器。就一較佳實施例而言,此處理器100包括一重排緩衝器(未圖示)。重命名單元106會依照程式順序將重排緩衝器之項目分配給各個微指令105。如此即可使處理器100依據程式順序撤除微指令105以及其相對應之架構指令103。在一實施例中,媒體暫存器118具有256位元寬度,而通用暫存器116具有64位元寬度。 在一實施例中,媒體暫存器118為x86媒體暫存器,例如先進向量擴充(AVX)暫存器。
在一實施例中,重排緩衝器之各個項目具有儲存空間以儲存微指令105之結果。此外,處理器100包括一架構暫存器檔案,此架構暫存器檔案具有一實體暫存器對應於各個架構暫存器,如媒體暫存器118、通用暫存器116以及其他架構暫存器。(就一較佳實施例而言,舉例來說,媒體暫存器118與通用暫存器116之大小不同,即可使用分開的暫存器檔案對應至這兩種暫存器。)對於微指令105中指定有一個架構暫存器之各個源運算元,重命名單元會利用寫入架構暫存器之舊有微指令105中最新一個微指令之重排緩衝器目錄,填入微指令105之源運算元欄位。當執行單元112/121完成微指令105之執行,執行單元112/121會將其結果寫入此微指令105之重排緩衝器項目。當微指令105撤除時,撤除單元(未圖示)會將來自此微指令之重排緩衝器欄位之結果寫入實體暫存器檔案之暫存器,此實體暫存器檔案係關聯於由此撤除微指令105所指定之架構目的暫存器。
在另一實施例中,處理器100包括一實體暫存器檔案,其具有之實體暫存器的數量多於架構暫存器的數量,不過,此處理器100不包括一架構暫存器檔案,而且重排緩衝器項 目內不包括結果儲存空間。(就一較佳實施例而言,因為媒體暫存器118與通用暫存器116之大小不同,即可使用分開的暫存器檔案對應至這兩種暫存器。)此處理器100並包括一指標表,其具有各個架構暫存器之相對應指標。對於微指令105內指定有架構暫存器之各個運算元,重命名單元會利用一個指向實體暫存器檔案內一自由暫存器之指標,填入微指令105內之目的運算元欄位。若是實體暫存器檔案內不存在自由暫存器,重命名單元106會暫時擱置管線。對於微指令105內指定有架構暫存器之各個源運算元,重命名單元會利用一個指向實體暫存器檔案中,指派給寫入架構暫存器之舊有微指令105中最新微指令之暫存器的指標,填入微指令105內之源運算元欄位。當執行單元112/121完成執行微指令105,執行單元112/121會將結果寫入實體暫存器檔案中微指令105之目的運算元欄位指向之一暫存器。當微指令105撤除時,撤除單元會將微指令105之目的運算元欄位值複製至關聯於此撤除微指令105指定之架構目的暫存器之指標表的指標。
保留站108會裝載微指令105,直到這些微指令完成發佈至執行單元112/121以供執行之準備。當一個微指令105之所有源運算元都可取用並且執行單元112/121也可用於執行 時,即為此微指令105完成發佈之準備。執行單元112/121係由重排緩衝器或前述第一實施例所述之架構暫存器檔案,或是由前述第二實施例所述之實體暫存器檔案接收暫存器源運算元。此外,執行單元112/121可直接透過結果傳送匯流排(未圖示)接收暫存器源運算元。此外,執行單元112/121可以從保留站108接收微指令105所指定之立即運算元。MTNN與MFNN架構指令103包括一立即運算元以指定神經網路單元121所要執行之功能,而此功能係由MTNN與MFNN架構指令103轉譯產生之一個或多個微指令105所提供,詳如後述。
執行單元112包括一個或多個載入/儲存單元(未圖示),由記憶體子系統114載入資料並且儲存資料至記憶體子系統114。就一較佳實施例而言,此記憶體子系統114包括一記憶體管理單元(未圖示),此記憶體管理單元可包括,例如多個轉譯查找(lookaside)緩衝器、一個表移動(tablewalk)單元、一個階層一資料快取(與指令快取102)、一個階層二統一快取與一個作為處理器100與系統記憶體間之介面的匯流排介面單元。在一實施例中,第一圖之處理器100係以一多核處理器之多個處理核心之其中之一來表示,而此多核處理器係共享一個最後階層快取記憶體。執行單元112並可包括多 個常值單元、多個媒體單元、多個浮點單元與一個分支單元。
神經網路單元121包括一權重隨機存取記憶體(RAM)124、一資料隨機存取記憶體122、N個神經處理單元(NPU)126、一個程式記憶體129、一個定序器128與多個控制與狀態暫存器127。這些神經處理單元126在概念上係如同神經網路中之神經元之功能。權重隨機存取記憶體124、資料隨機存取記憶體122與程式記憶體129均可透過MTNN與MFNN架構指令103分別寫入與讀取。權重隨機存取記憶體124係排列為W列,每列N個權重文字,資料隨機存取記憶體122係排列為D列,每列N個資料文字。各個資料文字與各個權重文字均為複數個位元,就一較佳實施例而言,可以是8個位元、9個位元、12個位元或16個位元。各個資料文字係作為網路中前一層之一神經元的輸出值(有時以啟動值表示),各個權重文字係作為網路中關聯於進入網路當前層之一神經元之一連結的權重。雖然在神經網路單元121之許多應用中,裝載於權重隨機存取記憶體124之文字或運算元實際上就是關聯於進入一神經元之連結的權重,不過需要注意的是,在神經網路單元121之某些應用中,裝載於權重隨機存取記憶體124之文字並非權重,不過因為這些文字是儲存於 權重隨機存取記憶體124中,所以仍然以“權重文字”之用語表示。舉例來說,在神經網路單元121之某些應用中,例如第二十四至二十六A圖之卷積運算之範例或是第二十七至二十八圖之共源運作之範例,權重隨機存取記憶體124會裝載權重以外之物件,例如資料矩陣(如影像畫素資料)之元素。同樣地,雖然在神經網路單元121之許多應用中,裝載於資料隨機存取記憶體122之文字或運算元實質上就是神經元之輸出值或啟動值,不過需要注意的是,在神經網路單元121之某些應用中,裝載於資料隨機存取記憶體122之文字並非如此,不過因為這些文字是儲存於資料隨機存取記憶體122中,所以仍然以“資料文字”之用語表示。舉例來說,在神經網路單元121之某些應用中,例如第二十四至二十六A圖之卷積運算之範例,資料隨機存取記憶體122會裝載非神經元之輸出,例如卷積核之元素。
在一實施例中,神經處理單元126與定序器128包括組合邏輯、定序邏輯、狀態機器、或是其組合。架構指令(例如MFNN指令1500)會將控制與狀態暫存器127之內容載入其中一個通用暫存器116,以確認神經網路單元121之狀態,如神經網路單元121已經從程式記憶體129完成一個命令或是一個程式之運作,或 是神經網路單元121可自由接收一個新的命令或開始一個新的神經網路單元程式。
神經處理單元126之數量可依據需求增加,權重隨機存取記憶體124與資料隨機存取記憶體122之寬度與深度亦可隨之調整進行擴張。就一較佳實施例而言,權重隨機存取記憶體124會大於資料隨機存取記憶體122,這是因為典型的神經網路層中存在許多連結,因而需要較大之儲存空間儲存關聯於各個神經元的權重。本文揭露許多關於資料與權重文字之大小、權重隨機存取記憶體124與資料隨機存取記憶體122之大小、以及不同神經處理單元126數量之實施例。在一實施例中,神經網路單元121具有一個大小為64KB(8192位元x64列)之資料隨機存取記憶體122,一個大小為2MB(8192位元x2048列)之權重隨機存取記憶體124,以及512個神經處理單元126。此神經網路單元121是以台灣積體電路(TSMC)之16奈米製程製造,其所占面積大約是3.3毫米平方。
定序器128係由程式記憶體129攫取指令並執行,其執行之運作還包括產生位址與控制信號提供給資料隨機存取記憶體122、權重隨機存取記憶體124與神經處理單元126。定序器128產生一記憶體位址123與一讀取命令提供給資料隨機存取記憶體122,藉以在D個列之 N個資料文字中選擇其一提供給N個神經處理單元126。定序器128並會產生一記憶體位址125與一讀取命令提供給權重隨機存取記憶體124,藉以在W個列之N個權重文字中選擇其一提供給N個神經處理單元126。定序器128產生並提供給神經處理單元126之位址123,125的順序即確定神經元間之“連結”。定序器128還會產生一記憶體位址123與一寫入命令提供給資料隨機存取記憶體122,藉以在D個列之N個資料文字中選擇其一由N個神經處理單元126進行寫入。定序器128還會產生一記憶體位址125與一寫入命令提供給權重隨機存取記憶體124,藉以在W個列之N個權重文字中選擇其一由N個神經處理單元126進行寫入。定序器128還會產生一記憶體位址131至程式記憶體129以選擇提供給定序器128之一神經網路單元指令,這部分在後續章節會進行說明。記憶體位址131係對應至程式計數器(未圖示),定序器128通常是依據程式記憶體129之位置順序使程式計數器遞增,除非定序器128遭遇到一控制指令,例如一迴圈指令(請參照如第二十六A圖所示),在此情況下,定序器128會將程式計數器更新為此控制指令之目標位址。定序器128還會產生控制信號至神經處理單元126,指示神經處理單元126執行各種不同之運算或功能,例如起始化、算 術/邏輯運算、轉動/移位運算、啟動函數、以及寫回運算,相關之範例在後續章節(請參照如第三十四圖之微運算3418所示)會有更詳細的說明。
N個神經處理單元126會產生N個結果文字133,這些結果文字133可被寫回權重隨機存取記憶體124或資料隨機存取記憶體122之一個列。就一較佳實施例而言,權重隨機存取記憶體124與資料隨機存取記憶體122係直接耦接至N個神經處理單元126。進一步來說,權重隨機存取記憶體124與資料隨機存取記憶體122係轉屬於這些神經處理單元126,而不分享給處理器100中其他的執行單元112,這些神經處理單元126能夠持續地在每一個時頻週期內從權重隨機存取記憶體124與資料隨機存取記憶體122之一或二者取得並完成一個列,就一較佳實施例而言,可採管線方式處理。在一實施例中,資料隨機存取記憶體122與權重隨機存取記憶體124中的每一個都可以在每一個時頻週期內提供8192個位元至神經處理單元126。這8192個位元可以視為512個16位元組或是1024個8位元組來進行處理,詳如後述。
由神經網路單元121處理之資料組大小並不受限於權重隨機存取記憶體124與資料隨機存取記憶體122的大小,而只會受限於系 統記憶體的大小,這是因為資料與權重可在系統記憶體與權重隨機存取記憶體124以及資料隨機存取記憶體122間透過MTNN與MFNN指令之使用(例如,透過媒體暫存器118)而移動。 在一實施例中,資料隨機存取記憶體122係被賦予雙埠,使能在由資料隨機存取記憶體122讀取資料文字或寫入資料文字至資料隨機存取記憶體122之同時,寫入資料文字至資料隨機存取記憶體122。另外,包括快取記憶體在內之記憶體子系統114之大型記憶體階層結構可提供非常大的資料頻寬供系統記憶體與神經網路單元121間進行資料傳輸。此外,就一較佳實施例而言,此記憶體子系統114包括硬體資料預攫取器,追蹤記憶體之存取模式,例如由系統記憶體載入之神經資料與權重,並對快取階層結構執行資料預攫取以利於在傳輸至權重隨機存取記憶體124與資料隨機存取記憶體122之過程中達成高頻寬與低延遲之傳輸。
雖然本文之實施例中,由權重記憶體提供至各個神經處理單元126之其中一個運算元係標示為權重,此用語常見於神經網路,不過需要理解的是,這些運算元也可以是其他與計算有關聯之類型的資料,而其計算速度可透過這些裝置加以提升。
第二圖係顯示第一圖之一神經處 理單元126之方塊示意圖。如圖中所示,此神經處理單元126之運作可執行許多功能或運算。尤其是,此神經處理單元126可作為人工神經網路內之一神經元或節點進行運作,以執行典型之乘積累加功能或運算。也就是說,一般而言,神經處理單元126(神經元)係用以:(1)從各個與其具有連結之神經元接收一輸入值,此連結通常會但不必然是來自人工神經網路中之前一層;(2)將各個輸出值乘上關聯於其連結之一相對應權重值以產生一乘積;(3)將所有乘積加總以產生一總數;(4)對此總數執行一啟動函數以產生神經元之輸出。不過,不同於傳統方式需要執行關聯於所有連結輸入之所有乘法運算並將其乘積加總,本發明之各個神經元在一給定之時頻週期內可執行關聯於其中一個連結輸入之權重乘法運算並將其乘積與關聯於該時點前之時頻週期內所執行之連結輸入之乘積的累加值相加(累加)。假定一共有M個連結連接至此神經元,在M個乘積加總後(大概需要M個時頻週期的時間),此神經元會對此累加數執行啟動函數以產生輸出或結果。此方式之優點在於可減少所需之乘法器的數量,並且在神經元內只需要一個較小、較簡單且更為快速之加法器電路(例如使用兩個輸入之加法器),而不需使用能夠將所有連結輸入之乘積加總或甚至對其 中一子集合加總所需之加法器。此方式亦有利於在神經網路單元121內使用極大數量(N)之神經元(神經處理單元126),如此,在大約M個時頻週期後,神經網路單元121就可產生此大數量(N)神經元之輸出。最後,對於大量之不同連結輸入,由這些神經元構成之神經網路單元121就能有效地作為一人工神經網路層執行。也就是說,若是不同層中M的數量有所增減,產生記憶胞輸出所需之時頻週期數也會相對應地增減,而資源(例如乘法器與累加器)會被充分利用。相較之下,傳統設計對於較小之M值而言,會有某些乘法器與加法器之部分未能被利用。因此,因應神經網路單元之連結輸出數,本文所述之實施例兼具彈性與效率之優點,而能提供極高的效能。
神經處理單元126包括一暫存器205、一個雙輸入多工暫存器208、一算術邏輯單元(ALU)204、一累加器202、與一啟動函數單元(AFU)212。暫存器205由權重隨機存取記憶體124接收一權重文字206並在一後續時頻週期提供其輸出203。多工暫存器208在兩個輸入207,211中選擇其一儲存於其暫存器並在一後續時頻週期提供於其輸出209。輸入207接收來自資料隨機存取記憶體122之資料文字。另一個輸入211則接收相鄰神經處理單元126之輸出 209。第二圖所示之神經處理單元126係於第一圖所示之N個神經處理單元中標示為神經處理單元J。也就是說,神經處理單元J是這N個神經處理單元126之一代表例。就一較佳實施例而言,神經處理單元J之多工暫存器208的輸入211係接收神經處理單元J-1之多工暫存器208之輸出209,而神經處理單元J之多工暫存器208的輸出209係提供給神經處理單元J+1之多工暫存器208之輸入211。如此,N個神經處理單元126之多工暫存器208即可共同運作,如同一N個文字之旋轉器或循環移位器,這部分在後續第三圖會有更詳細的說明。多工暫存器208係利用一控制輸入213控制這兩個輸入中哪一個會被多工暫存器208選擇儲存於其暫存器並於後續提供於輸出209。
算術邏輯單元204具有三個輸入。其中一個輸入由暫存器205接收權重文字203。另一個輸入接收多工暫存器208之輸出209。再另一個輸入接收累加器202之輸出217。此算術邏輯單元204會對其輸入執行算術與/或邏輯運算以產生一結果提供於其輸出。就一較佳實施例而言,算術邏輯單元204執行之算術與/或邏輯運算係由儲存於程式記憶體129之指令所指定。舉例來說,第四圖中的乘法累加指令指定一乘法累加運算,亦即,結果215會是累加器202 數值217與權重文字203以及多工暫存器208輸出209之資料文字之乘積的加總。不過也可以指定其他運算,這些運算包括但不限於:結果215是多工暫存器輸出209傳遞之數值;結果215是權重文字203傳遞之數值;結果215是零值;結果215是累加器202數值217與權重203之加總;結果215是累加器202數值217與多工暫存器輸出209之加總;結果215是累加器202數值217與權重203中的最大值;結果215是累加器202數值217與多工暫存器輸出209中的最大值。
算術邏輯單元204提供其輸出215至累加器202儲存。算術邏輯單元204包括一乘法器242對權重文字203與多工暫存器208輸出209之資料文字進行乘法運算以產生一乘積246。在一實施例中,乘法器242係將兩個16位元運算元相乘以產生一個32位元之結果。此算術邏輯單元204並包括一加法器244在累加器202之輸出217加上乘積246以產生一總數,此總數即為儲存於累加器202之累加運算的結果215。在一實施例中,加法器244係在累加器202之一個41位元值217加上乘法器242之一個32位元結果以產生一個41位元結果。如此,在多個時頻週期之期間內利用多工暫存器208所具有之旋轉器特性,神經處理單元126即可達成神經網路所需之神經元之乘積加總運算。此算術邏 輯單元204亦可包括其他電路元件以執行其他如前所述之算術/邏輯運算。在一實施例中,第二加法器係在多工暫存器208輸出209之資料文字減去權重文字203以產生一差值,隨後加法器244會在累加器202之輸出217加上此差值以產生一結果215,此結果即為累加器202內之累加結果。如此,在多個時頻週期之期間內,神經處理單元126就能達成差值加總之運算。就一較佳實施例而言,雖然權重文字203與資料文字209之大小相同(以位元計),他們也可具有不同之二維點位置,詳如後述。就一較佳實施例而言,乘法器242與加法器244係為整數乘法器與加法器,相較於使用浮點運算之算術邏輯單元,此算術邏輯單元204具有低複雜度、小型、快速與低耗能之優點。不過,在本發明之其他實施例中,算術邏輯單元204亦可執行浮點運算。
雖然第二圖之算術邏輯單元204內只顯示一個乘法器242與加法器244,不過,就一較佳實施例而言,此算術邏輯單元204還包括有其他元件以執行前述其他不同的運算。舉例來說,此算術邏輯單元204可包括一比較器(未圖示)比較累加器202與一資料/權重文字,以及一多工器(未圖示)在比較器指定之兩個數值中選擇較大者(最大值)儲存至累加器202。 在另一個範例中,算術邏輯單元204包括選擇邏輯(未圖示),利用一資料/權重文字來省略乘法器242,使加法器224在累加器202之數值217加上此資料/權重文字以產生一總數儲存至累加器202。這些額外的運算會在後續章節如第十八至二十九A圖有更詳細的說明,而這些運算也有助於如卷積運算與共源運作之執行。
啟動函數單元212接收累加器202之輸出217。啟動函數單元212會對累加器202之輸出執行一啟動函數以產生第一圖之結果133。一般而言,人工神經網路之中介層之神經元內的啟動函數可用來標準化乘積累加後之總數,尤其可以採用非線性之方式進行。為了“標準化”累加總數,當前神經元之啟動函數會在連接當前神經元之其他神經元預期接收作為輸入之數值範圍內產生一結果值。(標準化後的結果有時會“啟動”表示,在本文中,啟動是當前節點之輸出,而接收節點會將此輸出乘上一關聯於輸出節點與接收節點間連結之權重以產生一乘積,而此乘積會與關聯於此接收節點之其他輸入連結的乘積累加。)舉例來說,在接收/被連結神經元預期接收作為輸入之數值介於0與1間之情況下,輸出神經元會需要非線性地擠壓與/或調整(例如向上移位以將負值轉換為正值)超出0與1之範圍外的累加總數,使其落於 此預期範圍內。因此,啟動函數單元212對累加器202數值217執行之運算會將結果133帶到一已知範圍內。N個神經處理單元126之結果133都可被同時寫回資料隨機存取記憶體122或權重隨機存取記憶體124。就一較佳實施例而言,啟動函數單元212係用以執行多個啟動函數,而例如來自控制與狀態暫存器127之一輸入會在這些啟動函數中選擇其一執行於累加器202之輸出217。這些啟動函數可包括但不限於階梯函數、校正函數、S型函數、雙曲正切函數與軟加函數(也稱為平滑校正函數)。軟加函數之分析公式為f(x)=ln(1+ex),也就是1與ex之加總的自然對數,其中,“e”是歐拉數(Euler’s number),x是此函數之輸入217。就一較佳實施例而言,啟動函數亦可包括一傳遞(pass-through)函數,直接傳遞累加器202數值217或其中一部分,詳如後述。在一實施例中,啟動函數單元212之電路會在單一個時頻週期內執行啟動函數。在一實施例中,啟動函數單元212包括多個表單,其接收接收累加值並輸出一數值,對某些啟動函數,如S型函數、雙取正切函數、軟加函數等,此數值會近似於真正的啟動函數所提供之數值。
就一較佳實施例而言,累加器202之寬度(以位元計)係大於啟動函數單元212 之輸出133之寬度。舉例來說,在一實施例中,此累加器之寬度為41位元,以避免在累加至最多512個32位元之乘積的情況下(這部分在後續章節如對應於第三十圖處會有更詳細的說明)損失精確度,而結果133之寬度為16位元。在一實施例中,在後續時頻週期中,啟動函數單元212會傳遞累加器202輸出217之其他未經處理之部分,並且會將這些部分寫回資料隨機存取記憶體122或權重隨機存取記憶體124,這部分在後續章節對應於第八圖處會有更詳細的說明。如此即可將未經處理之累加器202數值透過MFNN指令載回媒體暫存器118,藉此,在處理器100之其他執行單元112執行之指令就可以執行啟動函數單元112無法執行之複雜啟動函數,例如有名的軟極大(softmax)函數,此函數也被稱為標準化指數函數。在一實施例中,處理器100之指令集架構包括執行此指數函數之一指令,通常表示為ex或exp(x),此指令可由處理器100之其他執行單元112使用以提升軟極大啟動函數之執行速度。
在一實施例中,神經處理單元126係採管線設計。舉例來說,神經處理單元126可包括算術邏輯單元204之暫存器,例如位於乘法器與加法器以及/或是算術邏輯單元204之其他電路間之暫存器,神經處理單元126還可包括 一個裝載啟動函數功能212輸出之暫存器。此神經處理單元126之其他實施例會在後續章節進行說明。
第三圖係一方塊圖,顯示利用第一圖之神經網路單元121之N個神經處理單元126之N個多工暫存器208,對於由第一圖之資料隨機存取記憶體122取得之一列資料文字207執行如同一N個文字之旋轉器(rotator)或循環移位器(circular shifter)之運作。在第三圖之實施例中,N是512,因此,神經網路單元121具有512個多工暫存器208,標示為0至511,分別對應至512個神經處理單元126。每個多工暫存器208會接收資料隨機存取記憶體122之D個列之其中一個列上的相對應資料文字207。也就是說,多工暫存器0會從資料隨機存取記憶體122列接收資料文字0,多工暫存器1會從資料隨機存取記憶體122列接收資料文字1,多工暫存器2會從資料隨機存取記憶體122列接收資料文字2,依此類推,多工暫存器511會從資料隨機存取記憶體122列接收資料文字511。此外,多工暫存器1會接收多工暫存器0之輸出209作為其他輸入211,多工暫存器2會接收多工暫存器1之輸出209作為其他輸入211,多工暫存器3會接收多工暫存器2之輸出209作為其他輸入211,依此類推,多工暫存器511會接收多工暫存器510之輸 出209作為其他輸入211,而多工暫存器0會接收多工暫存器511之輸出209作為其他輸入211。每個多工暫存器208都會接收一控制輸入213以控制其選擇資料文字207或是循環輸入211。在此運作之一模式中,控制輸入213會在一第一時頻週期內,控制每個多工暫存器208選擇資料文字207以儲存至暫存器並於後續步驟提供給算術邏輯單元204,而在後續之時頻週期內(如前述M-1個時頻週期),控制輸入213會控制每個多工暫存器208選擇循環輸入211以儲存至暫存器並於後續步驟提供給算術邏輯單元204。
雖然第三圖(以及後續之第七與十九圖)所描述之實施例中,多個神經處理單元126可用以將這些多工暫存器208/705之數值向右旋轉,亦即由神經處理單元J朝向神經處理單元J+1移動,不過本發明並不限於此,在其他的實施例中(例如對應於第二十四至二十六圖之實施例),多個神經處理單元126可用以將多工暫存器208/705之數值向左旋轉,亦即由神經處理單元J朝向神經處理單元J-1移動。此外,在本發明之其他實施例中,這些神經處理單元126可選擇性地將多工暫存器208/705之數值向左或向右旋轉,舉例來說,此選擇可由神經網路單元指令所指定。
第四圖係一表格,顯示一個儲存於 第一圖之神經網路單元121之程式記憶體129並由該神經網路單元121執行之程式。如前所述,此範例程式係執行與人工神經網路之一層有關的計算。第四圖之表格顯示有四個列與三個行。每一個列係對應於程式記憶體129中標示於第一行之一位址。第二行指定相對應的指令,而第三行係指出關聯於此指令之時頻週期數。 就一較佳實施例而言,在管線執行之實施例中,前述時頻週期數係表示每指令時頻週期值之有效的時頻週期數,而非指令延遲。如圖中所示,因為神經網路單元121具有管線執行的本質,每個指令均有一相關聯之時頻週期,位於位址2之指令是一個例外,此指令實際上自己會重複執行511次,因而需要511個時頻週期,詳如後述。
所有的神經處理單元126會平行處理程式中的每個指令。也就是說,所有的N個神經處理單元126都會在同一個時頻週期執行第一列之指令,所有的N個神經處理單元126都會在同一個時頻週期執行第二列之指令,依此類推。不過本發明並不限於此,在後續章節之其他實施例中,有些指令則是以部分平行部分序列之方式執行,舉例來說,如第十一圖之實施例所述,在多個神經處理單元126共享一個啟動函數單元之實施例中,啟動函數與位於位址3 與4之輸出指令即是以此方式執行。第四圖之範例中假定一個層具有512個神經元(神經處理單元126),而每個神經元具有512個來自前一層之512個神經元之連結輸入,總共有256K個連結。每個神經元會從每個連結輸入接收一個16位元資料值,並將此16位元資料值乘上一個適當的16位元權重值。
位於位址0之第一列(亦可指定至其他位址)會指定一初始化神經處理單元指令。此初始化指令會清除累加器202數值使之為零。在一實施例中,初始化指令亦可在累加器202內載入資料隨機存取記憶體122或權重隨機存取記憶體124之一個列中,由此指令所指定之相對應之文字。此初始化指令也會將配置值載入控制與狀態暫存器127,這部分在後續第二十九A與二十九B圖會有更詳細的說明。舉例來說,可將資料文字207與權重文字209之寬度載入,供算術邏輯單元204利用以確認電路執行之運算大小,此寬度也會影響儲存於累加器202之結果215。在一實施例中,神經處理單元126包括一電路在算術邏輯單元204之輸出215儲存於累加器202前填滿此輸出215,而初始化指令會將一配置值載入此電路,此配置值會影響前述之填滿運算。在一實施例中,也可在算術邏輯單元函數指令(如位址1之乘法累加指令)或 輸出指令(如位址4之寫入起始函數單元輸出指令)中如此指定,以將累加器202清除至零值。
位於位址1之第二列係指定一乘法累加指令指示這512個神經處理單元126從資料隨機存取記憶體122之一列載入一相對應之資料文字以及從權重隨機存取記憶體124之一列載入一相對應之權重文字,並且對此資料文字輸入207與權重文字輸入206執行一第一乘法累加運算,即加上初始化累加器202零值。進一步來說,此指令會指示定序器128在控制輸入213產生一數值以選擇資料文字輸入207。在第四圖之範例中,資料隨機存取記憶體122之指定列為列17,權重隨機存取記憶體124之指定列為列0,因此定序器會被指示輸出數值17作為一資料隨機存取記憶體位址123,輸出數值0作為一權重隨機存取記憶體位址125。因此,來自資料隨機存取記憶體122之列17之512個資料文字係提供作為512個神經處理單元126之相對應資料輸入207,而來自權重隨機存取記憶體124之列0之512個權重文字係提供作為512個神經處理單元126之相對應權重輸入206。
位於位址2之第三列係指定一乘法累加旋轉指令,此指令具有一計數其數值為511,以指示這512個神經處理單元126執行511次乘法累加運算。此指令指示這512個神經處理 單元126將511次乘法累加運算之每一次運算中輸入算術邏輯單元204之資料文字209,作為從鄰近神經處理單元126算起旋轉值211。也就是說,此指令會指示定序器128在控制輸入213產生一數值以選擇旋轉值211。此外,此指令會指示這512個神經處理單元126將511次乘法累加運算之每一次運算中之一相對應權重值載入權重隨機存取記憶體124之“下一”列。也就是說,此指令會指示定序器128將權重隨機存取記憶體位址125從前一個時頻週期的數值增加一,在此範例中,指令之第一時頻週期是列1,下一個時頻週期就是列2,在下一個時頻週期就是列3,依此類推,第511個時頻週期就是列511。在這511個乘法累加運算中之每一個運算中,旋轉輸入211與權重文字輸入206之乘積會被加入累加器202之前一個數值。這512個神經處理單元126會在511個時頻週期內執行這511個乘法累加運算,每個神經處理單元126會對於來自資料隨機存取記憶體122之列17之不同資料文字以及關聯於資料文字之不同權重文字執行一個乘法累加運算一也就是,相鄰之神經處理單元126會在前一個時頻週期對資料文字執行運算,前述運算在概念上即為神經元之不同連結輸入。 此範例假設各個神經處理單元126(神經元)具有512個連結輸入,因此牽涉到512個資料文字 與512個權重文字之處理。在列2之乘法累加旋轉指令重複最後一次執行後,累加器202內就會存放有這512個連結輸入之乘積的加總。在一實施例中,神經處理單元126之指令集係包括一“執行”指令以指示算術邏輯單元204執行由初始化神經處理單元指令指定之一算術邏輯單元運算,例如第二十九A圖之算術邏輯單元函數2926所指定者,而非對於各個不同類型之算術邏輯運算(例如前述之乘法累加、累加器與權重之最大值等)具有一獨立的指令。
位於位址3之第四列係指定一啟動函數指令。此啟動函數指令指示啟動函數單元212對於累加器202數值執行所指定之啟動函數以產生結果133。啟動函數之實施例在後續章節會有更詳細的說明。
位於位址4之第五列係指定一寫入啟動函數單元輸出指令,以指示這512個神經處理單元126將其啟動函數單元212輸出作為結果133寫回至資料隨機存取記憶體122之一列,在此範例中即列16。也就是說,此指令會指示定序器128輸出數值16作為資料隨機存取記憶體位址123以及一寫入命令(相對應於由位址1之乘法累加指令所指定之讀取命令)。就一較佳實施例而言,因為管線執行之特性,寫入啟動函數單元輸出指令可與其他指令同時執行,因此 寫入啟動函數單元輸出指令實際上可以在單一個時頻週期內執行。
就一較佳實施例而言,每個神經處理單元126係作為一管線,此管線具有各種不同功能元件,例如多工暫存器208(以及第七圖之多工暫存器705)、算術邏輯單元204、累加器202、啟動函數單元212、多工器802(請參照第八圖)、列緩衝器1104與啟動函數單元1112(請參照第十一圖)等,其中某些元件本身即可管線執行。除了資料文字207與權重文字206外,此管線還會從程式記憶體129接收指令。這些指令會沿著管線流動並控制多種功能單元。在另一實施例中,此程式內不包含啟動函數指令,而是由初始化神經處理單元指令指定執行於累加器202數值217之啟動函數,指出被指定之啟動函數之一數值係儲存於一配置暫存器,供管線之啟動函數單元212部分在產生最後的累加器202數值217後,也就是在位址2之乘法累加旋轉指令重複最後一次執行後,加以利用。就一較佳實施例而言,為了節省耗能,管線之啟動函數單元212部分在寫入啟動函數單元輸出指令到達前會處於不啟動狀態,在指令到達時,啟動函數單元212會啟動並對初始化指令指定之累加器202輸出217執行啟動函數。
第五圖係顯示神經網路單元121執 行第四圖之程式之時序圖。此時序圖之每一列係對應至第一行指出之連續時頻週期。其他行則是分別對應至這512個神經處理單元126中不同的神經處理單元126並指出其運算。圖中僅顯示神經處理單元0,1,511之運算以簡化說明。
在時頻週期0,這512個神經處理單元126中的每一個神經處理單元126都會執行第四圖之初始化指令,在第五圖中即是將一零值指派給累加器202。
在時頻週期1,這512個神經處理單元126中的每一個神經處理單元126都會執行第四圖中位址1之乘法累加指令。如圖中所示,神經處理單元0會將累加器202數值(即零)加上資料隨機存取記憶體122之列17之文字0與權重隨機存取記憶體124之列0之文字0之乘積;神經處理單元1會將累加器202數值(即零)加上資料隨機存取記憶體122之列17之文字1與權重隨機存取記憶體124之列0之文字1之乘積;依此類推,神經處理單元511會將累加器202數值(即零)加上資料隨機存取記憶體122之列17之文字511與權重隨機存取記憶體124之列0之文字511之乘積。
在時頻週期2,這512個神經處理單元126中的每一個神經處理單元126都會進行第四圖中位址2之乘法累加旋轉指令之第一次執 行。如圖中所示,神經處理單元0會將累加器202數值加上由神經處理單元511之多工暫存器208輸出209接收之旋轉資料文字211(即由資料隨機存取記憶體122接收之資料文字511)與權重隨機存取記憶體124之列1之文字0之乘積;神經處理單元1會將累加器202數值加上由神經處理單元0之多工暫存器208輸出209接收之旋轉資料文字211(即由資料隨機存取記憶體122接收之資料文字0)與權重隨機存取記憶體124之列1之文字1之乘積;依此類推,神經處理單元511會將累加器202數值加上由神經處理單元510之多工暫存器208輸出209接收之旋轉資料文字211(即由資料隨機存取記憶體122接收之資料文字510)與權重隨機存取記憶體124之列1之文字511之乘積。
在時頻週期3,這512個神經處理單元126中的每一個神經處理單元126都會進行第四圖中位址2之乘法累加旋轉指令之第二次執行。如圖中所示,神經處理單元0會將累加器202數值加上由神經處理單元511之多工暫存器208輸出209接收之旋轉資料文字211(即由資料隨機存取記憶體122接收之資料文字510)與權重隨機存取記憶體124之列2之文字0之乘積;神經處理單元1會將累加器202數值加上由神經處理單元0之多工暫存器208輸出209接收之旋轉資 料文字211(即由資料隨機存取記憶體122接收之資料文字511)與權重隨機存取記憶體124之列2之文字1之乘積;依此類推,神經處理單元511會將累加器202數值加上由神經處理單元510之多工暫存器208輸出209接收之旋轉資料文字211(即由資料隨機存取記憶體122接收之資料文字509)與權重隨機存取記憶體124之列2之文字511之乘積。如同第五圖之省略標號顯示,接下來509個時頻週期會依此持續進行,直到時頻週期512。
在時頻週期512,這512個神經處理單元126中的每一個神經處理單元126都會進行第四圖中位址2之乘法累加旋轉指令之第511次執行。如圖中所示,神經處理單元0會將累加器202數值加上由神經處理單元511之多工暫存器208輸出209接收之旋轉資料文字211(即由資料隨機存取記憶體122接收之資料文字1)與權重隨機存取記憶體124之列511之文字0之乘積;神經處理單元1會將累加器202數值加上由神經處理單元0之多工暫存器208輸出209接收之旋轉資料文字211(即由資料隨機存取記憶體122接收之資料文字2)與權重隨機存取記憶體124之列511之文字1之乘積;依此類推,神經處理單元511會將累加器202數值加上由神經處理單元510之多工暫存器208輸出209接收之旋轉資料 文字211(即由資料隨機存取記憶體122接收之資料文字0)與權重隨機存取記憶體124之列511之文字511之乘積。在一實施例中需要多個時頻週期從資料隨機存取記憶體122與權重隨機存取記憶體124讀取資料文字與權重文字以執行第四圖中位址1之乘法累加指令;不過,資料隨機存取記憶體122、權重隨機存取記憶體124與神經處理單元126係採管線配置,如此在第一個乘法累加運算開始後(如第五圖之時頻週期1所示),後續的乘法累加運算(如第五圖之時頻週期2-512所示)就會開始在接續的時頻週期內執行。就一較佳實施例而言,因應利用架構指令,如MTNN或MFNN指令(在後續第十四與十五圖會進行說明),對於資料隨機存取記憶體122與/或權重隨機存取記憶體124之存取動作,或是架構指令轉譯出之微指令,這些神經處理單元126會短暫地擱置。
在時頻週期513,這512個神經處理單元126中的每一個神經處理單元126之啟動函數單元212都會執行第四圖中位址3之啟動函數。最後,在時頻週期514,這512個神經處理單元126中的每一個神經處理單元126會透過將其結果133寫回資料隨機存取記憶體122之列16中之相對應文字以執行第四圖中位址4之寫入啟動函數單元輸出指令,也就是說,神經處理 單元0之結果133會被寫入資料隨機存取記憶體122之文字0,神經處理單元1之結果133會被寫入資料隨機存取記憶體122之文字1,依此類推,神經處理單元511之結果133會被寫入資料隨機存取記憶體122之文字511。對應於前述第五圖之運算之相對應方塊圖係顯示於第六A圖。
第六A圖係顯示第一圖之神經網路單元121執行第四圖之程式之方塊示意圖。此神經網路單元121包括512個神經處理單元126、接收位址輸入123之資料隨機存取記憶體122,與接收位址輸入125之權重隨機存取記憶體124。 在時頻週期0的時候,這512個神經處理單元126會執行初始化指令。此運作在圖中並未顯示。 如圖中所示,在時頻週期1的時候,列17之512個16位元之資料文字會從資料隨機存取記憶體122讀出並提供至這512個神經處理單元126。在時頻週期1至512之過程中,列0至列511之512個16位元之權重文字會分別從權重隨機存取記憶體124讀出並提供至這512個神經處理單元126。在時頻週期1的時候,這512個神經處理單元126會對載入之資料文字與權重文字執行其相對應之乘法累加運算。此運作在圖中並未顯示。在時頻週期2至512之過程中,512個神經處理單元126之多工暫存器208會如同一個具有 512個16位元文字之旋轉器進行運作,而將先前由資料隨機存取記憶體122之列17載入之資料文字轉動至鄰近之神經處理單元126,而這些神經處理單元126會對轉動後之相對應資料文字以及由權重隨機存取記憶體124載入之相對應權重文字執行乘法累加運算。在時頻週期513的時候,這512個啟動函數單元212會執行啟動指令。此運作在圖中並未顯示。在時頻週期514的時候,這512個神經處理單元126會將其相對應之512個16位元結果133寫回資料隨機存取記憶體122之列16。
如圖中所示,產生結果文字(記憶胞輸出)並寫回資料隨機存取記憶體122或權重隨機存取記憶體124需要之時頻週期數大致為神經網路之當前層接收到的資料輸入(連結)數量的平方根。舉例來說,若是當前層具有512個神經元,而各個神經元具有512個來自前一層的連結,這些連結的總數就是256K,而產生當前層結果需要的時頻週期數就會略大於512。因此,神經網路單元121在神經網路計算方面可提供極高的效能。
第六B圖係一流程圖,顯示第一圖之處理器100執行一架構程式,以利用神經網路單元121執行關聯於一人工神經網路之隱藏層之神經元之典型乘法累加啟動函數運算之運 作,如同由第四圖之程式執行之運作。第六B圖之範例係假定有四個隱藏層(標示於初始化步驟602之變數NUM_LAYERS),各個隱藏層具有512個神經元,各個神經元係連結前一層全部之512個神經元(透過第四圖之程式)。不過,需要理解的是,這些層與神經元之數量的選擇係為說明本案發明,神經網路單元121當可將類似的計算應用於不同數量隱藏層之實施例,每一層中具有不同數量神經元之實施例,或是神經元未被全部連結之實施例。在一實施例中,對於這一層中不存在之神經元或是不存在之神經元連結的權重值會被設定為零。就一較佳實施例而言,架構程式會將第一組權重寫入權重隨機存取記憶體124並啟動神經網路單元121,當神經網路單元121正在執行關聯於第一層之計算時,此架構程式會將第二組權重寫入權重隨機存取記憶體124,如此,一旦神經網路單元121完成第一隱藏層之計算,神經網路單元121就可以開始第二層之計算。如此,架構程式會往返於權重隨機存取記憶體124之兩個區域,以確保神經網路單元121可以被充分利用。此流程始於步驟602。
在步驟602,如第六A圖之相關章節所述,執行架構程式之處理器100係將輸入值寫入資料隨機存取記憶體122之當前神經元隱藏 層,也就是寫入資料隨機存取記憶體122之列17。這些值也可能已經位於資料隨機存取記憶體122之列17作為神經網路單元121針對前一層之運算結果133(例如卷積、共源或輸入層)。 其次,架構程式會將變數N初始化為數值1。變數N代表隱藏層中即將由神經網路單元121處理之當前層。此外,架構程式會將變數NUM_LAYERS初始化為數值4,因為在本範例中有四個隱藏層。接下來流程前進至步驟604。
在步驟604,處理器100將層1之權重文字寫入權重隨機存取記憶體124,例如第六A圖所示之列0至511。接下來流程前進至步驟606。
在步驟606中,處理器100利用指定一函數1432以寫入程式記憶體129之MTNN指令1400,將一乘法累加啟動函數程式(如第四圖所示)寫入神經網路單元121程式記憶體129。處理器100隨後利用一MTNN指令1400以啟動神經網路單元程式,此指令係指定一函數1432開始執行此程式。接下來流程前進至步驟608。
在決策步驟608中,架構程式確認變數N之數值是否小於NUM_LAYERS。若是,流程就會前進至步驟612;否則就前進至步驟614。
在步驟612中,處理器100將層N+1之權重文字寫入權重隨機存取記憶體124,例如列512至1023。因此,架構程式就可以在神經網路單元121執行當前層之隱藏層計算時將下一層的權重文字寫入權重隨機存取記憶體124,藉此,在完成當前層之計算,也就是寫入資料隨機存取記憶體122後,神經網路單元121就可以立刻開始執行下一層之隱藏層計算。接下來前進至步驟614。
在步驟614中,處理器100確認正在執行之神經網路單元程式(就層1而言,在步驟606開始執行,就層2至4而言,則是在步驟618開始執行)是否已經完成執行。就一較佳實施例而言,處理器100會透過執行一MFNN指令1500讀取神經網路單元121控制與狀態暫存器127以確認是否已經完成執行。在另一實施例中,神經網路單元121會產生一中斷,表示已經完成乘法累加啟動函數層程式。接下來流程前進至決策步驟616。
在決策步驟616中,架構程式確認變數N之數值是否小於NUM_LAYERS。若是,流程會前進至步驟618;否則就前進至步驟622。
在步驟618中,處理器100會更新乘法累加啟動函數程式,使能執行層N+1之隱藏層計算。進一步來說,處理器100會將第四圖中 位址1之乘法累加指令之資料隨機存取記憶體122列值,更新為資料隨機存取記憶體122中前一層計算結果寫入之列(例如更新為列16)並更新輸出列(例如更新為列15)。處理器100隨後開始更新神經網路單元程式。在另一實施例中,第四圖之程式係指定位址4之輸出指令之同一列作為位址1之乘法累加指令所指定之列(也就是由資料隨機存取記憶體122讀取之列)。在此實施例中,輸入資料文字之當前列會被覆寫(因為此列資料文字已經被讀入多工暫存器208並透過N文字旋轉器在這些神經處理單元126間進行旋轉,只要這列資料文字不需被用於其他目的,這樣的處理方式就是可以被允許的)。在此情況下,在步驟618中就不需要更新神經網路單元程式,而只需要將其重新啟動。 接下來流程前進至步驟622。
在步驟622中,處理器100從資料隨機存取記憶體122讀取層N之神經網路單元程式之結果。不過,若是這些結果只會被用於下一層,架構程式就不須從資料隨機存取記憶體122讀取這些結果,而可將其保留在資料隨機存取記憶體122供下一個隱藏層計算之用。接下來流程前進至步驟624。
在決策步驟624中,架構程式確認變數N之數值是否小於NUM_LAYERS。若是, 流程前進至步驟626;否則就終止此流程。
在步驟626中,架構程式會將N的數值增加一。接下來流程會回到決策步驟608。
如同第六B圖之範例所示,大致上每512個時頻週期,這些神經處理單元126就會對資料隨機存取記憶體122執行一次讀取與一次寫入(透過第四圖之神經網路單元程式之運算的效果)。此外,這些神經處理單元126大致上每個時頻週期都會對權重隨機存取記憶體124進行讀取以讀取一列權重文字。因此,權重隨機存取記憶體124全部的頻寬都會因為神經網路單元121以混合方式執行隱藏層運算而被消耗。此外,假定在一實施例中具有一個寫入與讀取緩衝器,例如第十七圖之緩衝器1704,神經處理單元126進行讀取之同時,處理器100對權重隨機存取記憶體124進行寫入,如此緩衝器1704大致上每16個時頻週期會對權重隨機存取記憶體124執行一次寫入以寫入權重文字。因此,在權重隨機存取記憶體124為單一埠之實施例中(如同第十七圖之相對應章節所述),大致上每16個時頻週期這些神經處理單元126就會暫時擱置對權重隨機存取記憶體124進行之讀取,而使緩衝器1704能夠對權重隨機存取記憶體124進行寫入。不過,在雙埠權重隨機存取記憶體124之實施例中,這些神經處理單元126就 不需被擱置。
第七圖係顯示第一圖之神經處理單元126之另一實施例之方塊示意圖。第七圖之神經處理單元126係類似於第二圖之神經處理單元126。不過,第七圖之神經處理單元126另外具有一個雙輸入多工暫存器705。此多工暫存器705選擇其中一個輸入206或711儲存於其暫存器,並於後續時頻週期提供於其輸出203。輸入206從權重隨機存取記憶體124接收權重文字。另一個輸入711則是接收相鄰神經處理單元126之第二多工暫存器705之輸出203。就一較佳實施例而言,神經處理單元J之輸入711會接收之排列在J-1之神經處理單元126之多工暫存器705輸出203,而神經處理單元J之輸出203則是提供至排列在J+1之神經處理單元126之多工暫存器705之輸入711。如此,N個神經處理單元126之多工暫存器705就可共同運作,如同一N個文字之旋轉器,其運作係類似於前述第三圖所示之方式,不過是用於權重文字而非資料文字。多工暫存器705係利用一控制輸入213控制這兩個輸入中哪一個會被多工暫存器705選擇儲存於其暫存器並於後續提供於輸出203。
利用多工暫存器208與/或多工暫存器705(以及如第十八與二十三圖所示之其他實施例中之多工暫存器),實際上構成一個大型 的旋轉器將來自資料隨機存取記憶體122與/或權重隨機存取記憶體124之一列之資料/權重進行旋轉,神經網路單元121就不需要在資料隨機存取記憶體122與/或權重隨機存取記憶體124間使用一個非常大的多工器以提供需要的資料/權重文字至適當的神經網路單元。
除啟動函數結果外再寫回累加器數值
對於某些應用而言,讓處理器100接收回(例如透過第十五圖之MFNN指令接收至媒體暫存器118)未經處理之累加器202數值217,以提供給執行於其他執行單元112之指令執行計算,確實有其用處。舉例來說,在一實施例中,啟動函數單元212不針對軟極大啟動函數之執行進行配置以降低啟動函數單元212之複雜度。所以,神經網路單元121會輸出未經處理之累加器202數值217或其中一個子集合至資料隨機存取記憶體122或權重隨機存取記憶體124,而架構程式在後續步驟可以由資料隨機存取記憶體122或權重隨機存取記憶體124讀取並對此未經處理之數值進行計算。不過,對於未經處理之累加器202數值217之應用並不限於執行軟極大運算,其他應用亦為本發明所涵蓋。
第八圖係顯示第一圖之神經處理單元126之又一實施例之方塊示意圖。第八圖之 神經處理單元126係類似於第二圖之神經處理單元126。不過,第八圖之神經處理單元126在啟動函數單元212內包括一多工器802,而此啟動函數單元212具有一控制輸入803。累加器202之寬度(以位元計)係大於資料文字之寬度。 多工器802具有多個輸入以接收累加器202輸出217之資料文字寬度部分。在一實施例中,累加器202之寬度為41個位元,而神經處理單元126可用以輸出一個16位元之結果文字133;如此,舉例來說,多工器802(或第三十圖之多工器3032與/或多工器3037)具有三個輸入分別接收累加器202輸出217之位元[15:0]、位元[31:16]與位元[47:32]。就一較佳實施例而言,非由累加器202提供之輸出位元(例如位元[47:41])會被強制設定為零值位元。
定序器128會在控制輸入803產生一數值,控制多工器803在累加器202之文字(如16位元)中選擇其一,以因應一寫入累加器指令,例如後續第九圖中位於位址3至5之寫入累加器指令。就一較佳實施例而言,多工器802並具有一個或多個輸入以接收啟動函數電路(如第三十圖中之元件3022,3024,3026,3018,3014與3016)之輸出,而這些啟動函數電路產生之輸出的寬度等於一個資料文字。定序器128會在控制輸入803產生一數值以控制多 工器802在這些啟動函數電路輸出中選擇其一,而非在累加器202之文字中選擇其一,以因應如第四圖中位址4之啟動函數單元輸出指令。
第九圖係一表格,顯示一個儲存於第一圖之神經網路單元121之程式記憶體129並由該神經網路單元121執行之程式。第九圖之範例程式係類似於第四圖之程式。尤其是,二者在位址0至2之指令完全相同。不過,第四圖中位址3與4之指令在第九圖中則是由寫入累加器指令取代,此指令會指示512個神經處理單元126將其累加器202輸出217作為結果133寫回資料隨機存取記憶體122之三個列,在此範例中即列16至18。也就是說,此寫入累加器指令會指示定序器128在第一時頻週期輸出一數值為16之資料隨機存取記憶體位址123以及一寫入命令,在第二時頻週期輸出一數值為17之資料隨機存取記憶體位址123以及一寫入命令,在第三時頻週期則是輸出一數值為18之資料隨機存取記憶體位址123與一寫入命令。就一較佳實施例而言,寫入累加器指令之執行時間可以與其他指令重疊,如此,寫入累加器指令就實際上就可以在這三個時頻週期內執行,其中每一個時頻週期會寫入資料隨機存取記憶體122之一列。在一實施例中,使用者指定啟動函數2934之數值並輸出(第二十九A圖)控制與狀態暫 存器127之命令2956欄,以將累加器202之所需部份寫入資料隨機存取記憶體122或權重隨機存取記憶體124。另外,寫入累加器指令可以選擇性地寫回累加器202之一子集,而非寫回累加器202之全部內容。在一實施例中,可寫回標準型之累加器202。這部分在後續對應於第二十九至三十一圖之章節會有更詳細的說明。
第十圖係顯示神經網路單元121執行第九圖之程式之時序圖。第十圖之時序圖類似於第五圖之時序圖,其中時頻週期0至512均為相同。不過,在時頻週期513-515,這512個神經處理單元126中每一個神經處理單元126之啟動函數單元212會執行第九圖中位址3至5之寫入累加器指令之其中之一。尤其是,在時頻週期513,512個神經處理單元126中每一個神經處理單元126會將累加器202輸出217之位元[15:0]作為其結果133寫回資料隨機存取記憶體122之列16中之相對應文字;在時頻週期514,512個神經處理單元126中每一個神經處理單元126會將累加器202輸出217之位元[31:16]作為其結果133寫回資料隨機存取記憶體122之列17中之相對應文字;而在時頻週期515,512個神經處理單元126中每一個神經處理單元126會將累加器202輸出217之位元[40:32]作為其結果133寫回資料隨機存取記憶體122之列18中 之相對應文字。就一較佳實施例而言,位元[47:41]會被強制設定為零值。
共享啟動函數單元
第十一圖係顯示第一圖之神經網路單元121之一實施例之方塊示意圖。在第十一圖之實施例中,一個神經元係分成兩部分,即啟動函數單元部分與算術邏輯單元部分(此部分並包含移位暫存器部分),而各個啟動函數單元部分係由多個算術邏輯單元部分共享。在第十一圖中,算術邏輯單元部分係指神經處理單元126,而共享之啟動函數單元部分則是指啟動函數單元1112。相對於如第二圖之實施例,各個神經元則是包含自己的啟動函數單元212。依此,在第十一圖實施例之一範例中,神經處理單元126(算術邏輯單元部分)可包括第二圖之累加器202、算術邏輯單元204、多工暫存器208與暫存器205,但不包括啟動函數單元212。在第十一圖之實施例中,神經網路單元121包括512個神經處理單元126,不過,本發明並不限於此。在第十一圖之範例中,這512個神經處理單元126被分成64個群組,在第十一圖中標示為群組0至63,而每個群組具有八個神經處理單元126。
神經網路單元121並包括一列緩衝 器1104與複數個共享之啟動函數單元1112,這些啟動函數單元1112係耦接於神經處理單元126與列緩衝器1104間。列緩衝器1104之寬度(以位元計)與資料隨機存取記憶體122或權重隨機存取記憶體124之一列相同,例如512個文字。每一個神經處理單元126群組具有一個啟動函數單元1112,亦即,每個啟動函數單元1112係對應於一神經處理單元126群組;如此,在第十一圖之實施例中就存在64個啟動函數單元1112對應至64個神經處理單元126群組。同一個群組之八個神經處理單元126係共享對應於此群組之啟動函數單元1112。本發明亦可應用於具有不同數量之啟動函數單元以及每一個群組中具有不同數量之神經處理單元之實施例。舉例來說,本發明亦可應用於每個群組中具有兩個、四個或十六個神經處理單元126共享同一個啟動函數單元1112之實施例。
共享啟動函數單元1112有助於縮減神經網路單元121之尺寸。尺寸縮減會犧牲效能。也就是說,依據共享率之不同,會需要使用額外的時頻週期才能產生整個神經處理單元126陣列之結果133,舉例來說,如以下第十二圖所示,在8:1之共享率的情況下就需要七個額外的時頻週期。不過,一般而言,相較於產生累加總數所需之時頻週期數(舉例來說,對於 每個神經元具有512個連結之一層,就需要512個時頻週期),前述額外增加的時頻週期數(例如7)相當少。因此,共享啟動函數單元對效能的影響非常小(例如,增加大約百分之一之計算時間),對於所能縮減神經網路單元121之尺寸而言會是一個合算的成本。
在一實施例中,每一個神經處理單元126包括一啟動函數單元212用以執行相對簡單的啟動函數,這些簡單的啟動函數單元212具有較小的尺寸而能被包含在每個神經處理單元126內;反之,共享的複雜啟動函數單元1112則是執行相對複雜的啟動函數,其尺寸會明顯大於簡單的啟動函數單元212。在此實施例中,只有在指定複雜啟動函數而需要由共享複雜啟動函數單元1112執行之情況下,需要額外的時頻週期,在指定的啟動函數可以由簡單啟動函數單元212執行之情況下,就不需要此額外的時頻週期。
第十二與第十三圖係顯示第十一圖之神經網路單元121執行第四圖之程式之時序圖。第十二圖之時序圖係類似於第五圖之時序圖,二者之時頻週期0至512均相同。不過,在時頻週期513之運算並不相同,因為第十一圖之神經處理單元126會共享啟動函數單元1112;亦即,同一個群組之神經處理單元126 會共享關聯於此群組之啟動函數單元1112,而第十一圖即顯示此共享架構。
第十三圖之時序圖之每一列係對應至標示於第一行之連續時頻週期。其他行則是分別對應至這64個啟動函數單元1112中不同的啟動函數單元1112並指出其運算。圖中僅顯示神經處理單元0,1,63之運算以簡化說明。第十三圖之時頻週期係對應至第十二圖之時頻週期,但以不同方式顯示神經處理單元126共享啟動函數單元1112之運算。如第十三圖所示,在時頻週期0至512,這64個啟動函數單元1112都是處於不啟動狀態,直到神經處理單元126執行初始化隨機處理單元指令、乘法累加指令與乘法累加旋轉指令。
如第十二與十三圖所示,在時頻週期513,啟動函數單元0(關聯於群組0之啟動函數單元1112)開始對神經處理單元0之累加器202數值217執行所指定之啟動函數,神經處理單元0即群組0中第一個神經處理單元126,而啟動函數單元1112之輸出將會被儲存於列緩衝器1104之文字0。同樣在時頻週期513,每個啟動函數單元1112都會開始對相對應神經處理單元126群組中第一個神經處理單元126之累加器202數值217執行所指定之啟動函數。因此,如第十三圖所示,在時頻週期513,啟動函數單元 0開始對神經處理單元0之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字0之結果;啟動函數單元1開始對神經處理單元8之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字8之結果;依此類推,啟動函數單元63開始對神經處理單元504之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字504之結果。
在時頻週期514,啟動函數單元0(關聯於群組0之啟動函數單元1112)開始對神經處理單元1之累加器202數值217執行所指定之啟動函數,神經處理單元1即群組0中第二個神經處理單元126,而啟動函數單元1112之輸出將會被儲存於列緩衝器1104之文字1。同樣在時頻週期514,每個啟動函數單元1112都會開始對相對應神經處理單元126群組中第二個神經處理單元126之累加器202數值217執行所指定之啟動函數。因此,如第十三圖所示,在時頻週期514,啟動函數單元0開始對神經處理單元1之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字1之結果;啟動函數單元1開始對神經處理單元9之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字9之結果;依此類推,啟動函數單 元63開始對神經處理單元505之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字505之結果。這樣的處理會持續到時頻週期520,啟動函數單元0(關聯於群組0之啟動函數單元1112)開始對神經處理單元7之累加器202數值217執行所指定之啟動函數,神經處理單元7即群組0中第八個(最後一個)神經處理單元216,而啟動函數單元1112之輸出將會被儲存於列緩衝器1104之文字7。同樣在時頻週期520,每個啟動函數單元1112都會開始對相對應神經處理單元126群組中第八個神經處理單元126之累加器202數值217執行所指定之啟動函數。因此,如第十三圖所示,在時頻週期520,啟動函數單元0開始對神經處理單元7之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字7之結果;啟動函數單元1開始對神經處理單元15之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字15之結果;依此類推,啟動函數單元63開始對神經處理單元511之累加器202執行所指定之啟動函數以產生將會儲存於列緩衝器1104之文字511之結果。
在時頻週期521,一旦這512個神經處理單元126之全部512個結果都已經產生並寫入列緩衝器1104,列緩衝器1104就會開始將其 內容寫入資料隨機存取記憶體122或是權重隨機存取記憶體124。如此,每一個神經處理單元126群組之啟動函數單元1112都執行第四圖中位址3之啟動函數指令之一部分。
如第十一圖所示在算術邏輯單元204群組中共享啟動函數單元1112之實施例,特別有助於搭配整數算術邏輯單元204之使用。這部分在後續章節如對應於第二十九A至三十三圖處會有相關說明。
MTNN與MFNN架構指令
第十四圖係一方塊示意圖,顯示一移動至神經網路(MTNN)架構指令1400以及其對應於第一圖之神經網路單元121之部分之運作。此MTNN指令1400包括一執行碼欄位1402、一src1欄位1404、一src2欄位、一gpr欄位1408與一立即欄位1412。此MTNN指令係一架構指令,亦即此指令係包含在處理器100之指令集架構內。就一較佳實施例而言,此指令集架構會利用執行碼欄位1402之一預設值,來區分MTNN指令1400與指令集架構內之其他指令。此MTNN指令1400之執行碼1402可包括常見於x86架構等之前置碼(prefix),也可以不包括。
立即欄位1412提供一數值以指定 一函數1432至神經網路單元121之控制邏輯1434。就一較佳實施例而言,此函數1432係作為第一圖之微指令105之一立即運算元。這些可以由神經網路單元121執行之函數1432包括寫入資料隨機存取記憶體122、寫入權重隨機存取記憶體124、寫入程式記憶體129、寫入控制與狀態暫存器127、開始執行程式記憶體129內之程式、暫停執行程式記憶體129內之程式、完成執行程式記憶體129內之程式後之注意請求(例如中斷)、以及重設神經網路單元121,但不限於此。就一較佳實施例而言,此神經網路單元指令組會包括一個指令,此指令之結果指出神經網路單元程式已完成。另外,此神經網路單元指令集包括一個明確產生中斷指令。就一較佳實施例而言,對神經網路單元121進行重設之運作包括將神經網路單元121中,除了資料隨機存取記憶體122、權重隨機存取記憶體124、程式記憶體129之資料會維持完整不動外之其他部分,有效地強制回復至一重設狀態(例如,清空內部狀態機器並將其設定為閒置狀態)。此外,內部暫存器,如累加器202,並不會受到重設函數之影響,而必須被明確地清空,例如使用第四圖中位址0之初始化神經處理單元指令。在一實施例中,函數1432可包括一直接執行函數,其第一來源暫存器包含一微運算(舉 例來說,可參照第三十四圖之微運算3418)。此直接執行函數指示神經網路單元121直接執行所指定之微運算。如此,架構程式就可以直接控制神經網路單元121執行運算,而非將指令寫入程式記憶體129並於後續指示神經網路單元121執行此位於程式記憶體129內之指令或是透過MTNN指令1400(或第十五圖之MFNN指令1500)之執行。第十四圖顯示此寫入資料隨機存取記憶體122之函數之一範例。
此gpr欄位指定通用暫存器檔案內之一通用暫存器。在一實施例中,每個通用暫存器均為64位元。此通用暫存器檔案提供所選定之通用暫存器之數值至神經網路單元121,如圖中所示,而神經網路單元121係將此數值作為位址1422使用。此位址1422會選擇函數1432中指定之記憶體之一列。就資料隨機存取記憶體122或權重隨機存取記憶體124而言,此位址1422會額外選擇一資料塊,其大小是此選定列中媒體暫存器之位置的兩倍(如512個位元)。就一較佳實施例而言,此位置係位於一個512位元邊界。在一實施例中,多工器會選擇位址1422(或是在以下描述之MFNN指令1400之情況下的位址1422)或是來自定序器128之位址123/125/131提供至資料隨機存取記憶體122/權重隨機存取記憶體124/程式記憶體129。在一 實施例中,資料隨機存取記憶體122具有雙埠,使神經處理單元126能夠利用媒體暫存器118對此資料隨機存取記憶體122之讀取/寫入,同時讀取/寫入此資料隨機存取記憶體122。在一實施例中,為了類似的目的,權重隨機存取記憶體124亦具有雙埠。
圖中之src1欄位1404與src2欄位1406均指定媒體暫存器檔案之一媒體暫存器。 在一實施例中,每個媒體暫存器118均為256位元。媒體暫存器檔案會將來自所選定之媒體暫存器之相連資料(例如512個位元)提供至資料隨機存取記憶體122(或是權重隨機存取記憶體124或是程式記憶體129)以寫入位址1422指定之選定列1428以及在選定列1428中由位址1422指定之位置,如圖中所示。透過一系列MTNN指令1400(以及以下所述之MFNN指令1500)之執行,執行於處理器100之架構程式即可填滿資料隨機存取記憶體122列與權重隨機存取記憶體124列並將一程式寫入程式記憶體129,例如本文所述之程式(如第四與九圖所示之程式)可使神經網路單元121對資料與權重以非常快的速度進行運算,以完成此人工神經網路。在一實施例中,此架構程式係直接控制神經網路單元121而非將程式寫入程式記憶體129。
在一實施例中,MTNN指令1400係 指定一起始來源暫存器以及來源暫存器之數量,即Q,而非指定兩個來源暫存器(如欄位1404與1406所指定者)。這種形式之MTNN指令1400會指示處理器100將指定為起始來源暫存器之媒體暫存器118以及接下來Q-1個接續的媒體暫存器118寫入神經網路單元121,也就是寫入所指定之資料隨機存取記憶體122或權重隨機存取記憶體124。就一較佳實施例而言,指令轉譯器104會將MTNN指令1400轉譯為寫入所有Q個所指定之媒體暫存器118所需數量之微指令。舉例來說,在一實施例中,當MTNN指令1400將暫存器MR4指定為起始來源暫存器並且Q為8,指令轉譯器104就會將MTNN指令1400轉譯為四個微指令,其中第一個微指令係寫入暫存器MR4與MR5,第二個微指令係寫入暫存器MR6與MR7,第三個微指令係寫入暫存器MR8與MR9,而第四個微指令係寫入暫存器MR10與MR11。在另一個實施例中,由媒體暫存器118至神經網路單元121之資料路徑是1024位元而非512位元,在此情況下,指令轉譯器104會將MTNN指令1400轉譯為兩個微指令,其中第一個微指令係寫入暫存器MR4至MR7,第二個微指令則是寫入暫存器MR8至MR11。本發明亦可應用於MFNN指令1500指定一起始目的暫存器以及目的暫存器之數量之實施例,而使每 一個MFNN指令1500可以從資料隨機存取記憶體122或權重隨機存取記憶體124之一列讀取大於單一媒體暫存器118之資料塊。
第十五圖係一方塊示意圖,顯示一移動至神經網路(MFNN)架構指令1500以及其對應於第一圖之神經網路單元121之部分之運作。此MFNN指令1500包括一執行碼欄位1502、一dst欄位1504、一gpr欄位1508以及一立即欄位1512。MFNN指令係一架構指令,亦即此指令係包含於處理器100之指令集架構內。就一較佳實施例而言,此指令集架構會利用執行碼欄位1502之一預設值,來區分MFNN指令1500與指令集架構內之其他指令。此MFNN指令1500之執行碼1502可包括常見於x86架構等之前置碼(prefix),也可以不包括。
立即欄位1512提供一數值以指定一函數1532至神經網路單元121之控制邏輯1434。就一較佳實施例而言,此函數1532係作為第一圖之微指令105之一立即運算元。這些神經網路單元121可以執行之函數1532包括讀取資料隨機存取記憶體122、讀取權重隨機存取記憶體124、讀取程式記憶體129、以及讀取控制與狀態暫存器127,但不限於此。第十五圖之範例係顯示讀取資料隨機存取記憶體122之函數1532。
此gpr欄位1508指定通用暫存器檔案內之一通用暫存器。此通用暫存器檔案提供所選定之通用暫存器之數值至神經網路單元121,如圖中所示,而神經網路單元121係將此數值作為位址1522並以類似於第十四圖之位址1422之方式進行運算,藉以選擇函數1532中指定之記憶體之一列。就資料隨機存取記憶體122或權重隨機存取記憶體124而言,此位址1522會額外選擇一資料塊,其大小即為此選定列中媒體暫存器(如256個位元)之位置。就一較佳實施例而言,此位置係位於一個256位元邊界。
此dst欄位1504係於一媒體暫存器檔案內指定一媒體暫存器。如圖中所示,媒體暫存器檔案係將來自資料隨機存取記憶體122(或權重隨機存取記憶體124或程式記憶體129)之資料(如256位元)接收至選定的媒體暫存器,此資料係讀取自資料接收中位址1522指定之選定列1528以及選定列1528中位址1522指定之位置。
神經網路單元內部隨機存取記憶體之埠配置
第十六圖係顯示第一圖之資料隨機存取記憶體122之一實施例之方塊示意圖。此資料隨機存取記憶體122包括一記憶體陣列1606、一讀取埠1602與一寫入埠1604。記憶體 陣列1606係裝載資料文字,就一較佳實施例而言,這些資料係排列成如前所述D個列之N個文字之陣列。在一實施例中,此記憶體陣列1606包括一個由64個水平排列之靜態隨機存取記憶胞構成之陣列,其中每個記憶胞具有128位元之寬度以及64位元之高度,如此即可提供一個64KB之資料隨機存取記憶體122,其寬度為8192位元並且具有64列,而此資料隨機存取記憶體122所使用之晶粒面積大致為0.2平方毫米。不過,本發明並不限於此。
就一較佳實施例而言,讀取埠1602係以多工方式耦接至神經處理單元126以及媒體暫存器118。進一步來說,這些媒體暫存器118可以透過結果匯流排耦接至讀取埠,而結果匯流排也用於提供資料至重排緩衝器與/或結果傳送匯流排以提供至其他執行單元112。這些神經處理單元126與媒體暫存器118係共享此讀取埠1602,以對資料隨機存取記憶體122進行讀取。又,就一較佳實施例而言,寫入埠1604亦是以多工方式耦接至神經處理單元126以及媒體暫存器118。這些神經處理單元126與媒體暫存器118係共享此寫入埠1604,以寫入此資料隨機存取記憶體122。如此,媒體暫存器118就可以在神經處理單元126對資料隨機存取記憶體122進行讀取之同時,寫入資料隨機存取記憶體 122,而神經處理單元126也就可以在媒體暫存器118正在對資料隨機存取記憶體122進行讀取之同時,寫入資料隨機存取記憶體122。這樣的進行方式可以提升效能。舉例來說,這些神經處理單元126可以讀取資料隨機存取記憶體122(例如持續執行計算),而此同時,媒體暫存器118可以將更多資料文字寫入資料隨機存取記憶體122。在另一範例中,這些神經處理單元126可以將計算結果寫入資料隨機存取記憶體122,而此同時,媒體暫存器118則可以從資料隨機存取記憶體122讀取計算結果。在一實施例中,神經處理單元126可以將一列計算結果寫入資料隨機存取記憶體122,同時還從資料隨機存取記憶體122讀取一列資料文字。在一實施例中,記憶體陣列1606係配置於記憶體區塊(bank)內。在神經處理單元126存取資料隨機存取記憶體122的時候,所有的記憶體區塊都會被啟動來存取記憶體陣列1606之一完整列;不過,在媒體暫存器118存取資料隨機存取記憶體122的時候,只有所指定的記憶體區塊會被啟動。在一實施例中,每個記憶體區塊之寬度均為128位元,而媒體暫存器118之寬度則是256位元,如此,舉例來說,每次存取媒體暫存器118就需要啟動兩個記憶體區塊。在一實施例中,這些埠1602/1604之其中之一為讀取/寫入 埠。在一實施例中,這些埠1602/1604都是讀取/寫入埠。
讓這些神經處理單元126具備如本文所述之旋轉器之能力的優點在於,相較於為了確保神經處理單元126可被充分利用而使架構程式得以持續提供資料至資料隨機存取記憶體122並且在神經處理單元126執行計算之同時,從資料隨機存取記憶體122取回結果所需要之記憶體陣列,此能力有助於減少資料隨機存取記憶體122之記憶體陣列1606的列數,因而可以縮小尺寸。
內部隨機存取記憶體緩衝器
第十七圖係顯示第一圖之權重隨機存取記憶體124與一緩衝器1704之一實施例之方塊示意圖。此權重隨機存取記憶體124包括一記憶體陣列1706與一埠1702。此記憶體陣列1706係裝載權重文字,就一較佳實施例而言,這些權重文字係排列成如前所述W個列之N個文字之陣列。在一實施例中,此記憶體陣列1706包括一個由128個水平排列之靜態隨機存取記憶胞構成之陣列,其中每個記憶胞具有64位元之寬度以及2048位元之高度,如此即可提供一個2MB之權重隨機存取記憶體124,其寬度為8192位元並且具有2048列,而此權重隨機存取記憶體124所使用之晶粒面積大致為2.4平方毫 米。不過,本發明並不限於此。
就一較佳實施例而言,此埠1702係以多工方式耦接至神經處理單元126與緩衝器1704。這些神經處理單元126與緩衝器1704係透過此埠1702讀取並寫入權重隨機存取記憶體124。緩衝器1704並耦接至第一圖之媒體暫存器118,如此,媒體暫存器118即可透過緩衝器1704讀取並寫入權重隨機存取記憶體124。此方式之優點在於,當神經處理單元126正在讀取或寫入權重隨機存取記憶體124的時候,媒體暫存器118還可以寫入緩衝器1704或是從緩衝器1704讀取(在較佳之情況下係擱置這些神經處理單元126,不過若是神經處理單元126正在執行,就必須避免存取權重隨機存取記憶體124)。此方式可以提升效能,特別是因為媒體暫存器118對於權重隨機存取記憶體124之讀取與寫入相對上明顯小於神經處理單元126對於權重隨機存取記憶體124之讀取與寫入。舉例來說,在一實施例中,神經處理單元126一次讀取/寫入8192個位元(一列),不過,媒體暫存器118之寬度僅為256位元,而每個MTNN指令1400僅寫入兩個媒體暫存器118,即512位元。 因此,在架構程式執行十六個MTNN指令1400以填滿緩衝器1704之情況下,神經處理單元126與存取權重隨機存取記憶體124之架構程式間 發生衝突的時間會少於大致全部時間之百分之六。在另一實施例中,指令轉譯器104將一個MTNN指令1400轉譯為兩個微指令105,而每個微指令會將單一個媒體暫存器118寫入緩衝器1704,如此,神經處理單元126與架構程式在存取權重隨機存取記憶體124時產生衝突之頻率還會進一步減少。
在包含緩衝器1704之實施例中,利用架構程式寫入權重隨機存取記憶體124需要多個MTNN指令1400。一個或多個MTNN指令1400指定一函數1432以寫入緩衝器1704中指定之資料塊,隨後一MTNN指令1400指定一函數1432指示神經網路單元121將緩衝器1704之內容寫入權重隨機存取記憶體124之一選定列。單一個資料塊之大小為媒體暫存器118之位元數的兩倍,而這些資料塊會自然地排列於緩衝器1704中。在一實施例中,每個指定函數1432以寫入緩衝器1704指定資料塊之MTNN指令1400係包含一位元遮罩(bitmask),其具有位元對應至緩衝器1704之各個資料塊。來自兩個指定之來源暫存器118之資料係被寫入緩衝器1704之資料塊中,在位元遮罩內之對應位元為被設定位元之各個資料塊。此實施例有助於權重隨機存取記憶體124之一列內存在重複資料值之情形。舉例來說,為了將緩衝器1704(以及接下 去之權重隨機存取記憶體之一列)歸零,程式設計者可以將零值載入來源暫存器並且設定位元遮罩之所有位元。此外,位元遮罩也可以讓程式設計者僅寫入緩衝器1704中之選定資料塊,而使其他資料塊維持其先前之資料狀態。
在包含緩衝器1704之實施例中,利用架構程式讀取權重隨機存取記憶體124需要多個MFNN指令1500。初始的MFNN指令1500指定一函數1532將權重隨機存取記憶體124之一指定列載入緩衝器1704,隨後一個或多個MFNN指令1500指定一函數1532將緩衝器1704之一指定資料塊讀取至目的暫存器。單一個資料塊之大小即為媒體暫存器118之位元數,而這些資料塊會自然地排列於緩衝器1704中。本發明之技術特徵亦可適用於其他實施例,如權重隨機存取記憶體124具有多個緩衝器1704,透過增加神經處理單元126執行時架構程式之可存取數量,以進一步減少神經處理單元126與架構程式間因存取權重隨機存取記憶體124所產生之衝突,而增加在神經處理單元126不須存取權重隨機存取記憶體124之時頻週期內,改由緩衝器1704進行存取之可能性。
第十六圖係描述一雙埠資料隨機存取記憶體122,不過,本發明並不限於此。本發明之技術特徵亦可適用於權重隨機存取記憶 體124亦為雙埠設計之其他實施例。此外,第十七圖中描述一緩衝器搭配權重隨機存取記憶體124使用,不過,本發明並不限於此。本發明之技術特徵亦可適用於資料隨機存取記憶體122具有一個類似於緩衝器1704之相對應緩衝器之實施例。
可動態配置之神經處理單元
第十八圖係顯示第一圖之一可動態配置之神經處理單元126之方塊示意圖。第十八圖之神經處理單元126係類似於第二圖之神經處理單元126。不過,第十八圖之神經處理單元126係可動態配置以運作於兩個不同配置之其中之一。在第一個配置中,第十八圖之神經處理單元126之運作係類似於第二圖之神經處理單元126。也就是說,在第一個配置中,在此標示為“寬的”配置或“單一個”配置,神經處理單元126之算術邏輯單元204對單一個寬的資料文字以及單一個寬的權重文字(例如16個位元)執行運算以產生單一個寬的結果。相較之下,在第二個配置中,即本文標示為“窄的”配置或“雙數”配置,神經處理單元126會對兩個窄的資料文字以及兩個窄的權重文字(例如8個位元)執行運算分別產生兩個窄的結果。在一實施例中,神經處理單元126之配置(寬或窄)係由初始化神經處理單元指令(例如位於前述第二十 圖中位址0之指令)達成。另外,此配置也可以由一個具有函數1432指定來設定神經處理單元設定之配置(寬或窄)之MTNN指令來達成。 就一較佳實施例而言,程式記憶體129指令或確定配置(寬或窄)之MTNN指令會填滿配置暫存器。舉例來說,配置暫存器之輸出係提供給算術邏輯單元204、啟動函數單元212以及產生多工暫存器控制信號213之邏輯。基本上,第十八圖之神經處理單元126之元件與第二圖中相同編號之元件會執行類似的功能,可從中取得參照以瞭解第十八圖之實施例。以下係針對第十八圖之實施例包含其與第二圖之不同處進行說明。
第十八圖之神經處理單元126包括兩個暫存器205A與205B、兩個三輸入多工暫存器208A與208B、一個算術邏輯單元204、兩個累加器202A與202B、以及兩個啟動函數單元212A與212B。暫存器205A/205B分別具有第二圖之暫存器205之寬度之一半(如8個位元)。暫存器205A/205B分別從權重隨機存取記憶體124接收一相對應之窄權重文字206A/B206(例如8個位元)並將其輸出203A/203B在一後續時頻週期提供至算術邏輯單元204之運算元選擇邏輯1898。神經處理單元126處於寬配置的時候,暫存器205A/205B就會一起運作以接收來 自權重隨機存取記憶體124之一寬權重文字206A/206B(例如16個位元),類似於第二圖之實施例中的暫存器205;神經處理單元126處於窄配置的時候,暫存器205A/205B實際上就會是獨立運作,各自接收來自權重隨機存取記憶體124之一窄權重文字206A/206B(例如8個位元),如此,神經處理單元126實際上就相當於兩個窄的神經處理單元各自獨立運作。不過,不論神經處理單元126之配置態樣為何,權重隨機存取記憶體124之相同輸出位元都會耦接並提供至暫存器205A/205B。舉例來說,神經處理單元0之暫存器205A接收到位元組0、神經處理單元0之暫存器205B接收到位元組1、神經處理單元1之暫存器205A接收到位元組2、神經處理單元1之暫存器205B接收到位元組3、依此類推,神經處理單元511之暫存器205B就會接收到位元組1023。
多工暫存器208A/208B分別具有第二圖之暫存器208之寬度之一半(如8個位元)。 多工暫存器208A會在輸入207A、211A與1811A中選擇一個儲存至其暫存器並在後續時頻週期由輸出209A提供,多工暫存器208B會在輸入207B、211B與1811B中選擇一個儲存至其暫存器並在後續時頻週期由輸出209B提供至運算元選擇邏輯1898。輸入207A從資料隨機存取記 憶體122接收一窄資料文字(例如8個位元),輸入207B從資料隨機存取記憶體122接收一窄資料文字。當神經處理單元126處於寬配置的時候,多工暫存器208A/208B實際上就會是一起運作以接收來自資料隨機存取記憶體122之一寬資料文字207A/207B(例如16個位元),類似於第二圖之實施例中的多工暫存器208;神經處理單元126處於窄配置的時候,多工暫存器208A/208B實際上就會是獨立運作,各自接收來自資料隨機存取記憶體122之一窄資料文字207A/207B(例如8個位元),如此,神經處理單元126實際上就相當於兩個窄的神經處理單元各自獨立運作。不過,不論神經處理單元126之配置態樣為何,資料隨機存取記憶體122之相同輸出位元都會耦接並提供至多工暫存器208A/208B。舉例來說,神經處理單元0之多工暫存器208A接收到位元組0、神經處理單元0之多工暫存器208B接收到位元組1、神經處理單元1之多工暫存器208A接收到位元組2、神經處理單元1之多工暫存器208B接收到位元組3、依此類推,神經處理單元511之多工暫存器208B就會接收到位元組1023。
輸入211A接收鄰近之神經處理單元126之多工暫存器208A之輸出209A,輸入211B接收鄰近之神經處理單元126之多工暫存 器208B之輸出209B。輸入1811A接收鄰近神經處理單元126之多工暫存器208B之輸出209B,而輸入1811B接收鄰近神經處理單元126之多工暫存器208A之輸出209A。第十八圖所示之神經處理單元126係屬於第一圖所示之N個神經處理單元126之其中之一並標示為神經處理單元J。也就是說,神經處理單元J是這N個神經處理單元之一代表例。就一較佳實施例而言,神經處理單元J之多工暫存器208A輸入211A會接收範例J-1之神經處理單元126之多工暫存器208A輸出209A,而神經處理單元J之多工暫存器208A輸入1811A會接收範例J-1之神經處理單元126之多工暫存器208B輸出209B,並且神經處理單元J之多工暫存器208A輸出209A會同時提供至範例J+1之神經處理單元126之多工暫存器208A輸入211A以及範例J之神經處理單元126之多工暫存器208B輸入211B;神經處理單元J之多工暫存器208B之輸入211B會接收範例J-1之神經處理單元126之多工暫存器208B輸出209B,而神經處理單元J之多工暫存器208B之輸入1811B會接收範例J之神經處理單元126之多工暫存器208A輸出209A,並且,神經處理單元J之多工暫存器208B之輸出209B會同時提供至範例J+1之神經處理單元126之多工暫存器208A輸入1811A以及範例J+1之神經處理單元 126之多工暫存器208B輸入211B。
控制輸入213控制多工暫存器208A/208B中之每一個,從這三個輸入中選擇其一儲存至其相對應之暫存器,並在後續步驟提供至相對應之輸出209A/209B。當神經處理單元126被指示要從資料隨機存取記憶體122載入一列時(例如第二十圖中位址1之乘法累加指令,詳如後述),無論此神經處理單元126是處於寬配置或是窄配置,控制輸入213會控制多工暫存器208A/208B中之每一個多工暫存器,從資料隨機存取記憶體122之選定列之相對應窄文字中選擇一相對應之窄資料文字207A/207B(如8位元)。
當神經處理單元126接收指示需要對先前接收之資料列數值進行旋轉時(例如第二十圖中位址2之乘法累加旋轉指令,詳如後述),若是神經處理單元126是處於窄配置,控制輸入213就會控制多工暫存器208A/208B中每一個多工暫存器選擇相對應之輸入1811A/1811B。在此情況下,多工暫存器208A/208B實際上會是獨立運作而使神經處理單元126實際上就如同兩個獨立的窄神經處理單元。如此,N個神經處理單元126之多工暫存器208A與208B共同運作就會如同一2N個窄文字之旋轉器,這部分在後續對應於第十九圖處 有更詳細的說明。
當神經處理單元126接收指示需要對先前接收之資料列數值進行旋轉時,若是神經處理單元126是處於寬配置,控制輸入213就會控制多工暫存器208A/208B中每一個多工暫存器選擇相對應輸入211A/211B。在此情況下,多工暫存器208A/208B會共同運作而實際上就好像這個神經處理單元126是單一個寬神經處理單元126。如此,N個神經處理單元126之多工暫存器208A與208B共同運作就會如同一N個寬文字之旋轉器,類似對應於第三圖所描述之方式。
算術邏輯單元204包括運算元選擇邏輯1898、一個寬乘法器242A、一個窄乘法器242B、一個寬雙輸入多工器1896A,一個窄雙輸入多工器1896B,一個寬加法器244A與一個窄加法器244B。實際上,此算術邏輯單元204可理解為包括運算元選擇邏輯、一個寬算術邏輯單元204A(包括前述寬乘法器242A、前述寬多工器1896A與前述寬加法器244A)與一個窄算術邏輯單元204B(包括前述窄乘法器242B、前述窄多工器1896B與前述窄加法器244B)。就一較佳實施例而言,寬乘法器242A可將兩個寬文字相乘,類似於第二圖之乘法器242,例如一個16位元乘16位元之乘法器。窄乘法器242B可 將兩個窄文字相乘,例如一個8位元乘8位元之乘法器以產生一個16位元之結果。神經處理單元126處於窄配置時,透過運算元選擇邏輯1898之協助,即可充分利用寬乘法器242A,將其作為一個窄乘法器使兩個窄文字相乘,如此神經處理單元126就會如同兩個有效運作之窄神經處理單元。就一較佳實施例而言,寬加法器244A會將寬多工器1896A之輸出與寬累加器202A之輸出217A相加已產生一總數215A供寬累加器202A使用,其運作係類似於第二圖之加法器244。窄加法器244B會將窄多工器1896B之輸出與窄累加器202B輸出217B相加以產生一總數215B供窄累加器202B使用。在一實施例中,窄累加器202B具有28位元之寬度,以避免在進行多達1024個16位元乘積之累加運算時會喪失準確度。神經處理單元126處於寬配置時,窄乘法器244B、窄累加器202B與窄啟動函數單元212B最好是處於不啟動狀態以降低能量耗損。
運算元選擇邏輯1898會從209A、209B、203A與203B中選擇運算元提供至算術邏輯單元204之其他元件,詳如後述。就一較佳實施例而言,運算元選擇邏輯1898也具有其他功能,例如執行帶符號數值資料文字與權重文字之符號延展。舉例來說,若是神經處理單元126 是處於窄配置,運算元選擇邏輯1898會將窄資料文字與權重文字之符號延展至寬文字之寬度,然後才提供給寬乘法器242A。類似地,若是算術邏輯單元204接受指示要傳遞一個窄資料/權重文字(利用寬多工器1896A跳過寬乘法器242A),運算元選擇邏輯1898會將窄資料文字與權重文字之符號延展至寬文字之寬度,然後才提供給寬加法器244A。就一較佳實施例而言,此執行符號延展功能之邏輯亦顯示於第二圖之神經處理單元126之算術邏輯單元204之內部。
寬多工器1896A接收寬乘法器242A之輸出與來自運算元選擇邏輯1898之一運算元,並從這些輸入中選擇其一提供給寬加法器244A,窄多工器1896B接收窄乘法器242B之輸出與來自運算元選擇邏輯1898之一運算元,並從這些輸入中選擇其一提供給窄加法器244B。
運算元選擇邏輯1898會依據神經處理單元126之配置以及算術邏輯單元204將要執行之算術與/或邏輯運算提供運算元,此算術/邏輯運算係依據神經處理單元126執行之指令所指定之函數來決定。舉例來說,若是指令指示算術邏輯單元204執行一乘法累加運算而神經處理單元126係處於寬配置,運算元選擇邏輯 1898就將輸出209A與209B串接構成之一寬文字提供至寬乘法器242A之一輸入,而將輸出203A與203B串接構成之一寬文字提供至另一輸入,而窄乘法器242B則是不啟動,如此,神經處理單元126之運作就會如同單一個類似於第二圖之神經處理單元126之寬神經處理單元126。不過,若是指令指示算術邏輯單元執行一乘法累加運算並且神經處理單元126是處於窄配置,運算元選擇邏輯1898就將一延展後或擴張後版本之窄資料文字209A提供至寬乘法器242A之一輸入,而將延展後版本之窄權重文字203A提供至另一輸入;此外,運算元選擇邏輯1898會將窄資料文字209B提供至窄乘法器242B之一輸入,而將窄權重文字203B提供至另一輸入。若是窄文字帶有符號,運算元選擇邏輯1898就會對窄文字進行符號延展,以達成如前所述對窄文字進行延展或擴張之運算,不過,若是窄文字不帶有符號,運算元選擇邏輯1898就會在窄文字加入上方零值位元。
在另一範例中,若是神經處理單元126處於寬配置並且指令指示算術邏輯單元204執行一權重文字之累加運算,寬乘法器242A就會被跳過,而運算元選擇邏輯1898就會將輸出203A與203B串接提供至寬多工器1896A以提供給寬加法器244A。不過,若是神經處理單元126 處於窄配置並且指令指示算術邏輯單元204執行一權重文字之累加運算,寬乘法器242A就會被跳過,而運算元選擇邏輯1898就會將一延展後版本之輸出203A提供至寬多工器1896A以提供給寬加法器244A;此外,窄乘法器242B會被跳過,運算元選擇邏輯1898會將延展後版本之輸出203B提供至窄多工器1896B以提供給窄加法器244B。
在另一範例中,若是神經處理單元126處於寬配置並且指令指示算術邏輯單元204執行一資料文字之累加運算,寬乘法器242A就會被跳過,而運算元選擇邏輯1898就會將輸出209A與209B串接提供至寬多工器1896A以提供給寬加法器244A。不過,若是神經處理單元126處於窄配置並且指令指示算術邏輯單元204執行一資料文字之累加運算,寬乘法器242A就會被跳過,而運算元選擇邏輯1898就會將一延展後版本之輸出209A提供至寬多工器1896A以提供給寬加法器244A;此外,窄乘法器242B會被跳過,運算元選擇邏輯1898會將延展後版本之輸出209B提供至窄多工器1896B以提供給窄加法器244B。權重/資料文字之累加計算有助於平均運算,平均運算可用如影像處理在內之某些人工神經網路應用之共源(pooling)層。
就一較佳實施例而言,神經處理單 元126還包括一第二寬多工器(未圖示),用以跳過寬加法器244A,以利於將寬配置下之一寬資料/權重文字或是窄配置下之一延展後之窄資料/權重文字載入寬累加器202A,以及一第二窄多工器(未圖示),用以跳過窄加法器244B,以利於將窄配置下之一窄資料/權重文字載入窄累加器202B。就一較佳實施例而言,此算術邏輯單元204還包括寬與窄之比較器/多工器組合(未圖示),此比較器/多工器組合係接收相對應之累加器數值217A/217B與相對應之多工器1896A/1896B輸出,藉以在累加器數值217A/217B與一資料/權重文字209A/209B/203A/203B間選擇最大值,某些人工神經網路應用之共源(pooling)層係使用此運算,這部分在後續章節,例如對應於第二十七與二十八圖處。會有更詳細的說明。此外,運算元選擇邏輯1898係用以提供數值零之運算元(作為零值之附加或是用以清除累加器),並提供數值一之運算元(用於乘一之乘法運算)。
窄啟動函數單元212B接收窄累加器202B之輸出217B並對其執行一啟動函數以產生一窄結果133B,寬啟動函數單元212A接收寬累加器202A之輸出217A並對其執行一啟動函數以產生一寬結果133B。神經處理單元126處於窄配置時,寬啟動函數單元212A會依此配 置理解累加器202A之輸出217A並對其執行一啟動函數以產生一窄結果133,如8位元,這部分在後續章節如對應於第二十九A至三十圖處有更詳細的說明。
如前所述,單一個神經處理單元126在處於窄配置時實際上可以作為兩個窄神經處理單元來運作,因此,對於較小的文字而言,相較於寬配置時,大致上可以提供多達兩倍的處理能力。舉例來說,假定神經網路層具有1024個神經元,而每個神經元從前一層接收1024個窄輸入(並具有窄權重文字),如此就會產生一百萬個連結。對於具有512個神經處理單元126之神經網路單元121而言,在窄配置下(相當於1024個窄神經處理單元),雖然處理的是窄文字而非寬文字,不過其所能處理之連結數可以達到寬配置之四倍(一百萬個連結對上256K個連結),而所需的時間大致為一半(約1026個時頻週期對上514個時頻週期)。
在一實施例中,第十八圖之動態配置神經處理單元126包括類似於多工暫存器208A與208B之三輸入多工暫存器以取代暫存器205A與205B,以構成一旋轉器,處理由權重隨機存取記憶體124接收之權重文字列,此運作部分類似於第七圖之實施例所描述之方式但應用於第十八圖所述之動態配置中。
第十九圖係一方塊示意圖,顯示依據第十八圖之實施例,利用第一圖之神經網路單元之N個神經處理單元126之2N個多工暫存器208A/208B,對於由第一圖之資料隨機存取記憶體取得之一列資料文字207執行如同一旋轉器之運作。在第十九圖之實施例中,N是512,神經網路單元121具有1024個多工暫存器208A/208B,標示為0至511,分別對應至512個神經處理單元126以及實際上1024個窄神經處理單元。神經處理單元126內之兩個窄神經處理單元分別標示為A與B,在每個多工暫存器208中,其相對應之窄神經處理單元亦加以標示。 進一步來說,標示為0之神經處理單元126之多工暫存器208A係標示為0-A,標示為0之神經處理單元126之多工暫存器208B係標示為0-B,標示為1之神經處理單元126之多工暫存器208A係標示為1-A,標示為1之神經處理單元126之多工暫存器208B係標示為1-B,標示為511之神經處理單元126之多工暫存器208A係標示為511-A,而標示為511之神經處理單元126之多工暫存器208B係標示為511-B,其數值亦對應至後續第二十一圖所述之窄神經處理單元。
每個多工暫存器208A在資料隨機存取記憶體122之D個列之其中一列中接收其相對應的窄資料文字207A,而每個多工暫存器 208B在資料隨機存取記憶體122之D個列之其中一列中接收其相對應的窄資料文字207B。也就是說,多工暫存器0-A接收資料隨機存取記憶體122列之窄資料文字0,多工暫存器0-B接收資料隨機存取記憶體122列之窄資料文字1,多工暫存器1-A接收資料隨機存取記憶體122列之窄資料文字2,多工暫存器1-B接收資料隨機存取記憶體122列之窄資料文字3,依此類推,多工暫存器511-A接收資料隨機存取記憶體122列之窄資料文字1022,而多工暫存器511-B則是接收資料隨機存取記憶體122列之窄資料文字1023。此外,多工暫存器1-A接收多工暫存器0-A之輸出209A作為其輸入211A,多工暫存器1-B接收多工暫存器0-B之輸出209B作為其輸入211B,依此類推,多工暫存器511-A接收多工暫存器510-A之輸出209A作為其輸入211A,多工暫存器511-B接收多工暫存器510-B之輸出209B作為其輸入211B,並且多工暫存器0-A接收多工暫存器511-A之輸出209A作為其輸入211A,多工暫存器0-B接收多工暫存器511-B之輸出209B作為其輸入211B。每個多工暫存器208A/208B都會接收控制輸入213以控制其選擇資料文字207A/207B或是旋轉後輸入211A/211B或是旋轉後輸入1811A/1811B。最後,多工暫存器1-A接收多工暫存器0-B之輸出 209B作為其輸入1811A,多工暫存器1-B接收多工暫存器1-A之輸出209A作為其輸入1811B,依此類推,多工暫存器511-A接收多工暫存器510-B之輸出209B作為其輸入1811A,多工暫存器511-B接收多工暫存器511-A之輸出209A作為其輸入1811B,並且多工暫存器0-A接收多工暫存器511-B之輸出209B作為其輸入1811A,多工暫存器0-B接收多工暫存器0-A之輸出209A作為其輸入1811B。每個多工暫存器208A/208B都會接收控制輸入213以控制其選擇資料文字207A/207B或是旋轉後輸入211A/211B或是旋轉後輸入1811A/1811B。在一運算模式中,在第一時頻週期,控制輸入213會控制每個多工暫存器208A/208B選擇資料文字207A/207B儲存至暫存器供後續提供至算術邏輯單元204;而在後續時頻週期(例如前述之M-1時頻週期),控制輸入213會控制每個多工暫存器208A/208B選擇旋轉後輸入1811A/1811B儲存至暫存器供後續提供至算術邏輯單元204,這部分在後續章節會有更詳細的說明。
第二十圖係一表格,顯示一個儲存於第一圖之神經網路單元121之程式記憶體129並由該神經網路單元121執行之程式,而此神經網路單元121具有如第十八圖之實施例所示之神經處理單元126。第二十圖之範例程式係類似 於第四圖之程式。以下係針對其差異進行說明。位於位址0之初始化神經處理單元係指令指定神經處理單元126將會進入窄配置。此外,如圖中所示,位於位址2之乘法累加旋轉指令係指定一數值為1023之計數值並需要1023個時頻週期。這是因為第二十圖之範例中假定在一層中實際上具有1024個窄(如8位元)神經元(即神經處理單元),每個窄神經元具有1024個來自前一層之1024個神經元之連結輸入,因此總共有1024K個連結。每個神經元從每個連結輸入接收一個8位元資料值並將此8位元資料值乘上一個適當的8位元權重值。
第二十一圖係顯示一神經網路單元121執行第二十圖之程式之時序圖,此神經網路單元121具有如第十八圖所示之神經處理單元126執行於窄配置。第二十一圖之時序圖係類似於第五圖之時序圖。以下係針對其差異進行說明。
在第二十一圖之時序圖中,這些神經處理單元126會處於窄配置,這是因為位於位址0之初始化神經處理單元指令將其初始化為窄配置。所以,這512個神經處理單元126實際上運作起來就如同1024個窄神經處理單元(或神經元),這1024個窄神經處理單元在欄位內係以神經處理單元0-A與神經處理單元0-B(標示 為0之神經處理單元126之兩個窄神經處理單元),神經處理單元1-A與神經處理單元1-B(標示為1之神經處理單元126之兩個窄神經處理單元),依此類推直到神經處理單元511-A與神經處理單元511-B(標示為511之神經處理單元126之兩個窄神經處理單元),加以指明。為簡化說明,圖中僅顯示窄神經處理單元0-A、0-B與511-B之運算。因為位於位址2之乘法累加旋轉指令所指定之計數值為1023,而需要1023個時頻週期進行運作因此,第二十一圖之時序圖之列數包括多達1026個時頻週期。
在時頻週期0,這1024個神經處理單元之每一個都會執行第四圖之初始化指令,即第五圖所示指派零值至累加器202之運作。
在時頻週期1,這1024個窄神經處理單元之每一個都會執行第二十圖中位於位址1之乘法累加指令。如圖中所示,窄神經處理單元0-A將累加器202A數值(即零)加上資料隨機存取記憶體122之列17窄文字0與權重隨機存取記憶體124之列0窄文字0之乘積;窄神經處理單元0-B將累加器202B數值(即零)加上資料隨機存取記憶體122之列17窄文字1與權重隨機存取記憶體124之列0窄文字1之乘積;依此類推直到窄神經處理單元511-B將累加器202B數值(即零)加上資料隨機存取記憶體122之列17 窄文字1023與權重隨機存取記憶體124之列0窄文字1023之乘積。
在時頻週期2,這1024個窄神經處理單元之每一個都會執行第二十圖中位於位址2之乘法累加旋轉指令之第一次循環。如圖中所示,窄神經處理單元0-A將累加器202A數值217A加上由窄神經處理單元511-B之多工暫存器208B輸出209B所接收之旋轉後窄資料文字1811A(也就是由資料隨機存取記憶體122所接收之窄資料文字1023)與權重隨機存取記憶體124之列1窄文字0之乘積;窄神經處理單元0-B將累加器202B數值217B加上由窄神經處理單元0-A之多工暫存器208A輸出209A所接收之旋轉後窄資料文字1811B(也就是由資料隨機存取記憶體122所接收之窄資料文字0)與權重隨機存取記憶體124之列1窄文字1之乘積;依此類推,直到窄神經處理單元511-B將累加器202B數值217B加上由窄神經處理單元511-A之多工暫存器208A輸出209A所接收之旋轉後窄資料文字1811B(也就是由資料隨機存取記憶體122所接收之窄資料文字1022)與權重隨機存取單元124之列1窄文字1023之乘積。
在時頻週期3,這1024個窄神經處理單元之每一個都會執行第二十圖中位於位址2之乘法累加旋轉指令之第二次循環。如圖中所 示,窄神經處理單元0-A將累加器202A數值217A加上由窄神經處理單元511-B之多工暫存器208B輸出209B所接收之旋轉後窄資料文字1811A(也就是由資料隨機存取記憶體122所接收之窄資料文字1022)與權重隨機存取記憶體124之列2窄文字0之乘積;窄神經處理單元0-B將累加器202B數值217B加上由窄神經處理單元0-A之多工暫存器208A輸出209A所接收之旋轉後窄資料文字1811B(也就是由資料隨機存取記憶體122所接收之窄資料文字1023)與權重隨機存取單元124之列2窄文字1之乘積;依此類推,直到窄神經處理單元511-B將累加器202B數值217B加上由窄神經處理單元511-A之多工暫存器208A輸出209A所接收之旋轉後窄資料文字1811B(也就是由資料隨機存取記憶體122所接收之窄資料文字1021)與權重隨機存取記憶體124之列2窄文字1023之乘積。如第二十一圖所示,此運算會在後續1021個時頻週期持續進行,直到以下所述之時頻週期1024。
在時頻週期1024,這1024個窄神經處理單元之每一個都會執行第二十圖中位於位址2之乘法累加旋轉指令之第1023次循環。如圖中所示,窄神經處理單元0-A將累加器202A數值217A加上由窄神經處理單元511-B之多工暫存器208B輸出209B所接收之旋轉後窄資料文 字1811A(也就是由資料隨機存取記憶體122所接收之窄資料文字1)與權重隨機存取記憶體124之列1023窄文字0之乘積;窄神經處理單元0-B將累加器202B數值217B加上由窄神經處理單元0-A之多工暫存器208A輸出209A所接收之旋轉後窄資料文字1811B(也就是由資料隨機存取記憶體122所接收之窄資料文字2)與權重隨機存取記憶體124之列1023窄文字1之乘積;依此類推,直到窄神經處理單元511-B將累加器202B數值217B加上由窄神經處理單元511-A之多工暫存器208A輸出209A所接收之旋轉後窄資料文字1811B(也就是由資料隨機存取記憶體122所接收之窄資料文字0)與權重隨機存取記憶體124之列1023窄文字1023之乘積。
在時頻週期1023,這1024個窄神經處理單元中之每一個之啟動函數單元212A/212B會執行第二十圖中位於位址3之啟動函數指令。最後,在時頻週期1026,這1024個窄神經處理單元中之每一個會將其窄結果133A/133B寫回資料隨機存取記憶體122之列16中之相對應窄文字,以執行第二十圖中位於位址4之寫入啟動函數單元指令。亦即,神經處理單元0-A之窄結果133A會被寫入資料隨機存取記憶體122之窄文字0,神經處理單元0-B之窄結果133B會被寫入資料隨機存取記憶體122之 窄文字1,依此類推,直到神經處理單元511-B之窄結果133B會被寫入資料隨機存取記憶體122之窄文字1023。第二十二圖係以方塊圖顯示前述對應於第二十一圖之運算。
第二十二圖係顯示第一圖之神經網路單元121之方塊示意圖,此神經網路單元121具有如第十八圖所示之神經處理單元126以執行第二十圖之程式。此神經網路單元121包括512個神經處理單元126,即1024個窄神經處理單元,資料隨機存取記憶體122,以及權重隨機存取記憶體124,資料隨機存取記憶體122係接收其位址輸入123,權重隨機存取記憶體124係接收其位址輸入125。雖然圖中並未顯示,不過,在時頻週期0,這1024個窄神經處理單元都會執行第二十圖之初始化指令。如圖中所示,在時頻週期1,列17之1024個8位元資料文字會從資料隨機存取記憶體122讀出並提供至這1024個窄神經處理單元。在時頻週期1至1024,列0至1023之1024個8位元權重文字會分別從權重隨機存取記憶體124讀出並提供至這1024個窄神經處理單元。雖然圖中並未顯示,不過,在時頻週期1,這1024個窄神經處理單元會對載入之資料文字與權重文字執行其相對應之乘法累加運算。在時頻週期2至1024,這1024個窄神經處理單元之多工暫存器208A/208B之運作係 如同一個1024個8位元文字之旋轉器,會將先前載入資料隨機存取記憶體122之列17之資料文字旋轉至鄰近之窄神經處理單元,而這些窄神經處理單元會對相對應之旋轉後資料文字以及由權重隨機存取記憶體124載入之相對應窄權重文字執行乘法累加運算。雖然圖中並未顯示,在時頻週期1025,這1024個窄啟動函數單元212A/212B會執行啟動指令。在時頻週期1026,這1024個窄神經處理單元會將其相對應之1024個8位元結果133A/133B寫回資料隨機存取記憶體122之列16。
由此可以發現,相較於第二圖之實施例,第十八圖之實施例讓程式設計者具有彈性可以選擇使用寬資料與權重文字(如16位元)以及窄資料與權重文字(如8位元)執行計算,以因應特定應用下對於準確度的需求。從一個面向來看,對於窄資料之應用而言,第十八圖之實施例相較於第二圖之實施例可提供兩倍的效能,但必須增加額外的窄元件(例如多工暫存器208B、暫存器205B、窄算術邏輯單元204B、窄累加器202B、窄啟動函數單元212B)作為代價,這些額外的窄元件會使神經處理單元126增加約50%之面積。
三模神經處理單元
第二十三圖係顯示第一圖之一可動態配置之神經處理單元126之另一實施例之方塊示意圖。第二十三圖之神經處理單元126不但可用於寬配置與窄配置,還可用以一第三種配置,在此稱為“漏斗(funnel)”配置。第二十三圖之神經處理單元126係類似於第十八圖之神經處理單元126。不過,第十八圖中之寬加法器244A在第二十三圖之神經處理單元126中係由一個三輸入寬加法器2344A所取代,此三輸入寬加法器2344A接收一第三加數2399,其為窄多工器1896B之輸出之一延伸版本。具有第二十三圖之神經處理單元之神經網路單元所執行之程式係類似於第二十圖之程式。不過,其中位於位址0之初始化神經處理單元指令會將這些神經處理單元126初始化為漏斗配置,而非窄配置。此外,位於位址2之乘法累加旋轉指令之計數值為511而非1023。
處於漏斗配置時,神經處理單元126之運作係類似於處於窄配置,當執行如第二十圖中位址1之乘法累加指令時,神經處理單元126會接收兩個窄資料文字207A/207B與兩個窄權重文字206A/206B;寬乘法器242A會將資料文字209A與權重文字203A相乘以產生寬多工器1896A選擇之乘積246A;窄乘法器242B會將資料文字209B與權重文字203B相乘以產生 窄多工器1896B選擇之乘積246B。不過,寬加法器2344A會將乘積246A(由寬多工器1896A選擇)以及乘積246B/2399(由寬多工器1896B選擇)都與寬累加器202A輸出217A相加,而窄加法器244B與窄累加器202B則是不啟動。此外,處於漏斗配置而執行如第二十圖中位址2之乘法累加旋轉指令時,控制輸入213會使多工暫存器208A/208B旋轉兩個窄文字(如16位元),也就是說,多工暫存器208A/208B會選擇其相對應輸入211A/211B,就如同處於寬配置一樣。不過,寬乘法器242A會將資料文字209A與權重文字203A相乘以產生寬多工器1896A選擇之乘積246A;窄乘法器242B會將資料文字209B與權重文字203B相乘以產生窄多工器1896B選擇之乘積246B;並且,寬加法器2344A會將乘積246A(由寬多工器1896A選擇)以及乘積246B/2399(由寬多工器1896B選擇)都與寬累加器202A輸出217A相加,而窄加法器244B與窄累加器202B如前述則是不啟動。最後,處於漏斗配置而執行如第二十圖中位址3之啟動函數指令時,寬啟動函數單元212A會對結果總數215A執行啟動函數以產生一窄結果133A,而窄啟動函數單元212B則是不啟動。如此,只有標示為A之窄神經處理單元會產生窄結果133A,標示為B之窄神經處理單元所產生之窄 結果133B則是無效。因此,寫回結果之列(如第二十圖中位址4之指令所指示之列16)會包含空洞,這是因為只有窄結果133A有效,窄結果133B則是無效。因此,在概念上,每個時頻週期內,每個神經元(第二十三圖之神經處理單元)會執行兩個連結資料輸入,即將兩個窄資料文字乘上其相對應之權重並將這兩個乘積相加,相較之下,第二圖與第十八圖之實施例在每個時頻週期內只執行一個連結資料輸入。
在第二十三圖之實施例中可以發現,產生並寫回資料隨機存取記憶體122或權重隨機存取記憶體124之結果文字(記憶胞輸出)之數量是所接收資料輸入(連結)數量之平方根的一半,而結果之寫回列具有空洞,即每隔一個窄文字結果就是無效,更精確來說,標示為B之窄神經處理單元結果不具意義。因此,第二十三圖之實施例對於具有連續兩層之神經網路特別有效率,舉例來說,第一層具有之神經元數量為第二層之兩倍(例如第一層具有1024個神經元充分連接至第二層之512個神經元)。此外,其他的執行單元122(例如媒體單元,如x86高級向量擴展單元)在必要時,可對一分散結果列(即具有空洞)執行合併運算(pack operation)以使其緊密(即不具空洞)。後續當神經網路單元121在執行其他關聯於資 料隨機存取記憶體122與/或權重隨機存取記憶體124之其他列之計算時,即可將此處理後之資料列用於計算。
混合神經網路單元運算:卷積與共源運算能力
本發明實施例所述之神經網路單元121的優點在於,此神經網路單元121能夠同時以類似於一個協處理器執行自己內部程式之方式運作以及以類似於一個處理器之處理單元執行所發佈之架構指令(或是由架構指令轉譯出之微指令)。架構指令是包含在具有神經網路單元121之處理器所執行之架構程式內。如此,神經網路單元121即可以混合方式運作,而能維持神經網路單元121之高利用率。舉例來說,第二十四至二十六圖係顯示神經網路單元121執行卷積運算之運作,其中,神經網路單元係被充分利用,第二十七至二十八圖係顯示神經網路單元121執行共源運算之運作。卷積層、共源層以及其他數位資料計算之應用,例如影像處理(如邊緣偵測、銳利化、模糊化、辨識/分類)需要使用到這些運算。不過,神經網路單元121之混合運算並不限於執行卷積或共源運算,此混合特徵亦可用於執行其他運算,例如第四至十三圖所述之傳統神經網路乘法累加運算與啟動函數運算。也就是說,處理器100(更精確地 說,保留站108)會發佈MTNN指令1400與MFNN指令1500至神經網路單元121,因應此發佈之指令,神經網路單元121會將資料寫入記憶體122/124/129並將結果從被神經網路單元121寫入之記憶體122/124中讀出,在此同時,為了執行處理器100(透過MTNN1400指令)寫入程式記憶體129之程式,神經網路單元121會讀取並寫入記憶體122/124/129。
第二十四圖係一方塊示意圖,顯示由第一圖之神經網路單元121使用以執行一卷積運算之資料結構之一範例。此方塊圖包括一卷積核2402、一資料陣列2404、以及第一圖之資料隨機存取記憶體122與權重隨機存取記憶體124。就一較佳實施例而言,資料陣列2404(例如對應於影像畫素)係裝載於連接至處理器100之系統記憶體(未圖示)並由處理器100透過執行MTNN指令1400載入神經網路單元121之權重隨機存取記憶體124。卷積運算係將一第一陣列在一第二陣列進行加權疊加,此第二陣列即為本文所述之卷積核。如本文所述,卷積核係一係數矩陣,這些係數亦可稱為權重、參數、元素或數值。就一較佳實施例而言,此卷積核2042係處理器100所執行之架構程式之靜態資料。
此資料陣列2404係一個資料值之 二維陣列,而每個資料值(例如影像畫素值)的大小是資料隨機存取記憶體122或權重隨機存取記憶體124之文字的尺寸(例如16位元或8位元)。在此範例中,資料值為16位元文字,神經網路單元121係配置有512個寬配置之神經處理單元126。此外,在此實施例中,神經處理單元126包括多工暫存器以接收來自權重隨機存取記憶體124之權重文字206,例如第七圖之多工暫存器705,藉以對由權重隨機存取記憶體124接收之一列資料值執行集體旋轉器運算,這部分在後續章節會有更詳細的說明。在此範例中,資料陣列2404係一個2560行X1600列之畫素陣列。如圖中所示,當架構程式將資料陣列2404與卷積核2402進行卷積計算時,資料陣列2404會被分為20個資料塊,而每個資料塊分別是512x400之資料陣列2406。
在此範例中,卷積核2402係一個由係數、權重、參數、或元素,構成之3x3陣列。 這些係數的第一列標示為C0,0;C0,1;與C0,2;這些係數的第二列標示為C1,0;C1,1;與C1,2;這些係數的第三列標示為C2,0;C2,1;與C2,2。 舉例來說,具有以下係數之卷積核可用於執行邊緣偵測:0,1,0,1,-4,1,0,1,0。在另一實施例中,具有以下係數之卷積核可用於執行高斯模糊運算:1,2,1,2,4,2,1,2,1。在此範 例中,通常會對最終累加後之數值再執行一個除法,其中,除數係卷積核2042之各元素之絕對值的加總,在此範例中即為16。在另一範例中,除數可以是卷積核2042之元素數量。在又一個範例中,除數可以是將卷積運算壓縮至一目標數值範圍所使用之數值,此除數係由卷積核2042之元素數值、目標範圍以及執行卷積運算之輸入值陣列的範圍所決定。
請參照第二十四圖以及詳述其中細節之第二十五圖,架構程式將卷積核2042之係數寫入資料隨機存取記憶體122。就一較佳實施例而言,資料隨機存取記憶體122之連續九個列(卷積核2402內之元素數量)之每個列上的所有文字,會利用卷積核2402之不同元素以列為其主要順序加以寫入。也就是說,如圖中所示,在同一列之每個文字係以第一係數C0,0寫入;下一列則是以第二係數C0,1寫入;下一列則是以第三係數C0,2寫入;再下一列則是以第四係數C1,0寫入;依此類推,直到第九列之每個文字都以第九係數C2,2寫入。為了對資料陣列2404分割出之資料塊之資料矩陣2406進行卷積運算,神經處理單元126會依據順序重複讀取資料隨機存取記憶體122中裝載卷積核2042係數之九個列,這部分在後續章節,特別是對應於第二十六A圖的部分,會有更詳細的說明。
請參照第二十四圖以及詳述其中細節之第二十五圖,架構程式係將資料矩陣2406之數值寫入權重隨機存取記憶體124。神經網路單元程式執行卷積運算時,會將結果陣列寫回權重隨機存取記憶體124。就一較佳實施例而言,架構程式會將一第一資料矩陣2406寫入權重隨機存取記憶體124並使神經網路單元121開始運作,當神經網路單元121在對第一資料矩陣2406與卷積核2402執行卷積運算時,架構程式會將一第二資料矩陣2406寫入權重隨機存取記憶體124,如此,神經網路單元121完成第一資料矩陣2406之卷積運算後,即可開始執行第二資料矩陣2406之卷積運算,這部分在後續對應於第二十五圖處有更詳細的說明。以此方式,架構程式會往返於權重隨機存取記憶體124之兩個區域,以確保神經網路單元121被充分使用。因此,第二十四圖之範例顯示有一第一資料矩陣2406A與一第二資料矩陣2406B,第一資料矩陣2406A係對應於佔據權重隨機存取記憶體124中列0至399之第一資料塊,而第二資料矩陣2406B係對應於佔據權重隨機存取記憶體124中列500至899之第二資料塊。此外,如圖中所示,神經網路單元121會將卷積運算之結果寫回權重隨機存取記憶體124之列900-1299以及列1300-1699,隨後架構程式會從權重隨機存取 記憶體124讀取這些結果。裝載於權重隨機存取記憶體124之資料矩陣2406之資料值係標示為“Dx,y”,其中“x”是權重隨機存取記憶體124列數,“y”是權重隨機存取記憶體之文字、或行數。舉例來說,位於列399之資料文字511在第二十四圖中係標示為D399,511,此資料文字係由神經處理單元511之多工暫存器705接收。
第二十五圖係一流程圖,顯示第一圖之處理器100執行一架構程式以利用神經網路單元121對第二十四圖之資料陣列2404執行卷積核2042之卷積運算。此流程始於步驟2502。
在步驟2502中,處理器100,即執行有架構程式之處理器100,會將第二十四圖之卷積核2402以第二十四圖所顯示描述之方式寫入資料隨機存取記憶體122。此外,架構程式會將一變數N初始化為數值1。變數N係標示資料陣列2404中神經網路單元121正在處理之資料塊。此外,架構程式會將一變數NUM_CHUNKS初始化為數值20。接下來流程前進至步驟2504。
在步驟2504中,如第二十四圖所示,處理器100會將資料塊1之資料矩陣2406寫入權重隨機存取記憶體124(如資料塊1之資料矩陣2406A)。接下來流程前進至步驟2506。
在步驟2506中,處理器100會使用一個指定一函數1432以寫入程式記憶體129之 MTNN指令1400,將一卷積程式寫入神經網路單元121程式記憶體129。處理器100隨後會使用一個指定一函數1432以開始執行程式之MTNN指令1400,以啟動神經網路單元卷積程式。神經網路單元卷積程式之一範例在對應於第二十六A圖處會有更詳細的說明。接下來流程前進至步驟2508。
在決策步驟2508,架構程式確認變數N之數值是否小於NUM_CHUNKS。若是,流程會前進至步驟2512;否則就前進至步驟2514。
在步驟2512,如第二十四圖所示,處理器100將資料塊N+1之資料矩陣2406寫入權重隨機存取記憶體124(如資料塊2之資料矩陣2406B)。因此,當神經網路單元121正在對當前資料塊執行卷積運算的時候,架構程式可將下一個資料塊之資料矩陣2406寫入權重隨機存取記憶體124,如此,在完成當前資料塊之卷積運算後,即寫入權重隨機存取記憶體124後,神經網路單元121可以立即開始對下一個資料塊執行卷積運算。
在步驟2514,處理器100確認正在執行之神經網路單元程式(對於資料塊1而是從步驟2506開始執行,對於資料塊2-20而言則是從步驟2518開始執行)是否已經完成執行。就一較佳實施例而言,處理器100係透過執行一 MFNN指令1500讀取神經網路單元121控制與狀態暫存器127以確認是否已經完成執行。在另一實施例中,神經網路單元121會產生一中斷,表示已經完成卷積程式。接下來流程前進至決策步驟2516。
在決策步驟2516中,架構程式確認變數N之數值是否小於NUM_CHUNKS。若是,流程前進至步驟2518;否則就前進至步驟2522。
在步驟2518中,處理器100會更新卷積程式以便執行於資料塊N+1。更精確地說,處理器100會將權重隨機存取記憶體124中對應於位址0之初始化神經處理單元指令之列值更新為資料矩陣2406之第一列(例如,更新為資料矩陣2406A之列0或是資料矩陣2406B之列500),並且會更新輸出列(例如更新為列900或1300)。隨後處理器100會開始執行此更新後之神經網路單元卷積程式。接下來流程前進至步驟2522。
在步驟2522中,處理器100從權重隨機存取記憶體124讀取資料塊N之神經網路單元卷積程式之執行結果。接下來流程前進至決策步驟2524。
在決策步驟2524中,架構程式確認變數N之數值是否小於NUM_CHUNKS。若是,流程前進至步驟2526;否則就終止。
在步驟2526中,架構程式會將N的數值增加一。接下來流程回到決策步驟2508。
第二十六A圖係一神經網路單元程式之一程式列表,此神經網路單元程式係利用第二十四圖之卷積核2402執行一資料矩陣2406之卷積運算並將其寫回權重隨機存取記憶體124。此程式係將位址1至9之指令所構成之指令迴圈循環一定次數。位於位址0之初始化神經處理單元指令指定每個神經處理單元126執行此指令迴圈之次數,在第二十六A圖之範例所具有之迴圈計數值為400,對應於第二十四圖之資料矩陣2406內之列數,而位於迴圈終端之迴圈指令(位於位址10)會使當前迴圈計數值遞減,若是結果為非零值,就使其回到指令迴圈之頂端(即回到位址1之指令)。初始化神經處理單元指令也會將累加器202清除為零。就一較佳實施例而言,位於位址10之迴圈指令也會將累加器202清除為零。另外,如前述位於位址1之乘法累加指令也可將累加器202清除為零。
對於程式內指令迴圈之每一次執行,這512個神經處理單元126會同時執行512個3x3卷積核之卷積運算以及資料矩陣2406之512個相對應之3x3子矩陣。卷積運算是由卷積核2042之元素與相對應子矩陣內之相對應元素計算出來之九個乘積的加總。在第二十六A圖 之實施例中,這512個相對應3x3子矩陣之每一個的原點(中央元素)是第二十四圖中的資料文字Dx+1,y+1,其中y(行編號)是神經處理單元126編號,而x(列編號)是當前權重隨機存取記憶體124中由第二十六A圖之程式中位址1之乘法累加指令所讀取之列編號(此列編號也會由位址0之初始化神經處理單元指令進行初始化處理,也會在執行位於位址3與5之乘法累加指令時遞增,也會被位於位址9之遞減指令更新)。如此,在此程式之每一個循環中,這512個神經處理單元126會計算512個卷積運算並將這512個卷積運算之結果寫回權重隨機存取記憶體124之指令列。在本文中係省略邊緣處理(edge handling)以簡化說明,不過需要注意的是,利用這些神經處理單元126之集體旋轉特徵會造成資料矩陣2406(對於影像處理器而言即影像之資料矩陣)從其一側之兩個垂直邊緣到另一個垂直邊緣間(例如從左側邊緣到右側邊緣,反之亦然)之多行資料中有兩行產生扭曲(wrapping)。現在針對指令迴圈進行說明。
位址1是乘法累加指令,此指令會指定資料隨機存取記憶體122之列0並暗中利用當前權重隨機存取記憶體124之列,這個列最好是裝載在定序器128內(並由位於位址0之指令將其初始化為零以執行第一次指令迴圈傳遞之 運算)。也就是說,位於位址1的指令會使每個神經處理單元126從資料隨機存取記憶體122之列0讀取其相對應文字,從當前權重隨機存取記憶體124列讀取其相對應文字,並對此二個文字執行一乘法累加運算。如此,舉例來說,神經處理單元5將C0,0與Dx,5相乘(其中“x”是當前權重隨機存取記憶體124列),將結果加上累加器202數值217,並將總數寫回累加器202。
位址2是一個乘法累加指令,此指令會指定資料隨機存取記憶體122之列遞增(即增加至1),隨後再從資料隨機存取記憶體122之遞增後位址讀取這個列。此指令並會指定將每個神經處理單元126之多工暫存器705內的數值旋轉至鄰近的神經處理單元126,在此範例中即為因應位址1之指令而從權重隨機存取記憶體124讀取之資料矩陣2406值之列。在第二十四至二十六圖之實施例中,這些神經處理單元126係用以將多工暫存器705之數值向左旋轉,亦即從神經處理單元J旋轉至神經處理單元J-1,而非如前述第三、七與十九圖從神經處理單元J旋轉至神經處理單元J+1。值得注意的是,神經處理單元126向右旋轉之實施例中,架構程式會將卷積核2042係數值以不同順序寫入資料隨機存取記憶體122(例如繞著其中心行旋轉)以達到縮小卷積結果之目的。此外,在需要時,架 構程式可執行額外的卷積核預處理(例如移動(transposition))。此外,指令指定之計數值為2。因此,位於位址2之指令會使每個神經處理單元126從資料隨機存取記憶體122之列1讀取其相對應文字,將旋轉後文字接收至多工暫存器705,並對這兩個文字執行一乘法累加運算。 因為計數值為2,此指令也會使每個神經處理單元126重複前述運作。也就是說,定序器128會使資料隨機存取記憶體122列位址123遞增(即增加至2),而每個神經處理單元126會從資料隨機存取記憶體122之列2讀取其相對應文字以及將旋轉後文字接收至多工暫存器705,並且對這兩個文字執行一乘法累加運算。如此,舉例來說,假定當前權重隨機存取記憶體124列為27,在執行位址2之指令後,神經處理單元5會將C0,1與D27,6之乘積與C0,2與D27,7之乘積累加至其累加器202。如此,完成位址1與位址2之指令後,C0,0與D27,5之乘積、C0,1與D27,6之乘積與C0,2與D27,7就會累加至累加器202,加入其他所有來自先前傳遞之指令迴圈的累加值。
位址3與4之指令所執行之運算係類似於位址1與2之指令,不過,利用權重隨機存取記憶體124列遞增指標之功效,這些指令會對權重隨機存取記憶體124之下一列進行運算,並且這些指令會對資料隨機存取記憶體122 之後續三列,即列3至5,進行運算。也就是說,以神經處理單元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之乘積會累加至累加器202,加入其他所有來自先前傳遞之指令迴圈的累加值。
位址5與6之指令所執行之運算係類似於位址3與4之指令,不過,這些指令會對權重隨機存取記憶體124之下一列,以及資料隨機存取記憶體122之後續三列,即列6至8,進行運算。也就是說,以神經處理單元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之乘積會累加至累加器202,加入其他所有來自先前傳遞之指令迴圈的累加值。也就是說,完成位址1至6之指令後,假定指令迴圈開始時,權重隨機存取記憶體124列為27,以神經處理單元5為例,將會利用卷積核2042對以下3x3子矩陣進行卷積運算: D27,5 D27,6 D27,7
D28,5 D28,6 D28,7
D29,5 D29,6 D29,7 一般而言,完成位址1到6的指令後,這512個神經處理單元126都已經使用卷積核2042對下列3x3子矩陣進行卷積運算: Dr,n Dr,n+1 Dr,n+2
Dr+1,n Dr+1,n+1 Dr+1,n+2
Dr+2,n Dr+2,n+1 Dr+2,n+2其中r是指令迴圈開始時,權重隨機存取記憶體124之列位址值,而n是神經處理單元126之編號。
位址7之指令會透過啟動函數單元212傳遞累加器202數值217。此傳遞功能會傳遞一個文字,其尺寸大小(以位元計)係等同於由資料隨機存取記憶體122與權重隨機存取記憶體124讀取之文字(在此範例中即16位元)。 就一較佳實施例而言,使用者可指定輸出格式,例如輸出位元中有多少位元是小數(fractional)位元,這部分在後續章節會有更詳細的說明。另外,此指定可指定一個除法啟動函數,而非指定一個傳遞啟動函數,此除法啟動函數會將累加器202數值217除以一個除數,如本文對應於第二十九A與三十圖所述,例如利用第三十圖之除法器3014/3016之其中之一。舉例來說,就一個具有係數之卷積核2042而言,如前述具有十六分之一之係數之高斯模糊核,位址7之指令會指定一除法啟動函數(例 如除以16),而非指定一傳遞函數。另外,架構程式可以在將卷積核係數寫入資料隨機存取記憶體122前,對卷積核2042係數執行此除以16之運算,並據以調整卷積核2042數值之二維點的位置,例如使用如下所述第二十九圖之資料二維點2922。
位址8之指令會將啟動函數單元212之輸出寫入權重隨機存取記憶體124中由輸出列暫存器之當前值所指定之列。此當前值會被位址0之指令初始化,並且由指令內之遞增指標在每傳遞經過一次迴圈就遞增此數值。
如第二十四至二十六圖具有一3x3卷積核2402之範例所述,神經處理單元126大約每三個時頻週期會讀取權重隨機存取記憶體124以讀取資料矩陣2406之一個列,並且大約每十二個時頻週期會將卷積核結果矩陣寫入權重隨機存取記憶體124。此外,假定在一實施例中,具有如第十七圖之緩衝器1704之一寫入與讀取緩衝器,在神經處理單元126進行讀取與寫入之同時,處理器100可以對權重隨機存取記憶體124進行讀取與寫入,緩衝器1704大約每十六個時頻週期會對權重隨機存取記憶體執行一次讀取與寫入動作,以分別讀取資料矩陣以及寫入卷積核結果矩陣。因此,權重隨機存取記憶體124之大約一半的頻寬會由神經網路單元121 以混合方式執行之卷積核運算所消耗。本範例係包含一個3x3卷積核2042,不過,本發明並不限於此,其他大小的卷積核,如2x2、4x4、5x5、6x6、7x7、8x8等,亦可適用於不同的神經網路單元程式。在使用較大卷積核之情況下,因為乘法累加指令之旋轉版本(如第二十六A圖之位址2、4與6之指令,較大之卷積核會需要使用這些指令)具有較大之計數值,神經處理單元126讀取權重隨機存取記憶體124之時間占比會降低,因此,權重隨機存取記憶體124之頻寬使用比也會降低。
另外,架構程式可使神經網路單元程式對輸入資料矩陣2406中不再需要使用之列進行覆寫,而非將卷積運算結果寫回權重隨機存取記憶體124之不同列(如列900-1299與1300-1699)。舉例來說,就一個3x3之卷積核而言,架構程式可以將資料矩陣2406寫入權重隨機存取記憶體124之列2-401,而非寫入列0-399,而神經處理單元程式則會從權重隨機存取記憶體124之列0開始將卷積運算結果寫入,而每傳遞經過一次指令迴圈就遞增列數。如此,神經網路單元程式只會將不再需要使用之列進行覆寫。舉例來說,在第一次傳遞經過指令迴圈之後(或更精確地說,在執行位址1之指令以載入權重隨機存取記憶體124之列1之 後),列0之資料可以被覆寫,不過,列1-3的資料需要留給第二次傳遞經過指令迴圈之運算而不能被覆寫;同樣地,在第二次傳遞經過指令迴圈之後,列1之資料可以被覆寫,不過,列2-4的資料需要留給第三次傳遞經過指令迴圈之運算而不能被覆寫;依此類推。在此實施例中,可以增大各個資料矩陣2406(資料塊)之高度(如800列),因而可以使用較少之資料塊。
另外,架構程式可以使神經網路單元程式將卷積運算之結果寫回卷積核2402上方之資料隨機存取記憶體122列(例如在列8上方),而非將卷積運算結果寫回權重隨機存取記憶體124,當神經網路單元121寫入結果時,架構程式可以從資料隨機存取記憶體122讀取結果(例如使用第二十六圖中資料隨機存取記憶體122之最近寫入列2606位址)。此配置適用於具有單埠權重隨機存取記憶體124與雙埠資料隨機存取記憶體之實施例。
依據第二十四至二十六A圖之實施例中神經網路單元之運算可以發現,第二十六A圖之程式之每次執行會需要大約5000個時頻週期,如此,第二十四圖中整個2560x1600之資料陣列2404之卷積運算需要大約100,000個時頻週期,明顯少於以傳統方式執行相同任務所需要的時頻週期數。
第二十六B圖係顯示第一圖之神經網路單元121之控制與狀態暫存器127之某些欄位之一實施例之方塊示意圖。此控制與狀態暫存器127包括一個欄位2602,指出權重隨機存取記憶體124中最近被神經處理單元126寫入之列的位址;一個欄位2606,指出資料隨機存取記憶體122中最近被神經處理單元126寫入之列的位址;一個欄位2604,指出權重隨機存取記憶體124中最近被神經處理單元126讀取之列的位址;以及一個欄位2608,指出資料隨機存取記憶體122中最近被神經處理單元126讀取之列的位址。如此,執行於處理器100之架構程式就可以確認神經網路單元121之處理進度,是在對資料隨機存取記憶體122與/或權重隨機存取記憶體124進行資料之讀取與/或寫入。利用此能力,加上如前述選擇對輸入資料矩陣進行覆寫(或是如前述將結果寫入資料隨機存取記憶體122),如以下之範例所數,第二十四圖之資料陣列2404就可以視為5個512x1600之資料塊來執行,而非20個512x400之資料塊。處理器100從權重隨機存取記憶體124之列2開始寫入第一個512x1600之資料塊,並使神經網路單元程式啟動(此程式具有一數值為1600之迴圈計數,並且將權重隨機存取記憶體124輸出列初始化為0)。當神經網路單元121執行神經網路單元程 式時,處理器100會監測權重隨機存取記憶體124之輸出位置/位址,藉以(1)(使用MFNN指令1500)讀取權重隨機存取記憶體124中具有由神經網路單元121(由列0開始)寫入之有效卷積運算結果之列;以及(2)將第二個512x1600資料矩陣2406(始於列2)覆寫於已經被讀取過之有效卷積運算結果,如此當神經網路單元121對於第一個512x1600資料塊完成神經網路單元程式,處理器100在必要時可以立即更新神經網路單元程式並再次啟動神經網路單元程式以執行於第二個512x1600資料塊。此程序會再重複三次執行剩下三個512x1600資料塊,以使神經網路單元121可以被充分使用。
在一實施例中,啟動函數單元212具有能夠對累加器202數值217有效執行一有效除法運算之能力,這部分在後續章節尤其是對應於第二十九A、二十九B與三十圖處會有更詳細的說明。舉例來說,對累加器202數值進行處法運算之啟動函數神經網路單元指令可用於以下所述之高斯模糊矩陣。
第二十四圖之範例中所使用之卷積核2402為一個應用於整個資料矩陣2404之小型靜態卷積核,不過,本發明並不限於此,此卷積核亦可為一大型矩陣,具有特定之權重對應於資料陣列2404之不同資料值,例如常見於 卷積神經網路之卷積核。當神經網路單元121以此方式被使用時,架構程式會將資料矩陣與卷積核之位置互換,亦即將資料矩陣放置於資料隨機存取記憶體122內而將卷積核放置於權重隨機存取記憶體124內,而執行神經網路單元程式所需處理之列數也會相對較少。
第二十七圖係一方塊示意圖,顯示第一圖中填入輸入資料之權重隨機存取記憶體124之一範例,此輸入資料係由第一圖之神經網路單元121執行共源運算(pooling operation)。 共源運算是由人工神經網路之一共源層執行,透過取得輸入矩陣之子區域或子矩陣並計算子矩陣之最大值或平均值以作為一結果矩陣或共源矩陣,以縮減輸入資料矩陣(如一影像或是卷積後影像)之大小(dimension)。在第二十七與二十八圖之範例中,共源運算計算各個子矩陣之最大值。共源運算對於如執行物件分類或執行之人工神經網路特別有用。一般而言,共源運算實際上可以使輸入矩陣縮減之係數為所檢測之子矩陣的元素數,特別是可以將輸入矩陣之各個維度方向都縮減子矩陣之相對應維度方向之元素數。在第二十七圖之範例中,輸入資料是一個寬文字(如16位元)之512x1600矩陣,儲存於權重隨機存取記憶體124之列0至1599。在第二十七圖中,這些文字係以其所在 列行位置標示,如,位於列0行0之文字係標示為D0,0;位於列0行1之文字係標示為D0,1;位於列0行2之文字係標示為D0,2;依此類推,位於列0行511之文字係標示為D0,511。相同地,位於列1行0之文字係標示為D1,0;位於列1行1之文字係標示為D1,1;位於列1行2文字係標示為D1,2;依此類推,位於列1行511之文字係標示為D1,511;如此依此類推,位於列1599行0之文字係標示為D1599,0;位於列1599行1之文字係標示為D1599,1位於列1599行2之文字係標示為D1599,2;依此類推,位於列1599行511之文字係標示為D1599,511。
第二十八圖係一神經網路單元程式之一程式列表,此神經網路單元程式係執行第二十七圖之輸入資料矩陣之共源運作並將其寫回權重隨機存取記憶體124。在第二十八圖之範例中,共源運算會計算輸入資料矩陣中相對應4x4子矩陣之最大值。此程式會多次執行由指令1至10構成指令迴圈。位於位址0之初始化神經處理單元指令會指定每個神經處理單元126執行指令迴圈之次數,在第二十八圖之範例中之迴圈計數值為400,而在迴圈末端(在位址11)之迴圈指令會使當前迴圈計數值遞減,而若是所產生之結果是一非零值,就使其回到指令迴圈之頂端(即回到位址1之指令)。權重隨機存 取記憶體124內之輸入資料矩陣實質上會被神經網路單元程式視為400個由四個相鄰列構成之互斥群組,即列0-3、列4-7、列8-11、依此類推,直到列1596-1599。每一個由四個相鄰列構成之群組包括128個4x4子矩陣,這些子矩陣係由此群組之四個列與四個相鄰行之交叉處元素所形成之4x4子矩陣,這些相鄰行即行0-3、行4-7、行8-11、依此類推直到行508-511。這512個神經處理單元126中,每四個為一組計算之第四個神經處理單元126(一共即128個)會對一相對應4x4子矩陣執行一共源運算,而其他三個神經處理單元126則不被使用。更精確地說,神經處理單元0、4、8、依此類推直到神經處理單元508,會對其相對應之4x4子矩陣執行一共源運算,而此4x4子矩陣之最左側行編號係對應於神經處理單元編號,而下方列係對應於當前權重隨機存取記憶體124之列值,此數值會被位址0之初始化指令初始化為零並且在重複每次指令迴圈後會增加4,這部分在後續章節會有更詳細的說明。這400次指令迴圈之重複動作係對應至第二十七圖之輸入資料矩陣中之4x4子矩陣群組數(即輸入資料矩陣具有之1600個列除以4)。初始化神經處理單元指令也會清除累加器202使其歸零。就一較佳實施例而言,位址11之迴圈指令也會清除累加器202使其歸 零。另外,位址1之maxwacc指令會指定清除累加器202使其歸零。
每次在執行程式之指令迴圈時,這128個被使用之神經處理單元126會對輸入資料矩陣之當前四列群組中之128個相對應之4x4子矩陣,同時執行128個共源運算。進一步來說,此共源運算會確認這4x4子矩陣之16個元素中之最大值元素。在第二十八圖之實施例中,對於這128個被使用之神經處理單元126中之每個神經處理單元y而言,4x4子矩陣之下方左側元素為第二十七圖內之元素Dx,y,其中x是指令迴圈開始時當前權重隨機存取記憶體124之列數,而此列資料係由第二十八圖之程式中位址1之maxwacc指令讀取(此列數也會由位址0之初始化神經處理單元指令加以初始化,並在每次執行位址3、5與7之maxwacc指令時遞增)。因此,對於此程式之每一個迴圈而言,這128個被使用之神經處理單元126會將當前列群組之相對應128個4x4子矩陣之最大值元素,寫回權重隨機存取記憶體124之指定列。以下係針對此指令迴圈進行描述。
位址1之maxwacc指令會暗中使用當前權重隨機存取記憶體124列,這個列最好是裝載在定序器128內(並由位於位址0之指令將其初始化為零以執行第一次傳遞經過指令迴圈 之運算)。位址1之指令會使每個神經處理單元126從權重隨機存取記憶體124之當前列讀取其相對應文字,將此文字與累加器202數值217相比,並將這兩個數值之最大者儲存於累加器202。因此,舉例來說,神經處理單元8會確認累加器202數值217與資料文字Dx,8(其中“x”是當前權重隨機存取記憶體124列)中之最大值並將其寫回累加器202。
位址2是一個maxwacc指令,此指令會指定將每個神經處理單元126之多工暫存器705內之數值旋轉至鄰近至神經處理單元126,在此即為因應位址1之指令剛從權重隨機存取記憶體124讀取之一列輸入陣列值。在第二十七至二十八圖之實施例中,神經處理單元126係用以將多工器705數值向左旋轉,亦即從神經處理單元J旋轉至神經處理單元J-1,如前文對應於第二十四至二十六圖之章節所述。此外,此指令會指定一計數值為3。如此,位址2之指令會使每個神經處理單元126將旋轉後文字接收至多工暫存器705並確認此旋轉後文字與累加器202數值中之最大值,然後將這個運算再重複兩次。也就是說,每個神經處理單元126會執行三次將旋轉後文字接收至多工暫存器705並確認旋轉後文字與累加器202數值中最大值之運算。如此,舉例來說,假定開始此指令迴圈時, 當前權重隨機存取記憶體124列為36,以神經處理單元8為例,在執行位址1與2之指令後,神經處理單元8將會在其累加器202中儲存迴圈開始時累加器202以及四個權重隨機存取記憶體124文字D36,8、D36,9、D36,10與D36,11中之最大值。
位址3與4之maxwacc指令所執行之運算類似於位址1之指令,不過,利用權重隨機存取記憶體124列遞增指標具有之功效,位址3與4之指令會對權重隨機存取記憶體124之下一列執行。也就是說,假定指令迴圈開始時當前權重隨機存取記憶體124列是36,以神經處理單元8為例,在完成位址1與4之指令後,神經處理單元8將會在其累加器202中儲存迴圈開始時累加器202以及八個權重隨機存取記憶體124文字D36,8、D36,9、D36,10、D36,11、D37,8、D37,9、D37,10與D37,11中之最大值。
位址5至8之maxwacc指令所執行之運算類似於位址1至4之指令,不過,位址5至8之指令會對權重隨機存取記憶體124之下兩列執行。也就是說,假定指令迴圈開始時當前權重隨機存取記憶體124列是36,以神經處理單元8為例,在完成位址1與8之指令後,神經處理單元8將會在其累加器202中儲存迴圈開始時累加器202以及十六個權重隨機存取記憶體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中之最大值。也就是說,假定指令迴圈開始時當前權重隨機存取記憶體124列是36,以神經處理單元8為例,在完成位址1與8之指令後,神經處理單元8將會完成確認下列4x4子矩陣之最大值: 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基本上,在完成位址1至8之指令後,這128個被使用之神經處理單元126中的每一個神經處理單元126就會完成確認下列4x4子矩陣之最大值: Dr,n Dr,n+1 Dr,n+2 Dr,n+3
Dr+1,n Dr+1,n+1 Dr+1,n+2 Dr+1,n+3
Dr+2,n Dr+2,n+1 Dr+2,n+2 Dr+2,n+3
Dr+3,n Dr+3,n+1 Dr+3,n+2 Dr+3,n+3其中r是指令迴圈開始時當前權重隨機存取記憶體124之列位址值,n是神經處理單元126編號。
位址9之指令會透過啟動函數單元212傳遞累加器202數值217。此傳遞功能會傳遞一個文字,其尺寸大小(以位元計)係等同於 由權重隨機存取記憶體124讀取之文字(在此範例中即16位元)。就一較佳實施例而言,使用者可指定輸出格式,例如輸出位元中有多少位元是小數(fractional)位元,這部分在後續章節會有更詳細的說明。
位址10之指令會將累加器202數值寫入權重隨機存取記憶體124中由輸出列暫存器之當前值所指定之列,此當前值會被位址0之指令予以初始化,並利用指令內之遞增指標在每次傳遞經過迴圈後將此數值遞增。進一步來說,位址10之指令會將累加器202之一寬文字(如16位元)寫入權重隨機存取記憶體124。就一較佳實施例而言,此指令會將這16個位元視為由輸入二維點2916指定之位元來進行寫入,這部分在下列對應於第二十九A與二十九B圖處會有更詳細的說明。
如前述,重複一次指令迴圈寫入權重隨機存取記憶體124之列會包含具有無效值之空洞。也就是說,結果133之寬文字1至3、5至7、9至11、依此類推,直到寬文字509至511都是無效或未使用的。在一實施例中,啟動函數單元212包括一多工器使能將結果合併至列緩衝器之相鄰文字,例如第十一圖之列緩衝器1104,以寫回輸出權重隨機存取記憶體124列。就一較佳實施例而言,啟動函數指令會指定每 個空洞中的文字數,以及空洞內控制多工器合併結果所使用之文字數。在一實施例中,空洞數係指定為數值2至6,以合併共源之3x3、4x4、5x5、6x6或7x7子矩陣之輸出。另外,執行於處理器100之架構程式會從權重隨機存取記憶體124讀取所產生之稀疏(具有空洞)結果列,並利用其他執行單元112,例如使用架構合併指令之媒體單元,如x86單指令多資料流程擴展(SSE)指令,執行合併功能。以類似於前述同時進行之方式並利用神經網路單元之混合本質,執行於處理器100之架構程式可以讀取控制與狀態暫存器127以監測權重隨機存取記憶體124之最近寫入列(例如第二十六B圖之欄位2602)以讀取所產生之一稀疏結果列,將其合併並寫回權重隨機存取記憶體124之同一列,如此就完成準備而能作為一輸入資料矩陣,提供給神經網路之下一層使用,例如一卷積層或是一傳統神經網路層(亦即乘法累加層)。此外,本文所述之實施例係以4x4子矩陣執行共源運算,不過本發明並不限於此,第二十八圖之神經網路單元程式可經調整,而以其他尺寸之子矩陣,如3x3、5x5、6x6或7x7,執行共源運算。
如前述可以發現,寫入權重隨機存取記憶體124之結果列的數量是輸入資料矩陣之列數的四分之一。最後,在此範例中並未使 用資料隨機存取記憶體122。不過,也可利用資料隨機存取記憶體122,而非權重隨機存取記憶體124,來執行共源運算。
在第二十七與二十八圖之實施例中,共源運算會計算子區域之最大值。不過,第二十八圖之程式可經調整以計算子區域之平均值,利入透過將maxwacc指令以sumwacc指令取代(將權重文字與累加器202數值217加總)並將位址9之啟動函數指令修改為將累加結果除以各個子區域之元素數(較佳者係透過如下所述之小數乘法運算),在此範例中為十六。
由神經網路單元121依據第二十七與二十八圖之運算中可以發現,每一次執行第二十八圖之程式需要使用大約6000個時頻週期來對第二十七圖所示之整個512x1600資料矩陣執行一次共源運算,此運算所使用之時頻週期數明顯少於傳統方式執行相類似任務所需之時頻週期數。
另外,架構程式可使神經網路單元程式將共源運算之結果寫回資料隨機存取記憶體122列,而非將結果寫回權重隨機存取記憶體124,當神經網路單元121將結果寫入資料隨機存取記憶體122時(例如使用第二十六B圖之資料隨機存取記憶體122最近寫入列2606之位址),架構程式會從資料隨機存取記憶體122讀 取結果。此配置適用具有單埠權重隨機存取記憶體124與雙埠資料隨機存取記憶體122之實施例。 定點算術運算,具有使用者提供二維點,全精度定點累加,使用者指定小數值,累加器數值之隨機捨入,以及可選擇啟動/輸出函數
一般而言,在數位計算裝置內執行算術運算之硬體單元依據其執行算術運算之對象為整數或浮點數,通常可分為“整數”單元與“浮點”單元。浮點數具有一數值(magnitude)(或尾數)與一指數,通常還有一符號。指數是基數(radix)點(通常為二維點)之位置相對於數值之指標。相較之下,整數不具有指數,而只具有一數值,通常還有一符號。浮點單元可以讓程式設計者可以從一個非常大範圍之不同數值中取得其工作所要使用之數字,而硬體則是在需要時負責調整此數字之指數值,而不需程式設計者處理。舉例來說,假定兩個浮點數0.111 x 1029與0.81 x 1031相乘。(雖然浮點單元通常工作於2為基礎之浮點數,此範例中所使用的是十進位小數,或以10為基礎之浮點數。)浮點單元會自動負責尾數相乘,指數相加,隨後再將結果標準化至數值.8911 x 1059。在另一個範例中,假定兩個相同之浮點數相 加。浮點單元會在相加前自動負責將尾數之二維點對齊以產生數值為.81111 x 1031之總數。
不過,眾所周知,這樣複雜的運算而會導致浮點單元之尺寸增加,耗能增加、每指令所需時頻週期數增加、以及/或週期時間拉長。因為這個原因,許多裝置(如嵌入式處理器、微控制器與相對低成本與/或低功率之微處理器)並不具有浮點單元。由前述範例可以發現,浮點單元之複雜結構包含執行關聯於浮點加法與乘法/除法之指數計算之邏輯(即對運算元之指數執行加/減運算以產生浮點乘法/除法之指數數值之加法器,將運算元指數相減以確認浮點加法之二維點對準偏移量之減法器),包含為了達成浮點加法中尾數之二維點對準之偏移器,包含對浮點結果進行標準化處理之偏移器。此外,流程之進行通常還需要執行浮點結果之捨入運算之邏輯、執行整數格式與浮點格式間以及不同浮點格式(例如擴增精度、雙精度、單精度、半精度)間之轉換的邏輯、前導零與前導一之偵測器、以及處理特殊浮點數之邏輯,例如反常值、非數值與無窮值。
此外,關於浮點單元之正確度驗證會因為設計上需要被驗證之數值空間增加而大幅增加其複雜度,而會延長產品開發週期與上市時間。此外,如前述,浮點算術運算需要對 用於計算之每個浮點數的尾數欄位與指數欄位分別儲存與使用,而會增加所需之儲存空間與/或在給定儲存空間以儲存整數之情況下降低精確度。其中許多缺點都可以透過整數單元執行算術運算來避免。
程式設計者通常需要撰寫處理小數之程式,小數即為非完整數之數值。這種程式可能需要在不具有浮點單元之處理器上執行,或是處理器雖然具有浮點單元,不過由處理器之整數單元執行整數指令會比較快。為了利用整數處理器在效能上的優勢,程式設計者會對定點數值(fixed-point numbers)使用習知之定點算術運算。這樣的程式會包括執行於整數單元以處理整數或整數資料之指令。因為資料是小數,這個軟體並包含指令對整數資料執行運算而處理這個資料實際上是小數的問題,例如對準偏移器。基本上,定點軟體可手動執行某些或全部浮點單元所能執行之功能。
在本文中,一個“定點”數(或值或運算元或輸入或輸出)是一個數字,其儲存位元被理解為包含位元以表示此定點數之一小數部分,此位元在此稱為“小數位元”。定點數之儲存位元係包含於記憶體或暫存器內,例如記憶體或暫存器內之一個8位元或16位元文字。此外,定點數之儲存位元全部都用來表達一個數 值,而在某些情況下,其中一個位元會用來表達符號,不過,沒有一個定點數的儲存位元會用來表達這個數的指數。此外,此定點數之小數位元數量或二維點位置係指定於一個不同於定點數儲存位元之儲存空間內,並且是以共享或通用之方式指出小數位元的數量或二維點位置,分享給一個包含此定點數之定點數集合,例如輸入運算元集合、累加數值或是處理單元陣列之輸出結果。
在此描述之實施例中,算術邏輯單元是整數單元,不過,啟動函數單元則是包含浮點算術硬體輔助或加速。如此可以使算術邏輯單元部分變得更小且更為快速,以利於在給定的晶片空間上使用更多的算術邏輯單元。這也表示在單位晶片空間上可以設置更多的神經元,而特別有利於神經網路單元。
此外,相較於每個浮點數都需要指數儲存位元,本文所述之實施例中的定點數係以一個指標表達全部的數字集合中屬於小數位元之儲存位元的數量,不過,此指標係位於一個單一、共享之儲存空間而廣泛地指出整個集合之所有數字,例如一系列運算之輸入集合、一系列運算之累加數之集合、輸出之集合,其中小數位元之數量。就一較佳實施例而言,神經網路單元之使用者可對此數字集合指定小數 儲存位元之數量。因此,可以理解的是,雖然在許多情況下(如一般數學),“整數”之用語是指一個帶符號完整數,也就是一個不具有小數部分之數字,不過,在本文的脈絡中,“整數”之用語可表示具有小數部分之數字。此外,在本文的脈絡中,“整數”之用語是為了與浮點數進行區分,對於浮點數而言,其各自儲存空間內之部分位元會用來表達浮點數之指數。類似地,整數算術運算,如整數單元執行之整數乘法或加法或比較運算,係假設運算元中不具有指數,因此,整數單元之整數元件,如整數乘法器、整數加法器、整數比較器,就不需要包含邏輯來處理指數,例如不需要為了加法或比較運算而移動尾數來對準二維點,不需要為了乘法運算而將指數相加。
此外,本文所述之實施例包括一個大型的硬體整數累加器以對一個大型系列之整數運算進行累加(如1000個乘法累加運算)而不會喪失精確度。如此可避免神經網路單元處理浮點數,同時又能使累加數維持全精度,而不會使其飽和或因為溢位而產生不準確的結果。一旦這系列整數運算加總出一結果輸入此全精度累加器,此定點硬體輔助會執行必要的縮放與飽和運算,藉以利用使用者指定之累加值小數位元數量指標以及輸出值所需要之小數 位元數量,將此全精度累加值轉換為一輸出值,這部分在後續章節會有更詳細的說明。
當需要將累加值從全精度形式進行壓縮以便用於啟動函數之一輸入或是用於傳遞,就一較佳實施例而言,啟動函數單元可以選擇性地對累加值執行隨機捨入運算,這部分在後續章節會有更詳細的說明。最後,依據神經網路之一給定層之不同需求,神經處理單元可以選擇性地接受指示以使用不同的啟動函數以及/或輸出許多不同形式之累加值。
第二十九A圖係顯示第一圖之控制與狀態暫存器127之一實施例之方塊示意圖。此控制與狀態暫存器127可包括複數個控制與狀態暫存器127。如圖中所示,此控制與狀態暫存器127包括下列欄位:配置2902、帶符號資料2912、帶符號權重2914、資料二維點2922、權重二維點2924、算術邏輯函數2926、捨入控制2932、啟動函數2934、倒數2942、偏移量2944、輸出隨機存取記憶體2952、輸出二維點2954、以及輸出命令2956。控制與狀態暫存器127值可以利用MTNN指令1400與NNU程式之指令,如啟動指令,進行寫入動作。
配置2902值係指定神經網路單元121是屬於窄配置、寬配置或是漏斗配置,如前所述。配置2902也設定了由資料隨機存取記憶 體122與權重隨機存取記憶體124接收之輸入文字的大小。在窄配置與漏斗配置中,輸入文字的大小是窄的(例如8位元或9位元),不過,在寬配置中,輸入文字的大小則是寬的(例如12位元或16位元)。此外,配置2902也設定了與輸入文字大小相同之輸出結果133的大小。
帶符號資料值2912為真的時候,即表示由資料隨機存取記憶體122接收之資料文字為帶符號值,若為假,則表示這些資料文字為不帶符號值。帶符號權重值2914為真的時候,即表示由權重隨機存取記憶體124接收之權重文字為帶符號值,若為假,則表示這些權重文字為不帶符號值。
資料二維點2922值表示由資料隨機存取記憶體122接收之資料文字之二維點位置。就一較佳實施例而言,對於二維點之位置而言,資料二維點2922值即表示從右側計算之位元位置數量。換言之,資料二維點2922表示資料文字之最低有效位元中屬於小數位元之數量,即位於二維點右側之位元。類似地,權重二維點2924值表示由權重隨機存取記憶體124接收之權重文字之二維點位置。就一較佳實施例而言,當算術邏輯單元函數2926是一個乘法與累加或輸出累加,神經處理單元126將二維點右側之位元數確定為資料二維點2922與權重二 維點2924之加總,並將其作為裝載於累加器202之數值。因此,舉例來說,若是資料二維點2922之值為5而權重二維點2924之值為3,累加器202內之值就會在二維點右側有8個位元。當算術邏輯單元函數2926是一個總數/最大值累加器與資料/權重文字或是傳遞資料/權重文字,神經處理單元126會將二維點右側之位元數分別確定為資料/權重二維點2922/2924,並將其作為裝載於累加器202之數值。在另一實施例中,則是指定單一個累加器二維點2923,而不去指定個別的資料二維點2922與權重二維點2924。這部分在後續對應於第二十九B圖處會有更詳細的說明。
算術邏輯單元函數2926指定由神經處理單元126之算術邏輯單元執行之函數。如前述,算術邏輯單元2926可包括以下運算但不限於:將資料文字209與權重文字203相乘並將此乘積與累加器202相加;將累加器202與權重文字203相加;將累加器202與資料文字209相加;累加器202與資料文字209中之最大值;累加器202與權重文字209中之最大值;輸出累加器202;傳遞資料文字209;傳遞權重文字209;輸出零值。在一實施例中,此算術邏輯單元2926係由神經網路單元初始化指令予以指定,並且由算術邏輯單元204使用以因應一執行指令(未 圖示)。在一實施例中,此算術邏輯單元2926係由個別的神經網路單元指令予以指定,如前述乘法累加以及maxwacc指令。
捨入控制2932指定(第三十圖中)捨入器所使用之捨入運算的形式。在一實施例中,可指定之捨入模式包括但不限於:不捨入、捨入至最近值、以及隨機捨入。就一較佳實施例而言,處理器100包括一隨機位元來源3003(請參照第三十圖)以產生隨機位元3005,這些隨機位元3005係經取樣用以執行隨機捨入以降低產生捨入偏差的可能性。在一實施例中,當捨入位元3005為一而黏(sticky)位元為零,若是取樣之隨機位元3005為真,神經處理單元126就會向上捨入,若是取樣之隨機位元3005為假,神經處理單元126就不會向上捨入。在一實施例中,隨機位元來源3003係基於處理器100具有之隨機電子特性進行取樣以產生隨機位元3005,這些隨機電子特性如半導體二極體或電阻之熱雜訊,不過本發明並不限於此。
啟動函數2934指定用於累加器202數值217之函數以產生神經處理單元126之輸出133。如本文所述,啟動函數2934包括但不限於:S型函數;雙曲正切函數;軟加函數;校正函數;除以二的指定冪次方;乘上一個使用者指定之倒數值以達成有效除法;傳遞整個累 加器;以及將累加器以標準尺寸傳遞,這部分在以下章節會有更詳細的說明。在一實施例中,啟動函數係由神經網路單元啟動函數指令所指定。另外,啟動函數也可由初始化指令所指定,並因應一輸出指令而使用,例如第四圖中位址4之啟動函數單元輸出指令,在此實施例中,位於第四圖中位址3之啟動函數指令會包含於輸出指令內。
倒數2942值指定一個與累加器202數值217以達成對累加器202數值217進行除法運算之數值。也就是說,使用者所指定之倒數2942值會是實際上想要執行之除數的倒數。這有利於搭配如本文所述之卷積或共源運算。就一較佳實施例而言,使用者會將倒數2942值指定為兩個部分,這在後續對應於第二十九C圖處會有更詳細的說明。在一實施例中,控制與狀態暫存器127包括一欄位(未圖示)讓使用者可以在多個內建除數值中指定一個進行除法,這些內建除數值的大小相當於常用之卷積核的大小,如9、25、36或49。在此實施例中,啟動函數單元212會儲存這些內建除數的倒數,用以與累加器202數值217相乘。
偏移量2944係指定啟動函數單元212之一移位器會將累加器202數值217右移之位元數,以達成將其除以二的冪次方之運算。 這有利於搭配尺寸為二的冪次方之卷積核進行運算。
輸出隨機存取記憶體2952值會在資料隨機存取記憶體122與權重隨機存取記憶體124中指定一個來接收輸出結果133。
輸出二維點2954值表示輸出結果133之二維點的位置。就一較佳實施例而言,對於輸出結果133之二維點的位置而言,輸出二維點2954值即表示從右側計算之位元位置數量。 換言之,輸出二維點2954表示輸出結果133之最低有效位元中屬於小數位元之數量,即位於二維點右側之位元。啟動函數單元212會基於輸出二維點2954之數值(在大部分之情況下,也會基於資料二維點2922、權重二維點2924、啟動函數2934與/或配置2902之數值)執行捨入、壓縮、飽和與尺寸轉換之運算。
輸出命令2956會從許多面向控制輸出結果133。在一實施例中,啟動函數單元121會利用標準尺寸的概念,標準尺寸為配置2902指定之寬度大小(以位元計)的兩倍。如此,舉例來說,若是配置2902設定由資料隨機存取記憶體122與權重隨機存取記憶體124接收之輸入文字的大小為8位元,標準尺寸就會是16位元;在另一個範例中,若是配置2902設定由資料隨機存取記憶體122與權重隨機存取記憶體 124接收之輸入文字的大小為16位元,標準尺寸就會是32位元。如本文所述,累加器202之尺寸較大(舉例來說,窄的累加器202B為28位元,而寬的累加器202A則是41位元)以維持中間計算,如1024與512個神經網路單元乘法累加指令,之全精度。如此,累加器202數值217就會大於(以位元計)標準尺寸,而對於啟動函數2934之大部分數值(除了傳遞整個累加器),啟動函數單元212(例如以下對應於第三十圖之段落所述之標準尺寸3008)就會將累加器202數值217壓縮至標準尺寸之大小。輸出命令2956之第一預設值會指示啟動函數單元212執行指定的啟動函數2934以產生一內部結果並將此內部結果作為輸出結果133輸出,此內部結果之大小等於原始輸入文字之大小,即標準尺寸的一半。 輸出命令2956之第二預設值會指示啟動函數單元212執行指定的啟動函數2934以產生一內部結果並將此內部結果之下半部作為輸出結果133輸出,此內部結果之大小等於原始輸入文字之大小的兩倍,即標準尺寸;而輸出命令2956之第三預設值會指示啟動函數單元212將標準尺寸之內部結果的上半部作為輸出結果133輸出。輸出命令2956之第四預設值會指示啟動函數單元212將累加器202之未經處理的最低有效文字(其寬度係由配置2902所指定)作為輸出 結果133輸出;而輸出命令2956之第五預設值會指示啟動函數單元212將累加器202之未經處理的中間有效文字(其寬度係由配置2902所指定)作為輸出結果133輸出;輸出命令2956之第六預設值會指示啟動函數單元212將累加器202之未經處理的最高有效文字(其寬度係由配置2902所指定)作為輸出結果133輸出,這在前文對應於第八至十圖之章節有更詳細的說明。如前述,輸出整個累加器202尺寸或是標準尺寸之內部結果有助於讓處理器100之其他執行單元112可以執行啟動函數,如軟極大啟動函數。
第二十九A圖(以及第二十九B與二十九C圖)所描述之欄位係位於控制與狀態暫存器127內部,不過,本發明並不限於此,其中一個或多個欄位亦可位於神經網路單元121之其他部分。就一較佳實施例而言,其中許多欄位可以包含在神經網路單元指令內部,並由定序器予以解碼以產生一微指令3416(請參照第三十四圖)控制算術邏輯單元204以及/或啟動函數單元212。此外,這些欄位也可以包含在儲存於媒體暫存器118之微運算3414內(請參照第三十四圖),以控制算術邏輯單元204以及/或啟動函數單元212。此實施例可以降低初始化神經網路單元指令之使用,而在其他實施例中則可去除此初始化神經網路單元指令。
如前述,神經網路單元指令可以指定對記憶體運算元(如來自資料隨機存取記憶體122與/或權重隨機存取記憶體124之文字)或一個旋轉後運算元(如來自多工暫存器208/705)執行算術邏輯指令運算。在一實施例中,神經網路單元指令還可以將一個運算元指定為一啟動函數之暫存器輸出(如第三十圖之暫存器3038之輸出)。此外,如前述,神經網路單元指令可以指定來使資料隨機存取記憶體122或權重隨機存取記憶體124之一當前列位址遞增。在一實施例中,神經網路單元指令可指定一立即帶符號資料值加入當前列以達成遞增或遞減一以外數值之目的。
第二十九B圖係顯示第一圖之控制與狀態暫存器127之另一實施例之方塊示意圖。第二十九B圖之控制與狀態暫存器127類似於第二十九A圖之控制與狀態暫存器127,不過,第二十九B圖之控制與狀態暫存器127包括一個累加器二維點2923。累加器二維點2923係表示累加器202之二維點位置。就一較佳實施例而言,累加器二維點2923值表示此二維點位置之右側的位元位置數量。換言之,累加器二維點2923表示累加器202之最低有效位元中屬於小數位元之數量,即位於二維點右側之位元。在此實施例中,累加器二維點2923係明確指 示,而非如第二十九A圖之實施例是暗中確認。
第二十九C圖係顯示以兩個部分儲存第二十九A圖之倒數2942之一實施例之方塊示意圖。第一個部分2962是一個偏移值,表示使用者想要乘上累加器202數值217之真實倒數值中被抑制之前導零的數量2962。前導零的數量是緊接在二維點右側連續排列之零的數量。 第二部分2694是前導零抑制倒數值,也就是將所有前導零移除後之真實倒數值。在一實施例中,被抑制前導零數量2962係以4位元儲存,而前導零抑制倒數值2964則是以8位元不帶符號值儲存。
舉例來說,假設使用者想要將累加器202數值217乘上數值49的倒數值。數值49的倒數值以二維呈現並設定13個小數位元就會是0.0000010100111,其中有五個前導零。如此,使用者會將被抑制前導零數量2962填入數值5,將前導零抑制倒數值2964填入數值10100111。在倒數乘法器“除法器A”3014(請參照第三十圖)將累加器202數值217與前導零抑制倒數值2964相乘後,所產生之乘積會依據被抑制前導零數量2962右移。這樣的實施例有助於利用相對較少之位元來表達倒數2942值達成高精確度的要求。
第三十圖係顯示第二圖之啟動函 數單元212之一實施例之方塊示意圖。此啟動函數單元212包含第一圖之控制與狀態暫存器127、一個正類型轉換器(PFC)與輸出二維點對準器(OBPA)3002以接收累加器202數值217、一個捨入器3004以接收累加器202數值217與輸出二維點對準器3002移出之位元數量的指標、一個如前述之隨機位元來源3003以產生隨機位元3005、一個第一多工器3006以接收正類型轉換器與輸出二維點對準器3002之輸出以及捨入器3004之輸出、一個標準尺寸壓縮器(CCS)與飽和器3008以接收第一多工器3006之輸出、一個位元選擇器與飽和器3012以接收標準尺寸壓縮器與飽和器3008之輸出、一個校正器3018以接收標準尺寸壓縮器與飽和器3008之輸出、一個倒數乘法器3014以接收標準尺寸壓縮器與飽和器3008之輸出、一個向右移位器3016以接收標準尺寸壓縮器與飽和器3008之輸出、一個雙取正切(tanh)模組3022以接收位元選擇器與飽和器3012之輸出、一個S型模組以接收位元選擇器與飽和器3012之輸出、一個軟加模組3026以接收位元選擇器與飽和器3012之輸出、一個第二多工器3032以接收雙取正切模組3022、S型模組、軟加模組3026、校正器3018、倒數乘法器3014與向右移位器3016之輸出以及標準尺寸壓縮器與飽和器3008所傳遞之標準尺寸輸出 3028、一個符號恢復器3034以接收第二多工器3032之輸出、一個尺寸轉換器與飽和器3036以接收符號恢復器3034之輸出、一第三多工器3037以接收尺寸轉換器與飽和器3036之輸出與累加器輸出217、以及一個輸出暫存器3038以接收多工器3037之輸出,而其輸出即為第一圖中的結果133。
正類型轉換器與輸出二維點對準器3002接收累加器202值217。就一較佳實施例而言,如前述,累加器202值217是一個全精度值。也就是說,累加器202具有足夠的儲存位元數以裝載一累加數,此累加數是由整數加法器244將一系列由整數乘法器242產生之乘積相加所產生之總數,而此運算不捨棄乘法器242之個別乘積或加法器之各個總數中之任何一個位元以維持精確度。就一較佳實施例而言,累加器202至少具有足夠的位元數來裝載一神經網路單元121程式化執行產生之乘積累加的最大數量。舉例來說,請參照第四圖之程式,在寬配置下,神經網路單元121程式化執行產生之乘積累加的最大數量為512,而累加器202位元寬度為41。在另一範例中,請參照第二十圖之程式,在窄配置下,神經網路單元121程式化執行產生之乘積累加的最大數量為1024,而累加器202位元寬度為28。基本上,全精度累加器202具有 至少Q個位元,其中Q是M與log2P之加總,其中M是乘法器242之整數乘積之為原寬度(舉例來說,對於窄乘法器242而言是16位元,對於寬乘法器242而言是32位元),而P是累加器202所能累加之乘積的最大容許數量。就一較佳實施例而言,乘積累加之最大數量是神經網路單元121之程式設計者依據程式規格所指定。在一實施例中,假定一個先前乘法累加指令用以從資料/權重隨機存取記憶體122/124載入資料/權重文字206/207列(如第四圖中位址1之指令)之基礎上,定序器128會執行乘法累加神經網路單元指令(如第四圖中位址2之指令)之計數的最大值,如511。
利用一個具有足夠位元寬度而能對所容許累加之最大數量之一全精度值執行累加運算之一累加器202,即可簡化神經處理單元126之算術邏輯單元204之設計。特別是,這樣處理可以緩和需要使用邏輯來對整數加法器244產生之總數執行飽和運算之需求,因為整數加法器244會使一個小型累加器產生溢位,而需要持續追蹤累加器之二維點位置以確認是否產生溢位以確認是否需要執行飽和運算。舉例來說,對於具有一非全精度累加器但具有飽和邏輯以處理非全精度累加器之溢位之設計而言,假定存在以下情況。
(1)資料文字值的範圍是介於0與1之間而所有儲存位元都用以儲存小數位元。權重文字值的範圍是介於-8與+8之間而除了三個以外之所有儲存位元都用以儲存小數位元。做為一個雙曲正切啟動函數之輸入之累加值的範圍是介於-8與8之間,而除了三個以外之所有儲存位元都用以儲存小數位元。
(2)累加器之位元寬度為非全精度(如只有乘積之位元寬度)。
(3)假定累加器為全精度,最終累加值也大約會介於-8與8之間(如+4.2);不過,在此序列中“點A”前的乘積會較頻繁地產生正值,而在點A後的乘積則會較頻繁地產生負值。
在此情況下,就可能取得不正確的結果(如+4.2以外之結果)。這是因為在點A前方之某些點,當需要使累加器達到一個超過其飽和最大值+8之數值,如+8.2,就會損失剩下的0.2。累加器甚至會使剩下的乘積累加結果維持在飽和值,而會損失更多正值。因此,累加器之最終值可能會小於使用具有全精度位元寬度之累加器所計算之數值(即小於+4.2)。
正類型轉換器3002會在累加器202數值217為負時,將其轉換為正類型,並產生一額外位元指出原本數值之正負,這個位元會隨 同此數值向下傳遞至啟動函數單元212管線。將負數轉換為正類型可以簡化後續啟動函數單元212之運算。舉例來說,經此處理後,只有正值會輸入雙曲正切模組3022與S型模組3024,因而可以簡化這些模組的設計。此外,也可以簡化捨入器3004與飽和器3008。
輸出二維點對準器3002會向右移動或縮放此正類型值,使其對準於控制與狀態暫存器127內指定之輸出二維點2954。就一較佳實施例而言,輸出二維點對準器3002會計算累加器202數值217之小數位元數(例如由累加器二維點2923所指定或是資料二維點2922與權重二維點2924之加總)減去輸出之小數位元數(例如由輸出二維點2954所指定)之差值作為偏移量。如此,舉例來說,若是累加器202二維點2923為8(即上述實施例)而輸出二維點2954為3,輸出二維點對準器3002就會將此正類型數值右移5個位元以產生提供致多工器3006與捨入器3004之結果。
捨入器3004會對累加器202數值217執行捨入運算。就一較佳實施例而言,捨入器3004會對正類型轉換器與輸出二維點對準器3002產生之一正類型數值產生一個捨入後版本,並將此捨入後版本提供至多工器3006。捨入器3004會依據前述捨入控制2932執行捨入運 算,如本文所述,前述捨入控制會包括使用隨機位元3005之隨機捨入。多工器3006會依據捨入控制2932(如本文所述,可包含隨機捨入),在其多個輸入中選擇其一,也就是來自正類型轉換器與輸出二維點對準器3002之正類型數值或是來自捨入器3004之捨入後版本,並且將選擇後的數值提供給標準尺寸壓縮器與飽和器3008。就一較佳實施例而言,若是捨入控制指定不進行捨入,多工器3006就會選擇正類型轉換器與輸出二維點對準器3002之輸出,否則就會選擇捨入器3004之輸出。在其他實施例中,亦可由啟動函數單元212執行額外的捨入運算。舉例來說,在一實施例中,當位元選擇器3012對標準尺寸壓縮器與飽和器3008之輸出(如後述)位元進行壓縮時,位元選擇器3012會基於遺失的低順位位元進行捨入運算。在另一個範例中,倒數乘法器3014(如後述)之乘積會被施以捨入運算。在又一個範例中,尺寸轉換器3036需要轉換出適當之輸出尺寸(如後述),此轉換可能涉及丟去某些用於捨入確認之低順位位元,就會執行捨入運算。
標準尺寸壓縮器3008會將多工器3006輸出值壓縮至標準尺寸。因此,舉例來說,若是神經處理單元126是處於窄配置或漏斗配置2902,標準尺寸壓縮器3008可將28位元之多 工器3006輸出值壓縮至16位元;而若是神經處理單元126是處於寬配置2902,標準尺寸壓縮器3008可將41位元之多工器3006輸出值壓縮至32位元。不過,在壓縮至標準尺寸前,若是預壓縮值大於標準型式所能表達之最大值,飽和器3008就會對使此預壓縮值填滿至標準型式所能表達之最大值。舉例來說,若是預壓縮值中位於最高有效預壓縮值位元左側之任何位元都是數值1,飽和器3008就會將預壓縮值填滿至最大值(如填滿為全部1)。
就一較佳實施例而言,雙曲正切模組3022、S型模組3024、以及軟加模組3026都包含查找表,如可程式化邏輯陣列(PLA)、唯讀記憶體(ROM)、可合併邏輯閘等等。在一實施例中,為了簡化並縮小這些模組3022/3024/3026的尺寸,提供至這些模組之輸入值係具有3.4之型式,即三個完整位元與四個小數位元,亦即輸入值具有四個位元位於二維點右側並且具有三個位元位於二維點左側。因為在3.4型式之輸入值範圍(-8,+8)之極端處,輸出值會非對稱地靠近其最小/最大值,因此,這些數值必需經過選擇。不過,本發明並不限於此,本發明亦可應用於其它將二維點放置在不同位置之實施例,如以4.3型式或2.5型式。位元選擇器3012會在標準尺寸壓縮器與飽和器 3008輸出之位元中選擇選擇滿足3.4型式規範之位元,此規範涉及壓縮處理,也就是會喪失某些位元,而標準型式則具有較多之為位元數。不過,在選擇/壓縮標準尺寸壓縮器與飽和器3008輸出值之前,若是預壓縮值大於3.4型式所能表達之最大值,飽和器3012就會使預壓縮值填滿至3.4型式所能表達之最大值。舉例來說,若是預壓縮值中位於最高有效3.4型式位元左側之任何位元都是數值1,飽和器3012就會將預壓縮值填滿至最大值(如填滿至全部1)。
雙曲正切模組3022、S型模組3024與軟加模組3026會對標準尺寸壓縮器與飽和器3008輸出之3.4型式數值執行相對應之啟動函數(如前述)以產生一結果。就一較佳實施例而言,雙曲正切模組3022與S型模組3024所產生的是一個0.7型式之7位元結果,即零個完整位元與七個小數位元,亦即輸入值具有七個位元位於二維點右側。就一較佳實施例而言,軟加模組3026產生的是一個3.4型式之7位元結果,即其型式與此模組之輸入型式相同。就一較佳實施例而言,雙曲正切模組3022、S型模組3024與軟加模組3026之輸出會被延展至標準型式(例如在必要時加上前導零)並對準而使二維點由輸出二維點2954數值所指定。
校正器3018會產生標準尺寸壓縮 器與飽和器3008之輸出值之一校正後版本。也就是說,若是標準尺寸壓縮器與飽和器3008之輸出值(如前述其符號係以管線下移)為負,校正器3018會輸出零值;否則,校正器3018就會將其輸入值輸出。就一較佳實施例而言,校正器3018之輸出為標準型式並具有由輸出二維點2954數值所指定之二維點。
倒數乘法器3014會將標準尺寸壓縮器與飽和器3008之輸出與指定於倒數值2942之使用者指定倒數值相乘,以產生標準尺寸之乘積,此乘積實際上即為標準尺寸壓縮器與飽和器3008之輸出值,以倒數值2942之倒數作為除數計算出來的商數。就一較佳實施例而言,倒數乘法器3014之輸出為標準型式並具有由輸出二維點2954數值指定之二維點。
向右移位器3016會將標準尺寸壓縮器與飽和器3008之輸出,以指定於偏移量值2944之使用者指定位元數進行移動,以產生標準尺寸之商數。就一較佳實施例而言,向右移位器3016之輸出為標準型式並具有由輸出二維點2954數值指定之二維點。
多工器3032選擇啟動函數2934值所指定之適當輸入,並將其選擇提供至符號恢復器3034,若是原本的累加器202數值217為負值,符號恢復器3034就會將多工器3032輸出之 正類型數值轉換為負類型,例如轉換為二補數類型。
尺寸轉換器3036會依據如第二十九A圖所述之輸出命令2956之數值,將符號恢復器3034之輸出轉換至適當的尺寸。就一較佳實施例而言,符號恢復器3034之輸出具有一個由輸出二維點2954數值指定之二維點。就一較佳實施例而言,對於輸出命令之第一預設值而言,尺寸轉換器3036會捨棄符號恢復器3034輸出之上半部位元。此外,若是符號恢復器3034之輸出為正並且超過配置2902指定之文字尺寸所能表達之最大值,或是輸出為負並且小於文字尺寸所能表達之最小值,飽和器3036就會將其輸出分別填滿至此文字尺寸之可表達最大/最小值。對於第二與第三預設值,尺寸轉換器3036會傳遞符號恢復器3034之輸出。
多工器3037會依據輸出命令2956,在資料轉換器與飽和器3036輸出與累加器202輸出217中選擇其一已提供給輸出暫存器3038。進一步來說,對於輸出命令2956之第一與第二預設值,多工器3037會選擇尺寸轉換器與飽和器3036之輸出的下方文字(尺寸由配置2902指定)。對於第三預設值,多工器3037會選擇尺寸轉換器與飽和器3036之輸出的上方文字。對於第四預設值,多工器3037會選擇未經 處理之累加器202數值217的下方文字;對於第五預設值,多工器3037會選擇未經處理之累加器202數值217的中間文字;而對於第六預設值,多工器3037會選擇未經處理之累加器202數值217的上方文字。如前述,就一較佳實施例而言,啟動函數單元212會在未經處理之累加器202數值217的上方文字加上零值上方位元。
第三十一圖係顯示第三十圖之啟動函數單元212之運作之一範例。如圖中所示,神經處理單元126之配置2902係設定為窄配置。此外,帶符號資料2912與帶符號權重2914值為真。此外,資料二維點2922值表示對於資料隨機存取記憶體122文字而言,其二維點位置右側有7個位元,神經處理單元126所接收之第一資料文字之一範例值係呈現為0.1001110。此外,權重二維點2924值表示對於權重隨機存取記憶體124文字而言,其二維點位置右側有3個位元,神經處理單元126所接收之第一資料文字之一範例值係呈現為00001.010。
第一資料與權重文字之16位元乘積(此乘積會與累加器202之初始零值相加)係呈現為000000.1100001100。因為資料二維點2912是7而權重二維點2914是3,對於所隱含之累加器202二維點而言,其右側會有10個位元。在窄配置的情況下,如本實施例所示,累加器 202具有28個位元寬。舉例來說,完成所有算術邏輯運算後(例如第二十圖全部1024個乘法累加運算),累加器202之數值217會是000000000000000001.1101010100。
輸出二維點2954值表示輸出之二維點右側有7個位元。因此,在傳遞輸出二維點對準器3002與標準尺寸壓縮器3008之後,累加器202數值217會被縮放、捨入與壓縮至標準型式之數值,即000000001.1101011。在此範例中,輸出二維點位址表示7個小數位元,而累加器202二維點位置表示10個小數位元。因此,輸出二維點對準器3002會計算出差值3,並透過將累加器202數值217右移3個位元以對其進行縮放。在第三十一圖中即顯示累加器202數值217會喪失3個最低有效位元(二維數100)。此外,在此範例中,捨入控制2932值係表示使用隨機捨入,並且在此範例中係假定取樣隨機位元3005為真。如此,如前述,最低有效位元就會被向上捨入,這是因為累加器202數值217的捨入位元(這3個因為累加器202數值217之縮放運算而被移出的位元中之最高有效位元)為一,而黏位元(這3個因為累加器202數值217之縮放運算而被移出的位元中,2個最低有效位元之布林或運算結果)為零。
在本範例中,啟動函數2934表示所 使用的是S型函數。如此,位元選擇器3012就會選擇標準型式值之位元而使S型模組3024之輸入具有三個完整位元與四個小數位元,如前述,即所示之數值001.1101。S型模組3024之輸出數值會放入標準型式中,即所示之數值000000000.1101110。
此範例之輸出命令2956指定第一預設值,即輸出配置2902表示之文字尺寸,在此情況下即窄文字(8位元)。如此,尺寸轉換器3036會將標準S型輸出值轉換為一個8位元量,其具有一個隱含之二維點,並且在此二維點右側有7個位元,而產生一個輸出值01101110,如圖中所示。
第三十二圖係顯示第三十圖之啟動函數單元212之運作之第二個範例。第三十二圖之範例係描述當啟動函數2934表示以標準尺寸傳遞累加器202數值217時,啟動函數單元212之運算。如圖中所示,此配置2902係設定為神經處理單元126之窄配置。
在此範例中,累加器202之寬度為28個位元,累加器202二維點之位置右側有10個位元(這是因為在一實施例中資料二維點2912與權重二維點2914之加總為10,或者在另一實施例中累加器二維點2923暗中被指定為具有數值10)。舉例來說,在執行所有算術邏輯運 算後,第三十二圖所示之累加器202數值217為000001100000011011.1101111010。
在此範例中,輸出二維點2954值表示對於輸出而言,二維點右側有4個位元。因此,在傳遞輸出二維點對準器3002與標準尺寸壓縮器3008之後,累加器202數值217會達到飽和並壓縮至所示之標準型式值111111111111.1111,此數值係由多工器3032所接收以作為標準尺寸傳遞值3028。
在此範例中顯示兩個輸出命令2956。第一個輸出命令2956指定第二預設值,即輸出標準型式尺寸之下方位元。因為配置2902所指示之尺寸為窄文字(8位元),標準尺寸就會是16位元,而尺寸轉換器3036會選擇標準尺寸傳遞值3028之下方8個位元以產生如圖中所示之8位元數值11111111。第二個輸出命令2956指定第三預設值,即輸出標準型式尺寸之上方位元。如此,尺寸轉換器3036會選擇標準尺寸傳遞值3028之上方8個位元以產生如圖中所示之8位元數值11111111。
第三十三圖係顯示第三十圖之啟動函數單元212之運作之第三個範例。第三十三圖之範例係揭示當啟動函數2934表示要傳遞整個未經處理之累加器202數值217時啟動函數單元212之運作。如圖中所示,此配置2902係設定 為神經處理單元126之寬配置(例如16位元之輸入文字)。
在此範例中,累加器202之寬度為41個位元,累加器202二維點位置的右側有8個位元(這是因為在一實施例中資料二維點2912與權重二維點2914之加總為8,或者在另一實施例中累加器二維點2923暗中被指定為具有數值8)。舉例來說,在執行所有算術邏輯運算後,第三十三圖所示之累加器202數值217為001000000000000000001100000011011.11011110。
此範例中顯示三個輸出命令2956。第一個輸出命令指定第四預設值,即輸出未經處理之累加器202數值之下方文字;第二個輸出命令指定第五預設值,即輸出未經處理之累加器202數值之中間文字;而第三個輸出命令指定第六預設值,即輸出未經處理之累加器202數值之上方文字。因為配置2902所指示之尺寸為寬文字(16位元),如第三十三圖所示,因應第一輸出命令2956,多工器3037會選擇16位元值0001101111011110;因應第二輸出命令2956,多工器3037會選擇16位元值0000000000011000;而因應第三輸出命令2956,多工器3037會選擇16位元值0000000001000000。
如前述,神經網路單元121即可執行於整數資料而非浮點資料。如此,即有助於簡化個個神經處理單元126,或至少其中之算術邏輯單元204部分。舉例來說,這個算術邏輯單元204就不需要為了乘法器242而納入在浮點運算中需用來將乘數之指數相加之加法器。類似地,這個算術邏輯單元204就不需要為了加法器234而納入在浮點運算中需用來對準加數之二維點之移位器。所屬技術領域具有通常知識者當能理解,浮點單元往往非常複雜;因此,本文所述之範例僅針對算術邏輯單元204進行簡化,利用所述具有硬體定點輔助而讓使用者可指定相關二維點之整數實施例亦可用於對其他部分進行簡化。相較於浮點之實施例,使用整數單元作為算術邏輯單元204可以產生一個較小(且較快)之神經處理單元126,而有利於將一個大型的神經處理單元126陣列整合進神經網路單元121內。啟動函數單元212之部分可以基於使用者指定、累加數需要之小數位元數量以及輸出值需要之小數位元數量,來處理累加器202數值217之縮放與飽和運算,而較佳者係基於使用者指定。任何額外複雜度與伴隨之尺寸增加,以及啟動函數單元212之定點硬體輔助內之能量與/或時間耗損,都可以透過在算術邏輯單元204間共享啟動函數單元212之方式來進 行分攤,這是因為如第十一圖之實施例所示,採用共享方式之實施例可以減少啟動函數單元1112之數量。
本文所述之實施例可以享有許多利用硬體算數單元以降低複雜度之優點(相較於使用浮點算術單元),而同時還能用於小數之算術運算,即具有二維點之數字。浮點算術之優點在於它可以提供資料算術運算給資料之個別數值落在一個非常廣的數值範圍內(實際上只受限於指數範圍的大小,因此會是一個非常大的範圍)。也就是說,每個浮點數具有其潛在獨一無二的指數值。不過,本文所述之實施例理解到並利用某些應用中具有輸入資料高度平行且落於一相對較窄之範圍內而使所有平行資料具有相同“指數”之特性。如此,這些實施例讓使用者將二維點位置一次指定給所有的輸入值與/或累加值。類似地,透過理解並利用平行輸出具有類似範圍之特性,這些實施例讓使用者將二維點位置一次指定給所有的輸出值。人工神經網路是此種應用之一範例,不過本發明之實施例亦可應用於執行其他應用之計算。透過將二維點位置一次指定給多個輸入而非給對個別的輸入數,相較於使用浮點運算,本發明之實施例可以更有效率地利用記憶空間(如需要較少之記憶體)以及/或在使用類似數量之記 憶體的情況下提升精度,這是因為用於浮點運算之指數的位元可用來提升數值精度。
此外,本發明之實施例理解到在對一個大型系列之整數運算(如溢位或喪失較不顯著之小數位元)執行累加時可能喪失精度,因此提供一個解決方法,主要是利用一個足夠大的累加器來避免精度喪失。
神經網路單元微運算之直接執行
第三十四圖係顯示第一圖之處理器100以及神經網路單元121之部分細節之方塊示意圖。神經網路單元121包括神經處理單元126之管線級3401。各個管線級3401係以級暫存器區分,並包括組合邏輯以達成本文之神經處理單元126之運算,如布林邏輯閘、多工器、加法器、乘法器、比較器等等。管線級3401從多工器3402接收一微運算3418。微運算3418會向下流動至管線級3401並控制其組合邏輯。微運算3418是一個位元集合。就一較佳實施例而言,微運算3418包括資料隨機存取記憶體122記憶體位址123之位元、權重隨機存取記憶體124記憶體位址125之位元、程式記憶體129記憶體位址131之位元、多工暫存器208/705控制信號213/713、還有許多控制暫存器217之欄位(例如第二十九A至二十九C圖之控制暫存器)。在 一實施例中,微運算3418包括大約120個位元。 多工器3402從三個不同的來源接收微運算,並選擇其中一個作為提供給管線級3401之微運算3418。
多工器3402之一個微運算來源為第一圖之定序器128。定序器128會將由程式記憶體129接收之神經網路單元指令解碼並據以產生一個微運算3416提供至多工器3402之第一輸入。
多工器3402之第二個微運算來源為從第一圖之保留站108接收微指令105以及從通用暫存器116與媒體暫存器118接收運算元之解碼器3404。就一較佳實施例而言,如前述,微指令105係由指令轉譯器104因應MTNN指令1400與MFNN指令1500之轉譯所產生。微指令105可包括一個立即欄以指定一特定函數(由一個MTNN指令1400或一個MFNN指令1500所指定),例如程式記憶體129內程式的開始與停止執行、直接從媒體暫存器118執行一微運算、或是如前述讀取/寫入神經網路單元之一記憶體。解碼器3404會將微指令105解碼並據以產生一個微運算3412提供至多工器之第二輸入。就一較佳實施例而言,對於MTNN指令1400/MFNN指令1500之某些函數1432/1532而言,解碼器3404不需要產生一個微運算3412向下傳送至管 線3401,例如寫入控制與狀態暫存器127、開始執行程式記憶體129內之程式、暫停執行程式記憶體129內之程式、等待程式記憶體129內之程式完成執行、從控制與狀態暫存器127讀取以及重設神經網路單元121。
多工器3402之第三個微運算來源為媒體暫存器118本身。就一較佳實施例而言,如前文對應於第十四圖所述,MTNN指令1400可指定一函數以指示神經網路單元121直接執行一個由媒體暫存器118提供至多工器3402之第三輸入之微運算3414。直接執行由架構媒體暫存器118提供之微運算3414有利於對神經網路單元121進行測試,如內建自我測試(BIST),或除錯之動作。
就一較佳實施例而言,解碼器3404會產生一個模式指標3422控制多工器3402之選擇。當MTNN指令1400指定一個函數開始執行一個來自程式記憶體129之程式,解碼器3404會產生一模式指標3422值使多工器3402選擇來自定序器128之微運算3416,直到發生錯誤或直到解碼器3404碰到一個MTNN指令1400指定一個函數停止執行來自程式記憶體129之程式。當MTNN指令1400指定一個函數指示神經網路單元121直接執行由媒體暫存器118提供之一微運算3414,解碼器3404會產生一個模式指標3422 值使多工器3402選擇來自所指定之媒體暫存器118之微運算3414。否則,解碼器3404就會產生一個模式指標3422值使多工器3402選擇來自解碼器3404之微運算3412。
可變率神經網路單元
在許多情況下,神經網路單元121執行程式後就會進入待機狀態(idle)等待處理器100處理一些需要在執行下一個程式前處理的事情。舉例來說,假設處在一個類似於第三至六A圖所述之情況,神經網路單元121會對一乘法累加啟動函數程式(也可稱為一前授神經網路層程式(feed forward neural network layer program))連續執行兩次或更多次。相較於神經網路單元121執行程式所花費的時間,處理器100明顯需要花費較長的時間來將512K之權重值寫入權重隨機存取記憶體124。換言之,神經網路單元121會在短時間內執行程式,隨後就進入待機狀態,直到處理器100將接下來的權重值寫入權重隨機存取記憶體124供下一次程式執行使用。此情況可參照第三十六A圖,詳如後述。在此情況下,神經網路單元121可採用較低時頻率運行以延長執行程式之時間,藉以使執行程式所需之能量消耗分散至較長的時間範圍,而使神經網路單元121,乃至於整個處理器100,維持在較低溫度。此情況稱為緩和模式, 可參照第三十六B圖,詳如後述。
第三十五圖係一方塊圖,顯示具有一可變率神經網路單元121之處理器100。此處理器100係類似於第一圖之處理器100,並且圖中具有相同標號之元件亦相類似。第三十五圖之處理器100並具有時頻產生邏輯3502耦接至處理器100之功能單元,這些功能單元即指令攫取單元101,指令快取102,指令轉譯器104,重命名單元106,保留站108,神經網路單元121,其他執行單元112,記憶體子系統114,通用暫存器116與媒體暫存器118。時頻產生邏輯3502包括一時頻產生器,例如一鎖相迴路(PLL),以產生一個具有一主要時頻率或時頻頻率之時頻信號。舉例來說,此主要時頻率可以是1GHz,1.5GHz,2GHz等等。時頻率即表示週期數,如時頻信號每秒鐘在高低狀態間之震盪次數。較佳地,此時頻信號具有一平衡週期(duty cycle),即此週期之一半為高狀態而另一半為低狀態;另外,此時頻信號也可具有一非平衡週期,也就是時頻信號處在高狀態之時間長於其處在低狀態之時間,反之亦然。較佳地,鎖相迴路係用以產生多個時頻率之主要時頻信號。較佳地,處理器100包括一電源管理模組,依據多種因素自動調整主要時頻率,這些因素包括處理器100之動態偵測操作溫度,利用率 (utilization),以及來自系統軟體(如作業系統,基本輸入輸出系統(BIOS))指示所需效能與/或節能指標之命令。在一實施例中,電源管理模組包括處理器100之微碼。
時頻產生邏輯3502並包括一時頻散佈網路,或時頻樹(clock tree)。時頻樹會將主要時頻信號散佈至處理器100之功能單元,如第三十五圖所示,此散佈動作就是將時頻信號3506-1傳送至指令攫取單元101,將時頻信號3506-2傳送至指令快取102,將時頻信號3506-10傳送至指令轉譯器104,將時頻信號3506-9傳送至重命名單元106,將時頻信號3506-8傳送至保留站108,將時頻信號3506-7傳送至神經網路單元121,將時頻信號3506-4傳送至其他執行單元112,將時頻信號3506-3傳送至記憶體子系統114,將時頻信號3506-5傳送至通用暫存器116,以及將時頻信號3506-6傳送至媒體暫存器118,這些信號集體稱為時頻信號3506。此時頻樹具有節點或線,以傳送主要時頻信號3506至其相對應之功能單元。此外,較佳地,時頻產生邏輯3502可包括時頻緩衝器,在需要提供較乾淨之時頻信號與/或需要提升主要時頻信號之電壓準位時,特別是對於較遠之節點,時頻緩衝器可重新產生主要時頻信號。此外,各個功能單元並具有其自身之子 時頻樹,在需要時重新產生與/或提升所接收之相對應主要時頻信號3506的電壓準位。
神經網路單元121包括時頻降低邏輯3504,時頻降低邏輯3504接收一緩和指標3512與主要時頻信號3506-7,以產生一第二時頻信號。第二時頻信號具有一時頻率。此時頻率若非相同於主要時頻率,就是處於一緩和模式從主要時頻率降低一數值以減少熱能產生,此數值係程式化至緩和指標3512。時頻降低邏輯3504類似於時頻產生邏輯3502,其具有一時頻散佈網路,或時頻樹,以散佈第二時頻信號至神經網路單元121之多種功能方塊,此散佈動作就是將時頻信號3508-1傳送至神經處理單元126陣列,將時頻信號3508-2傳送至定序器128以即將時頻信號3508-3傳送至介面邏輯3514,這些信號集體稱為第二時頻信號3508。較佳地,這些神經處理單元126包括複數個管線級3401,如第三十四圖所示,管線級3401包括管線分級暫存器,用以從時頻降低邏輯3504接收第二時頻信號3508-1。
神經網路單元121並具有介面邏輯3514以接收主要時頻信號3506-7與第二時頻信號3508-3。介面邏輯3514係耦接於處理器100前端之下部分(例如保留站108,媒體暫存器118與通用暫存器116)與神經網路單元121之多種 功能方塊間,這些功能方塊即時頻降低邏輯3504,資料隨機存取記憶體122,權重隨機存取記憶體124,程式記憶體129與定序器128。介面邏輯3514包括一資料隨機存取記憶體緩衝3522,一權重隨機存取記憶體緩衝3524,第三十四圖之解碼器3404,以及緩和指標3512。緩和指標3512裝載一數值,此數值係指定神經處理單元126陣列會以多慢的速度執行神經網路單元程式指令。較佳地,緩和指標3512係指定一除數值N,時頻降低邏輯3504將主要時頻信號3506-7除以此除數值以產生第二時頻信號3508,如此,第二時頻信號之比率就會是1/N。 較佳地,N的數值可程式化為複數個不同預設值中之任何一個,這些預設值可使時頻降低邏輯3504對應產生複數個具有不同比率之第二時頻信號3508,這些比率係小於主要時頻率。
在一實施例中,時頻降低邏輯3504包括一時頻除法器電路,用以將主要時頻信號3506-7除以緩和指標3512數值。在一實施例中,時頻降低邏輯3504包括時頻閘(如AND閘),時頻閘可透過一啟動信號來遮蔽主要時頻信號3506-7,啟動信號在主要時頻信號之每N個週期中只會產生一次真值。以一個包含一計數器以產生啟動信號之電路為例,此計數器可向上計數至N。當伴隨的邏輯電路偵測到計數 器之輸出與N匹配,邏輯電路就會在第二時頻信號3508產生一真值脈衝並重設計數器。較佳地,緩和指標3512數值可由一架構指令予以程式化,例如第十四圖之MTNN指令1400。較佳地,在架構程式指示神經網路單元121開始執行神經網路單元程式前,運作於處理器100之架構程式會將緩和值程式化至緩和指標3512,這部分在後續對應於第三十七圖處會有更詳細的說明。
權重隨機存取記憶體緩衝3524係耦接於權重隨機存取記憶體124與媒體暫存器118之間作為其間資料傳輸之緩衝。較佳地,權重隨機存取記憶體緩衝3524係類似於第十七圖之緩衝器1704之一個或多個實施例。較佳地,權重隨機存取記憶體緩衝3524從媒體暫存器118接收資料之部分係以具有主要時頻率之主要時頻信號3506-7加入時頻,而權重隨機存取記憶體緩衝3524從權重隨機存取記憶體124接收資料之部分係以具有第二時頻率之第二時頻信號3508-3加入時頻,第二時頻率可依據程式化於緩和指標3512之數值從主要時頻率調降,亦即依據神經網路單元121執行於緩和或一般模式來進行調降,也可以不是。在一實施例中,權重隨機存取記憶體124為單埠,如前文第十七圖所述,權重隨機存取記憶體124並可由媒體暫 存器118透過權重隨機存取記憶體緩衝3524,以及由神經處理單元126或第十一圖之列緩衝1104,以任意方式(arbitrated fashion)存取。 在另一實施例中,權重隨機存取記憶體124為雙埠,如前文第十六圖所述,各個埠可由媒體暫存器118透過權重隨機存取記憶體緩衝3524以及由神經處理單元126或列緩衝器1104以併行方式存取。
類似於權重隨機存取記憶體緩衝3524,資料隨機存取記憶體緩衝3522係耦接於資料隨機存取記憶體122與媒體暫存器118之間作為其間資料傳送之緩衝。較佳地,資料隨機存取記憶體緩衝3522係類似於第十七圖之緩衝器1704之一個或多個實施例。較佳地,資料隨機存取記憶體緩衝3522從媒體暫存器118接收資料之部分係以具有主要時頻率之主要時頻信號3506-7加入時頻,而資料隨機存取記憶體緩衝3522從資料隨機存取記憶體122接收資料之部分係以具有第二時頻率之第二時頻信號3508-3加入時頻,第二時頻率可依據程式化於緩和指標3512之數值從主要時頻率調降,亦即依據神經網路單元121執行於緩和或一般模式來進行調降,也可以不是。在一實施例中,資料隨機存取記憶體122為單埠,如前文第十七圖所述,資料隨機存取記憶體122並可由媒體暫存 器118透過資料隨機存取記憶體緩衝3522,以及由神經處理單元126或第十一圖之列緩衝1104,以任意方式存取。在另一實施例中,資料隨機存取記憶體122為雙埠,如前文第十六圖所述,各個埠可由媒體暫存器118透過資料隨機存取記憶體緩衝3522以及由神經處理單元126或列緩衝器1104以併行方式存取。
較佳地,而不論資料隨機存取記憶體122與/或權重隨機存取記憶體124為單埠或雙埠,介面邏輯3514會包括資料隨機存取記憶體緩衝3522與權重隨機存取記憶體緩衝3524以同步主要時頻域與第二時頻域。較佳地,資料隨機存取記憶體122,權重隨機存取記憶體124與程式記憶體129都具有一靜態隨機存取記憶體(SRAM),其中包含相對應之讀取啟動信號,寫入啟動信號與記憶體選擇啟動信號。
如前述,神經網路單元121是處理器100之一執行單元。執行單元是處理器中執行架構指令轉譯出之微指令或是執行架構指令本身之功能單元,例如執行第一圖中架構指令103轉譯出之微指令105或是架構指令103本身。執行單元從處理器之通用暫存器接收運算元,例如從通用暫存器116與媒體暫存器118。執行單元執行微指令或架構指令後會產生結果,此結果會被寫入通用暫存器。第十四與十五圖所述 之MTNN指令1400與MFNN指令1500為架構指令103之範例。微指令係用以實現架構指令。更精確來說,執行單元對於架構指令轉譯出之一個或多個微指令之集體執行,就會是對於架構指令所指定之輸入執行架構指令所指定之運算,以產生架構指令定義之結果。
第三十六A圖係一時序圖,顯示處理器100具有神經網路單元121運作於一般模式之一運作範例,此一般模式即以主要時頻率運作。在時序圖中,時間之進程是由左而右。處理器100係以主要時頻率執行架構程式。更精確來說,處理器100之前端(例如指令攫取單元101,指令快取102,指令轉譯器104,重命名單元106與保留站108)係以主要時頻率攫取,解碼且發佈架構指令至神經網路單元121與其他執行單元112。
起初,架構程式執行一架構指令(如MTNN指令1400),處理器前端100係將此架構指令發佈至神經網路單元121以指示神經網路單元121開始執行其程式記憶體129內之神經網路單元程式。在之前,架構程式會執行一架構指令將一指定主要時頻率之數值寫入緩和指標3512,亦即使神經網路單元處於一般模式。更精確地說,程式化至緩和指標3512之數值會使時頻降低邏輯3504以主要時頻信號3506 之主要時頻率產生第二時頻信號3508。較佳地,在此範例中,時頻降低邏輯3504之時頻緩衝器單純提升主要時頻信號3506之電壓準位。 另外在之前,架構程式會執行架構指令以寫入資料隨機存取記憶體122,權重隨機存取記憶體124並將神經網路單元程式寫入程式記憶體129。因應神經網路單元程式MTNN指令1400,神經網路單元121會開始以主要時頻率執行神經網路單元程式,這是因為緩和指標3512是以主要時頻率值予以程式化。神經網路單元121開始執行後,架構程式會持續以主要時頻率執行架構指令,包括主要是以MTNN指令1400寫入與/或讀取資料隨機存取記憶體122與權重隨機存取記憶體124,以完成對於神經網路單元程式之下一次執行,或調用(invocation)或運作之準備。
在第三十六A圖之範例中,相較於架構程式完成對於資料隨機存取記憶體122與權重隨機存取記憶體124寫入/讀取所花費的時間,神經網路單元121能夠以明顯較少的時間(例如四分之一的時間)完成神經網路單元程式之執行。舉例來說,以主要時頻率運作之情況下,神經網路單元121花費大約1000個時頻週期來執行神經網路單元程式,不過,架構程式會花費大約4000個時頻週期。如此,神經網路 單元121在剩下的時間內就會處於待機狀態,在此範例中,這是一個相當長的時間,如大約3000個主要時頻率週期。如第三十六A圖之範例所示,依據神經網路之大小與配置的不同,會再次執行前述模式,並可能持續執行許多次。因為神經網路單元121是處理器100中一個相當大且電晶體密集之功能單元,神經網路單元121之運作將會產生大量的熱能,尤其是以主要時頻率運作的時候。
第三十六B圖係一時序圖,顯示處理器100具有神經網路單元121運作於緩和模式之一運作範例,緩和模式之運作時頻率低於主要時頻率。第三十六B圖之時序圖係類似於第三十六A圖,在第三十六A圖中,處理器100係以主要時頻率執行一架構程式。此範例係假定第三十六B圖中之架構程式與神經網路單元程式相同於第三十六A圖之架構程式與神經網路單元程式。不過,在啟動神經網路單元程式之前,架構程式會執行一MTNN指令1400以一數值程式化緩和指標3512,此數值會使時頻降低邏輯3504以小於主要時頻率之第二時頻率產生第二時頻信號3508。也就是說,架構程式會使神經網路單元121處於第三十六B圖之緩和模式,而非第三十六A圖之一般模式。如此,神經處理單元126就會以第二時頻率執行神經網 路單元程式,在緩和模式下,第二時頻率小於主要時頻率。此範例中係假定緩和指標3512是以一個將第二時頻率指定為四分之一主要時頻率之數值予以程式化。如此,神經網路單元121在緩和模式下執行神經網路單元程式所花費之時間會是其於一般模式下花費時間的四倍,如第三十六A與三十六B圖所示,透過比較此二圖可發現神經網路單元121處於待機狀態之時間長度會明顯地縮短。如此,第三十六B圖中神經網路單元121執行神經網路單元程式消耗能量之持續時間大約會是第三十六A圖中神經網路單元121在一般模式下執行程式的四倍。因此,第三十六B圖中神經網路單元121執行神經網路單元程式在單位時間內產生的熱能大約會是第三十六A圖的四分之一,而具有本文所述之優點。
第三十七圖係一流程圖,顯示第三十五圖之處理器100之運作。此流程圖描述之運作係類似於前文對應於第三十五,三十六A與三十六B圖之運作。此流程始於步驟3702。
在步驟3702中,處理器100執行MTNN指令1400而將權重寫入權重隨機存取記憶體124並且將資料寫入資料隨機存取記憶體122。接下來流程前進至步驟3704。
在步驟3704中,處理器100執行 MTNN指令1400而以一個數值程式化緩和指標3512,此數值係指定一個低於主要時頻率之時頻率,亦即使神經網路單元121處於緩和模式。 接下來流程前進至步驟3706。
在步驟3706中,處理器100執行MTNN指令1400指示神經網路單元121開始執行神經網路單元程式,即類似第三十六B圖所呈現之方式。接下來流程前進至步驟3708。
在步驟3708中,神經網路單元121開始執行此神經網路單元程式。同時,處理器100會執行MTNN指令1400而將新的權重寫入權重隨機存取記憶體124(可能也會將新的資料寫入資料隨機存取記憶體122),以及/或執行MFNN指令1500而從資料隨機存取記憶體122讀取結果(可能也會從權重隨機存取記憶體124讀取結果)。接下來流程前進至步驟3712。
在步驟3712中,處理器100執行MFNN指令1500(例如讀取控制與狀態暫存器127),以偵測神經網路單元121已結束程式執行。假設架構程式選擇一個好的緩和指標3512數值,神經網路單元121執行神經網路單元程式所花費的時間就會相同於處理器100執行部分架構程式以存取權重隨機存取記憶體124與/或資料隨機存取記憶體122所花費的時間,如第三十六B圖所示。接下來流程前進至步驟3714。
在步驟3714,處理器100執行MTNN指令1400而利用一數值程式化緩和指標3512,此數值指定主要時頻率,亦即使神經網路單元121處於一般模式。接下來前進至步驟3716。
在步驟3716中,處理器100執行MTNN指令1400指示神經網路單元121開始執行神經網路單元程式,即類似第三十六A圖所呈現之方式。接下來流程前進至步驟3718。
在步驟3718中,神經網路單元121開始以一般模式執行神經網路單元程式。此流程終止於步驟3718。
如前述,相較於在一般模式下執行神經網路單元程式(即以處理器之主要時頻率執行),在緩和模式下執行可以分散執行時間而能避免產生高溫。進一步來說,當神經網路單元在緩和模式執行程式時,神經網路單元是以較低的時頻率產生熱能,這些熱能可以順利地經由神經網路單元(例如半導體裝置,金屬層與下方的基材)與周圍的封裝體以及冷卻機構(如散熱片,風扇)排出,也因此,神經網路單元內的裝置(如電晶體,電容,導線)就比較可能在較低的溫度下運作。整體來看,在緩和模式下運作也有助於降低處理器晶粒之其他部分內的裝置溫度。較低的運作溫度,特別是對於這些裝置之接面溫度而言,可以減輕漏電 流的產生。此外,因為單位時間內流入之電流量降低,電感雜訊與IR壓降雜訊也會降低。此外,溫度降低對於處理器內之金氧半場效電晶體(MOSFET)之副偏壓溫度不穩定性(NBTI)與正偏壓不穩定性(PBSI)也有正面影響,而能提升可靠度與/或裝置以及處理器部分之壽命。溫度降低並可減輕處理器之金屬層內之焦耳熱與電遷移效應。
關於神經網路單元共享資源之架構程式與
非架構程式間之溝通機制
如前述,在第二十四至二十八與三十五至三十七圖之範例中,資料隨機存取記憶體122與權重隨機存取記憶體124之資源是共享的。神經處理單元126與處理器100之前端係共享資料隨機存取記憶體122與權重隨機存取記憶體124。更精確地說,神經處理單元126與處理器100之前端,如媒體暫存器118,都會對資料隨機存取記憶體122與權重隨機存取記憶體124進行讀取與寫入。換句話說,執行於處理器100之架構程式與執行於神經網路單元121之神經網路單元程式會共享資料隨機存取記憶體122與權重隨機存取記憶體124,而在某些情況下,如前所述,需要對於架構程式與神經網路單元程式間之流動進行控制。程式記憶體129之資源在一定程度下也是共享的,這是因為架 構程式會對其進行寫入,而定序器128會對其進行讀取。本文所述之實施例係提供一高效能的解決方案,以控制架構程式與神經網路單元程式間存取共享資源之流動情形。
在本文所述之實施例中,神經網路單元程式也稱為非架構程式,神經網路單元指令也稱為非架構指令,而神經網路單元指令集(如前所述也稱為神經處理單元指令集)也稱為非架構指令集。非架構指令集不同於架構指令集。在處理器100內包含指令轉譯器104將架構指令轉譯出微指令之實施例中,非架構指令集也不同於微指令集。
第三十八圖係一方塊圖,詳細顯示神經網路單元121之定序器128。定序器128提供記憶體位址至程式記憶體129,以選擇提供給定序器128之非架構指令,如前所述。如第三十八圖所示,記憶體位址係裝載於定序器128之一程式計數器3802內。定序器128通常會以程式記憶體129之位址順序循序遞增,除非定序器128遭遇到一非架構指令,例如一迴圈或分支指令,而在此情況下,定序器128會將程式計數器3802更新為控制指令之目標位址,即更新為位於控制指令之目標之非架構指令之位址。因此,裝載於程式計數器3802之位址131會指定當前被攫取以供神經處理單元126執行之非架構程式 之非架構指令在程式記憶體129中之位址。程式計數器3802之數值可由架構程式透過控制與狀態暫存器127之神經網路單元程式計數器欄位3912而取得,如後續第三十九圖所述。如此可使架構程式依據非架構程式之進度,決定對於資料隨機存取記憶體122與/或權重隨機存取記憶體124讀取/寫入資料之位置。
定序器128並包括一迴圈計數器3804,此迴圈計數器3804會搭配一非架構迴圈指令進行運作,例如第二十六A圖中位址10之迴圈至1指令與第二十八圖中位址11之迴圈至1指令。在第二十六A與二十八圖之範例中,迴圈計數器3804內係載入位址0之非架構初始化指令所指定之數值,例如載入數值400。每一次定序器128遭遇到迴圈指令而跳躍至目標指令(如第二十六A圖中位於位址1之乘法累加指令或是第二十八圖中位於位址1之maxwacc指令),定序器128就會使迴圈計數器3804遞減。一旦迴圈計數器3804減少到零,定序器128就轉向排序在下一個的非架構指令。在另一實施例中,首次遭遇到迴圈指令時會在迴圈計數器內載入一個迴圈指令中指定之迴圈計數值,以省去利用非架構初始化指令初始化迴圈計數器3804的需求。因此,迴圈計數器3804的數值會指出非架構程式之迴圈組尚待執行的次數。迴 圈計數器3804之數值可由架構程式透過控制與狀態暫存器127之迴圈計數欄位3914取得,如後續第三十九圖所示。如此可使架構程式依據非架構程式之進度,決定對於資料隨機存取記憶體122與/或權重隨機存取記憶體124讀取/寫入資料之位置。在一實施例中,定序器包括三個額外的迴圈計數器以搭配非架構程式內之巢狀迴圈,這三個迴圈計數器的數值也可透過控制與狀態暫存器127讀取。迴圈指令中具有一位元以指示這四個迴圈計數器中哪一個是提供給當前之迴圈指令使用。
定序器128並包括一執行次數計數器3806。執行次數計數器3806係搭配非架構指令,例如第四,九,二十與二十六A圖中位址2之乘法累加指令,以及第二十八圖中位址2之maxwacc指令,這些指令在此後將會被稱為“執行”指令。在前述範例中,各個執行指令分別指定一執行計數511,511,1023,2與3。當定序器128遭遇到一個指定一非零執行計數之執行指令時,定序器128會以此指定值載入執行次數計數器3806。此外,定序器128會產生一適當的微運算3418以控制第三十四圖中神經處理單元126管線級3401內之邏輯執行,並且使執行次數計數器3806遞減。若是執行次數計數器3806大於零,定序器128會再次產生一適當的微運算 3418控制神經處理單元126內之邏輯並使執行次數計數器3806遞減。定序器128會持續以此方式運作,直到執行次數計數器3806之數值歸零。因此,執行次數計數器3806之數值即為非架構執行指令內指定尚待執行之運算次數(這些運算如對於累加值與一資料/權重文字進行乘法累加,取最大值,加總運算等)。執行次數計數器3806之數值可利用架構程式透過控制與狀態暫存器127之執行次數計數欄位3916取得,如後續第三十九圖所述。如此可使架構程式依據非架構程式之進度,決定對於資料隨機存取記憶體122與/或權重隨機存取記憶體124讀取/寫入資料之位置。
第三十九圖係一方塊圖,顯示神經網路單元121之控制與狀態暫存器127之若干欄位。這些欄位包括包括神經處理單元126執行非架構程式最近寫入之權重隨機存取記憶體列之位址2602,神經處理單元126執行非架構程式最近讀取之權重隨機存取記憶體列之位址2604,神經處理單元126執行非架構程式最近寫入之資料隨機存取記憶體列的位址2606,以及神經處理單元126執行非架構程式最近讀取之資料隨機存取記憶體列的位址2604,如前述第二十六B圖所示。此外,這些欄位還包括一神經網路單元程式計數器3912欄位,一迴圈計數器 3914欄位,與一執行次數計數器3916欄位。如前述,架構程式可將控制與狀態暫存器127內之資料讀取至媒體暫存器118與/或通用暫存器116,例如透過MFNN指令1500讀取包括神經網路單元程式計數器3912,迴圈計數器3914與執行次數計數器3916欄位之數值。程式計數器欄位3912之數值反映第三十八圖中程式計數器3802之數值。迴圈計數器欄位3914之數值反映迴圈計數器3804之數值。執行次數計數器欄位3916之數值反映執行次數計數器3806之數值。在一實施例中,定序器128在每次需要調整程式計數器3802,迴圈計數器3804,或執行次數計數器3806時,都會更新程式計數器欄位3912,迴圈計數器欄位3914與執行次數計數器欄位3916之數值,如此,這些欄位的數值就會是架構程式讀取當下的數值。在另一實施例中,當神經網路單元121執行架構指令以讀取控制與狀態暫存器127時,神經網路單元121僅僅取得程式計數器3802,迴圈計數器3804與執行次數計數器3806之數值並將其提供回架構指令(例如提供至媒體暫存器118與通用暫存器116)。
由此可以發現,第三十九圖之控制與狀態暫存器127之欄位的數值可以理解為非架構指令由神經網路單元執行之過程中,其執行進度的資訊。關於非架構程式執行進度之某 些特定面向,如程式計數器3802數值,迴圈計數器3804數值,執行次數計數器3806數值,最近讀取/寫入之權重隨機存取記憶體124位址125之欄位2602/2604,以及最近讀取/寫入之資料隨機存取記憶體122位址123之欄位2606/2608,已於先前之章節進行描述。執行於處理器100之架構程式可以從控制與狀態暫存器127讀取第三十九圖之非架構程式進度值並利用這些資訊來做決策,例如透過如比較與分支指令等架構指令來進行。舉例來說,架構程式會決定對於資料隨機存取記憶體122與/或權重隨機存取記憶體124進行資料/權重之讀取/寫入之列,以控制資料隨機存取記憶體122或權重隨機存取記憶體124之資料的流入與流出,尤其是針對大型資料組與/或不同非架構指令之重疊執行。這些利用架構程式進行決策之範例可參照本文前後章節之描述。
舉例來說,如前文第二十六A圖所述,架構程式設定非架構程式將卷積運算之結果寫回資料隨機存取記憶體122中卷積核2402上方之列(如列8上方),而當神經網路單元121利用最近寫入資料隨機存取記憶體122列2606之位址寫入結果時,架構程式會從資料隨機存取記憶體122讀取此結果。
在另一範例中,如前文第二十六B 圖所述,架構程式利用來自第三十八圖之控制與狀態暫存器127欄位的資訊確認非架構程式之進度,而將第二十四圖之資料陣列2404分成5個512 x 1600之資料塊以執行卷積運算。架構程式將此2560 x 1600資料陣列之第一個512 x 1600資料塊寫入權重隨機存取記憶體124並啟動非架構程式,其迴圈計數為1600而權重隨機存取記憶體124初始化之輸出列為0。神經網路單元121執行非架構程式時,架構程式會讀取控制與狀態暫存器127以確認權重隨機存取記憶體124之最近寫入列2602,如此架構程式就可讀取由非架構程式寫入之有效卷積運算結果,並且在讀取後利用下一個512 x 1600資料塊覆寫此有效卷積運算結果,如此,在神經網路單元121完成非架構程式對於第一個512 x 1600資料塊之執行後,處理器100在必要時就可立即更新非架構程式並再次啟動非架構程式以執行下一個512 x 1600資料塊。
在另一範例中,假定架構程式使神經網路單元121執行一系列典型的神經網路乘法累加啟動函數,其中,權重係被儲存於權重隨機存取記憶體124而結果會被寫回資料隨機存取記憶體122。在此情況下,架構程式讀取權重隨機存取記憶體124之一列後就不會再對其進行讀取。如此,在當前的權重已經被非架構 程式讀取/使用後,就可以利用架構程式開始將新的權重覆寫權重隨機存取記憶體124上之權重,以提供非架構程式之下一次執行(例如下一個神經網路層)使用。在此情況下,架構程式會讀取控制與狀態暫存器127以取得權重隨機存取記憶體之最近讀取列2604之位址以決定其於權重隨機存取記憶體124中寫入新權重組的位置。
在另一個範例中,假定架構程式知道非架構程式內包括一個具有大執行次數計數之執行指令,如第二十圖中位址2之非架構乘法累加指令。在此情況下,架構程式需要知道執行次數計數3916,方能知道大致上還需要多少個時頻週期才能完成此非架構指令以決定架構程式接下來所要採取之兩個或多個動作。舉例來說,若是需要很長的時間才能完成執行,架構程式就會放棄對於另一個架構程式之控制,例如作業系統。類似地,假定架構程式知道非架構程式包括一個具有相當大之迴圈計數的迴圈組,例如第二十八圖之非架構程式。在此情況下,架構程式會需要知道迴圈計數3914,方能知道大致上還需要多少個時頻週期才能完成此非架構指令以決定接下來所要採取之兩個或多個動作。
在另一範例中,假定架構程式使神 經網路單元121執行類似於第二十七與二十八圖所述之共源運算,其中所取得的資料是儲存在權重隨機存取記憶體124而結果會被寫回權重隨機存取記憶體124。不過,不同於第二十七與二十八圖之範例,假定此範例之結果會被寫回權重隨機存取記憶體124之最上方400列,例如列1600至1999。在此情況下,非架構程式完成讀取四列其所要取得之權重隨機存取記憶體124資料後,非架構程式就不會再次進行讀取。因此,一旦當前四列資料都已被非架構程式讀取/使用後,即可利用架構程式開始將新資料(如非架構程式之下一次執行之權重,舉例來說,例如對取得資料執行典型乘法累加啟動函數運算之非架構程式)覆寫權重隨機存取記憶體124之資料。在此情況下,架構程式會讀取控制與狀態暫存器127以取得權重隨機存取記憶體之最近讀取列2604之位址,以決定新的權重組寫入權重隨機存取記憶體124之位置。
時間遞歸(recurrent)神經網路加速
傳統前饋神經網路不具有儲存網路先前輸入之記憶體。前饋神經網路通常被用於執行在任務中隨時間輸入網路之多種輸入各自獨立之任務,多種輸出各自獨立之任務亦是如此。相較之下,時間遞歸神經網路通常有助於執行在任務中隨時間輸入至神經網路之輸入 序列具有有效數之任務。(此處的序列通常被稱為時間步驟。)因此,時間遞歸神經網路包括一個概念上的記憶體或內部狀態,以裝載網路因應序列中之先前輸入所執行之計算而產生之資訊,時間遞歸神經網路之輸出係關聯於此內部狀態與下一個時間步驟之輸入。下列任務範例,如語音辨識,語言模型,文字產生,語言翻譯,影像描述產生以及某些形式之手寫辨識,係傾向於使用時間遞歸神經網路執行以取得良好執行結果。
三種習知之時間遞歸神經網路的範例為Elman時間遞歸神經網路,Jordan時間遞歸神經網路與長短期記憶(LSTM)神經網路。 Elman時間遞歸神經網路包含內容節點以記憶當前時間步驟中時間遞歸神經網路之隱藏層狀態,此狀態在下一個時間步驟中會作為對於隱藏層之輸入。Jordan時間遞歸神經網路類似於Elman時間遞歸神經網路,除了其中之內容節點會記憶時間遞歸神經網路之輸出層狀態而非隱藏層狀態。長短期記憶神經網路包括由長短期記憶胞構成之一長短期記憶層。每個長短期記憶胞具有當前時間步驟之一當前狀態與一當前輸出,以及一個新的或後續時間步驟之一新的狀態與一新的輸出。長短期記憶胞包括一輸入閘與一輸出閘,以及一遺忘閘,遺忘閘可以 使神經元失去其所記憶之狀態。這三種時間遞歸神經網路在後續章節會有更詳細的描述。
如本文所述,對於時間遞歸神經網路而言,如Elman或Jordan時間遞歸神經網路,神經網路單元每次執行都會使用一時間步驟,每次執行會取得一組輸入層節點值,並執行必要計算使其透過時間遞歸神經網路進行傳遞,以產生輸出層節點值以及隱藏層與內容層節點值。因此,輸入層節點值會關聯於計算隱藏,輸出與內容層節點值之時間步驟;而隱藏,輸出與內容層節點值會關聯於產生這些節點值之時間步驟。輸入層節點值是經時間遞歸神經網路調整後之系統取樣值,如影像,語音取樣,商業市場資料之快照。對於長短期記憶神經網路而言,神經網路單元之每次執行都會使用一時間步驟,每次執行會取得一組記憶胞輸入值並執行必要計算以產生記憶胞輸出值(以及記憶胞狀態與輸入閘,失憶閘以及輸出閘數值),這也可以理解為是透過長短期記憶層神經元傳遞記憶胞輸入值。因此,記憶胞輸入值會關聯於計算記憶胞狀態以及輸入閘,失憶閘與輸出閘數值之時間步驟;而記憶胞狀態以及輸入閘,失憶閘與輸出閘數值會關聯於產生這些節點值之時間步驟。
內容層節點值,也稱為狀態節點, 是神經網路之狀態值,此狀態值係基於關聯於先前時間步驟之輸入層節點值,而不僅只關聯於當前時間步驟之輸入層節點值。神經網路單元對於時間步驟所執行之計算(例如對於Elman或Jordan時間遞歸神經網路之隱藏層節點值計算)是先前時間步驟產生之內容層節點值之一函數。因此,時間步驟開始時的網路狀態值(內容節點值)會影響此時間步驟之過程中產生之輸出層節點值。此外,時間步驟結束時之網路狀態值會受到此時間步驟之輸入節點值與時間步驟開始時之網路狀態值影響。類似地,對於長短期記憶胞而言,記憶胞狀態值係關聯於先前時間步驟之記憶胞輸入值,而非僅只關聯於當前時間步驟之記憶胞輸入值。因為神經網路單元對於時間步驟執行之計算(例如下一個神經往狀態之計算)是先前時間步驟產生之記憶胞狀態值之函數,時間步驟開始時之網路狀態值(記憶胞狀態值)會影響此時間步驟中產生之記憶胞輸出值,而此時間步驟結束時之網路狀態值會受到此時間步驟之記憶胞輸入值與先前網路狀態值影響。
第四十圖係一方塊圖,顯示Elman時間遞歸神經網路之一範例。第四十圖之Elman時間遞歸神經網路包括輸入層節點,或神經元,標示為D0,D1至Dn,集體稱為輸入層 節點D而個別通稱為輸入層節點D;隱藏層節點/神經元,標示為Z0,Z1至Zn,集體稱為隱藏層節點Z而個別通稱為隱藏層節點Z;輸出層節點/神經元,標示為Y0,Y1至Yn,集體稱為輸出層節點Y而個別通稱為輸出層節點Y;以及內容層節點/神經元,標示為C0,C1至Cn,集體稱為隱藏層節點C而個別通稱為隱藏層節點C。在第四十圖之Elman時間遞歸神經網路之範例中,各個隱藏層節點Z具有一輸入連結至各個輸入層節點D之輸出,並具有一輸入連結至各個內容層節點C之輸出;各個輸出層節點Y具有一輸入連結至各個隱藏層節點Z之輸出;而各個內容層節點C具有一輸入連結至一相對應隱藏層節點Z之輸出。
在許多方面,Elman時間遞歸神經網路之運作係類似於傳統之前饋入工神經網路。也就是說,對於一給定節點而言,此節點之各個輸入連結都會有一個相關聯的權重;此節點會將關聯於所有輸入連結之乘積相加以產生一總數(此總數內可能還會包含一偏移項);一般而言,對此總數還會執行一啟動函數以產生節點之輸出值,此輸出值有時稱為此節點之啟動值。對於傳統之前饋網路而言,資料總是沿著輸入層至輸出層之方向流動。也就是說,輸入層提供一數值至隱藏層(通常會有多個隱 藏層),而隱藏層會產生其輸出值提供至輸出層,而輸出層會產生可被取用之輸出。
不過,不同於傳統之前饋網路,Elman時間遞歸神經網路還包括一些反饋連結,也就是第四十圖中從隱藏層節點Z至內容層節點C之連結。Elman時間遞歸神經網路之運作如下,當輸入層節點D在一個新的時間步驟提供一輸入值至隱藏層節點Z,內容節點C會提供一數值至隱藏層Z,此數值為隱藏層節點Z因應先前輸入,也就是當前時間步驟,之輸出值。 從這個意義上來說,Elman時間遞歸神經網路之內容節點C是一個基於先前時間步驟之輸入值之記憶體。第四十一與四十二圖將會對執行關聯於第四十圖之Elman時間遞歸神經網路之計算之神經網路單元121的運作實施例進行說明。
為了說明本發明,Elman時間遞歸神經網路是一個包含至少一個輸入節點層,一個隱藏節點層,一個輸出節點層與一個內容節點層之時間遞歸神經網路。對於一給定時間步驟,內容節點層會儲存隱藏節點層於前一個時間步驟產生且反請至內容節點層之結果。此反饋至內容層的結果可以是啟動函數之執行結果或是隱藏節點層執行累加運算而未執行啟動函數之結果。
第四十一圖係一方塊圖,顯示當神經網路單元121執行關聯於第四十圖之Elman時間遞歸神經網路之計算時,神經網路單元121之資料隨機存取記憶體122與權重隨機存取記憶體124內之資料配置之一範例。在第四十一圖之範例中假定第四十圖之Elman時間遞歸神經網路具有512個輸入節點D,512個隱藏節點Z,512個內容節點C,與512個輸出節點Y。此外,亦假定此Elman時間遞歸神經網路為完全連結,即全部512個輸入節點D均連結各個隱藏節點Z作為輸入,全部512個內容節點C均連結各個隱藏節點Z作為輸入,而全部512個隱藏節點Z均連結各個輸出節點Y作為輸入。此外,此神經網路單元係配置為512個神經處理單元126或神經元,例如採寬配置。最後,此範例係假定關聯於內容節點C至隱藏節點Z之連結的權重均為數值1,因而不需儲存這些單一的權重值。
如圖中所示,權重隨機存取記憶體124之下方512個列(列0至511)係裝載關聯於輸入節點D與隱藏節點Z間之連結之權重值。更精確地說,如圖中所示,列0係裝載關聯於由輸入節點D0至隱藏節點Z之輸入連結的權重,亦即,文字0會裝載關聯於輸入節點D0與隱藏節點Z0間之連結的權重,文字1會裝載關聯於輸入節點D0與隱藏節點Z1間之連結的權重,文字 2會裝載關聯於輸入節點D0與隱藏節點Z2間之連結的權重,依此類推,文字511會裝載關聯於輸入節點D0與隱藏節點Z511間之連結的權重;列1係裝載關聯於由輸入節點D1至隱藏節點Z之輸入連結的權重,亦即,文字0會裝載關聯於輸入節點D1與隱藏節點Z0間之連結的權重,文字1會裝載關聯於輸入節點D1與隱藏節點Z1間之連結的權重,文字2會裝載關聯於輸入節點D1與隱藏節點Z2間之連結的權重,依此類推,文字511會裝載關聯於輸入節點D1與隱藏節點Z511間之連結的權重;直到列511,列511係裝載關聯於由輸入節點D511至隱藏節點Z之輸入連結的權重,亦即,文字0會裝載關聯於輸入節點D511與隱藏節點Z0間之連結的權重,文字1會裝載關聯於輸入節點D511與隱藏節點Z1間之連結的權重,文字2會裝載關聯於輸入節點D511與隱藏節點Z2間之連結的權重,依此類推,文字511會裝載關聯於輸入節點D511與隱藏節點Z511間之連結的權重。此配置與用途係類似於前文對應於第四至六A圖所述之實施例。
如圖中所示,權重隨機存取記憶體124之後續512個列(列512至1023)是以類似的方式裝載關聯於隱藏節點Z與輸出節點Y間之連結的權重。
資料隨機存取記憶體122係裝載Elman時間遞歸神經網路節點值供一系列時間步驟使用。進一步來說,資料隨機存取記憶體122係以三列為組裝載提供一給定時間步驟之節點值。如圖中所示,以一個具有64列之資料隨機存取記憶體122為例,此資料隨機存取記憶體122可裝載供20個不同時間步驟使用之節點值。在第四十一圖之範例中,列0至2裝載供時間步驟0使用之節點值,列3至5裝載供時間步驟1使用之節點值,依此類推,列57至59裝載供時間步驟19使用之節點值。各組中的第一列係裝載此時間步驟之輸入節點D之數值。各組中的第二列係裝載此時間步驟之隱藏節點Z之數值。各組中的第三列係裝載此時間步驟之輸出節點D之數值。如圖中所示,資料隨機存取記憶體122之各個行係裝載其相對應之神經元或神經處理單元126之節點值。也就是說,行0係裝載關聯於節點D0,Z0與Y0之節點值,其計算是由神經處理單元0所執行;行1係裝載關聯於節點D1,Z1與Y1之節點值,其計算是由神經處理單元1所執行;依此類推,行511係裝載關聯於節點D511,Z511與Y511之節點值,其計算是由神經處理單元511所執行,這部分在後續對應於第四十二圖處會有更詳細的說明。
如第四十一圖所指出,對於一給定 時間步驟而言,位於各組三列記憶體之第二列之隱藏節點Z的數值會是下一個時間步驟之內容節點C的數值。也就是說,神經處理單元126在一時間步驟內計算並寫入之節點Z的數值,會成為此神經處理單元126在下一個時間步驟內用於計算節點Z的數值所使用之節點C的數值(連同此下一個時間步驟之輸入節點D的數值)。內容節點C之初始值(在時間步驟0用以計算列1中之節點Z的數值所使用之節點C的數值)係假定為零。這在後續對應於第四十二圖之非架構程式之相關章節會有更詳細的說明。
較佳地,輸入節點D的數值(第四十一圖之範例中之列0,3,依此類推至列57之數值)係由執行於處理器100之架構程式透過MTNN指令1400寫入/填入資料隨機存取記憶體122,並且是由執行於神經網路單元121之非架構程式讀取/使用,例如第四十二圖之非架構程式。相反地,隱藏/輸出節點Z/Y之數值(第四十一圖之範例中之列1與2,4與5,依此類推至列58與59之數值)則是由執行於神經網路單元121之非架構程式寫入/填入資料隨機存取記憶體122,並且是由執行於處理器100之架構程式透過MFNN指令1500讀取/使用。第四十一圖之範例係假定此架構程式會執行以下步驟:(1)對於20個不同的時間步驟,將輸入節點D之數 值填入資料隨機存取記憶體122(列0,3,依此類推至列57);(2)啟動第四十二圖之非架構程式;(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出節點Y之數值(列2,5,依此類推至列59);以及(5)重複步驟(1)至(4)若干次直到完成任務,例如對手機使用者之陳述進行辨識所需之計算。
在另一種執行方式中,架構程式會執行以下步驟:(1)對單一個時間步驟,以輸入節點D之數值填入資料隨機存取記憶體122(如列0);(2)啟動非架構程式(第四十二圖非架構程式之一修正後版本,不需迴圈,並且只存取資料隨機存取記憶體122之單一組三個列);(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出節點Y之數值(如列2);以及(5)重複步驟(1)至(4)若干次直到完成任務。此二種方式何者為優可依據時間遞歸神經網路之輸入值的取樣方式而定。 舉例來說,若是此任務容許在多個時間步驟對輸入進行取樣(例如大約20個時間步驟)並執行計算,第一種方式就較為理想,因為此方式可能帶來更多計算資源效率與/或較佳的效能,不過,若是此任務只容許在單一個時間步驟執行取樣,就需要使用第二種方式。
第三實施例類似於前述第二種方 式,不過,不同於第二種方式使用單一組三列資料隨機存取記憶體122,此方式之非架構程式使用多組三列記憶體,也就是在各個時間步驟使用不同組三列記憶體,此部分類似於第一種方式。在此第三實施例中,較佳地,架構程式在步驟(2)前包含一步驟,此步驟中,架構程式會在非架構程式啟動前對其進行更新,例如將位址1之指令內的資料隨機存取記憶體122列更新為指向下一組三列記憶體。
第四十二圖係一表格,顯示儲存於神經網路單元121之程式記憶體129之一程式,此程式係由神經網路單元121執行,並依據第四十一圖之配置使用資料與權重以達成Elman時間遞歸神經網路。第四十二圖(以及第四十五,四十八,五十一,五十四與五十七圖)之非架構程式中之若干指令詳如前述(例如乘法累加(MULT-ACCUM),迴圈(LOOP),初始化(INITIALIZE)指令),以下段落係假定這些指令與前述說明內容一致,除非有不同的說明。
第四十二圖之範例程式包含13個非架構指令,分別位於位址0至12。位址0之指令(INITIALIZE NPU,LOOPCNT=20)清除累加器202並且將迴圈計數器3804初始化至數值20,以執行20次迴圈組(位址4至11之指令)。較佳地,此初始化指令也會使神經網路單元121 處於寬配置,如此,神經網路單元121就會配置為512個神經處理單元126。如同後續章節所述,在位址1至3以及位址7至11之指令執行過程中,這512個神經處理單元126係作為512個相對應之隱藏層節點Z進行運作,而在位址4至6之指令執行過程中,這512個神經處理單元126係作為512個相對應之輸出層節點Y進行運作。
位址1至3之指令不屬於程式之迴圈組而只會執行一次。這些指令計算隱藏層節點Z之初始值並將其寫入資料隨機存取記憶體122之列1供位址4至6之指令之第一次執行使用,以計算出第一時間步驟(時間步驟0)之輸出層節點Y。此外,這些由位址1至3之指令計算並寫入資料隨機存取記憶體122之列1之隱藏層節點Z之數值會變成內容層節點C之數值供位址7與8之指令之第一次執行使用,以計算出隱藏層節點Z之數值供第二時間步驟(時間步驟1)使用。
在位址1與2之指令的執行過程中,這512個神經處理單元126中之各個神經處理單元126會執行512個乘法運算,將位於資料隨機存取記憶體122列0之512個輸入節點D數值乘上權重隨機存取記憶體124之列0至511中相對應此神經處理單元126之行之權重,以產生512個乘積累加於相對應神經處理單元126之累 加器202。在位址3之指令的執行過程中,這512個神經處理單元之512個累加器202之數值會被傳遞並寫入資料隨機存取記憶體122之列1。也就是說,位址3之輸出指令會將512個神經處理單元中之各個神經處理單元512之累加器202數值寫入資料隨機存取記憶體122之列1,此數值即為初始之隱藏層Z數值,隨後,此指令會清除累加器202。
第四十二圖之非架構程式之位址1至2之指令所執行之運算類似於第四圖之非架構指令之位址1至2之指令所執行之運算。進一步來說,位址1之指令(MULT_ACCUM DR ROW 0)會指示這512個神經處理單元126中之各個神經處理單元126將資料隨機存取記憶體122之列0之相對應文字讀入其多工暫存器208,將權重隨機存取記憶體124之列0之相對應文字讀入其多工暫存器705,將資料文字與權重文字相乘產生乘積並將此乘積加入累加器202。位址2之指令(MULT-ACCUM ROTATE,WR ROW +1,COUNT=511)指示這512個神經處理單元中之各個神經處理單元126將來自相鄰神經處理單元126之文字轉入其多工暫存器208(利用由神經網路單元121之512個多工暫存器208集體運作構成之512個文字之旋轉器,這些暫存器即為位址1之指令指示將資料隨機存取記憶體122之 列讀入之暫存器),將權重隨機存取記憶體124之下一列之相對應文字讀入其多工暫存器705,將資料文字與權重文字相乘產生乘積並將此乘積加入累加器202,並且執行前述運算511次。
此外,第四十二圖中位址3之單一非架構輸出指令(OUTPUT PASSTHRU,DR OUT ROW 1,CLR ACC)會將啟動函數指令之運算與第四圖中位址3與4之寫入輸出指令合併(雖然第四十二圖之程式係傳遞累加器202數值,而第四圖之程式則是對累加器202數值執行一啟動函數)。也就是說,在第四十二圖之程式中,執行於累加器202數值之啟動函數,如果有的話,係輸出指令中指定(也在位址6與11之輸出指令中指定),而非如第四圖之程式所示係於一個不同之非架構啟動函數指令中指定。第四圖(以及第二十,二十六A與二十八圖)之非架構程式之另一實施例,亦即將啟動函數指令之運算與寫入輸出指令(如第四圖之位址3與4)合併為如第四十二圖所示之單一非架構輸出指令亦屬於本發明之範疇。第四十二圖之範例假定隱藏層(Z)之節點不會對累加器數值執行啟動函數。不過,隱藏層(Z)對累加器數值執行啟動函數之實施例亦屬本案發明之範疇,這些實施例可利用位址3與11之指令進行運算,如S型,雙 曲正切,校正函數等。
相較於位址1至3之指令只會執行一次,位址4至11之指令則是位於程式迴圈內而會被執行若干次數,此次數係由迴圈計數所指定(例如20)。位址7至11之指令的前十九次執行係計算隱藏層節點Z之數值並將其寫入資料隨機存取記憶體122供位址4至6之指令之第二至二十次執行使用以計算剩餘時間步驟之輸出層節點Y(時間步驟1至19)。(位址7至11之指令之最後/第二十次執行係計算隱藏層節點Z之數值並將其寫入資料隨機存取記憶體122之列61,不過,這些數值並未被使用。)在位址4與5之指令(MULT-ACCUM DR ROW+1,WR ROW 512 and MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之第一次執行中(對應於時間步驟0),這512個神經處理單元126中之各個神經處理單元126會執行512個乘法運算,將資料隨機存取記憶體122之列1之512個隱藏節點Z之數值(這些數值係由位址1至3之指令之單一次執行而產生與寫入)乘上權重隨機存取記憶體124之列512至1023中對應此神經處理單元126之行之權重,以產生512個乘積累加於相對應神經處理單元126之累加器202。在位址6之指令(OUTPUT ACTIVATION FUNCTION,DR OUT ROW+1,CLR ACC)之第 一次執行中,會對於這512個累加數值執行一啟動函數(例如S型,雙曲正切,校正函數)以計算輸出層節點Y之數值,執行結果會寫入資料隨機存取記憶體122之列2。
在位址4與5之指令之第二次執行中(對應於時間步驟1),這512個神經處理單元126中之各個神經處理單元126會執行512個乘法運算,將資料隨機存取記憶體122之列4之512個隱藏節點Z之數值(這些數值係由位址7至11之指令之第一次執行而產生與寫入)乘上權重隨機存取記憶體124之列512至1023中對應此神經處理單元126之行之權重,以產生512個乘積累加於相對應神經處理單元126之累加器202,而在位址6之指令之第二次執行中,會對於這512個累加數值執行一啟動函數以計算輸出層節點Y之數值,此結果係寫入資料隨機存取記憶體122之列5;在位址4與5之指令之第三次執行中(對應於時間步驟2),這512個神經處理單元126中之各個神經處理單元126會執行512個乘法運算,將資料隨機存取記憶體122之列7之512個隱藏節點Z之數值(這些數值係由位址7至11之指令之第二次執行而產生與寫入)乘上權重隨機存取記憶體124之列512至1023中對應此神經處理單元126之行之權重,以產生512個乘積累加於相對應神經處理單元126之累加器 202,而在位址6之指令之第三次執行中,會對於這512個累加數值執行一啟動函數以計算輸出層節點Y之數值,此結果係寫入資料隨機存取記憶體122之列8;依此類推,在位址4與5之指令之第二十次執行中(對應於時間步驟19),這512個神經處理單元126中之各個神經處理單元126會執行512個乘法運算,將資料隨機存取記憶體122之列58之512個隱藏節點Z之數值(這些數值係由位址7至11之指令之第十九次執行而產生與寫入)乘上權重隨機存取記憶體124之列512至1023中對應此神經處理單元126之行之權重,以產生512個乘積累加於相對應神經處理單元126之累加器202,而在位址6之指令之第二十次執行中,會對於這512個累加數值執行一啟動函數以計算輸出層節點Y之數值,執行結果係寫入資料隨機存取記憶體122之列59。
在位址7與8之指令之第一次執行中,這512個神經處理單元126中之各個神經處理單元126將資料隨機存取記憶體122之列1之512個內容節點C的數值累加至其累加器202,這些數值係由位址1至3之指令之單一次執行所產生。進一步來說,位址7之指令(ADD_D_ACC DR ROW+0)會指示這512個神經處理單元126中之各個神經處理單元126將資料隨機存取記憶體122當前列(在第一次執行之過程中即為列 0)之相對應文字讀入其多工暫存器208,並將此文字加入累加器202。位址8之指令(ADD_D_ACC ROTATE,COUNT=511)指示這512個神經處理單元126中之各個神經處理單元126將來自相鄰神經處理單元126之文字轉入其多工暫存器208(利用由神經網路單元121之512個多工暫存器208集體運作構成之512個文字之旋轉器,這些多工暫存器即為位址7之指令指示讀入資料隨機存取記憶體122之列之暫存器),將此文字加入累加器202,並且執行前述運算511次。
在位址7與8之指令之第二次執行中,這512個神經處理單元126中之各個神經處理單元126會將將資料隨機存取記憶體122之列4之512個內容節點C之數值累加至其累加器202,這些數值係由位址9至11之指令之第一次執行所產生並寫入;在位址7與8之指令之第三次執行中,這512個神經處理單元126中之各個神經處理單元126會將將資料隨機存取記憶體122之列7之512個內容節點C之數值累加至其累加器202,這些數值係由位址9至11之指令之第二次執行所產生並寫入;依此類推,在位址7與8之指令之第二十次執行中,這512個神經處理單元126中之各個神經處理單元126會將將資料隨機存取記憶體122之列58之512個內容節點 C之數值累加至其累加器202,這些數值係由位址9至11之指令之第十九次執行所產生並寫入。
如前述,第四十二圖之範例係假定關聯於內容節點C至隱藏層節點Z之連結之權重具有單一值。不過,在另一實施例中,這些位於Elman時間遞歸神經網路內之連結則是具有非零權重值,這些權重在第四十二圖之程式執行前係放置於權重隨機存取記憶體124(例如列1024至1535),位址7之程式指令為MULT-ACCUM DR ROW+0,WR ROW 1024,而位址8之程式指令為MULT-ACCUM ROTATE,WR ROW+1,COUNT=511。較佳地,位址8之指令並不存取權重隨機存取記憶體124,而是旋轉位址7之指令從權重隨機存取記憶體124讀入多工暫存器705之數值。在511個執行位址8指令之時頻周期內不對權重隨機存取記憶體124進行存取即可保留更多頻寬供架構程式存取權重隨機存取記憶體124使用。
在位址9與10之指令(MULT-ACCUM DR ROW+2,WR ROW 0 and MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之第一次執行中(對應於時間步驟1),這512個神經處理單元126中之各個神經處理單元126會執行512個乘法運算,將資料隨機存取記憶體122之列3之512個輸入節點D之數值乘上 權重隨機存取記憶體124之列0至511中對應此神經處理單元126之行之權重以產生512個乘積,連同位址7與8之指令對於512個內容節點C數值所執行之累加運算,累加於相對應神經處理單元126之累加器202以計算隱藏層節點Z之數值,在位址11之指令(OUTPUT PASSTHRU,DR OUT ROW+2,CLR ACC)之第一次執行中,這512個神經處理單元126之512個累加器202數值被傳遞並寫入資料隨機存取記憶體122之列4,而累加器202會被清除;在位址9與10之指令之第二次執行中(對應於時間步驟2),這512個神經處理單元126中之各個神經處理單元126會執行512個乘法運算,將資料隨機存取記憶體122之列6之512個輸入節點D之數值乘上權重隨機存取記憶體124之列0至511中對應此神經處理單元126之行之權重,以產生512個乘積,連同位址7與8之指令對於512個內容節點C數值所執行之累加運算,累加於相對應神經處理單元126之累加器202以計算隱藏層節點Z之數值,在位址11之指令之第二次執行中,這512個神經處理單元126之512個累加器202數值被傳遞並寫入資料隨機存取記憶體122之列7,而累加器202則會被清除;依此類推,在位址9與10之指令之第十九次執行中(對應於時間步驟19),這512個神經處理單元126中之各個神經處 理單元126會執行512個乘法運算,將資料隨機存取記憶體122之列57之512個輸入節點D之數值乘上權重隨機存取記憶體124之列0至511中對應此神經處理單元126之行之權重,以產生512個乘積,連同位址7與8之指令對於512個內容節點C數值所執行之累加運算,累加於相對應神經處理單元126之累加器202以計算隱藏層節點Z之數值,而在位址11之指令之第十九次執行中,這512個神經處理單元126之512個累加器202數值被傳遞並寫入資料隨機存取記憶體122之列58,而累加器202則會被清除。如前所述,在位址9與10之指令之第二十次執行中所產生並寫入之隱藏層節點Z之數值並不會被使用。
位址12之指令(LOOP 4)會使迴圈計數器3804遞減並且在新的迴圈計數器3804數值大於零之情況下回到位址4之指令。
第四十三圖係一方塊圖顯示Jordan時間遞歸神經網路之一範例。第四十三圖之Jordan時間遞歸神經網路類似於第四十圖之Elman時間遞歸神經網路,具有輸入層節點/神經元D,隱藏層節點/神經元Z,輸出層節點/神經元Y,與內容層節點/神經元C。不過,在第四十三圖之Jordan時間遞歸神經網路中,內容層節點C係以來自其相對應輸出層節點Y之 輸出回饋作為其輸入連結,而非如第四十圖之Elman時間遞歸神經網路中係來自隱藏層節點Z之輸出作為其輸入連結。
為了說明本發明,Jordan時間遞歸神經網路是一個包含至少一個輸入節點層,一個隱藏節點層,一個輸出節點層與一個內容節點層之時間遞歸神經網路。在一給定時間步驟之開始,內容節點層會儲存輸出節點層於前一個時間步驟產生且回饋至內容節點層之結果。 此回饋至內容層的結果可以是啟動函數之結果或是輸出節點層執行累加運算而未執行啟動函數之結果。
第四十四圖係一方塊圖,顯示當神經網路單元121執行關聯於第四十三圖之Jordan時間遞歸神經網路之計算時,神經網路單元121之資料隨機存取記憶體122與權重隨機存取記憶體124內之資料配置之一範例。在第四十四圖之範例中係假定第四十三圖之Jordan時間遞歸神經網路具有512個輸入節點D,512個隱藏節點Z,512個內容節點C,與512個輸出節點Y。此外,亦假定此Jordan時間遞歸神經網路為完全連結,即全部512個輸入節點D均連結各個隱藏節點Z作為輸入,全部512個內容節點C均連結各個隱藏節點Z作為輸入,而全部512個隱藏節點Z均連結各個輸出節點Y作為輸入。第 四十四圖之Jordan時間遞歸神經網路之範例雖然會對累加器202數值施以一啟動函數以產生輸出層節點Y之數值,不過,此範例係假定會將施以啟動函數前之累加器202數值傳遞至內容層節點C,而非真正的輸出層節點Y數值。此外,神經網路單元121設置有512個神經處理單元126,或神經元,例如採取寬配置。最後,此範例假定關聯於由內容節點C至隱藏節點Z之連結之權重均具有數值1;因而不需儲存這些單一的權重值。
如同第四十一圖之範例,如圖中所示,權重隨機存取記憶體124之下方512個列(列0至511)會裝載關聯於輸入節點D與隱藏節點Z間之連結之權重值,而權重隨機存取記憶體124之後續512個列(列512至1023)會裝載關聯於隱藏節點Z與輸出節點Y間之連結之權重值。
資料隨機存取記憶體122係裝載Jordan時間遞歸神經網路節點值供一系列類似於第四十一圖之範例中之時間步驟使用;不過,第四十四圖之範例中係以一組四列之記憶體裝載提供給定時間步驟之節點值。如圖中所示,在具有64列之資料隨機存取記憶體122之實施例中,資料隨機存取記憶體122可以裝載15個不同時間步驟所需之節點值。在第四十四圖之範例中,列0至3係裝載供時間步驟0使用之節 點值,列4至7係裝載供時間步驟1使用之節點值,依此類推,列60至63係裝載供時間步驟15使用之節點值。此四列一組記憶體之第一列係裝載此時間步驟之輸入節點D之數值。此四列一組記憶體之第二列係裝載此時間步驟之隱藏節點Z之數值。此四列一組記憶體之第三列係裝載此時間步驟之內容節點C之數值。此四列一組記憶體之第四列則是裝載此時間步驟之輸出節點Y之數值。如圖中所示,資料隨機存取記憶體122之各個行係裝載其相對應之神經元或神經處理單元126之節點值。也就是說,行0係裝載關聯於節點D0,Z0,C0與Y0之節點值,其計算是由神經處理單元0執行;行1係裝載關聯於節點D1,Z1,C1與Y1之節點值,其計算是由神經處理單元1執行;依此類推,行511係裝載關聯於節點D511,Z511,C511與Y511之節點值,其計算是由神經處理單元511執行。這部分在後續對應於第四十四圖處會有更詳細的說明。
第四十四圖中給定時間步驟之內容節點C之數值係於此時間步驟內產生並作為下一個時間步驟之輸入。也就是說,神經處理單元126在此時間步驟內計算並寫入之節點C的數值,會成為此神經處理單元126在下一個時間步驟內用於計算節點Z的數值所使用之節點 C的數值(連同此下一個時間步驟之輸入節點D的數值)。內容節點C之初始值(即時間步驟0計算列1節點Z之數值所使用之節點C之數值)係假定為零。這部分在後續對應於第四十五圖之非架構程式之章節會有更詳細的說明。
如前文第四十一圖所述,較佳地,輸入節點D的數值(第四十四圖之範例中之列0,4,依此類推至列60之數值)係由執行於處理器100之架構程式透過MTNN指令1400寫入/填入資料隨機存取記憶體122,並且是由執行於神經網路單元121之非架構程式讀取/使用,例如第四十五圖之非架構程式。相反地,隱藏節點Z/內容節點C/輸出節點Y之數值(第四十四圖之範例中分別為列1/2/3,4/5/6,依此類推至列60/61/62之數值)係由執行於神經網路單元121之非架構程式寫入/填入資料隨機存取記憶體122,並且是由執行於處理器100之架構程式透過MFNN指令1500讀取/使用。第四十四圖之範例係假定此架構程式會執行以下步驟:(1)對於15個不同的時間步驟,將輸入節點D之數值填入資料隨機存取記憶體122(列0,4,依此類推至列60);(2)啟動第四十五圖之非架構程式;(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出節點Y之數值(列3,7,依此類推至列63);以及(5)重複 步驟(1)至(4)若干次直到完成任務,例如對手機使用者之陳述進行辨識所需之計算。
在另一種執行方式中,架構程式會執行以下步驟:(1)對單一個時間步驟,以輸入節點D之數值填入資料隨機存取記憶體122(如列0);(2)啟動非架構程式(第四十五圖非架構程式之一修正後版本,不需迴圈,並且只存取資料隨機存取記憶體122之單一組四個列);(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出節點Y之數值(如列3);以及(5)重複步驟(1)至(4)若干次直到完成任務。此二種方式何者為優可依據時間遞歸神經網路之輸入值的取樣方式而定。 舉例來說,若是此任務容許在多個時間步驟內對輸入進行取樣(例如大約15個時間步驟)並執行計算,第一種方式就較為理想,因為此方式可帶來更多計算資源效率與/或較佳的效能,不過,若是此任務只容許在單一個時間步驟內執行取樣,就需要使用第二種方式。
第三實施例類似於前述第二種方式,不過,不同於第二種方式使用單一組四個資料隨機存取記憶體122列,此方式之非架構程式使用多組四列記憶體,也就是在各個時間步驟使用不同組四列記憶體,此部分類似於第一種方式。在此第三實施例中,較佳地,架構程 式在步驟(2)前包含一步驟,在此步驟中,架構程式會在非架構程式啟動前對其進行更新,例如將位址1之指令內的資料隨機存取記憶體122列更新為指向下一組四列記憶體。
第四十五圖係一表格,顯示儲存於神經網路單元121之程式記憶體129之一程式,此程式係由神經網路單元121執行,並依據第四十四圖之配置使用資料與權重,以達成Jordan時間遞歸神經網路。第四十五圖之非架構程式類似於第四十二圖之非架構程式,二者之差異可參照本文相關章節之說明。
第四十五圖之範例程式包括14個非架構指令,分別位於位址0至13。位址0之指令是一個初始化指令,用以清除累加器202並將迴圈計數器3804初始化至數值15,以執行15次迴圈組(位址4至12之指令)。較佳地,此初始化指令並會使神經網路單元處於寬配置而配置為512個神經處理單元126。如本文所述,在位址1至3以及位址8至12之指令執行過程中,這512個神經處理單元126係作為512個相對應之隱藏層節點Z進行運作,而在位址4,5與7之指令執行過程中,這512個神經處理單元126係作為512個相對應之輸出層節點Y進行運作。
位址1至5與位址7之指令與第四十二圖中位址1至6之指令相同並具有相同功能。 位址1至3之指令計算隱藏層節點Z之初始值並將其寫入資料隨機存取記憶體122之列1供位址4,5與7之指令之第一次執行使用,以計算出第一時間步驟(時間步驟0)之輸出層節點Y。
在位址6之輸出指令之第一次執行之過程中,這512個由位址4與5之指令累加產生之累加器202數值(接下來這些數值會被位址7之輸出指令使用以計算並寫入輸出層節點Y之數值)會被傳遞並寫入資料隨機存取記憶體122之列2,這些數值即為第一時間步驟(時間步驟0)中產生之內容層節點C數值並於第二時間步驟(時間步驟1)中使用;在位址6之輸出指令之第二次執行之過程中,這512個由位址4與5之指令累加產生之累加器202數值(接下來,這些數值會被位址7之輸出指令使用以計算並寫入輸出層節點Y之數值)會被傳遞並寫入資料隨機存取記憶體122之列6,這些數值即為第二時間步驟(時間步驟1)中產生之內容層節點C數值並於第三時間步驟(時間步驟2)中使用;依此類推,在位址6之輸出指令之第十五次執行之過程中,這512個由位址4與5之指令累加產生之累加器202數值(接下來這些數值會被位址7之輸出指令使用以計算並寫入輸出層節點Y之數值)會被傳遞並寫入資料隨機存取記憶體122之列58,這些數值即為第十五時間步驟(時間 步驟14)中產生之內容層節點C數值(並由位址8之指令讀取,但不會被使用)。
位址8至12之指令與第四十二圖中位址7至11之指令大致相同並具有相同功能,二者僅具有一差異點。此差異點即,第四十五圖中位址8之指令(ADD_D_ACC DR ROW+1)會使資料隨機存取記憶體122之列數增加一,而第四十二圖中位址7之指令(ADD_D_ACC DR ROW+0)會使資料隨機存取記憶體122之列數增加零。此差異係導因於資料隨機存取記憶體122內之資料配置之不同,特別是,第四十四圖中四列一組之配置包括一獨立列供內容層節點C數值使用(如列2,6,10等),而第四十一圖中三列一組之配置則不具有此獨立列,而是讓內容層節點C之數值與隱藏層節點Z之數值共用同一個列(如列1,4,7等)。位址8至12之指令之十五次執行會計算出隱藏層節點Z之數值並將其寫入資料隨機存取記憶體122(寫入列5,9,13,依此類推直到列57)供位址4,5與7之指令之第二至十六次執行使用以計算第二至十五時間步驟之輸出層節點Y(時間步驟1至14)。(位址8至12之指令之最後/第十五次執行係計算隱藏層節點Z之數值並將其寫入資料隨機存取記憶體122之列61,不過這些數值並未被使用。)
位址13之迴圈指令會使迴圈計數器3804遞減並且在新的迴圈計數器3804數值大於零之情況下回到位址4之指令。
在另一實施例中,Jordan時間遞歸神經網路之設計係利用內容節點C裝載輸出節點Y之啟動函數值,此啟動函數值即啟動函數執行後之累加值。在此實施例中,因為輸出節點Y之數值與內容節點C之數值相同,位址6之非架構指令並不包含於非架構程式內。因而可以減少資料隨機存取記憶體122內使用之列數。更精確的說,第四十四圖中之各個裝載內容節點C數值之列(例如列2,6,59)都不存在於本實施例。此外,此實施例之各個時間步驟僅需要資料隨機存取記憶體122之三個列,而會搭配20個時間步驟,而非15個,第四十五圖中非架構程式之指令的位址也會進行適當的調整。
長短期記憶胞
長短期記憶胞用於時間遞歸神經網路是本技術領域所習知之概念。舉例來說,Long Short-Term Memory,Sepp Hochreiter and Jürgen Schmidhuber,Neural Computation,November 15,1997,Vol.9,No.8,Pages 1735-1780;Learning to Forget:Continual Prediction with LSTM,Felix A.Gers,Jürgen Schmidhuber,and Fred Cummins,Neural Computation,October 2000,Vol.12,No.10,Pages 2451-2471;這些文獻都可以從麻省理工出版社期刊(MIT Press Journals)取得。長短期記憶胞可以建構為多種不同型式。以下所述第四十六圖之長短期記憶胞4600係以網址http://deeplearning.net/tutorial/lstm.html標題為長短期記憶網路情緒分析(LSTM Networks for Sentiment Analysis)之教程所描述之長短期記憶胞為模型,此教程之副本係於2015年10月19日下載(以下稱為“長短期記憶教程”)並提供於本案之資料揭露陳報書內。此長短期記憶胞4600之用語係普遍地用於描述本文所述之神經網路單元121實施例能夠有效執行關聯於長短期記憶之計算之能力。值得注意的是,這些神經網路單元121之實施例,包括第四十九圖所述之實施例,都可以有效執行關聯於第四十六圖所述之長短期記憶胞以外之其他長短期記憶胞之計算。
較佳地,神經網路單元121可用以針對一個具有長短期記憶胞層連結其他層級之時間遞歸神經網路執行計算。舉例來說,在此長短期記憶教程中,網路包含一均值共源層以接收長短期記憶層之長短期記憶胞之輸出(H),以及一邏輯回歸層以接收均值共源層之輸 出。
第四十六圖係一方塊圖,顯示長短期記憶胞4600之一實施例。
如圖中所示,此長短期記憶胞4600包括一記憶胞輸入(X),一記憶胞輸出(H),一輸入閘(I),一輸出閘(O),一遺忘閘(F),一記憶胞狀態(C)與一候選記憶胞狀態(C’)。輸入閘(I)可遮蔽記憶胞輸入(X)至記憶胞狀態(C)之信號傳遞,而輸出閘(O)可遮蔽記憶胞狀態(C)至記憶胞輸出(H)之信號傳遞。此記憶胞狀態(C)會反饋為一時間步驟之候選記憶胞狀態(C’)。遺忘閘(F)可遮蔽此候選記憶胞狀態(C’),此候選記憶胞狀態會反饋並變成下一個時間步驟之記憶胞狀態(C)。
第四十六圖之實施例使用下列等式來計算前述各種不同數值:
(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是關聯於輸入閘(I)之權重值,而Bi是關聯於輸入閘(I)之偏移值。Wf與Uf是關聯於遺忘閘(F)之權重值,而Bf是關聯於遺忘閘(F)之偏移值。Wo與Uo是關聯於輸出閘(O)之權重值,而Bo是關聯於輸出閘(O)之偏移值。如前述,等式(1),(2)與(5)分別計算輸入閘(I),遺忘閘(F)與輸出閘(O)。等式(3)計算候選記憶胞狀態(C’),而等式(4)計算以當前記憶胞狀態(C)為輸入之候選記憶胞狀態(C’),當前記憶胞狀態(C)即當前時間步驟之記憶胞狀態(C)。等式(6)計算記憶胞輸出(H)。不過本發明並不限於此。使用他種方式計算輸入閘,遺忘閘,輸出閘,候選記憶胞狀態,記憶胞狀態與記憶胞輸出之長短期記憶胞之實施例亦為本發明所涵蓋。
為了說明本發明,長短期記憶胞包括一記憶胞輸入,一記憶胞輸出,一記憶胞狀態,一候選記憶胞狀態,一輸入閘,一輸出閘與一遺忘閘。對各個時間步驟而言,輸入閘,輸出閘,遺忘閘與候選記憶胞狀態為當前時間步驟之記憶體記憶胞輸入與先前時間步驟之記憶胞輸出與相關權重之函數。此時間步驟之記憶胞狀態為先前時間步驟之記憶胞狀態,候選記憶胞狀態,輸入閘與輸出閘之函數。從這個 意義上說,記憶胞狀態會反饋用於計算下一個時間步驟之記憶胞狀態。此時間步驟之記憶胞輸出是此時間步驟計算出之記憶胞狀態與輸出閘之函數。長短期記憶神經網路是一個具有一個長短期記憶胞層之神經網路。
第四十七圖係一方塊圖,顯示當神經網路單元121執行關聯於第四十六圖之長短期記憶神經網路之長短期記憶胞4600層之計算時,神經網路單元121之資料隨機存取記憶體122與權重隨機存取記憶體124內之資料配置之一範例。在第四十七圖之範例中,神經網路單元121係配置為512個神經處理單元126或神經元,例如採寬配置,不過,只有128個神經處理單元126(如神經處理單元0至127)所產生之數值會被使用,這是因為在此範例之長短期記憶層只有128個長短期記憶胞4600。
如圖中所示,權重隨機存取記憶體124會裝載神經網路單元121之相對應神經處理單元0至127之權重值,偏移值與中間值。權重隨機存取記憶體124之行0至127裝載神經網路單元121之相對應神經處理單元0至127之權重值,偏移值與中間值。列0至14中之各列則是裝載128個下列對應於前述等式(1)至(6)之數值以提供給神經處理單元0至127,這些數值為:Wi,Ui,Bi,Wf,Uf,Bf,Wc,Uc,Bc,C’, TANH(C),C,Wo,Uo,Bo。較佳地,權重值與偏移值-Wi,Ui,Bi,Wf,Uf,Bf,Wc,Uc,Bc,Wo,Uo,Bo(位於列0至8與列12至14)-係由執行於處理器100之架構程式透過MTNN指令1400寫入/填入權重隨機存取記憶體124,並由執行於神經網路單元121之非架構程式讀取/使用,如第四十八圖之非架構程式。較佳地,中間值-C’,TANH(C),C(位於列9至11)-係由執行於神經網路單元121之非架構程式寫入/填入權重隨機存取記憶體124並進行讀取/使用,詳如後述。
如圖中所示,資料隨機存取記憶體122裝載輸入(X),輸出(H),輸入閘(I),遺忘閘(F)與輸出閘(O)數值供一系列時間步驟使用。進一步來說,此記憶體五列一組裝載X,H,I,F與O之數值供一給定時間步驟使用。以一個具有64列之資料隨機存取記憶體為例,如圖中所示,此資料隨機存取記憶體122可裝載供12個不同時間步驟使用之記憶胞數值。在第四十七圖之範例中,列0至4係裝載供時間步驟0使用之記憶胞數值,列5至9係裝載供時間步驟1使用之記憶胞數值,依此類推,列55至59係裝載供時間步驟11使用之記憶胞數值。此五列一組記憶體中之第一列係裝載此時間步驟之X數值。此五列一組記憶體中之第二列係裝載此時間步 驟之H數值。此五列一組記憶體中之第三列係裝載此時間步驟之I數值。此五列一組記憶體中之第四列係裝載此時間步驟之F數值。此五列一組記憶體中之第五列係裝載此時間步驟之O數值。如圖中所示,資料隨機存取記憶體122內之各行係裝載供相對應神經元或神經處理單元126使用之數值。也就是說,行0係裝載關聯於長短期記憶胞0之數值,而其計算是由神經處理單元0所執行;行1係裝載關聯於長短期記憶胞1之數值,而其計算是由神經處理單元1所執行;依此類推,行127係裝載關聯於長短期記憶胞127之數值,而其計算是由神經處理單元127所執行,詳如後續第四十八圖所述。
較佳地,X數值(位於列0,5,9,依此類推至列55)係由執行於處理器100之架構程式透過MTNN指令1400寫入/填入資料隨機存取記憶體122,並由執行於神經網路單元121之非架構程式進行讀取/使用,如第四十八圖所示之非架構程式。較佳地,I數值,F數值與O數值(位於列2/3/4,7/8/9,12/13/14,依此類推至列57/58/59)係由執行於神經網路單元121之非架構程式寫入/填入資料隨機存取記憶體122,詳如後述。較佳地,H數值(位於列1,6,10,依此類推至列56)係由執行於神經網路單元121之非架構程式寫入/填入資料隨機存取記 憶體122並進行讀取/使用,並且由執行於處理器100之架構程式透過MFNN指令1500進行讀取。
第四十七圖之範例係假定此架構程式會執行以下步驟:(1)對於12個不同的時間步驟,將輸入X之數值填入資料隨機存取記憶體122(列0,5,依此類推至列55);(2)啟動第四十八圖之非架構程式;(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出H之數值(列1,6,依此類推至列59);以及(5)重複步驟(1)至(4)若干次直到完成任務,例如對手機使用者之陳述進行辨識所需之計算。
在另一種執行方式中,架構程式會執行以下步驟:(1)對單一個時間步驟,以輸入X之數值填入資料隨機存取記憶體122(如列0);(2)啟動非架構程式(第四十八圖非架構程式之一修正後版本,不需迴圈,並且只存取資料隨機存取記憶體122之單一組五個列);(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出H之數值(如列1);以及(5)重複步驟(1)至(4)若干次直到完成任務。此二種方式何者為優可依據長短期記憶層之輸入X數值的取樣方式而定。舉例來說,若是此任務容許在多個時間步驟對輸入進行取樣 (例如大約12個時間步驟)並執行計算,第一 種方式就較為理想,因為此方式可能帶來更多計算資源效率與/或較佳的效能,不過,若是此任務只容許在單一個時間步驟執行取樣,就需要使用第二種方式。
第三實施例類似於前述第二種方式,不過,不同於第二種方式使用單一組五列資料隨機存取記憶體122,此方式之非架構程式使用多組五列記憶體,也就是在各個時間步驟使用不同的五列一組記憶體,此部分類似於第一種方式。在此第三實施例中,較佳地,架構程式在步驟(2)前包含一步驟,此步驟中,架構程式會在非架構程式啟動前對其進行更新,例如將位址0之指令內的資料隨機存取記憶體122列更新為指向下一組五列記憶體。
第四十八圖係一表格,顯示儲存於神經網路單元121之程式記憶體129之一程式,此程式係由神經網路單元121執行並依據第四十七圖之配置使用資料與權重,以達成關聯於長短期記憶胞層之計算。第四十八圖之範例程式包括24個非架構指令分別位於位址0至23。位址0之指令(INITIALIZE NPU,CLR ACC,LOOPCNT=12,DR IN ROW=-1,DR OUT ROW=2)會清除累加器202並將迴圈計數器3804初始化至數值12,以執行12次迴圈組(位址1至22 之指令)。此初始化指令並會將資料隨機存取記憶體122之待讀取列初始化為數值-1,而在位址1之指令之第一次執行後,此數值會增加為零。 此初始化指令並會將資料隨機存取記憶體122之待寫入列(例如第二十六與三十九圖之暫存器2606)初始化為列2。較佳地,此初始化指令並會使神經網路單元121處於寬配置,如此,神經網路單元121就會配置有512個神經處理單元126。如同後續章節所述,在位址0至23之指令執行過程中,這512個神經處理單元126其中之128個神經處理單元126係作為128個相對應之長短期記憶胞4600進行運作。
在位址1至4之指令之第一次執行中,這128個神經處理單元126(即神經處理單元0至127)中之各個神經處理單元126會針對相對應長短期記憶胞4600之第一時間步驟(時間步驟0)計算輸入閘(I)數值並將I數值寫入資料隨機存取記憶體122之列2之相對應文字;在位址1至4之指令之第二次執行中,這128個神經處理置元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第二時間步驟(時間步驟1)計算I數值並將I數值寫入資料隨機存取記憶體122之列7之相對應文字;依此類推,在位址1至4之指令之第十二次執行中,這128個神經處理單元126中之各個神經處理單元126會針 對相對應長短期記憶胞4600之第十二時間步驟(時間步驟11)計算I數值並將I數值寫入資料隨機存取記憶體122之列57之相對應文字,如第四十七圖所示。
進一步來說,位址1之乘法累加指令會讀取資料隨機存取記憶體122當前列後方之下一列(在第一執行即為列0,在第二執行即為列5,依此類推,在第十二執行即為列55),此列係包含關聯於當前時間步驟之記憶胞輸入(X)值,此指令並會讀取權重隨機存取記憶體124中包含Wi數值之列0,並且將前述讀取數值相乘以產生第一乘積累加至剛剛由位址0之初始化指令或位址22之指令清除之累加器202。隨後,位址2之乘法累加指令會讀取下一個資料隨機存取記憶體122列(在第一執行即為列1,在第二執行即為列6,依此類推,在第十二執行即為列56),此列係包含關聯於當前時間步驟之記憶胞輸出(H)值,此指令並會讀取權重隨機存取記憶體124中包含Ui數值之列1,並且將前述數值相乘以產生第二乘積累加至累加器202。關聯於當前時間步驟之H數值係由位址2之指令(以及位址6,10與18之指令)由資料隨機存取記憶體122讀取,在先前時間步驟產生,並由位址22之輸出指令寫入資料隨機存取記憶體122;不過,在第一次執行中,位址2之指令會以一初始 值寫入資料隨機存取記憶體之列1作為H數值。較佳地,架構程式會在啟動第四十八圖之非架構程式前將初始H數值寫入資料隨機存取記憶體122之列1(例如使用MTNN指令1400);不過,本發明並不限於此,非架構程式內包含有初始化指令將初始H數值寫入資料隨機存取記憶體122之列1之其他實施例亦屬於本發明之範疇。在一實施例中,此初始H數值為零。接下來,位址3之將權重文字加入累加器指令(ADD_W_ACC WR ROW 2)會讀取權重隨機存取記憶體124中包含Bi數值之列2並將其加入累加器202。最後,位址4之輸出指令(OUTPUT SIGMOID,DR OUT ROW+0,CLR ACC)會對累加器202數值執行一S型啟動函數並將執行結果寫入資料隨機存取記憶體122之當前輸出列(在第一執行即為列2,在第二執行即為列7,依此類推,在第十二執行即為列57)並且清除累加器202。
在位址5至8之指令之第一次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第一時間步驟(時間步驟0)計算其遺忘閘(F)數值並將F數值寫入資料隨機存取記憶體122之列3之相對應文字;在位址5至8之指令之第二次執行中,這128個神經處理單元126中之各個 神經處理單元126會針對相對應長短期記憶胞4600之第二時間步驟(時間步驟1)計算其遺忘閘(F)數值並將F數值寫入資料隨機存取記憶體122之列8之相對應文字;依此類推,在位址5至8之指令之第十二次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第十二時間步驟(時間步驟11)計算其遺忘閘(F)數值並將F數值寫入資料隨機存取記憶體122之列58之相對應文字,如第四十七圖所示。位址5至8之指令計算F數值之方式類似於前述位址1至4之指令,不過,位址5至7之指令會分別從權重隨機存取記憶體124之列3,列4與列5讀取Wf,Uf與Bf數值以執行乘法與/或加法運算。
在位址9至12之指令之十二次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之相對應時間步驟計算其候選記憶胞狀態(C’)數值並將C’數值寫入權重隨機存取記憶體124之列9之相對應文字。位址9至12之指令計算C’數值之方式類似於前述位址1至4之指令,不過,位址9至11之指令會分別從權重隨機存取記憶體124之列6,列7與列8讀取Wc,Uc與Bc數值以執行乘法與/或加法運算。此外,位址12之輸出指令會執行雙曲正切啟動函數而非(如位址4 之輸出指令執行)S型啟動函數。
進一步來說,位址9之乘法累加指令會讀取資料隨機存取記憶體122之當前列(在第一次執行即為列0,在第二次執行即為列5,依此類推,在第十二次執行即為列55),此當前列係包含關聯於當前時間步驟之記憶胞輸入(X)值,此指令並會讀取權重隨機存取記憶體124中包含Wc數值之列6,並且將前述數值相乘以產生第一乘積累加至剛剛由位址8之指令清除之累加器202。接下來,位址10之乘法累加指令會讀取資料隨機存取記憶體122之次一列(在第一次執行即為列1,在第二次執行即為列6,依此類推,在第十二次執行即為列56),此列係包含關聯於當前時間步驟之記憶胞輸出(H)值,此指令並會讀取權重隨機存取記憶體124中包含Uc數值之列7,並且將前述數值相乘以產生第二乘積累加至累加器202。接下來,位址11之將權重文字加入累加器指令會讀取權重隨機存取記憶體124中包含Bc數值之列8並將其加入累加器202。最後,位址12之輸出指令(OUTPUT TANH,WR OUT ROW 9,CLR ACC)會對累加器202數值執行一雙曲正切啟動函數並將執行結果寫入權重隨機存取記憶體124之列9,並且清除累加器202。
在位址13至16之指令之十二次執 行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之相對應時間步驟計算新的記憶胞狀態(C)數值並將此新的C數值寫入權重隨機存取記憶體122之列11之相對應文字,各個神經處理單元126還會計算tanh(C)並將其寫入權重隨機存取記憶體124之列10之相對應文字。進一步來說,位址13之乘法累加指令會讀取資料隨機存取記憶體122當前列後方之下一列(在第一次執行即為列2,在第二次執行即為列7,依此類推,在第十二次執行即為列57),此列包含關聯於當前時間步驟之輸入閘(I)數值,此指令並讀取權重隨機存取記憶體124中包含候選記憶胞狀態(C’)數值之列9,並且將前述數值相乘以產生第一乘積累加至剛剛由位址12之指令清除之累加器202。接下來,位址14之乘法累加指令會讀取資料隨機存取記憶體122之下一列(在第一次執行即為列3,在第二次執行即為列8,依此類推,在第十二次執行即為列58),此列包含關聯於當前時間步驟之遺忘閘(F)數值,此指令並讀取權重隨機存取記憶體124中包含於先前時間步驟中計算之當前記憶胞狀態(C)數值(由位址15之指令之最近一次執行進行寫入)之列11,並且將前述數值相乘以產生第二乘積加入累加器202。接下來,位址15之輸出指令(OUTPUT PASSTHRU,WR OUT ROW 11)會傳遞此累加器202數值並將其寫入權重隨機存取記憶體124之列11。需要理解的是,位址14之指令由資料隨機存取記憶體122之列11讀取之C數值即為位址13至15之指令於最近一次執行中產生並寫入之C數值。位址15之輸出指令並不會清除累加器202,如此,其數值即可由位址16之指令使用。最後,位址16之輸出指令(OUTPUT TANH,WR OUT ROW 10,CLR ACC)會對累加器202數值執行一雙曲正切啟動函數並將其執行結果寫入權重隨機存取記憶體124之列10供位址21之指令使用以計算記憶胞輸出(H)值。位址16之指令會清除累加器202。
在位址17至20之指令之第一次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第一時間步驟(時間步驟0)計算其輸出閘(O)數值並將O數值寫入資料隨機存取記憶體122之列4之相對應文字;在位址17至20之指令之第二次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第二時間步驟(時間步驟1)計算其輸出閘(O)數值並將O數值寫入資料隨機存取記憶體122之列9之相對應文字;依此類推,在位址17至20之指令之第十二次執行中,這128個神 經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第十二時間步驟(時間步驟11)計算其輸出閘(O)數值並將O數值寫入資料隨機存取記憶體122之列58之相對應文字,如第四十七圖所示。位址17至20之指令計算O數值之方式類似於前述位址1至4之指令,不過,位址17至19之指令會分別從權重隨機存取記憶體124之列12,列13與列14讀取Wo,Uo與Bo數值以執行乘法與/或加法運算。
在位址21至22之指令之第一次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第一時間步驟(時間步驟0)計算其記憶胞輸出(H)值並將H數值寫入資料隨機存取記憶體122之列6之相對應文字;在位址21至22之指令之第二次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第二時間步驟(時間步驟1)計算其記憶胞輸出(H)值並將H數值寫入資料隨機存取記憶體122之列11之相對應文字;依此類推,在位址21至22之指令之第十二次執行中,這128個神經處理單元126中之各個神經處理單元126會針對相對應長短期記憶胞4600之第十二時間步驟(時間步驟11)計算其記憶胞輸出(H)值並將H數值寫入資料隨機存取記憶體122 之列60之相對應文字,如第四十七圖所示。
進一步來說,位址21之乘法累加指令會讀取資料隨機存取記憶體122當前列後方之第三列(在第一次執行即為列4,在第二次執行即為列9,依此類推,在第十二次執行即為列59),此列包含關聯於當前時間步驟之輸出閘(O)數值,此指令並讀取權重隨機存取記憶體124中包含tanh(C)數值之列10(由位址16之指令寫入),並且將前述數值相乘以產生一乘積累加至剛剛由位址20之指令清除之累加器202。隨後,位址22之輸出指令會傳遞累加器202數值並將其寫入資料隨機存取記憶體122之接下來第二個輸出列11(在第一次執行即為列6,在第二次執行即為列11,依此類推,在第十二次執行即為列61),並且清除累加器202。需要理解的是,由位址22之指令寫入資料隨機存取記憶體122列之H數值(在第一次執行即為列6,在第二次執行即為列11,依此類推,在第十二次執行即為列61)即為位址2,6,10與18之指令之後續執行中所消耗/讀取之H數值。不過,第十二次執行中寫入列61之H數值並不會被位址2,6,10與18之指令之執行所消耗/讀取;就一較佳實施例而言,此數值會是由架構程式所消耗/讀取。
位址23之指令(LOOP 1)會使迴圈 計數器3804並且在新的迴圈計數器3804數值大於零的情況下回到位址1之指令。
第四十九圖係一方塊圖,顯示一神經網路單元121之實施例,此實施例之神經處理單元群組內具有輸出緩衝遮蔽與反饋能力。第四十九圖顯示單一個由四個神經處理單元126構成之神經處理單元群組4901。雖然第四十九圖僅顯示單一個神經處理單元群組4901,不過需要理解的是,神經網路單元121中之各個神經處理單元126都會包含於一個神經處理單元群組4901內,因此,一共會有N/J個神經處理單元群組4901,其中N是神經處理單元126的數量(舉例來說,就寬配置而言為512,就窄配置而言為1024)而J是單一個群組4901內之神經處理單元126的數量(舉例來說,就第四十九圖之實施例而言即為四)。第四十九圖中係將神經處理單元群組4901內之四個神經處理單元126稱為神經處理單元0,神經處理單元1,神經處理單元2與神經處理單元3。
第四十九圖之實施例中之各個神經處理單元係類似於前述第七圖之神經處理單元126,並且圖中具有相同標號之元件亦相類似。不過,多工暫存器705係經調整以包含四個額外的輸入4905,多工暫存器205係經調整以包含四個額外的輸入4907,選擇輸入213係經調整 而能從原本之輸入211與207以及額外輸入4905中進行選擇提供至輸出209,並且,選擇輸入713係經調整而能從原本之輸入711與206以及額外輸入4907中進行選擇提供至輸出203。
如圖中所示,第十一圖之列緩衝器1104在第四十九圖中即為輸出緩衝器1104。進一步來說,途中所示之輸出緩衝器1104之文字0,1,2與3係接收關聯於神經處理單元0,1,2與3之四個啟動函數單元212之相對應輸出。此部分之輸出緩衝器1104包含N個文字對應於一神經處理單元群組4901,這些文字係稱為一個輸出緩衝文字群組。在第四十九圖之實施例中,N為四。輸出緩衝器1104之這四個文字係反饋至多工暫存器208與705,並作為四個額外輸入4905由多工暫存器208所接收以及作為四個額外輸入4907由多工暫存器705所接收。輸出緩衝文字群組反饋至其相對應神經處理單元群組4901之反饋動作,使非架構程式之算術指令能後從關聯於神經處理單元群組4901之輸出緩衝器1104之文字(即輸出緩衝文字群組)中選擇一個或兩個文字作為其輸入,其範例請參照後續第五十一圖之非架構程式,如圖中位址4,8,11,12與15之指令。也就是說,指定於非架構指令內之輸出緩衝器1104文字會確認選擇輸出213/713產生之數值。這個能力實際上使輸出 緩衝器1104可以作為一個類別草稿記憶體(scratch pad memory),能夠讓非架構程式減少寫入資料隨機存取記憶體122與/或權重隨機存取記憶體124以及後續從中讀取之次數,例如減少過程中產生與使用之數值。較佳地,輸出緩衝器1104,或列緩衝器1104,包括一個一維之暫存器陣列,用以儲存1024個窄文字或是512個寬文字。較佳地,對於輸出緩衝器1104之讀取可以在單一個時頻周期內執行,而對於輸出緩衝器1104之寫入也可以在單一個時頻周期內執行。不同於資料隨機存取記憶體122與權重隨機存取記憶體124,可由架構程式與非架構程式進行存取,輸出緩衝器1104無法由架構程式進行存取,而只能由非架構程式進行存取。
輸出緩衝器1104係將經調整以接收一遮罩輸入(mask input)4903。較佳地,遮罩輸入4903包括四個位元對應至輸出緩衝器1104之四個文字,此四個文字係關聯於神經處理單元群組4901之四個神經處理單元126。較佳地,若是此對應至輸出緩衝器1104之文字之遮罩輸入4903位元為真,此輸出緩衝器1104之文字就會維持其當前值;否則,此輸出緩衝器1104之文字就會被啟動函數單元212之輸出所更新。也就是說,若是此對應至輸出緩衝器1104之文字之遮罩輸入4903位元為假,啟動函數單元212 之輸出就會被寫入輸出緩衝器1104之文字。如此,非架構程式之輸出指令即可選擇性地將啟動函數單元212之輸出寫入輸出緩衝器1104之某些文字並使輸出緩衝器1104之其他文字之當前數值維持不變,其範例請參照後續第五十一圖之非架構程式之指令,如圖中位址6,10,13與14之指令。也就是說,指定於非架構程式內之輸出緩衝器1104之文字即確定產生於遮罩輸入4903之數值。
為了簡化說明,第四十九圖中並未顯示多工暫存器208/705之輸入1811(如第十八,十九與二十三圖所示)。不過,同時支援可動態配置神經處理單元126與輸出緩衝器1104之反饋/遮罩之實施例亦屬本發明值之範疇。較佳地,在此等實施例中,輸出緩衝文字群組為可相對應地動態配置。
需要理解的是,雖然此實施例之神經處理單元群組4901內之神經處理單元126的數量為四,不過,本發明並不限於此,群組內神經處理單元126數量較多或較少之實施例均屬於本發明之範疇。此外,就一個具有共享啟動函數單元1112之實施例而言,如第五十二圖所示,一個神經處理單元群組4901內之神經處理單元126數量與一個啟動函數單元212群組內之神經處理單元126數量會互相影響。神經處理 單元群組內輸出緩衝器1104之遮蔽與反饋能力特別有助於提升關聯於長短期記憶胞4600之計算效率,詳如後續第五十與五十一圖所述。
第五十圖係一方塊圖,顯示當神經網路單元121執行關聯於第四十六圖中由128個長短期記憶胞4600構成之一層級之計算時,第四十九圖之神經網路單元121之資料隨機存取記憶體122,權重隨機存取記憶體124與輸出緩衝器1104內之資料配置之一範例。在第五十圖之範例中,神經網路單元121係配置為512個神經處理單元126或神經元,例如採取寬配置。如同第四十七與四十八圖之範例,在第五十與五十一圖之範例中之長短期記憶層中只具有128個長短期記憶胞4600。不過,在第五十圖之範例中,全部512個神經處理單元126(如神經處理單元0至127)產生之數值都會被使用。在執行第五十一圖之非架構程式的時候,各個神經處理單元群組4901會集體做為一個長短期記憶胞4600進行運作。
如圖中所示,資料隨機存取記憶體122裝載記憶胞輸入(X)與輸出(H)值供一系列時間步驟使用。進一步來說,對於一給定時間步驟,會有一對兩列記憶體分別裝載X數值與H數值。以一個具有64列之資料隨機存取記憶體122為例,如圖中所示,此資料隨機存取記憶體 122所裝載之記憶胞數值可供31個不同時間步驟使用。在第五十圖之範例中,列2與3裝載供時間步驟0使用之數值,列4與5裝載供時間步驟1使用之數值,依此類推,列62與63裝載供時間步驟30使用之數值。這對兩列記憶體中之第一列係裝載此時間步驟之X數值,而第二列則是裝載此時間步驟之H數值。如圖中所示,資料隨機存取記憶體122中各組四行對應至神經處理單元群組4901之記憶體係裝載供其對應長短期記憶胞4600使用之數值。也就是說,行0至3係裝載關聯於長短期記憶胞0之數值,其計算是由神經處理單元0-3執行,即神經處理單元群組0執行;行4至7係裝載關聯於長短期記憶胞1之數值,其計算是由神經處理單元4-7執行,即神經處理單元群組1執行;依此類推,行508至511係裝載關聯於長短期記憶胞127之數值,其計算是由神經處理單元508-511執行,即神經處理單元群組127執行,詳如後續第五十一圖所示。如圖中所示,列1並未被使用,列0裝載初始之記憶胞輸出(H)值,就一較佳實施例而言,可由架構程式填入零值,不過,本發明並不限於此,利用非架構程式指令填入列0之初始記憶胞輸出(H)數值亦屬於本發明之範疇。
較佳地,X數值(位於列2,4,6依此類推至列62)係由執行於處理器100之架構 程式透過MTNN指令1400寫入/填入資料隨機存取記憶體122,並由執行於神經網路單元121之非架構程式進行讀取/使用,例如第五十圖所示之非架構程式。較佳地,H數值(位於列3,5,7依此類推至列63)係由執行於神經網路單元121之非架構程式寫入/填入資料隨機存取記憶體122並進行讀取/使用,詳如後述。較佳地,H數值並由執行於處理器100之架構程式透過MFNN指令1500進行讀取。需要注意的是,第五十一圖之非架構程式係假定對應至神經處理單元群組4901之各組四行記憶體(如行0-3,行4-7,行5-8,依此類推至行508-511)中,在一給定列之四個X數值係填入相同的數值(例如由架構程式填入)。類似地,第五十一圖之非架構程式會在對應至神經處理單元群組4901之各組四行記憶體中,計算並對一給定列之四個H數值寫入相同數值。
如圖中所示,權重隨機存取記憶體124係裝載神經網路單元121之神經處理單元所需之權重,偏移與記憶胞狀態(C)值。在對應至神經處理單元群組4901之各組四行記憶體中(例如行0-3,行4-7,行5-8依此類推至行508-511):(1)行編號除以4之餘數等於3之行,會在其列0,1,2與6分別裝載Wc,Uc,Bc,與C之數值;(2)行編號除以4之餘數等於2之 行,會在其列3,4與5分別裝載Wo,Uo與Bo之數值;(3)行編號除以4之餘數等於1之行,會在其列3,4與5分別裝載Wf,Uf與Bf之數值;以及(4)行編號除以4之餘數等於0之行,會在其列3,4與5分別裝載Wi,Ui與Bi之數值。較佳地,這些權重與偏移值-Wi,Ui,Bi,Wf,Uf,Bf,Wc,Uc,Bc,Wo,Uo,Bo(在列0至5)係由執行於處理器100之架構程式透過MTNN指令1400寫入/填入權重隨機存取記憶體124,並由執行於神經網路單元121之非架構程式進行讀取/使用,如第五十一圖之非架構程式。較佳地,中間之C值係由執行於神經網路單元121之非架構程式寫入/填入權重隨機存取記憶體124並進行讀取/使用,詳如後述。
第五十圖之範例係假定架構程式會執行以下步驟:(1)對於31個不同的時間步驟,將輸入X之數值填入資料隨機存取記憶體122(列2,4,依此類推至列62);(2)啟動第五十一圖之非架構程式;(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出H之數值(列3,5,依此類推至列63);以及(5)重複步驟(1)至(4)若干次直到完成任務,例如對手機使用者之陳述進行辨識所需之計算。
在另一種執行方式中,架構程式會 執行以下步驟:(1)對單一個時間步驟,以輸入X之數值填入資料隨機存取記憶體122(如列2);(2)啟動非架構程式(第五十一圖非架構程式之一修正後版本,不需迴圈,並且只存取資料隨機存取記憶體122之單一對兩個列);(3)偵測非架構程式是否執行完畢;(4)從資料隨機存取記憶體122讀出輸出H之數值(如列3);以及(5)重複步驟(1)至(4)若干次直到完成任務。此二種方式何者為優可依據長短期記憶層之輸入X數值的取樣方式而定。舉例來說,若是此任務容許在多個時間步驟對輸入進行取樣(例如大約31個時間步驟)並執行計算,第一種方式就較為理想,因為此方式可能帶來更多計算資源效率與/或較佳的效能,不過,若是此任務只容許在單一個時間步驟執行取樣,就需要使用第二種方式。
第三實施例類似於前述第二種方式,不過,不同於第二種方式使用單一對兩列資料隨機存取記憶體122,此方式之非架構程式使用多對記憶體列,也就是在各個時間步驟使用不同對記憶體列,此部分類似於第一種方式。較佳地,此第三實施例之架構程式在步驟(2)前包含一步驟,在此步驟中,架構程式會在非架構程式啟動前對其進行更新,例如將位址1之指令內的資料隨機存取記憶體122列更新為 指向下一對兩列記憶體。
如圖中所示,對於神經網路單元121之神經處理單元0至511,在第五十一圖之非架構程式中不同位址之指令執行後,輸出緩衝器1104係裝載記憶胞輸出(H),候選記憶胞狀態(C’),輸入閘(I),遺忘閘(F),輸出閘(O),記憶胞狀態(C)與tanh(C)之中間值,每一個輸出緩衝文字群組中(例如輸出緩衝器1104對應至神經處理單元群組4901之四個文字之群組,如文字0-3,4-7,5-8依此類推至508-511),文字編號除以4之餘數為3的文字係表示為OUTBUF[3],文字編號除以4之餘數為2的文字係表示為OUTBUF[2],文字編號除以4之餘數為1的文字係表示為OUTBUF[1],而文字編號除以4之餘數為0的文字係表示為OUTBUF[0]。
如圖中所示,在第五十一圖之非架構程式中位址2之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之全部四個文字都會寫入相對應長短期記憶胞4600之初始記憶胞輸出(H)值。在位址6之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之OUTBUT[3]文字會寫入相對應長短期記憶胞4600之候選記憶胞狀態(C’)值,而輸出緩衝器1104之其他三個文字則會維持其先前數值。在位址10之指令執行後,對於各個 神經處理單元群組4901而言,輸出緩衝器1104之OUTBUT[0]文字會寫入相對應長短期記憶胞4600之輸入閘(I)數值,OUTBUT[1]文字會寫入相對應長短期記憶胞4600之遺忘閘(F)數值,OUTBUT[2]文字會寫入相對應長短期記憶胞4600之輸出閘(O)數值,而OUTBUT[3]文字則是維持其先前數值。在位址13之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之OUTBUT[3]文字會寫入相對應長短期記憶胞4600之新的記憶胞狀態(C)值(對於輸出緩衝器1104而言,包含槽(slot)3之C數值,係寫入權重隨機存取記憶體124之列6,詳如後續第五十一圖所述),而輸出緩衝器1104之其他三個文字則是維持其先前數值。在位址14之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之OUTBUT[3]文字會寫入相對應長短期記憶胞4600之tanh(C)數值,而輸出緩衝器1104之其他三個文字則是維持其先前數值。在位址16之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之全部四個文字都會寫入相對應長短期記憶胞4600之新的記憶胞輸出(H)值。前述位址6至16之執行流程(也就是排除位址2之執行,這是因為位址2不屬於程式迴圈之一部分)會再重複三十次,作為位址17回到位址3之程式迴圈。
第五十一圖係一表格,顯示儲存於神經網路單元121之程式記憶體129之一程式,此程式係由第四十九圖之神經網路單元121執行並依據第五十圖之配置使用資料與權重,以達成關聯於長短期記憶胞層之計算。第五十一圖之範例程式包含18個非架構指令分別位於位址0至17。位址0之指令是一個初始化指令,用以清除累加器202並將迴圈計數器3804初始化至數值31,以執行31次迴圈組(位址1至17之指令)。此初始化指令並會將資料隨機存取記憶體122之待寫入列(例如第二十六/三十九圖之暫存器2606)初始化為數值1,而在位址16之指令之第一次執行後,此數值會增加至3。較佳地,此初始化指令並會使神經網路單元121處於寬配置,如此,神經網路單元121就會配置有512個神經處理單元126。如後續章節所述,在位址0至17之指令執行過程中,這512個神經處理單元126構成之128個神經處理單元群組4901係作為128個相對應之長短期記憶胞4600進行運作。
位址1與2之指令不屬於程式之迴圈組而只會執行一次。這些指令會產生初始記憶胞輸出(H)值並將其解入輸出緩衝器1104之所有文字。位址1之指令會從資料隨機存取記憶體122之列0讀取初始H數值並將其放置於由位 址0之指令清除之累加器202。位址2之指令(OUTPUT PASSTHRU,NOP,CLR ACC)會將累加器202數值傳遞至輸出緩衝器1104,如第五十圖所示。位址2之輸出指令(以及第五十一圖之其他輸出指令)中之“NOP”標示表示輸出值只會被寫入輸出緩衝器1104,而不會被寫入記憶體,也就是不會被寫入資料隨機存取記憶體122或權重隨機存取記憶體124。位址2之指令並會清除累加器202。
位址3至17之指令係位於迴圈組內,其執行次數為迴圈計數之數值(如31)。
位址3至6之指令之每一次執行會計算當前時間步驟之tanh(C’)數值並將其寫入文字OUTBUF[3],此文字將會被位址11之指令使用。更精確地說,位址3之乘法累加指令會從資料隨機存取記憶體122之當前讀取列(如列2,4,6依此類推至列62)讀取關聯於此時間步驟之記憶胞輸入(X)值,從權重隨機存取記憶體124之列0讀取Wc數值,並將前述數值相乘以產生一乘積加入由位址2之指令清除之累加器202。
位址4之乘法累加指令(MULT-ACCUM OUTBUF[0],WR ROW 1)會從文字OUTBUF[0]讀取H數值(即神經處理單元群組4901之全部四個神經處理單元126),從權 重隨機存取記憶體124之列1讀取Uc數值,並將前述數值相乘以產生一第二乘積加入累加器202。
位址5之將權重文字加入累加器指令(ADD_W_ACC WR ROW 2)會從權重隨機存取記憶體124之列2讀取Bc數值並將其加入累加器202。
位址6之輸出指令(OUTPUT TANH,NOP,MASK[0:2],CLR ACC)會對累加器202數值執行一雙曲正切啟動函數,並且只將執行結果寫入文字OUTBUF[3](亦即,只有神經處理單元群組4901中編號除4之餘數為3之神經處理單元126會寫入此結果),並且,累加器202會被清除。也就是說,位址6之輸出指令會遮蔽文字OUTBUF[0],OUTBUF[1]與OUTBUF[2](如指令術語MASK[0:2]所表示)而維持其當前數值,如第五十圖所示。此外,位址6之輸出指令並不會寫入記憶體(如指令術語NOP所表示)。
位址7至10之指令之每一次執行會計算當前時間步驟之輸入閘(I)數值,遺忘閘(F)數值與輸出閘(O)數值並將其分別寫入文字OUTBUF[0],OUTBUF[1],與OUTBUF[2],這些數值將會被位址11,12與15之指令使用。更精確地說,位址7之乘法累加指令會從資料隨機存取記憶體122之當前讀取列(如列2,4,6依 此類推至列62)讀取關聯於此時間步驟之記憶胞輸入(X)值,從權重隨機存取記憶體124之列3讀取Wi,Wf與Wo數值,並將前述數值相乘以產生一乘積加入由位址6之指令清除之累加器202。更精確地說,在神經處理單元群組4901中,編號除4之餘數為0之神經處理單元126會計算X與Wi之乘積,編號除4之餘數為1之神經處理單元126會計算X與Wf之乘積,而編號除4之餘數為2之神經處理單元126會計算X與Wo之乘積。
位址8之乘法累加指令會從文字OUTBUF[0]讀取H數值(即神經處理單元群組4901之全部四個神經處理單元126),從權重隨機存取記憶體124之列4讀取Ui,Uf與Uo數值,並將前述數值相乘以產生一第二乘積加入累加器202。更精確地說,在神經處理單元群組4901中,編號除4之餘數為0之神經處理單元126會計算H與Ui之乘積,編號除4之餘數為1之神經處理單元126會計算H與Uf之乘積,而編號除4之餘數為2之神經處理單元126會計算H與Uo之乘積。
位址9之將權重文字加入累加器指令(ADD_W_ACC WR ROW 2)會從權重隨機存取記憶體124之列5讀取Bi,Bf與Bo數值並將其加入累加器202。更精確地說,在神經處理單元群 組4901中,編號除4之餘數為0之神經處理單元126會執行Bi數值之加法計算,編號除4之餘數為1之神經處理單元126會執行Bf數值之加法計算,而編號除4之餘數為2之神經處理單元126會執行Bo數值之加法計算。
位址10之輸出指令(OUTPUT SIGMOID,NOP,MASK[3],CLR ACC)會對累加器202數值執行一S型啟動函數並將計算出來之I,F與O數值分別寫入文字OUTBUF[0],OUTBUF[1]與OUTBUF[2],此指令並會清除累加器202,而不寫入記憶體。也就是說,位址10之輸出指令會遮蔽文字OUTBUF[3](如指令術語MASK[3]所表示)而維持此文字之當前數值(也就是C’),如第五十圖所示。
位址11至13之指令之每一次執行會計算當前時間步驟產生之新的記憶胞狀態(C)值並將其寫入權重隨機存取記憶體124之列6供下一個時間步驟使用(也就是供位址12之指令在下一次迴圈執行時使用),更精確的說,此數值係寫入列6對應於神經處理單元群組4901之四行文字中標號除4之餘數為3之文字。此外,位址14之指令之每一次執行都會將tanh(C)數值寫入OUTBUF[3]供位址15之指令使用。
更精確地說,位址11之乘法累加指令(MULT-ACCUM OUTBUF[0],OUTBUF[3])會 從文字OUTBUF[0]讀取輸入閘(I)數值,從文字OUTBUF[3]讀取候選記憶胞狀態(C’)值,並將前述數值相乘以產生一第一乘積加入由位址10之指令清除之累加器202。更精確地說,神經處理單元群組4901之四個神經處理單元126中之各個神經處理單元126都會計算I數值與C’數值之第一乘積。
位址12之乘法累加指令(MULT-ACCUM OUTBUF[1],WR ROW 6)會指示神經處理單元126從文字OUTBUF[1]讀取遺忘閘(F)數值,從權重隨機存取記憶體124之列6讀取其相對應文字,並將其相乘以產生一第二乘積與位址11之指令產生於累加器202內之第一乘積相加。更精確地說,從列6讀取之文字是先前時間步驟計算出之當前記憶胞狀態(C)值,對於神經處理單元群組4901內標號除4之餘數為3之神經處理單元126而言,第一乘積與第二乘積之加總即為此新的記憶胞狀態(C)。不過,對於神經處理單元群組4901之其他三個神經處理單元126而言,從列6讀取之文字是不需理會的數值,這是因為這些數值所產生之累加值將不被使用,亦即不會被位址13與14之指令放入輸出緩衝器1104而會被位址14之指令所清除。也就是說,只有神經處理單元群組4901中標號除4之餘數為3之神經處理單元126所產生 之新的記憶胞狀態(C)值將會被使用,即依據位址13與14之指令。就位址12之指令之第二至三十一次執行而言,從權重隨機存取記憶體124之列6讀取之C數值是迴圈組之前次執行中由位址13之指令寫入之數值。不過,對於位址12之指令之第一次執行而言,列6之C數值則是由架構程式在啟動第五十一圖之非架構程式前或是由非架構程式之一調整後版本寫入之初始值。
位址13之輸出指令(OUTPUT PASSTHRU,WR ROW 6,MASK[0:2])只會傳遞累加器202數值,即計算出之C數值,至文字OUTBUF[3](也就是說,只有神經處理單元群組4901中標號除4之餘數為3之神經處理單元126會將其計算出之C數值寫入輸出緩衝器1104),而權重隨機存取記憶體124之列6則是以更新後之輸出緩衝器1104寫入,如第五十圖所示。也就是說,位址13之輸出指令會遮蔽文字OUTBUF[0],OUTBUF[1]與OUTBUF[2]而維持其當前數值(即I,F與O數值)。如前述,只有列6對應於神經處理單元群組4901之四行文字中標號除4之餘數為3之文字內之C數值會被使用,也就是由位址12之指令使用;因此,非架構程式不會理會權重隨機存取記憶體124之列6中位於行0-2,行4-6,依此類推至行508-510之 數值,如第五十圖所示(即I,F與O數值)。
位址14之輸出指令(OUTPUT TANH,NOP,MASK[0:2],CLR ACC)會對累加器202數值執行一雙曲正切啟動函數,並將計算出來之tanh(C)數值寫入文字OUTBUF[3],此指令並會清除累加器202,而不寫入記憶體。位址14之輸出指令,如同位址13之輸出指令,會遮蔽文字OUTBUF[0],OUTBUF[1]與OUTBUF[2]而維持其原本數值,如第五十圖所示。
位址15至16之指令之每一次執行會計算當前時間步驟產生之記憶胞輸出(H)值並將其寫入資料隨機存取記憶體122之當前輸出列後方第二列,其數值將會由架構程式讀取並用於下一次時間步驟(亦即在下一次迴圈執行中由位址3至7之指令使用)。更精確地說,位址15之乘法累加指令會從文字OUTBUF[2]讀取輸出閘(O)數值,從文字OUTBUF[3]讀取tanh(C)數值,並將其相乘以產生一乘積加入由位址14之指令清除之累加器202。更精確地說,神經處理單元群組4901之四個神經處理單元126中之各個神經處理單元126都會計算數值O與tanh(C)之乘積。
位址16之輸出指令會傳遞累加器202數值並在第一次執行中將計算出之H數值寫入列3,在第二次執行中將計算出之H數值寫 入列5,依此類推在第三十一次執行中將計算出之H數值寫入列63,如第五十圖所示,接下來這些數值會由位址4與8之指令使用。此外,如第五十圖所示,這些計算出來之H數值會被放入輸出緩衝器1104供位址4與8之指令後續使用。位址16之輸出指令並會清除累加器202。在一實施例中,長短期記憶胞4600之設計係使位址16之輸出指令(以及/或第四十八圖中位址22之輸出指令)具有一啟動函數,如S型或雙曲正切函數,而非傳遞累加器202數值。
位址17之迴圈指令會使迴圈計數器3804遞減並且在新的迴圈計數器3804數值大於零之情況下回到位址3之指令。
由此可發現,因為第四十九圖之神經網路單元121實施例中之輸出緩衝器1104之反饋與屏蔽能力,第五十一圖之非架構程式之迴圈組內的指令數相較於第四十八圖之非架構指令大致減少34%。此外,因為第四十九圖之神經網路單元121實施例中之輸出緩衝器1104之反饋與屏蔽能力,第五十一圖非架構程式之資料隨機存取記憶體122中之記憶體配置所搭配之時間步驟數大致為第四十八圖之三倍。前述改善有助於某些利用神經網路單元121執行長短期記憶胞層計算之架構程式應用,特別是針對長短期記憶胞層中之長短期記憶胞4600數 量少於或等於128之應用。
第四十七至五十一圖之實施例係假定各個時間步驟中之權重與偏移值維持不變。不過,本發明並不限於此,其他權重與偏移值隨時間步驟改變之實施例亦屬本發明之範疇,其中,權重隨機存取記憶體124並非如第四十七至五十圖所示填入單一組權重與偏移值,而是在各個時間步驟填入不同組權重與偏移值而第四十八至五十一圖之非架構程式之權重隨機存取記憶體124位址會隨之調整。
基本上,在前述第四十七至五十一圖之實施例中,權重,偏移與中間值(如C,C’數值)係儲存於權重隨機存取記憶體124,而輸入與輸出值(如X,H數值)則是儲存於資料隨機存取記憶體122。此特徵有利於資料隨機存取記憶體122為雙埠而權重隨機存取記憶體124為單埠之實施例,這是因為從非架構程式與架構程式至資料隨機存取記憶體122會有更多的流量。不過,因為權重隨機存取記憶體124較大,在本發明之另一實施例中則是互換儲存非架構與架構程式寫入數值之記憶體(即互換資料隨機存取記憶體122與權重隨機存取記憶體124)。也就是說,W,U,B,C’,tanh(C)與C數值係儲存於資料隨機存取記憶體122而X,H,I,F與O數值則是儲存於權重隨機存取記憶 體124(第四十七圖之調整後實施例);以及W,U,B,與C數值係儲存於資料隨機存取記憶體122而X與H數值則是儲存於權重隨機存取記憶體124(第五十圖之調整後實施例)。因為權重隨機存取記憶體124較大,這些實施例在一次執行中需要進行較多時間步驟。對於利用神經網路單元121執行計算之架構程式的應用而言,此特徵有利於某些能從較多之時間步驟得利之應用並且可以為單埠設計之記憶體(如權重隨機存取記憶體124)提供足夠頻寬。
第五十二圖係一方塊圖,顯示一神經網路單元121之實施例,此實施例之神經處理單元群組內具有輸出緩衝遮蔽與反饋能力,並且共享啟動函數單元1112。第五十二圖之神經網路單元121係類似於第四十七圖之神經網路單元121,並且圖中具有相同標號之元件亦相類似。不過,第四十九圖之四個啟動函數單元212在本實施例中則是由單一個共享啟動函數單元1112所取代,此單一個啟動函數單元會接收四個來自四個累加器202之輸出217並產生四個輸出至文字OUTBUF[0],OUTBUF[1],OUTBUF[2]與OUTBUF[3]。第五十二圖之神經網路單元121之運作方式類似於前文第四十九至五十一圖所述之實施例,並且其運作共享啟動函數單元1112之方式係類似於前文第十一至 十三圖所述之實施例。
第五十三圖係一方塊圖,顯示當神經網路單元121執行關聯於第四十六圖中一個具有128個長短期記憶胞4600之層級之計算時,第四十九圖之神經網路單元121之資料隨機存取記憶體122,權重隨機存取記憶體124與輸出緩衝器1104內之資料配置之另一實施例。第五十三圖之範例係類似於第五十圖之範例。不過,在第五十三圖中,Wi,Wf與Wo值係位於列0(而非如第五十圖係位於列3);Ui,Uf與Uo值係位於列1(而非如第五十圖係位於列4);Bi,Bf與Bo值係位於列2(而非如第五十圖係位於列5);C值係位於列3(而非如第五十圖係位於列6)。另外,第五十三圖之輸出緩衝器1104之內容係類似於第五十圖,不過,因為第五十四圖與第五十一圖之非架構程式之差異,第三列之內容(即I,F,O與C’數值)是在位址7之指令執行後才會出現在輸出緩衝器1104(而非如第五十圖是位址10之指令);第四列之內容(即I,F,O與C數值)是在位址10之指令執行後才會出現在輸出緩衝器1104(而非如第五十圖是位址13之指令);第五列之內容(即I,F,O與tanh(C)數值)是在位址11之指令執行後才會出現在輸出緩衝器1104(而非如第五十圖是位址14之指令);並且第六列之內容 (即H數值)是在位址13之指令執行後才會出 現在輸出緩衝器1104(而非如第五十圖是位址16之指令),詳如後述。
第五十四圖係一表格,顯示儲存於神經網路單元121之程式記憶體129之一程式,此程式係由第四十九圖之神經網路單元121執行並依據第五十三圖之配置使用資料與權重,以達成關聯於長短期記憶胞層之計算。第五十四圖之範例程式係類似於第五十一圖之程式。 更精確地說,第五十四圖與第五十一圖中,位址0至5之指令相同;第五十四圖中位址7與8之指令相同於第五十一圖中位址10與11之指令;並且第五十四圖中位址10與14之指令相同於第五十一圖中位址13與17之指令。
不過,第五十四圖中位址6之指令並不會清除累加器202(相較之下,第五十一圖中位址6之指令則會清除累加器202)。此外,第五十一圖中位址7至9之指令並不出現在第五十四圖之非架構程式內。最後,就第五十四圖中位址9之指令與第五十一圖中位址12之指令而言,除了第五十四圖中位址9之指令係讀取權重隨機存取記憶體124之列3而第五十一圖中位址12之指令則是讀取權重隨機存取記憶體之列6外,其他部分均相同。
因為第五十四圖之非架構程式與 第五十一圖之非架構程式之差異,第五十三圖之配置使用之權重隨機存取記憶體124之列數會減少三個,而程式迴圈內之指令數也會減少三個。第五十四圖之非架構程式內之迴圈組尺寸實質上只有第四十八圖之非架構程式內之迴圈組尺寸的一半,並且大致只有第五十一圖之非架構程式內之迴圈組尺寸之80%。
第五十五圖係一方塊圖,顯示本發明另一實施例之神經處理單元126之部分。更精確地說,對於第四十九圖之多個神經處理單元126中之單一個神經處理單元126而言,圖中顯示多工暫存器208與其相關聯輸入207,211與4905,以及多工暫存器208與其相關聯輸入206,711與4907。除了第四十九圖之輸入外,神經處理單元126之多工暫存器208與多工暫存器705個別接收一群組內編號(index_within_group)輸入5599。群組內編號輸入5599指出特定神經處理單元126在其神經處理單元群組4901內之編號。因此,舉例來說,以各個神經處理單元群組4901具有四個神經處理單元126之實施例為例,在各個神經處理單元群組4901內,其中一個神經處理單元126在其群組內編號輸入5599中接收數值零,其中一個神經處理單元126在其群組內編號輸入5599中接收數值一,其中一個神經處理單元126在其群組 內編號輸入5599中接收數值二,而其中一個神經處理單元126在其群組內編號輸入5599中接收數值三。換句話說,神經處理單元126所接收之群組內編號輸入5599數值就是此神經處理單元126在神經網路單元121內之編號除以J之餘數,其中J是神經處理單元群組4901內之神經處理單元126之數量。因此,舉例來說,神經處理單元73在其群組內編號輸入5599接收數值一,神經處理單元353在其群組內編號輸入5599接收數值三,而神經處理單元6在其群組內編號輸入5599接收數值二。
此外,當控制輸入213指定一預設值,在此表示為“SELF”,多工暫存器208會選擇對應於群組內編號輸入5599數值之輸出緩衝器1104輸出4905。因此,當一非架構指令以SELF之數值指定接收來自輸出緩衝器之資料(在第五十七圖位址2與7之指令中係標示為OUTBUF[SELF]),各個神經處理單元126之多工暫存器208會從輸出緩衝器1104接收其相對應文字。因此,舉例來說,當神經網路單元121執行第五十七圖中位址2與7之非架構指令,神經處理單元73之多工暫存器208會在四個輸入4905中選擇第二個(編號1)輸入以接收來自輸出緩衝器1104之文字73,神經處理單元353之多工暫存器208會在四個輸入4905中選擇第四個 (編號3)輸入以接收來自輸出緩衝器1104之文字353,而神經處理單元6之多工暫存器208會在四個輸入4905中選擇第三個(編號2)輸入以接收來自輸出緩衝器1104之文字6。雖然並未使用於第五十七圖之非架構程式,不過,非架構指令亦可利用SELF數值(OUTBUF[SELF])指定接收來自輸出緩衝器1104之資料而使控制輸入713指定預設值使各個神經處理單元126之多工暫存器705從輸出緩衝器1104接收其相對應文字。
第五十六圖係一方塊圖,顯示當神經網路單元執行關聯於第四十三圖之Jordan時間遞歸神經網路之計算並利用第五十五圖之實施例時,神經網路單元121之資料隨機存取記憶體122與權重隨機存取記憶體124內之資料配置之一範例。圖中權重隨機存取記憶體124內之權重配置係相同於第四十四圖之範例。圖中資料隨機存取記憶體122內之數值的配置係相似於第四十四圖之範例,除了在本範例中,各個時間步驟具有相對應之一對兩列記憶體以裝載輸入層節點D值與輸出層節點Y值,而非如第四十四圖之範例使用一組四列之記憶體。也就是說,在本範例中,隱藏層Z數值與內容層C數值並不寫入資料隨機存取記憶體122。而是將輸出緩衝器1104作為隱藏層Z數值與內容層C數值 之一類別草稿記憶體,詳如第五十七圖之非架構程式所述。前述OUTBUF[SELF]輸出緩衝器1104之反饋特徵,可以使非架構程式之運作更為快速(這是將對於資料隨機存取記憶體122執行之兩次寫入與兩次讀取動作,以對於輸出緩衝器1104執行之兩次寫入與兩次讀取動作來取代)並減少各個時間步驟使用之資料隨機存取記憶體122之空間,而使本實施例之資料隨機存取記憶體122所裝載之資料可用於大約兩倍於第四十四與四十五圖之實施例所具有之時間步驟,如圖中所示,即32個時間步驟。
第五十七圖係一表格,顯示儲存於神經網路單元121之程式記憶體129之一程式,此程式係由神經網路單元121執行並依據第五十六圖之配置使用資料與權重,以達成Jordan時間遞歸神經網路。第五十七圖之非架構程式類似於第四十五圖之非架構程式,其差異處如下所述。
第五十七圖之範例程式具有12個非架構指令分別位於位址0至11。位址0之初始化指令會清除累加器202並將迴圈計數器3804之數值初始化為32,使迴圈組(位址2至11之指令)執行32次。位址1之輸出指令會將累加器202(由位址0之指令所清除)之零值放入輸出緩衝器1104。由此可觀察到,在位址2至6之指令的 執行過程中,這512個神經處理單元126係作為512個相對應之隱藏層節點Z進行運作,而在位址7至10之指令的執行過程中,係作為512個相對應之輸出層節點Y進行運作。也就是說,位址2至6之指令之32次執行會計算32個相對應時間步驟之隱藏層節點Z數值,並將其放入輸出緩衝器1104供位址7至9之指令之相對應32次執行使用,以計算這32個相對應時間步驟之輸出層節點Y並將其寫入資料隨機存取記憶體122,並提供位址10之指令之相對應32次執行使用,以將這32個相對應時間步驟之內容層節點C放入輸出緩衝器1104。(放入輸出緩衝器1104中這32個時間步驟之內容層節點C並不會被使用。)在位址2與3之指令(ADD_D_ACC OUTBUF[SELF]與ADD_D_ACC ROTATE,COUNT=511)之第一次執行中,512個神經處理單元126中之各個神經處理單元126會將輸出緩衝器1104之512個內容節點C值累加至其累加器202,這些內容節點C值係由位址0至1之指令執行所產生與寫入。在位址2與3之指令之第二次執行中,這512個神經處理單元126中之各個神經處理單元126會將輸出緩衝器1104之512個內容節點C值累加至其累加器202,這些內容節點C值係由位址7至8與10之指令執行所產生與 寫入。更精確地說,位址2之指令會指示各個神經處理單元126之多工暫存器208選擇其相對應輸出緩衝器1104文字,如前所述,並將其加入累加器202;位址3之指令會指示神經處理單元126在512個文字之旋轉器內旋轉內容節點C值,此512個文字之旋轉器係由這512個神經處理單元中相連接之多工暫存器208之集體運作所構成,而使各個神經處理單元126可以將這512個內容節點C值累加至其累加器202。位址3之指令並不會清除累加器202,如此位址4與5之指令即可將輸入層節點D值(乘上其相對應權重)加上由位址2與3之指令累加出之內容層節點C值。
在位址4與5之指令(MULT-ACCUM DR ROW+2,WR ROW 0與MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之各次執行中,這512個神經處理單元126中之各個神經處理單元126會執行512次乘法運算,將資料隨機存取記憶體122中關聯於當前時間步驟之列(例如:對於時間步驟0而言即為列0,對於時間步驟1而言即為列2,依此類推,對於對於時間步驟31而言即為列62)之512個輸入節點D值,乘上權重隨機存取記憶體124之列0至511中對應於此神經處理單元126之行之權重,以產生512個乘積,而連同這位址2與3之指令對於這 512個內容節點C值執行之累加結果,一併累加至相對應神經處理單元126之累加器202以計算隱藏節點Z層數值。
在位址6之指令(OUTPUT PASSTHRU,NOP,CLR ACC)之各次執行中,這512個神經處理單元126之512個累加器202數值係傳遞並寫入輸出緩衝器1104之相對應文字,並且累加器202會被清除。
在位址7與8之指令(MULT-ACCUM OUTBUF[SELF],WR ROW 512與MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之執行過程中,這512個神經處理單元126中之各個神經處理單元126會執行512次乘法運算,將輸出緩衝器1104中之512個隱藏節點Z值(由位址2至6之指令之相對應次執行所產生並寫入),乘上權重隨機存取記憶體124之列512至1023中對應於此神經處理單元126之行之權重,以產生512個乘積累加至相對應神經處理單元126之累加器202。
在位址9之指令(OUTPUT ACTIVATION FUNCTION,DR OUT ROW+2)之各次執行中,會對於這512個累加值執行一啟動函數(如雙曲正切函數,S型函數,校正函數)以計算輸出節點Y值,此輸出節點Y值會被寫入資料隨機存取記憶體122中對應於當前時間步 驟之列(例如:對於時間步驟0而言即為列1,對於時間步驟1而言即為列3,依此類推,對於時間步驟31而言即為列63)。位址9之指令並不會清除累加器202。
在位址10之指令(OUTPUT PASSTHRU,NOP,CLR ACC)之各次執行中,位址7與8之指令累加出之512個數值會被放入輸出緩衝器1104供位址2與3之指令之下一次執行使用,並且累加器202會被清除。
位址11之迴圈指令會使迴圈計數器3804之數值遞減,而若是新的迴圈計數器3804數值仍然大於零,就指示回到位址2之指令。
如同對應於第四十四圖之章節所述,再利用第五十七圖之非架構程式執行Jordan時間遞歸神經網路之範例中,雖然會對於累加器202數值施以一啟動函數以產生輸出層節點Y值,不過,此範例係假定在施以啟動函數前,累加器202數值就傳遞至內容層節點C,而非傳遞真正的輸出層節點Y值。不過,對於將啟動函數施加於累加器202數值以產生內容層節點C之Jordan時間遞歸神經網路而言,位址10之指令將會從第五十七圖之非架構程式中移除。在本文所述之實施例中,Elman或Jordan時間遞歸神經網路具有單一個隱藏節點層(如 第四十與四十二圖),不過,需要理解的是,這些處理器100與神經網路單元121之實施例可以使用類似於本文所述之方式,有效地執行關聯於具有多個隱藏層之時間遞歸神經網路之計算。
如前文對應於第二圖之章節所述,各個神經處理單元126係作為一個人工神經網路內之神經元進行運作,而神經網路單元121內所有的神經處理單元126會以大規模平行處理之方式有效地計算此網路之一層級之神經元輸出值。此神經網路單元之平行處理方式,特別是使用神經處理單元多工暫存器集體構成之旋轉器,並非傳統上計算神經元層輸出之方式所能直覺想到。進一步來說,傳統方式通常涉及關聯於單一個神經元或是一個非常小之神經元子集合之計算(例如,使用平行算術單元執行乘法與加法計算),然後就繼續執行關聯於同一層級之下一個神經元之計算,依此類推以序列方式繼續執行,直到完成對於此層級中所有之神經元之計算。相較之下,本發明在各個時頻週期內,神經網路單元121之所有神經處理單元126(神經元)會平行執行關聯於產生所有神經元輸出所需計算中之一個小集合(例如單一個乘法與累加計算)。在大約M個時頻週期結束後-M是當前層級內連結之節點數-神經網路 單元121就會計算出所有神經元之輸出。在許多人工神經網路配置中,因為存在大量神經處理單元126,神經網路單元121就可以在M個時頻週期結束時對於整個層級之所有神經元計算其神經元輸出值。如本文所述,此計算對於所有類型之人工神經網路計算而言都具效率,這些人工神經網路包含但不限於前饋與時間遞歸神經網路,如Elman,Jordan與長短期記憶網路。 最後,雖然本文之實施例中,神經網路單元121係配置為512個神經處理單元126(例如採取寬文字配置)以執行時間遞歸神經網路之計算,不過,本發明並不限於此,將神經網路單元121配置為1024個神經處理單元126(例如採取窄文字配置)以執行時間遞歸神經網路單元之計算之實施例,以及如前述具有512與1024以外其他數量之神經處理單元126之神經網路單元121,亦屬本發明之範疇。
三維卷積神經網路
卷積神經網路(convolutional neural network)在深度學習之技術領域中越來越流行,並且在影像識別領域已經產生了令人印象深刻的成果,而在其他領域,如自然語言(natural language)處理,推薦系統(recommender system)與遊戲,卷積神經網路 也取得了可喜的成果。卷積神經網路包含至少一個卷積層,對一輸入利用濾波器(filter)執行卷積運算以產生一輸出。一般而言,一個卷積神經網路會包含一系列前述之卷積層,前一個卷積層的輸出會作為下一個卷積層的輸入,其間可能還具有一共源(pooling)層。
卷積神經網路也對動物視覺皮層(cortex)之性質的研究帶來影響,在視覺皮層中,個別神經元會對動物之眼睛視野內之一子區域所接收之光線產生反應。此子區域即為此神經元之接收區。視覺皮層內各個神經元接收區之重疊結果即構成視野。進一步來說,這些神經元可以在接收區內偵測特定形狀,例如一個特定走向的直邊或是具有特定色彩的斑點。 因為視野是由相似的神經元鋪設而成,動物的腦部會偵測特定形狀,而不去理會這個形狀在視野內的位置。此現象稱為平移不變性(translation invariance)。對於平移不變之輸入資料,許多卷積神經網路顯得特別有用,這是因為濾波器權重會關聯於整個輸入(如整個影像)。平移不變之特性使濾波器可以重複使用在整個輸入,藉此可以大幅減少相對於一個完全連結層,例如前文所稱之傳統神經網路層或是乘法累加層,所需之權重數量。在此係描述加快前述神經網路單元121中關聯於卷積神經網 路之運算效能之方法之實施例,以及其他實施例。
如前述,卷積操作是一個對於一第一矩陣利用一第二矩陣執行卷積運算之操作。 此第二矩陣即為前文所述之卷積核;不過,在以下所述之圖式中,第二矩陣通常代表一個權重,參數,元素或數值之濾波器。此外,雖然前文對應於第二十四至二十六圖所述之第一與第二矩陣為二維矩陣,以下所述之卷積操作中之第一與第二矩陣則是三維矩陣,這是因為三維卷積運作經常會使用在卷積神經網路。這也就是說,輸入會是一個三維矩陣,濾波器是三維矩陣,如第五十八圖所述。
請參照第五十八圖,圖中係顯示一方塊圖,用以描述一三維卷積運算任務,例如一卷積神經網路經常執行之三維卷積運算任務。進一步來說,圖中係對一三維輸入5802利用複數個濾波器5804執行卷積運算以產生一輸出5808。一般而言,此輸入5802具有W個欄(column),H個列(row)與C個通道(channel);一共具有F個濾波器5804,各個濾波器5804具有S個欄,R個列與C個通道(對應至輸入5802之C個通道);並且一共有F個輸出5808(對應至F個濾波器5804),且各個輸出5808具有P個欄與Q個列。前述W,H,C,F,S,R,Q與P為神經 網路單元121硬體所執行之特定神經網路之超參數(hyper-parameter)。相對應於執行神經網路之超參數的硬體而言,這些超參數會呈現動態變化,即使此硬體特性呈現為靜態(例如算術邏輯單元的數量,記憶體寬度),神經網路單元121所執行之不同神經網路中之超參數亦可能不同。舉例來說,某一個神經網路會是設計來執行影像辨識,不過,另一個神經網路則會是設計來下圍棋。此外,即便同為影像辨識/下圍棋的網路,各個網路亦可能具有不同之超參數,這些超參數包含層數,層維度(layer dimension)(節點與連結數)以及層類型(例如完全連結層,卷積層,共源層,長短期記憶層)。
舉例來說,輸入5802可包含W=12個欄,H=12個列,以及C=20個通道;一共有50個濾波器5804,各個濾波器5804具有S=5個欄以及R=5個列;一共有50個輸出5808,各個輸出具有P=8個欄與Q=8個列,這些數據是一個習知神經網路之卷積層所具有之輸入,濾波器與輸出之超參數,此神經網路是設計來區分手寫數字,例如可利用習知之MNIST資料庫進行訓練,也就是卷積神經網路LeNet 5(參見LeCun,Y.,Bottou,L.,Bengio,Y.,and Haffner,P.(1998),Gradient-based learning applied to document recognition,Proceedings of the IEEE,86(11),2278-2324)之一變形。以下第五十九至六十九圖係描述神經網路單元121執行卷積運算以將一個12x12x20之輸入5802利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出5808之方法之多個實施例,說明一個更為普遍之方法,以將三維輸入利用三維濾波器進行卷積運算以產生輸出,此方法係由一神經網路單元121執行,特別是具有神經處理單元126之陣列,而這些神經處理單元126具有多工暫存器(例如多工暫存器208),用以提供將接收自資料隨機存取記憶體122之一輸入資料列沿著神經處理單元126之陣列進行旋轉之能力,如本文所述。不過,此操作仍有一普遍的問題尚待解決,如第五十八圖所述,亦即將一個WxHxC之輸入5802利用F個SxRxC之濾波器5804執行卷積運算以產生F個PxQ之輸出5808之數學問題。更具體來說,以下將會說明將一個WxHxC之輸入5802利用單一個SxRxC之濾波器5804執行卷積運算以產生單一個PxQ之輸出5808之計算。
在第二十四至二十六圖之描述內容中,卷積是九個3x3之卷積核元素與其相對應子矩陣元素之乘積的加總。類似地,在第五十八圖之描述內容中,卷積則是SxRxC濾波器 5804元素與輸入5802中其相對應SxRxC子矩陣元素之SxRxC乘積的加總。加總之結果,或稱卷積,會是輸出5808之其中一個PxQ值。進一步說,假定濾波器5804之S個欄與R個列之索引值是從零開始,所產生的卷積結果就會是位於輸出5808之位置[s,r],其中,s與r是進行卷積運算之輸出5802之SxRxC子矩陣之左上方元素的欄索引與列索引。如此,舉例來說,以Y[s,r]標示為輸出5808之元素,X[I,j,k]標示為輸入5802之元素,F[m,n,k]標示為濾波器5804之元素,其中,i與j是輸入5802之欄索引與列索引,m與n是濾波器5804之欄索引與列索引,k則是通道索引,如此: Y[s,r]=X[s,r,0]*F[0,0,0]+X[s+1,r,0]*F[1,0,0]+...X[s+S-1,r,0]*F[S-1,0,0]+X[s,r+1,0]*F[0,1,0]+X[s+1 r+1,0]*F[1,1,0]+...X[s+S-1,r+1,0]*F[S-1,1,0]+...X[s,r+R-1,0]*F[0,R-1,0]+X[s+1,r+R-1,0]*F[1,R-1,0]+... X[s+S-1,r+R-1,0]*F[S-1,R-1,0]+X[s,r,1]*F[0,0,1]+X[s+1,r,1]*F[1,0,1]+...X[s+S-1,r,1]*F[S-1,0,1]+X[s,r+1,1]*F[0,1,1]+X[s+1,r+1,1]*F[1,1,1]+...X[s+S-1,r+1,1]*F[S-1,1,1]+...X[s,r+R-1,1]*F[0,R-1,1]+X[s+1,r+R-1,1]*F[1,R-1,1]+...X[s+S-1,r+R-1,1]*F[S-1,R-1,1]+X[s,r,C-1]*F[0,0,C-1]+X[s+1,r,C-1]*F[1,0,C-1]+...X[s+S-1,r,C-1]*F[S-1,0,C-1]+X[s,r+1,C-1]*F[0,1,C-1]+X[s+1,r+1,C-1]*F[1,1,C-1]+...X[s+S-1,r+1,C-1]*F[S-1,1,C-1]+...X[s,r+R-1,C-1]*F[0,R-1,C-1]+X[s+1,r+R-1,C-1]*F[1,R-1,C-1]+...X[s+S-1,r+R-1,C-1]*F[S-1,R-1,C-1]. 等式(7) 因此,舉例來說,當S=R=5而C=20,輸出5808之各個PxQ值就會是5x5x200=500乘積之加總。
前文假定不對輸入5802邊框(border)進行填補(padding around),此操作通常稱為“有效(valid)”卷積(相對於“同尺寸(same size)”卷積)。如此,輸出5808之尺寸就會小於輸入5802之欄與列的尺寸。更具體來說,就是P=W-S+1,且Q=H-R+1。在同尺寸卷積之情況下則會進行填補(例如補0),使輸出5808的尺寸相同於輸入5802之欄與列的尺寸,即P=W且Q=H。
現在請參照第五十九圖,圖中顯示一方塊圖,描述將一資料隨機存取記憶體122列分割為多個輸入方塊5902,將一權重隨機存取記憶體124列分割為多個濾波器方塊5904,將神經處理單元陣列126分割為多個神經處理單元方塊5906,以及將一資料隨機存取記憶體122列分割為多個輸出方塊5908。在第五十九圖之實施例中,神經網路單元121內之神經處理單元126的數量係設定為N,相對應地,從資料隨機存取記憶體122列所接收之文字數為N,並且,從權重隨機存取記憶體124列所接收之文字數 也會是N。如圖中所示,前述N個神經處理單元126以及從資料隨機存取記憶體122/權重隨機存取記憶體124接收之N個文字則是設定為0至N-1。
如圖中所示,方塊5902/5904/5906/5908的數量係設定為G,而G個方塊則是設定為0至G-1。G是N與B計算出之商數(quotient)。B是方塊尺寸。B是N之因數中,至少與W一樣大之最小者,W則是第五十八圖之輸入5802之欄數。舉例來說,若是N為1024且W為12,B就會是16,這是因為16是1024之因數中,大於12之最小者,而G=1024/16=64。
如第五十九圖所示,資料隨機存取記憶體122列/權重隨機存取記憶體124列之N個文字係指定為G個方塊之第一個方塊中之0,1,2直到B-1;G個方塊之第二個方塊中之B,B+1直到2B-1;依此類推,直到方塊G-1中之N-B,N-B+1直到N-1。這些不同標號的方塊係互相對應。也就是說,神經處理單元方塊0會從資料隨機存取記憶體122接收輸入方塊0與從權重隨機存取記憶體124接收濾波器方塊0,並產生輸出方塊0;神經處理單元方塊1會從資料隨機存取記憶體122接收輸入方塊1與從權重隨機存取記憶體124接收濾波器方塊1,並產生輸出方塊1;依此類推,神經處理單元方塊N-1會從資料隨 機存取記憶體122接收輸入方塊N-1與從權重隨機存取記憶體124接收濾波器方塊N-1,並產生輸出方塊N-1。神經處理單元方塊5906內個別神經處理單元126之輸出方塊5908所產生的結果會在後續章節說明。
將神經處理單元126陣列,資料隨機存取記憶體122列,權重隨機存取記憶體124列,與資料隨機存取記憶體122列分割為相對應之G個神經處理單元方塊5906,輸入方塊5902,濾波器方塊5904,與輸出方塊5908,而各個方塊的尺寸為B,以利於神經網路單元121有效率地對輸入5802利用濾波器5804執行卷積以產生輸出5808。特別是,此分割操作,搭配資料隨機存取記憶體122與權重隨機存取記憶體124內之內之輸入資料與濾波器權重之配置,可幫助一特殊巢狀迴圈結構(nested loop structure),利用神經網路單元121之旋轉器多工暫存器208結構,將關聯於輸入5802之C個通道之所有輸入方塊5902進行旋轉,如此,G個神經處理單元方塊5906中關聯於F個濾波器5804之F個神經處理單元方塊5906中的每一個就可以“看見”(即接收)輸入5802中用來與其相對應濾波器5804進行卷積之所有C個通道。進一步來說,神經網路單元121會將資料隨機存取記憶體122列之輸入方塊5902讀入多工暫存 器208,然後,利用由這些多工暫存器208構成之旋轉器,將輸入方塊5902至少C個鄰接神經處理單元方塊5906的距離。如此,在將另一個輸入5802列讀入多工暫存器208之前,各個神經處理單元126即可執行其相對應濾波器5804列之所有通道與輸入5802列之所有通道之乘法累加操作(例如,執行如以下第六十圖所示之欄-通道-加總操作),這部分在第六十圖之虛擬程式碼會有更詳細的描述。相較於一個透過檢驗前述等式(7)所能使用之更為直觀的卷積操作方法,神經網路單元121的使用具有其獨特性與效率。
從前文中可以觀察到,雖然N是靜態,B,因而還有G,則是呈現動態,這是因為他們並不僅只是N的函數,還是W的函數,而W是由神經網路單元121執行之特定神經網路之超參數。G與B的值會併入執行於神經網路單元121之非架構程式以執行此卷積操作,詳如後述。
現在請參照第六十圖,圖中顯示一虛擬程式碼(pseudocode),描述一非架構程式在神經網路單元上執行如第五十八圖所示之三維卷積任務時,所執行之運算。所列出之虛擬程式碼包含有列號以利說明。在第六十圖中,列號始於2,並且省略列號4,16,18,21-22與25。 如此可以更容易將第六十圖之虛擬程式碼與第六十三,六十七與六十九圖中之程式碼相比較,因為虛擬程式碼之類似指令會具有相對應的列號。值得注意的是,第六十七與六十九圖中亦省略列18與22,不過,列1至26全部都包含在第六十三與六十五圖中。
在檢驗第六十圖之虛擬程式碼時,需注意的是,相同指令或操作會由神經網路單元121之所有神經處理單元126同時執行,如前文第一至四十八圖所述。因此,雖然第六十圖之部分區域之描述會對應至單一個神經處理單元126,此神經處理單元係作為一卷積神經網路層之單一個神經元以產生輸出5808之單一個元素或卷積結果,需要理解的是,所有的神經處理單元126係同時依據第六十圖之虛擬程式碼運作以產生結果。不過,需要注意到在許多情況下,受到卷積神經網路層之超參數的影響,神經處理單元方塊5906中之某些神經處理單元126可能會產生不被使用的結果。此外,雖然一給定輸出方塊5908內之一輸出5808之Q個列之其中之一之P個卷積結果會打包在一起,位於輸出方塊5908邊框可能會有某些結果不被使用。因此,在資料隨機存取記憶體122(或權重隨機存取記憶體124)中寫入N個結果之列內(如第六十圖之列24),所有FxP個卷積結果通 常都不會打包在一起。較佳地,另一個非架構程式(或是同一個架構程式之額外部分)會將未打包之卷積結果集合在一起以輸入神經網路之下一層。最後,依據資料隨機存取記憶體122內之輸出5802配置以及權重隨機存取記憶體124內之濾波器5804配置的內容,可以對第六十圖有更充分地理解,關於此配置有四個實施例描述於後續章節第六十一至六十九圖。
虛擬程式碼包含四個巢狀迴圈,表示為迴圈1,迴圈2,迴圈3與迴圈4。迴圈1是外側迴圈而迴圈4是內側迴圈。迴圈1對於輸出5808之Q個輸出列中之各個輸出列會重複執行。迴圈2對於濾波器5804之R個濾波器列中之各個濾波器列會重複執行。迴圈3至少對於輸入5802之C個通道中之各個通道會重複執行。以下對此有更詳細的說明,除了C通道外,如果存在間隙輸入方塊群組(gap input block group),迴圈3也會依據間隙輸入方塊群組(例如第六十一B圖之元件6103)之數量重複執行。迴圈4會對於濾波器5804之S個濾波器欄中之各個濾波器欄會重複執行。透過將一個S個欄,R個列與C個通道之濾波器在空間上具體化排列於輸入5802空間內一個具有相對應尺寸之部分,可以在後續章節會對這四個迴圈有更一般化的理解與更詳細的說明。非架構程式可透 過迴圈(LOOP)指令之使用,搭配一個初始化(INITIALIZE)指令,例如第二十六A,二十八,四十二,四十五,四十八,五十一,五十四或五十七圖之INITIALIZE與LOOP指令,來達成前述迴圈操作。迴圈1可透過將LOOPCNT指派為Q來達成。較佳地,三個外部迴圈(迴圈1,2與3)可透過INITIZLIZE與LOOP指令之使用來達成;不過,內部迴圈(迴圈4)則可利用關聯於乘法累加指令之計數(COUNT)值來達成,例如第四,九,二十,四十二,四十五或五十七圖之MULT-ACCUM指令。
依據迴圈4,此迴圈係一內側迴圈,各個神經處理單元126會將其相對應濾波器5804列之S個權重與S個被覆蓋之濾波器5804元素產生之S個乘積之加總累加至其累加器202,此加總在此係稱為欄加總。依據迴圈3,迴圈4會對於C個通道中之第一通道,將第一欄加總累加至累加器202,隨後對於第二通道,將第二欄加總連同第一欄加總累加至累加器202,依此類推,直到將對應於濾波器5804之全部C個通道之C個欄加總都累加至累加器202。 在相同情況下,因為超參數之不同,迴圈3可能會將關聯於建議輸入方塊群組6103與間隙濾波器方塊群組6104(請參照第六十一圖)之額外零值欄加總累加至累加器202。(依據此濾波器 之神經處理單元方塊5906在神經處理單元方塊5906中的位置,特別是此濾波器之神經處理單元方塊5906索引模除(modulo)通道數量C之計算結果,對應於各個濾波器之通道處理順序亦會不同,詳如後述。)因此,在完成一次迴圈3之操作時,神經網路單元121就會完成對於濾波器5804之一個水平二維部分(slice)與輸入5802中被覆蓋之相對應二維水平部分產生之SxC個乘積之加總的累加運算,此加總在此稱為欄通道加總。依據迴圈2,迴圈3會對於濾波器5804之列0,將第一欄通道加總累加至累加器202,隨後對於濾波器5804之列1,將第二欄通道加總累加至累加器202,依此類推,直到將對應於濾波器5804之全部R個列之R個欄通道加總都累加至累加器202。因此,在完成一次迴圈2之操作時,神經網路單元121就會完成對於濾波器5804與輸入5802中被覆蓋之相對應空間所產生之SxCxR個乘積之加總的累加運算,此加總在此稱為欄通道列加總,而此加總即為輸出5806之Q個列中單一個列之最終卷積結果。在迴圈2結束時,神經處理單元126會將F個欄通道列加總寫入資料隨機存取記憶體122之一列。如此可以發現,欄通道列加總是以欄-通道-列之順序進行計算,而非如傳統方式是以欄-列-通道之順序計算。如此處理之優點在於可以有效利用 神經網路單元121內寬度N之多工暫存器208旋轉器。依據迴圈1,迴圈2會對於輸出5806之列0,將第一欄通道列加總累加至累加器202,隨後對於輸入5806之列1,將第二欄通道列加總進行累加,依此類推,直到對於輸出5806之全部Q個列都產生並輸出欄通道列加總至資料隨機存取記憶體122。
第六十圖之非架構程式將會由外而內進行描述以協助理解,即從外部迴圈朝內部迴圈進行,因此,迴圈4,即位於最內側的迴圈,將會首先進行說明。
迴圈4會使各個神經處理單元126之乘法器242執行S個乘法運算以產生S個乘積。各個乘積產生後,就會累加至累加器202。 因此,在完成迴圈4之操作後,累加器202所裝載之中間加總將會比迴圈4開始前再增加S個乘積,亦即裝載另一個欄加總。對於各個神經處理單元126而言,迴圈4之S個乘法運算中之每一個乘法運算都會將輸入5802中位於W個欄中之相對應欄與C個通道中之一個通道與H個列中之一個列之元素作為一第一運算元。在W個欄中,]此欄是依據所執行之迴圈4是第幾次執行以及神經處理單元126在神經處理單元方塊5906內之位置而定。在C個通道(如果存在的話,也包含間隙輸入方塊群組數)中,此通 道是依據所執行之迴圈3是第幾次執行以及包含此神經處理單元126之神經處理單元方塊5906之位置而定。在H個列中,此列是依據所執行之迴圈1是第幾次執行以及所執行之迴圈2是第幾次執行之綜合判斷而定。此第一運算元,即輸入5802之一元素,不是從資料隨機存取記憶體122讀入多工暫存器208(例如第六十圖之列8),就是從相鄰之神經處理單元126轉動至多工暫存器208(例如第六十圖之列15或列19)。S個乘法運算中之每一個乘法運算都會將一濾波器5804中位於S個欄中之相對應欄與C個通道中之一個通道與R個列中之一個列之權重作為一第二運算元,此濾波器5804係關聯於濾波器方塊5904,而此濾波器方塊5904係對應於包含此神經處理單元126之神經處理單元方塊5906。在S個欄中,此欄是依據所執行之迴圈4是第幾次執行而定。在C個通道(如果存在的話,也包含間隙輸入方塊群組數)中,此通道是依據所執行之迴圈3是第幾次執行以及包含此神經處理單元126之神經處理單元方塊5906之位置而定。在R個列中,此列是依據所執行之迴圈2是第幾次執行而定。此第二運算元,即權重,是從權重隨機存取記憶體124讀入暫存器205(或多工暫存器705)(例如第六十圖之列13)。
就一實施例而言,一次迴圈4之操作,可利用單一個MULT-ACCUM/execute非架構指令達成,此非架構指令會指定計數值為S,指定將多工暫存器208之輸入211(即由相鄰神經處理單元126之多工暫存器208旋轉取得之輸入5802文字元素)作為第一乘法器242輸入,並且指定從權重隨機存取記憶體124將一權重文字讀入暫存器205作為第二乘法器242輸入。另外,此非架構程式亦可包含一對MULT-ACCUM/execute非架構指令來完成迴圈4之一次操作。舉例來說,第一個或更多指令係指定一計數值為1,指定將多工暫存器208之輸入211-2,211-4,與/或211-8(即由相鄰神經處理單元126之多工暫存器208旋轉二個,四個,與/或八個文字距離,分別取得之輸入5802文字元素,以達成多文字旋轉,詳見第七十與七十一圖之多文字距離旋轉操作)作為第一乘法器242輸入,並且指定從權重隨機存取記憶體124將一權重文字讀入暫存器205作為第二乘法器242輸入。第二指令會指定一計數值為S減一,指定多工暫存器208之輸入211為第一乘法器242輸入,並且指定將一文字從權重隨機存取記憶體124讀入暫存器205作為第二乘法器242輸入。透過指定一個大於一之旋轉,第一指令可以對於迴圈3之第一次執行以外之所有執行,有 效地達成第六十圖之列19所描述之方塊對準(block alignment)操作。接下來會說明外側迴圈。
迴圈1之每一次執行都會清除N個神經處理單元126之N個累加器202。此非架構程式可利用一個INITIALIZE指令或一個“execute”指令來清除累加器,如前所述(例如第四圖之相關內容)。迴圈1之每一次執行後就會執行迴圈2來將結果累加至N個累加器202。 最後,迴圈1之每一次執行會將迴圈2產生之欄通道列加總從N個累加器202寫入資料隨機存取記憶體122之列(或是選擇寫入權重隨機存取記憶體124之列)。在完成迴圈2操作後,累加器202內儲存之欄通道列加總會包含算術上等同於前述等式(7)之卷積。儲存於累加器202內之卷積欄通道列加總會是F個輸出5808之Q個列中之一列。進一步來說,G個神經處理單元方塊5906中之F個會產生F個相對應之輸出方塊5908;並且,對於這F個輸出5808中之一相對應輸出5808,這F個輸出方塊5908之每一個會包含此相對應輸出5808之Q個列中之一列。在F小於G之情況下,G-F個神經處理單元方塊5906之累加器202結果不被使用。在Q個列中,這一列之P個卷積欄通道列加總係從相關聯神經處理單元方塊5906之B個神經處理單元126之累 加器202之一子集合提供,而其他累加器202則不被使用。迴圈1之每一次執行會在輸出5808之Q個列中產生不同列,而F個神經處理單元方塊5906中之每一個,會在G個輸出方塊5908中對應於F個神經處理單元方塊5906之F個輸出方塊5908中,相對應之輸出方塊5908之F個輸出5808中產生不同輸出。
累加器202之有效/已使用之子集合,係特別依據之方塊尺寸B與輸入欄W之數量之差異,如果有的話,以及所產生的是“有效”或“同尺寸”卷積輸出而定。在W等於B且需要進行同尺寸卷積的情況下,此子集合會包含神經處理單元方塊5906之全部B個累加器202,在此情況下,P也會等於B跟W。累加器202之子集合在後續第六十二圖之實施例會有更詳細的說明;不過,需要注意的是,輸出5808之每一個個別的元素或卷積欄通道列加總,都是由單一個神經處理單元126產生於其累加器202內。
此外,較佳地,個別的卷積欄通道列加總係完整產生於神經處理單元126之累加器202內,而不會將任何中間過程之部分加總寫入資料隨機存取記憶體122(或權重隨機存取記憶體124)隨後再將它們讀回。如此處理的優點在於,可以避免減損卷積欄通道列加總之準確度。如前述,較佳地,累加器202之寬度係明顯 大於來自與/或寫入資料隨機存取記憶體122與/或權重隨機存取記憶體124之個別文字輸入之寬度。較佳地,累加器202值在被寫入資料隨機存取記憶體122前,會被轉換,填滿(saturate)與/或壓縮至資料隨機存取記憶體122/權重隨機存取記憶體124之文字尺寸。舉例來說,如前所述,28個位元之累加器202值,可以在寫入資料隨機存取記憶體122前,被轉換,填滿與/或壓縮至8位元文字,例如第三十至三十三圖所示。
迴圈2之每一次執行會將來自資料隨機存取記憶體122之一列讀入N個多工暫存器208內。進一步來說,G個神經處理單元方塊5906會將資料隨機存取記憶體122列分割出之G個輸入方塊5902中之相對應輸入方塊5902讀入其多工暫存器208。透過多工暫存器208旋轉器之使用,迴圈3會使前述G個輸入方塊5902沿著神經網路單元121旋轉至不同的神經處理單元方塊5906。非架構程式可以利用如前述之一個MULT-ACCUM指令或是一個“execute”指令,將資料隨機存取記憶體122列讀入多工暫存器208。此MULTACCUM/execute指令亦可以指定從權重隨機存取記憶體124讀取一列,詳如迴圈4所述。在讀取資料隨機存取記憶體122列之後,迴圈2之每一次執行後就會執行迴圈3。
迴圈3之每一次執行會執行迴圈4,隨後旋轉多工暫存器208而使輸入方塊5902對準下一個相鄰的神經處理單元方塊5906。此處理方式之優點在於可以使各個神經處理單元126方塊對於C個通道中之不同通道再累加另一個欄加總,亦即,對於關聯於現在旋轉而對準於神經處理單元方塊5906之輸入方塊5902的通道。較佳地,在完成迴圈4後,多工暫存器208內之輸入方塊5902將會轉動S個文字,詳如後述。如此,為了使輸入方塊5902對準於下一個相鄰神經處理單元方塊5906,較佳地,非架構程式將會使多工暫存器208旋轉B減S個文字。 不過,依據非架構程式之執行,特別是迴圈4,此旋轉對準之操作可能需要將多工暫存器208旋轉B減S加一個文字。此非架構程式可以利用如前述之一個或多個MULT-ACCUM指令或“execute”指令旋轉多工暫存器208,使輸入方塊5902對準於下一個相鄰神經處理單元方塊5906。此一個或多個非架構指令可包含一多文字距離旋轉操作,如後續第七十與七十一圖所述。因而由此可以發現,每一次迴圈2之執行會產生F個欄通道列加總,或卷積,並將其寫入資料隨機存取記憶體122之一列。
雖然此處描述之實施例所執行的是“有效”卷積,不過,其他實施例如使用“同尺 寸”卷積之實施例亦可用於本發明。有效卷積與同尺寸卷積之差異在於,輸入5802之邊緣處理方式的不同,進而會影響輸出5808尺寸。有效卷積所產生之輸出5808之列與欄的數量會少於輸入5802之列與欄的數量;反之,同尺寸卷積所產生之輸出5808之列與欄的數量則會等同於輸入5802之列與欄的數量。舉例來說,對12x12之輸出,利用5x5之濾波器執行一有效卷積操作會產生8x8之輸出;反之,對12x12之輸出利用5x5之濾波器執行同尺寸卷積操作則會產生12x12之輸出。為了完成此操作,有效卷積運算只會對輸入中真正存在的數值執行乘法累加運算,也就是對“有效”數值執行運算;反之,同尺寸卷積運算必須在輸入中取得4列與4欄並未真正存在的數值,也就是“不存在的(invalid)”數值。同尺寸卷積運算必須取得某些不存在的數值(例如通常為零),這是因為在5x5之濾波器掃過12x12之輸入時,在輸入之右側邊緣(或是左側邊緣或是二者之組合)將處會有4個列不具有相對應之輸入5802元素供進行乘法運算。
現在請參照第六十一A與六十一B圖,整體稱為第六十一圖,圖中顯示係一方塊圖,描述本發明對一12x12x20之輸入5802,利用50個5x5之濾波器5804執行卷積運算,以產生50個8x8之輸出5808之一實施例中,資料隨機存 取記憶體122內之輸入方塊5902群組之配置6101以及權重隨機存取記憶體124內之濾波器方塊5904群組之配置6102。第六十一圖之範例係假定神經網路單元121具有1024個神經處理單元126;亦即,N=1024(請參照第五十九圖)。 如此,因為超參數W=12,B就會是16,也就是N之因數中,至少與W一樣大之因數中之最小者;並且,因為B=16,G=1024/16=64。因此,一共有64個神經處理單元方塊5906,每個資料隨機存取記憶體122列會有64個輸入方塊5902,並且,每個權重隨機存取記憶體124列會有64個濾波器方塊5904。第六十一圖所顯示之輸入方塊索引是從零開始標示為0至63,濾波器方塊索引為0至63對應至神經處理單元索引0至63,如前文第五十九圖所述。也就是說,各個索引為0之輸入方塊5902與濾波器方塊5904會由索引為0之神經處理單元方塊5906接收;各個索引為1之輸入方塊5902與濾波器方塊5904會由索引為1之神經處理單元方塊5906接收;依此類推,各個索引為63之輸入方塊5902與濾波器方塊5904則會由索引為63之神經處理單元方塊5906接收;在第六十一圖之實施例中,索引為0之輸入方塊係包含資料隨機存取記憶體122之文字0-15;索引為1之輸入方塊係包含資料隨機存取記憶體122之文字16-31;依此類推,索引 為63之輸入方塊則是包含資料隨機存取記憶體122之文字1008-1023。類似地,索引為0之濾波器方塊係包含權重隨機存取記憶體124之文字0-15;索引為1之濾波器方塊係包含權重隨機存取記憶體124之文字16-31;依此類推,索引為63之濾波器方塊則會包含權重隨機存取記憶體124之文字1008-1023。
在第六十一圖中顯示有64個輸入方塊群組。其中六十個輸入方塊群組位於輸入方塊索引0至59,這些輸入方塊群組一般性地表示為I[c],其中c代表C=20個通道中其中一個通道索引。這20個關聯於C=20個通道之輸入方塊群組,即I[0]至I[19],之三種操作,或複本,會鋪排於輸入方塊索引0至59,詳如後述。另外四個輸入方塊群組,稱為間隙輸入方塊群組6103,表示為I[G],則是位於輸入方塊索引60至63。較佳地,這些間隙輸入方塊群組6103會包含零值。一個輸入方塊群組I[c]會是一個H個輸入方塊5902之群組,這H個輸入方塊5902是位於資料隨機存取記憶體122之不同之H個列,並且全部都位於相同輸入/濾波器/神經處理單元方塊索引之資料隨機存取記憶體122內。因此,一個輸入方塊群組之所有輸入方塊5902都會提供至同一個神經處理單元方塊5906。此外,每個輸入方塊群組I[c]會為輸入 5802之一通道c裝載HxW個縱向部分元素,或如下所述,在間隙輸入方塊群組6103之情況下,則是裝載零。進一步來說,輸入方塊群組I[c]之H個輸入方塊5902中之各個輸入方塊5902會裝載輸入5802之通道c之HxW個縱向部分中一相對應元素列。
在第六十一圖之內容中,輸入方塊群組I[c]是一個12個輸入方塊5902之群組,這12個輸入方塊5902是位於資料隨機存取記憶體122之不同的12個列。(在第六十一圖之實施例中,這12個列係於資料隨機存取記憶體122內彼此相鄰,即位於列0-11;不過,這些列亦可彼此不相鄰,而非架構程式可經調整,對於這些資料方塊5902坐落之資料隨機存取記憶體122列,賦予其位址。)因此,各個輸入方塊群組具有192個資料隨機存取記憶體122之文字,即每個輸入方塊16個文字x12列=192個文字。不過,各個輸入方塊5902只會裝載輸入5802之相對列h與通道c之W=12個元素,輸入5802之剩餘文字,即B-W=16-12=4個文字,則不會被使用(在一實施例中,這些文字會補零),如第六十二圖所示。進一步來說,各個輸入方塊群組I[c]會為輸入5802之通道c,裝載一個12x12之縱向部分之元素(如第六十二圖之元件6215所示),或是在輸入方塊群組為間隙輸入方塊群組6103 之情況下,裝載零值,第六十一圖之輸入方塊群組I[c]之12個輸入方塊5902中之每一個輸入方塊5902會裝載輸入5802之通道c中12x12之縱向部分6215之元素之一相對應列。輸入方塊群組I[c]在對應於第六十二圖處會有更詳細的說明。第六十一與六十二圖之範例顯示資料隨機存取記憶體122中儲存於列0至11之輸入方塊群組,不過,這些輸入方塊群組亦可儲存在其他列中。也就是說,雖然第六十一圖中,裝載輸入方塊群組I[c]之資料隨機存取記憶體122列之列號會對應至輸入5802之列號,此為偶然狀態,其他資料隨機存取記憶體122列亦可儲存輸入方塊群組,並且如前述,在某些實施例中,這些資料隨機存取記憶體122列並不需要彼此相鄰。
在第六十一圖之範例中,資料隨機存取記憶體122裝載64個輸入方塊群組,各個輸入方塊群組具有12個輸入方塊5902,而總共有768個輸入方塊5902在第六十一圖之範例用於對12x12x20之輸入5802,利用50個5x5x20之濾波器5804進行卷積操作以產生50個8x8之輸出5806。不過,因為一共有64個輸入方塊索引,而只有20個通道,這20個通道會重複三次鋪設於在輸入方塊索引0至59,而輸入方塊索引60至63之輸入方塊群組則會裝載零值,而非來自 輸入5802之元素。也就是說,如圖中所示,輸入方塊群組I[0]係位於輸入方塊索引0,輸入方塊群組I[1]係位於輸入方塊索引1,依此類推,輸入方塊群組I[19]係位於輸入方塊索引19;隨後會重複此模組,亦即,輸入方塊群組I[0]係位於輸入方塊索引20,輸入方塊群組I[1]係位於輸入方塊索引21,依此類推,輸入方塊群組I[19]係位於輸入方塊索引39;隨後,此模組會再重複一次,亦即,輸入方塊群組I[0]係位於輸入方塊索引40,輸入方塊群組I[1]係位於輸入方塊索引41,依此類推,輸入方塊群組I[19]係位於輸入方塊索引59;而位於輸入方塊索引60至63之間隙輸入方塊群組6103則是填入零值,如此所產生之欄加總即為零,而當這些欄加總累加至累加器202時,就不會對於最終的欄通道列加總結果有任何影響。
因為超參數的出現,會需要間隙輸入方塊群組6103與間隙濾波器方塊群組6104,以利於利用包含N個多工暫存器208之旋轉器將輸入方塊5902沿著神經網路單元121進行旋轉,詳如後述。
第六十一圖顯示64x24=1536個濾波器方塊群組,一般性地表示為F[f,c],其中,f代表F個濾波器5804中其中一個濾波器,c代表C=20個通道中之一通道索引,或是表示為 F[G],即代表間隙濾波器方塊群組6104。較佳地,間隙濾波器方塊群組6104會包含零值。間隙濾波器方塊群組F[G]係用以與間隙輸入方塊群組I[G]進行卷積運算。濾波器方塊群組F[f,c]是一個RxS個濾波器方塊5904之群組,這些濾波器方塊5904係位於權重隨機存取記憶體124之RxS個不同列,並且都位於相同輸入/濾波器/神經處理單元方塊索引之權重隨機存取記憶體124內。因此,濾波器f之全部濾波器方塊群組之全部濾波器方塊5904會提供至同一個神經處理單元方塊5906。此外,各個濾波器方塊群組F[f,c]會為一個濾波器5804,即濾波器f,之一通道c,裝載一個RxS縱向部分之權重,(請參照第六十二圖之元件6209),或是在間隙濾波器方塊群組F[G]之情況下,裝載零值。進一步來說,濾波器方塊群組F[f,c]之RxS個濾波器方塊5904中之每一個濾波器方塊5904會裝載濾波器5804,即濾波器f,之通道c中,RxS縱向部分之P個不同權重之複本,這部分在對應於第六十二圖處會有更詳細的說明。
在第六十一圖之內容中,濾波器方塊群組F[f,c]是一個由25個位於權重隨機存取記憶體124之25個不同列之濾波器方塊5904構成之群組。(在第六十一圖之實施例中,這25個列係於權重隨機存取記憶體內彼此相鄰,即 位於列0-24,25-49等;不過,這些列亦可彼此不相鄰,而非架構程式可經調整,對於這些濾波器方塊5904坐落之權重隨機存取記憶體124列,賦予其位址。第六十六與六十八圖即描述濾波器方塊群組與其中之濾波器方塊5904之不同配置的實施例。)因此,第六十一圖中每個濾波器方塊群組F[f,c]具有400個權重隨機存取記憶體124之文字,即每個濾波器方塊具有16個文字x25個濾波器方塊=400個文字。不過,每個濾波器方塊只能裝載濾波器5804,即濾波器f,之一相對應欄s,一相對應列r與一通道c之權重的P=8個複本,濾波器方塊5904中剩餘的B-P=16-8=8個文字則不被使用(在一實施例中,這些文字為零值),如第六十二圖所示。進一步來說,各個濾波器方塊群組F[f,c]會為濾波器5804,即濾波器f,之一通道c,裝載一5x5縱向部分之權重,而在間隙濾波器方塊群組6104之情況下,則裝載零值。進一步來說,濾波器方塊群組F[f,c]之25個濾波器方塊中之各個濾波器方塊5904會裝載濾波器5804,即濾波器f,之通道c中5x5縱向部分之8個不同權重之複本,這部分在第六十二圖處會有更詳細的說明。
在第六十一圖之範例中,權重隨機存取記憶體124裝載64x24=1536個濾波器方塊 群組,各個濾波器方塊群組具有25個濾波器方塊5904,而總共有38400個濾波器方塊5904在第六十一圖之範例用於對12x12x20之輸入5802,利用50個5x5x20之濾波器5804進行卷積操作以產生50個8x8之輸出5806。不過,因為只具有50個濾波器5804,64-50=14個神經處理單元方塊5906所產生之卷積不會被使用;因此,如圖中所示,濾波器方塊索引50至63之濾波器方塊群組則是包含無所謂(don’t care)的數值。如圖中所示,濾波器方塊群組F[0,0]至F[0,19]與四個間隙濾波器方塊群組F[G]係位於濾波器索引0,濾波器方塊群組F[1,0]至F[1,19]與四個間隙濾波器方塊群組F[G]係位於濾波器索引1,依此類推,濾波器方塊群組F[49,0]至F[49,19]與四個間隙濾波器方塊群組F[G]係位於濾波器索引49;而位於濾波器索引50至63之濾波器方塊群組則是無所謂的數值。
如前述,此巢狀迴圈結構之優點在於,可利用神經網路單元121之旋轉器多工暫存器208,旋轉對應於輸入5802之所有C個通道之輸入方塊5902,如此可使G個神經處理單元方塊5906中關聯於F個濾波器5804之F個神經處理單元方塊5906中之每一個神經處理單元方塊5906,都能看見輸入5802之所有C個通道以利用其相對應濾波器5804進行卷積運算。不過, 方塊數量,即G=64,並不整除於通道數量,即C=20,之實際情況,會需要產生間隙輸入方塊群組I[G],並且需要在20次對應於20個通道之操作外,額外重複4次非架構程式之迴圈3之操作(64%20=4,即間隙輸入方塊群組I[G]之數量)。進一步來說,假定旋轉方向向右,雖然位於索引19至49之所有神經處理單元方塊5906都可以看見通道0至19之輸入方塊5902,不過,位於索引0至18之神經處理單元方塊5906則否。舉例來說,位於索引18之神經處理單元方塊1906僅能看見通道0至18,而無法看見通道19,除非通道19被包含於輸入方塊索引60至63之其中之一。在另一個範例中,位於索引0之神經處理單元方塊5906會看見通道0以及5至19,但無法看見通道1至4,除非通道1至4被包含於輸入方塊索引60至63,在此情況下,通道19就無法被包含於輸入方塊索引60至63之其中之一以滿足位於索引18之神經處理單元方塊5906。
為了解決此問題,此實施例導入間隙輸入方塊群組I[G]以確保利用其所產生之欄加總具有零值(因為間隙輸入方塊群組I[G]內之零值與/或位於其相對應間隙濾波器方塊群組F[G]內之零值所造成),如此所產生之零值欄通道加總就不會對於最終之欄通道列加總有任何影響,而又允許足夠的旋轉數-這是因為迴 圈3額外重複了間隙輸入方塊群組I[G]之數量之次數-如此所有的神經處理單元方塊5906都可以看見全部20個通道。因此,因為在第六十三圖中,迴圈3之重複次數為24而非C=20,每個神經處理單元126會在每一個欄通道列加總,即卷積結果,產生額外之5x4x5=100個欄加總,不存在間隙時並不需要這些額外的欄加總(例如第六十四至六十五圖與六十八至六十九圖之實施例。不過,間隙輸入方塊群組I[G]與/或間隙濾波器方塊群組F[G]之零值會使神經處理單元126對每一個欄通道列加總中這100個額外的欄加總產生零值。)
非架構程式會對權重隨機存取記憶體124進行定址,如此即可在輸入5802之元素出現於神經處理單元126之多工暫存器208時,將相應之濾波器5804的合適權重讀入暫存器705。非架構程式對於權重隨機存取記憶體124進行之定址係配合權重隨機存取記憶體124內濾波器5804之權重的配置。多種非架構程式搭配權重之配置對於權重隨機存取記憶體124進行之定址方式之實施例均可用於本發明,第六十一與六十六圖係描述兩種包含間隙之不同實施例,六十四與六十八圖則是描述兩種不包含間隙之不同實施例。
如第六十一圖之範例所示,對於濾 波器方塊索引0,F[0,0]佔據了權重隨機存取記憶體124之列0-24,間隙濾波器方塊群組F[G]佔據了列25-124,F[0,19]佔據了列125-149,F[0,18]佔據了列150-174,依此類推,F[0,1]佔據了列575-599;對於濾波器方塊索引1,F[1,1]佔據了列0-24,F[1,0]佔據了列25-49,間隙濾波器方塊群組F[G]佔據了列50-149,F[1,19]佔據了列150-174,F[1,18]佔據了列175-199,依此類推,F[1,2]佔據了列575-599;由此,依此類推,對於濾波器方塊索引19,F[19,19]佔據了列0-24,F[19,18]佔據了列25-49,F[19,17]佔據了列50-74,依此類推,F[19,00]佔據了列475-499,而間隙濾波器方塊群組F[G]佔據了列500-599;對於濾波器方塊索引20,F[20,0]佔據了列0-24,F[20,19]佔據了列24-49,F[20,1]佔據了列50-74,依此類推,F[20,1]佔據了列475-499,而間隙濾波器方塊群組F[G]佔據了列500-599;對於濾波器方塊索引21,F[21,1]佔據了列0-24,F[21,00]佔據了列24-49,F[21,19]佔據了列50-74,依此類推,F[21,2]佔據了列475-499,而間隙濾波器方塊群組F[G]佔據了列500-599;由此,依此類推,對於濾波器方塊索引39,F[39,19]佔據了列0-24,F[39,18]佔據了列24-49,F[39,17]佔據了列50-74,依此類推,F[39,00]佔據了列 475-499,而間隙濾波器方塊群組F[G]佔據了列500-599;對於濾波器方塊索引40,F[40,0]佔據了列0-24,F[40,19]佔據了列24-49,F[40,1]佔據了列50-74,依此類推,F[40,1]佔據了列475-499,而間隙濾波器方塊群組F[G]佔據了列500-599;對於濾波器方塊索引41,F[41,1]佔據了列0-24,F[41,00]佔據了列24-49,F[41,19]佔據了列50-74,依此類推,F[41,2]佔據了列475-499,而間隙濾波器方塊群組F[G]佔據了列500-599;如此,依此類推,對於濾波器方塊索引49,F[49,09]佔據了列0-24,F[49,08]佔據了列24-49,F[49,07]佔據了列50-74,依此類推,F[49,10]佔據了列475-499,而間隙濾波器方塊群組F[G]佔據了列500-599;濾波器方塊索引50至63之濾波器方塊群組內則是無所謂的數值。 六十一圖之範例中,濾波器方塊群組係儲存於權重隨機存取記憶體124之列0至599,不過,本發明並不限於此,濾波器方塊群組F[f,c]亦可儲存於其他列中。
對權重隨機存取記憶體124進行定址以將第六十一圖之各種濾波器方塊群組之權重讀入神經處理單元126之操作在第六十三圖處會有更詳細的描述。在此可以觀察到,一般而言,沿著通道c由上而下檢視一給定濾波器方塊索引之濾波器方塊群組F[f,c]之數值時,欄 值的順序,即c(計入間隙),就會是輸入方塊群組之通道被神經處理單元方塊5906看見的順序,即c(計入間隙),而神經處理單元方塊5906之索引會對應於輸入方塊群組沿著神經網路單元121旋轉時之濾波器方塊索引。此外,輸入方塊5902之旋轉與非架構程式依據第六十三圖之虛擬程式碼對於權重隨機存取記憶體124進行之定址,會導致間隙濾波器方塊群組F[G]與間隙輸入方塊群組I[G]同時出現於神經處理單元126並因而產生零值欄加總。
因為零值與任何數值之乘積即為零值,因此只需間隙輸入方塊群組6103與間隙濾波器方塊群組6104之其中之一包含零值即可,而不須二者均包含零值。因此,在濾波器5804之權重為事前確定,而輸入5802是由網路之前一個層動態取樣或產生之情況下,使間隙濾波器方塊群組6104具有零值即可避免需要使間隙輸入方塊群組6103歸零,而有其助益。不過,其他間隙輸入方塊群組6103為零值之實施例亦屬於本發明之範疇。
現在請參照第六十二圖,圖中顯示一方塊圖,描述第六十一圖之一輸入方塊群組I[c];一個5x5之濾波器f的縱向部分以及一個通道c;第六十一圖之一濾波器方塊群組F[f,c];以及第五十九圖之一輸出方塊。
第六十二圖所示之輸入方塊群組I[c]包含12個列與16個欄。這16個欄係給予索引0至15,並且對應於輸入方塊5902之16個文字。如第六十二圖所示,每個欄索引值是資料隨機存取記憶體122之欄編號的模數(modulo)B=16。因此,舉例來說,假定第六十二圖之輸入方塊群組I[c]對應於第六十一圖中位於輸入方塊索引21之輸入方塊群組I[01]之複本。位於輸入方塊索引21之輸入方塊5902就會坐落於資料隨機存取記憶體122之欄336至351。因此,位於輸入方塊索引21之欄339之輸入方塊群組I[01]之文字係坐落於輸入方塊群組索引339%16=3。在第六十二圖之範例中,輸入方塊群組I[c]之12個列顯示為坐落在資料隨機存取記憶體122之列0至11,不過,這些列也可以坐落在資料隨機存取記憶體122之其他列。這個由12個列與輸入方塊群組I[c]之欄0至11構成之二維陣列係利用輸入5802中對應於通道c之一個12x12縱向部分6215予以填充。此縱向部分6215即為輸入5802中位於一給定通道c之12個列與12個欄之元素。
此輸入方塊群組I[c]之欄12至15不會被使用。不過,需要注意的是,在超參數W大於12之網路中,這些欄之部分或全部可能會被使用。舉例來說,若是W為14,欄12與13就 會被使用。此外,若是網路執行同尺寸卷積運算而非有效卷積運算,填補(padding)元素(例如零)就可能包含在欄12至15以及列12至15內,不過,其他將填補元素放置於真實輸入5802元素之邊緣處的不同列與/或欄之處理方式的實施例亦屬於本發明之範疇,舉例來說,這些填補元素可以相對平均地散佈在輸入方塊群組I[c]之左側,右側,上方與下方邊緣。
此位於給定通道c之濾波器5804,即濾波器f,之5x5縱向部分6209係由位於通道c之濾波器5804之5個列與5個欄5之權重所構成。此5x5縱向部分之25個元素係標示為0至24以說明此濾波器方塊群組。進一步來說,由左至右,列0之元素係標示為0至4,列1之元素係標示為5至9,列2之元素係標示為10至14,列3之元素係標示為15至19,列4之元素則是標示為20至24。
第六十二圖之濾波器方塊群組F[f,c]包含25個列與16個欄。這16個欄係給予0至15之索引編號,以對應至濾波器方塊5904之16個文字。如第六十二圖所示,各個欄索引值是權重隨機存取記憶體124之欄編號的模數。因此,舉例來說,假定第六十二圖之濾波器方塊群組F[f,c]係對應於第六十一圖之濾波器方塊群組F[21,17],而坐落於濾波器方塊索引21。 位於濾波器方塊索引21之濾波器方塊5904會坐落於權重隨機存取記憶體124之欄336至351。因此,位於濾波器方塊索引21之欄339之濾波器方塊群組F[21,17]之文字就會坐落於濾波器方塊群組索引339%16=3。在第六十二圖之範例中,濾波器方塊群組F[f,c]之25個列係顯示為坐落於權重隨機存取記憶體124之列0至24,不過,這些列亦可以坐落於權重隨機存取記憶體124之其他列。
此濾波器方塊群組F[f,c]之25個列中之各個列係在濾波器方塊索引4至11包含此5x5縱向部分6209之25個權重中之一相對應權重之P=8個複本。依序由列0至24,此相對應權重係始於列0與欄4,並前進至欄0,隨後是列1與欄4至欄0,依此類推,直到列4與欄4至欄0。因此,列0會包含權重4之8個複本,列1會包含權重3之8個複本,依此類推,列4會包含權重0之8個複本;列5會包含權重9之8個複本,列6會包含權重8之8個複本,依此類推,列9會包含權重5之8個複本;列10會包含權重14之8個複本,列11會包含權重13之8個複本,依此類推,列14會包含權重10之8個複本;列15會包含權重19之8個複本,列16會包含權重18之8個複本,依此類推,列19會包含權重15之8個複本;列20會包含權重24之8個複本,列21會包含權重23 之8個複本,依此類推,列24會包含權重20之8個複本;如此對於濾波器方塊群組F[f,c]內之縱向部分6209權重之處理,搭配對於輸入方塊群組I[c]內之輸入5802之元素之處理,會在每次執行內迴圈4使輸入方塊5902之輸入5802之元素輪流於各個神經處理單元方塊5906時,使5x5縱向部分6209之權重乘上縱向部分6209所覆蓋之輸入5802之5x5子矩陣之相對應元素。
濾波器方塊群組F[f,c]之欄0至3與12至15在執行有效卷積之實施例不會被使用。不過,需要注意的是,在超參數W大於12之網路中,這些欄中之某些或全部可能會被使用。舉例來說,若是W是14,欄12與13就會包含權重之複本。此外,若是此網路執行同尺寸卷積而非有效卷積,欄0至3與12至15內可能包含有此權重之複本,以乘上填補(padding)元素。
第六十二圖之輸出方塊5908包含一個列與16個欄。這16個欄係給予0至15之索引編號,並且係對應於輸出方塊5908之16個文字。如第六十二圖所示,各個欄索引值即為神經處理單元126編號或是資料隨機存取記憶體122(或權重隨機存取記憶體124)之欄編號之模數B=16。因此,舉例來說,假定第六十二圖之輸出方塊5908係對應於輸出方塊索引21。位於輸出方塊索引21之輸出方塊5908係坐落於資 料隨機存取記憶體122(或權重隨機存取記憶體)之欄336至351。因此,輸出方塊索引21於欄339之輸出方塊5908文字會坐落於輸出方塊群組索引339%16=3。此輸出方塊5908之文字顯示於欄4至11,作為8個卷積結果或欄通道列加總,表示為R0至R7,分別對應於輸出5806之P=8個欄中之欄0至7。也就是說,在各個神經處理單元方塊5906內,神經處理單元4會為了對應於輸出方塊5908欄4之輸出5806欄0,產生卷積結果或欄通道列加總,神經處理單元5會為了對應於輸出方塊5908欄5之輸出5806欄1,產生卷積結果或欄通道列加總,依此類推,神經處理單元11會為了對應於輸出方塊5908欄5之輸出5806欄7,產生卷積結果或欄通道列加總;神經處理單元0-3與12-15產生之結果則不被使用。 利用前述輸入方塊群組I[c]與濾波器方塊群組F[f,c],若是網路有不同之超參數與/或產生同尺寸卷積而非有效卷積,欄0至3與12至15即可能會被使用。
現在請參照第六十三圖,圖中顯示一虛擬程式碼,描述一非架構程式,在一具有N=1024個神經處理單元126之神經網路單元121上,搭配第六十一圖之資料隨機存取記憶體122與權重隨機存取記憶體124之配置,對一12x12x20之輸入5802,利用50個5x5之濾波器 5804執行卷積運算以產生50個8x8之輸出5806,所執行之運算。從許多方面看,第六十三圖之虛擬程式碼係類似於第六十圖之虛擬程式碼,不過,第六十三圖之虛擬程式碼至少在三個方面不同於第六十圖之虛擬程式碼。首先,第六十三圖之虛擬程式碼確定有4個間隙輸入方塊群組I[G],如第六十一圖所示。第二,第六十三圖之虛擬程式碼包含資料隨機存取記憶體122與權重隨機存取記憶體124之定址方式的細節,以確定第六十一圖之記憶體配置。第三,第六十三圖之虛擬程式碼確定超參數與前述數值N。因此,列2中顯示Q=8,列6中顯示R=5,列9中顯示在總數為24次之執行中C=20且gaps之數量為4,列11中顯示S=5,並且列19中顯示對準旋轉量為11。在此僅針對第六十三圖中不同於第六十圖之列進行描述,其他列在第六十圖中已經有充分的說明。
在列1,即此虛擬程式碼之開頭,資料隨機存取記憶體122列係初始化為零,而在列4,權重隨機存取記憶體124列係初始化為零。
在列9,迴圈3之執行次數為24。這是因為,C=20個通道與間隙數量,即4,之加總為24。這24次執行可使全部的神經處理單元方塊5906運作,舉例來說,特別是位於索引0至18之神經處理單元方塊5906,就可以看見提 供給全部20個通道之輸入方塊群組I[c]。
在列16,權重隨機存取記憶體124列會以1為單位遞增,如此在迴圈4之下一次執行,權重隨機存取記憶體124之下一列就會被讀入暫存器705,這些被讀入的資料包括第六十二圖之濾波器方塊群組F[f,c]之下一列之權重的8個複本。在迴圈4之每一次執行中,濾波器方塊群組F[f,c]之25列中只有5列會被讀入當前通道c之暫存器705。
在列18,權重隨機存取記憶體124列會以20為單位遞增,20即為R=5與S=5之乘積減去S=5。如此會將權重隨機存取記憶體124列指向對應於下一個通道c之下一個濾波器方塊群組F[f,c],藉此在迴圈3之下一次執行(迴圈4之下一次操作)中,濾波器方塊群組F[f,c]之25列中會有額外5個列被讀入下一個通道c之暫存器705。這是因為每一個濾波器方塊群組F[f,c]會從前一個濾波器方塊群組移位25個權重隨機存取記憶體124列,而依據迴圈4對於列16之五次操作,迴圈4之操作則會使權重隨機存取記憶體列以5為單位遞增。因此,每一次迴圈4之操作只有濾波器方塊群組F[f,c]列中的五分之一(一般而言,即1/Rth)會被讀取並使用。 剩餘之濾波器方塊群組F[f,c]列則會在後續迴圈2之操作中被讀取與使用。
在列19,多工暫存器208會以11為單位進行旋轉,11即為B=16與S=5之差值。如此可使輸入方塊5902對準下一個鄰接的神經處理單元方塊5906。這是因為一個神經處理單元方塊5906之寬度為N=16,但是,依據列15中迴圈4之五次操作,輸入方塊5902已經旋5個單位。前述旋轉11單位之運作可透過一個旋轉8單位(ROTATE by 8)指令,一個旋轉2單位(ROTATE by 2)指令與一個旋轉1單位(ROTATE by 1)指令之結合而達成。將迴圈4與/或迴圈3展開(unroll)執行之實施例亦屬於本發明之範疇,如此,列19會執行12單位之旋轉,前述旋轉12單位之運作可透過一個旋轉8單位(ROTATE by 8)指令與一個旋轉4單位(ROTATE by 4)指令之結合而達成。
在列21,資料隨機存取記憶體122列會以1為單位遞增,如此在迴圈2之下一次執行,在列13,資料隨機存取記憶體122之下一列就會被讀入多工暫存器208,讀入之資料包括輸入5802之下一列,即如第六十一圖所示,在每一個輸入方塊索引之輸入方塊群組I[c]之下一個輸入方塊5902。
在列22,權重隨機存取記憶體124列會以575為單位遞減,575即為25與23之乘積。數值25是R=5與S=5之乘積,此數值即為每 一個濾波器方塊群組F[f,c]之列數。進一步來說,每次迴圈3之執行會使權重隨機存取記憶體124以25為單位遞增,如此會將迴圈3之下一次執行指向濾波器方塊群組F[f,c]之開頭。數值23是C=20與4個間隙之加總減1。這是因為對於每次迴圈2之操作,迴圈3會重複執行於全部24個濾波器方塊群組。以575為單位之遞減運算會使權重隨機存取記憶體124列指向每一個濾波器方塊索引中最上方之濾波器方塊群組F[f,c],並指向濾波器方塊群組F[f,c]中,當前迴圈2執行之開始列下方5列處之列。
在列25,資料隨機存取記憶體122列會以4為單位遞減,4即為R=5減1。如此,輸入5802之第一列在經過迴圈1此次執行之卷積運算後,會使資料隨機存取記憶體122列指向輸入5802之下一個列,藉此,在迴圈1之下一次重複執行中,三維濾波器5804會有效向下滑動輸入5802之一個列的距離,藉以對輸入5802之下一個下方之子矩陣進行卷積運算。舉例來說,若是此次迴圈1之執行會以濾波器5804對於輸入5802之列3至7進行卷積運算並將累加器202寫入輸出方塊5908,列25之運作結果會使下一次迴圈1之執行以濾波器5804對於輸入5802之列4至8進行卷積運算。
現在請參照第六十四A與六十四B 圖所示,此二圖整體稱為第六十四圖,圖中顯示一方塊圖,描述本發明對一12x12x20之輸入,利用50個5x5之濾波器執行卷積運算以產生50個8x8之輸出,而不包含間隙輸入/濾波器方塊群組之另一實施例中,資料隨機存取記憶體內之輸入方塊群組之配置以及權重隨機存取記憶體內之濾波器方塊群組之配置。第六十四圖之範例係類似於第六十一圖之範例,其差異處如下所述。
第六十四圖之範例係假定一個神經網路單元121具有2048個神經處理單元126;即N=2048。如此,因為超參數W=12,B就會是16,即N之因數中至少與W一樣大的因數;而因為B=16,G就會是2048/16=128。因此,一共會有128個神經處理單元方塊5906,每個資料隨機存取記憶體122列會有128個輸入方塊5902,並且每個權重隨機存取記憶體124列會有128個濾波器方塊。第六十四圖所顯示之輸入方塊索引是從零開始標示為0至127,對應至神經處理單元方塊索引0至127,如前文第五十九圖所述。 也就是說,每一個索引為0之輸入方塊5902與濾波器方塊5904會由索引為0之神經處理單元方塊5906所接收;每一個索引為1之輸入方塊5902與濾波器方塊5904會由索引為1之神經處理單元方塊5906所接收;依此類推,每一個索引為 127之輸入方塊5902與濾波器方塊5904會由索引為127之神經處理單元方塊5906所接收。在第六十四圖之實施例中,索引0之輸入方塊包含資料隨機存取記憶體122之文字0-15;索引1之輸入方塊包含資料隨機存取記憶體122之文字16-31;依此類推,索引127之輸入方塊包含資料隨機存取記憶體122之文字2032-2047。類似地,索引0之濾波器方塊包含權重隨機存取記憶體124之文字0-15;索引1之濾波器方塊包含資料隨機存取記憶體124之文字16-31;依此類推,索引127之濾波器方塊包含權重隨機存取記憶體124之文字2032-2047。
第六十四圖顯示69個輸入方塊群組。這69個輸入方塊群組係坐落於輸入方塊索引0至49以及109至127,這些輸入方塊群組一般性地表示為I[c],其中c代表這C=20個通道之一通道索引。20個輸入方塊群組I[0]至I[19]係坐落於輸入方塊索引0至19。另外,20個輸入方塊群組I[0]至I[19]係坐落於輸入方塊索引20至39。更進一步,10個輸入方塊群組I[0]至I[9]係坐落於輸入方塊索引40至49。最後,19個輸入方塊群組I[1]至I[19]係坐落於輸入方塊索引109至127。坐落於輸入方塊索引50至108之輸入方塊5902則不被使用。在第六十四圖之實施例中並不包含有間隙輸入方塊群組6103。
第六十四圖顯示50x20=1000個濾波器方塊群組,一般性地表示為F[f,c],其中,f代表這F個濾波器5804中之一個濾波器,c代表C=20個通道中之一通道索引。在第六十四圖之實施例中並不包含間隙濾波器方塊群組6104。 在第六十四圖之範例中,權重隨機存取記憶體124裝載128x20=2560個濾波器方塊群組,而各個濾波器方塊群組具有25個濾波器方塊5904,因此,在第六十四圖之範例中總共有64000個濾波器方塊5904用以對於12x12x20之輸入5802,利用50個5x5x20之濾波器5804進行卷積運算,以產生50個8x8之輸出5806。不過,因為只具有50個濾波器5804,128-50=78個神經處理單元方塊5906所產生之卷積並不會被使用;因此,如圖中所示,濾波器方塊索引50至127之濾波器方塊群組會包含無所謂之數值。如圖中所示,濾波器方塊群組F[0,0]至F[0,19]係坐落於濾波器方塊索引0,濾波器方塊群組F[1,0]至F[1,19]係坐落於濾波器方塊索引1,依此類推,濾波器方塊群組F[49,0]至F[49,19]係坐落於濾波器方塊索引49;而坐落於濾波器方塊索引50至127之濾波器方塊群組則為無所謂數值。在一濾波器方塊索引內之各個濾波器方塊群組的縱向順序係相同於第六十一圖所示扣除間隙濾波器方塊群組後之順序;因為不存在四個間隙濾波器 方塊群組在第六十一圖中所佔據之100個列,因此,只有列0至499會被使用。
如前述,此巢狀迴圈結構有利於利用神經網路單元121之多工暫存器208結構來旋轉關聯於輸入5802之所有C個通道之輸入方快5902,藉此,G個神經處理單元方塊5906中,關聯於F個濾波器5804之F個神經處理單元方塊5906中之每一個神經處理單元方塊5906,就可以看見輸入5802之全部C個通道,以利用相對應之濾波器5804進行卷積運算。如前述,輸入方塊群組I[1]至I[19]係坐落於輸入方塊索引109至127,如此,除了輸入方塊群組I[0](即通道0之輸入5802),位於索引0之神經處理單元方塊5906亦能看見輸入方塊群組I[1]至I[19],因為這些輸入方塊群組會旋轉至神經處理單元方塊0;類似地,輸入方塊群組I[2]至I[19]係坐落於輸入方塊索引110至127,如此,除了輸入方塊群組I[0]與I[1],位於索引1之神經處理單元方塊5906亦能看見輸入方塊群組I[2]至I[19],因為這些輸入方塊群組會旋轉至神經處理單元方塊1;依此類推,輸入方塊群組I[19]係坐落於輸入方塊索引127,如此,除了輸入方塊群組I[0]至I[18],位於索引18之神經處理單元方塊5906亦能看見輸入方塊群組I[19],因為這個輸入方塊群組會旋轉至神經處理單元方塊 18。因此,方塊的數量,即G=128,無法整除於通道數量,即C=20,之實際情況,並不需要產生間隙輸入方塊群組I[G]或是需要非架構程式之迴圈3重複超過對應於通道數量20之次數,這是因為超參數使這些額外的輸入方塊群組I[1]至I[19]可以坐落於輸入方塊索引109至127。值得注意的是,雖然在第六十四圖之範例中,F=50,C=20,N=2048且W=12,而計算書B=16且G=128,其他神經網路之範例亦可能提供足夠的空間供額外的輸入方塊群組放置於較大值之輸入方塊索引,而不需包含間隙輸入/濾波器方塊群組,也不需要額外重複執行迴圈3。舉例來說,對於一個F=40,C=20,N=1024且W=12之神經網路單元121,因為輸入方塊群組I[1]至I[19]可以坐落於輸入方塊索引45至63,因而不需要間隙輸入/濾波器方塊群組。換言之,這並不能由第六十四圖之範例相較於第六十一圖之範例具有較大數量之神經處理單元126(N)的實際情況推論出,為避免使用間隙輸入/濾波器方塊群組需要較大數量之神經處理單元126;而是必須考量N以及神經網路之相關聯之超參數。
權重隨機存取記憶體124將第六十四圖之各種濾波器方塊群組之權重讀入神經處理單元126之定址方式在第六十五圖處會有更 詳細的說明。由此可以觀察到,在通道c中由上而下檢視一給定濾波器方塊索引之濾波器方塊群組F[f,c]的數值時,欄數值c的順序就會是輸入方塊群組之通道c被對應於此輸入方塊索引之神經處理單元方塊5906在輸入方塊群組沿著神經網路單元121旋轉時看見之順序。
現在請參照第六十五圖,圖中顯示一虛擬程式碼,描述一非架構程式,在一具有N=2048個神經處理單元126之神經網路單元121上,搭配第六十四圖之資料隨機存取記憶體122與權重隨機存取記憶體124之配置,對一12x12x20之輸入方塊,5802利用50個5x5之濾波器5804執行卷積運算以產生50個8x8之輸出方塊5806,所執行之運算。第六十五圖之虛擬程式碼在許多方面類似於第六十三圖之虛擬程式碼,不過,不同於第六十三圖之虛擬程式碼,如第六十四圖所示,第六十五圖之虛擬程式碼係假定不具有間隙輸入/濾波器方塊群組。因此,在列9中,C=20次重複(相較之下,第六十三圖之列9中則是24)。此外,在列22中,權重隨機存取記憶體列係以475為單位遞減,475即為25與19之乘積(相較之下,第六十三圖則是575)。如同第六十三圖,數值25是R=5與S=5之乘積,此數值即為各個濾波器方塊群組F[f,c]之列數。數值19則是C=20減1。這是因為 在迴圈2之每一次操作中,迴圈3會重複執行於全部20個濾波器方塊群組。以475為單位遞減會使權重隨機存取記憶體124列指向各個濾波器方塊索引內最上方之濾波器方塊群組F[f,c],並指向濾波器方塊群組F[f,c]中,迴圈2當前執行之開始列下方5列處之列。
現在請參照第六十六A與六十六B圖,整體稱為第六十六圖,圖中顯示一方塊圖,描述本發明對一12x12x20之輸入5802,利用50個5x5之濾波器5804執行卷積運算以產生50個8x8之輸出5806之另一實施例中,權重隨機存取記憶體124內之濾波器方塊5904群組之配置6602。第六十六圖之實施例係使用第六十一圖之輸入方塊群組之配置。第六十六圖之範例在許多方面係類似於第六十一圖之範例,其差異如下所述。基本上,第六十六圖之實施例與第六十一圖之實施例的主要差異點在於,執行第六十三圖與六十七圖虛擬程式碼之非架構程式係以不同方式對權重隨機存取記憶體124進行編碼。
進一步來說,在第六十六圖之實施例中,各個濾波器群組F[f,c,r]係由其濾波器f,其通道c與濾波器5804之R個列中之列r所決定,並具有S=5個濾波器方塊5904(位於權重隨機存取記憶體124中5個相對應列);不過,在 第六十一圖之實施例中,各個濾波器群組F[f,c]則是由其濾波器f與其通道c所決定,並具有RxS=5x5=25個濾波器方塊群組5904(位於權重隨機存取記憶體124中25個相對應列)。相同的濾波器方塊5904會分別坐落在第六十一圖之配置6102與第六十六圖之配置6602;不過,這些濾波器方塊5904係設置於權重隨機存取記憶體之不同位址,或列。換句話說,相同的濾波器方塊5904會坐落在各個濾波器方塊索引內;不過,這些濾波器方塊5904係以不同順序沿縱向排列,而第六十三與六十七圖之虛擬程式碼係以不同方式對其定址。因此,第六十一圖與六十六圖之濾波器方塊群組都會在權重隨機存取記憶體124內占據600個列。如同第六十一圖,第六十六圖亦將間隙濾波器方塊係表示為F[G],不過只具有5個濾波器方塊5904(位於5個相對應權重隨機存取記憶體124列)。
第六十六圖顯示64x120=7680個濾波器方塊群組,一般性地表示為F[f,c,r],其中,f代表F個濾波器5804中之一濾波器,c代表C=20個通道中之一通道索引,並且,r代表濾波器5804之一列,或是表示為F[G],即代表間隙濾波器方塊群組。第六十六圖(與六十八圖)之內容中所描述之濾波器方塊群組F[f,c,r]是由S個濾波器方塊5904構成之群組,這些濾波 器方塊5904位於權重隨機存取記憶體124之S個不同列,並且全部都位於相同之輸入/濾波器/神經處理單元方塊索引。因此,濾波器f之全部濾波器方塊群組之所有濾波器方塊5904都會提供至同一個神經處理單元方塊5906。此外,每一個濾波器方塊群組F[f,c,r]會對於濾波器5804,即濾波器f,之一通道c,裝載RxS縱向部分之一列之權重(例如第六十二圖之縱向部分6209之一列),或是在間隙濾波器方塊群組F[G]之情況下,裝載零值。進一步來說,濾波器方塊群組F[f,c,r]之每一個濾波器方塊5904會裝載濾波器5804,即濾波器f,之通道c之RxS縱向部分6209之列r之一不同權重之P個複本。
在第六十六圖之內容中,濾波器方塊群組F[f,c,r]是一個由位於5個不同權重隨機存取記憶體124列之5個濾波器方塊5904所構成之群組。(在第六十六圖之實施例中,這5個列在權重隨機存取記憶體124內係彼此相鄰,即位於列0-4,5-9;不過,這5個列彼此不相鄰,而是依據這些列調整非架構程式,使其對於權重隨機存取記憶體124內具有濾波器方塊5904之列予以定址之實施例,亦屬於本發明之範疇。)因此,第六十六圖中每一個濾波器方塊群組F[f,c,r]之每一個濾波器方塊具有16個文字x每一個濾波器方塊群組具有5個濾波器方塊(位於 5個權重隨機存取記憶體124列)=80個權重隨機存取記憶體124之文字。如同第六十一圖,每個濾波器方塊5904係裝載濾波器5804,即濾波器f,之一相對應欄s,一相對應列r與一通道c之權重之P=8個複本,濾波器方塊5904內之剩餘B-P=16-8=8個文字則不被使用(在一實施例中,則為零值)。進一步來說,每個濾波器方塊群組F[f,c,r]會為濾波器5804,即濾波器f,之一通道c,裝載一個5x5縱向部分之一列r之權重,或是在間隙濾波器方塊群組之情況下,裝載零值。進一步來說,濾波器方塊群組F[f,c,r]之5個濾波器方塊5904中之每一個濾波器方塊5904係裝載濾波器5804,即濾波器f,之一通道c之5x5縱向部分6209之列r內之一個不同權重之8個複本。也就是說,每個濾波器方塊群組F[f,c,r]是第六十二圖所示之5組5個相鄰列之其中之一。舉例來說,濾波器方塊群組F[f,c,0]係對應至第六十二圖之濾波器方塊群組F[f,c]之列0至4;濾波器方塊群組F[f,c,1]係對應至列5至9;濾波器方塊群組F[f,c,2]係對應至列10至14;濾波器方塊群組F[f,c,3]係對應至列15至19;濾波器方塊群組F[f,c,4]係對應至列20至24。不過,如第六十六圖所示,他們並非坐落於權重隨機存取記憶體124中25個彼此相鄰之列,而是坐落在5個各自獨立之不同群組內, 而各個群組是由5個相鄰列構成。進一步來說,對於R=5個列中一給定列r,此5列濾波器方塊群組F[f,c,r]係彼此相鄰地聚集在一起,而對此給定列而言,C=20個通道c則是彼此交錯。此外,此濾波器方塊群組F[f,c,r]對於一給定列之通道順序係相同於第六十一圖。
在第六十六圖之範例中,權重隨機存取記憶體124裝載64x120=7680個濾波器方塊群組,而各個濾波器方塊群組具有5個濾波器方塊5904,因此,一共有38400個濾波器方塊在第六十六圖之範例中,對12x12x12之輸入5802,利用50個5x5x20之濾波器5804進行卷積運算,以產生50個8x8之輸出5806。不過,因為只具有50個濾波器5804,64-50=14個神經處理單元方塊5906產生之卷積將不被使用;因此,如圖中所示,濾波器方塊索引50至63之濾波器方塊群組係包含無所謂之數值。如圖中所示,坐落於濾波器方塊索引0之濾波器方塊群組包括,濾波器方塊群組F[0,0,0]至F[0,19,0]與四個間隙濾波器方塊群組F[G],濾波器方塊群組F[0,0,1]至F[0,19,1]與四個間隙濾波器方塊群組F[G],依此類推直到濾波器方塊群組F[0,0,4]至F[0,19,4]與四個間隙濾波器方塊群組F[G];坐落於濾波器方塊索引1之濾波器方塊群組包括,濾波器方塊群組F[1,0,0]至F[1,19,0]與四 個間隙濾波器方塊群組F[G],濾波器方塊群組F[1,0,1]至F[1,19,1]與四個間隙濾波器方塊群組F[G],依此類推直到濾波器方塊群組F[1,0,4]至F[1,19,4]與四個間隙濾波器方塊群組F[G];如此,依此類推,坐落於濾波器方塊索引49之濾波器方塊群組包括,濾波器方塊群組F[49,0,0]至F[49,19,0]與四個間隙濾波器方塊群組F[G],濾波器方塊群組F[49,0,1]至F[49,19,1]與四個間隙濾波器方塊群組F[G],依此類推直到濾波器方塊群組F[49,0,4]至F[49,19,4]與四個間隙濾波器方塊群組F[G];坐落於濾波器方塊索引50至63之濾波器方塊群組則為無所謂數值。
透過設置相配合之間隙濾波器方塊群組F[f,c,r],可確保利用這些間隙濾波器方塊群組產生之欄加總具有零值(這是因為間隙濾波器方塊群組F[G]內之零值與/或其相對應間隙輸入方塊群組I[G]內之零值),如此,所產生之零值欄通道加總就不會影響最終之欄通道列加總,而容許進行足夠次數之旋轉-這是由間隙輸入方塊群組I[G]額外重複執行迴圈3之數量所造成-使所有的神經處理單元方塊5906都能看見全部20個通道。
如第六十六圖之範例所示,對於濾波器方塊索引0而言:F[0,0,0]佔據權重隨機存 取記憶體124之列0-4,四個間隙濾波器方塊群組F[G]佔據列5-24,F[0,19,0]佔據列25-29,F[0,18,0]佔據列30-34,依此類推直到F[0,1,0]佔據列115-119;F[0,0,1]佔據列120-124,四個間隙濾波器方塊群組F[G]佔據列125-144,F[0,19,1]佔據列145-149,F[0,18,1]佔據列150-154,依此類推直到F[0,1,1]佔據列235-239;F[0,0,2]佔據列240-244,四個間隙濾波器方塊群組F[G]佔據列245-264,F[0,19,2]佔據列265-269,F[0,18,2]佔據列270-274,依此類推直到F[0,1,2]佔據列355-359;F[0,0,3]佔據列360-364,四個間隙濾波器方塊群組F[G]佔據列365-384,F[0,19,3]佔據列385-389,F[0,18,3]佔據列390-394,依此類推直到F[0,1,3]佔據列475-479;F[0,0,4]佔據列480-484,四個間隙濾波器方塊群組F[G]佔據列485-504,F[0,19,4]佔據列505-509,F[0,18,4]佔據列510-514,依此類推直到F[0,1,4]佔據列595-599。對於濾波器方塊索引1而言:F[1,1,0]佔據列0-4,F[1,0,0]佔據列5-9,四個間隙濾波器方塊群組F[G]佔據列10-29,F[1,19,0]佔據列30-34,依此類推直到F[1,2,0]佔據列115-119;F[1,1,1]佔據列120-124,F[1,0,1]佔據列125-129,四個間隙濾波器方塊群組F[G]佔據列130-149,F[1,19,1]佔據列150-154,依此類推 直到F[1,2,1]佔據列235-239;F[1,1,2]佔據列240-244,F[1,0,2]佔據列245-249,四個間隙濾波器方塊群組F[G]佔據列250-269,F[1,19,2]佔據列270-274,依此類推直到F[1,2,2]佔據列355-359;F[1,1,3]佔據列360-364,F[1,0,3]佔據列365-369,四個間隙濾波器方塊群組F[G]佔據列370-389,F[1,19,3]佔據列390-394,依此類推直到F[1,2,3]佔據列475-479;F[1,1,4]佔據列480-484,F[1,0,4]佔據列485-489,四個間隙濾波器方塊群組F[G]佔據列490-509,F[1,19,4]佔據列510-514,依此類推直到F[1,2,4]佔據列595-599。此模式持續到濾波器方塊索引19:F[19,19,0]佔據列0-4,F[19,18,0]佔據列5-9,依此類推,F[19,0,0]佔據列95-99,四個間隙濾波器方塊群組F[G]則是佔據列100-119;F[19,19,1]佔據列120-124,F[19,18,1]佔據列125-129,依此類推,F[19,0,1]佔據列215-219,四個間隙濾波器方塊群組F[G]則是佔據列220-239;F[19,19,2]佔據列240-244,F[19,18,2]佔據列245-249,依此類推,F[19,0,2]佔據列335-339,四個間隙濾波器方塊群組F[G]則是佔據列340-359;F[19,19,3]佔據列360-364,F[19,18,3]佔據列365-369,依此類推,F[19,0,3]佔據列455-459,四個間隙濾波器方塊群組F[G]則是佔據列460-479;F[19,19,4] 佔據列480-484,F[19,18,4]佔據列485-489,依此類推,F[19,0,4]佔據列575-579,四個間隙濾波器方塊群組F[G]則是佔據列580-599。 F[20,0,0]佔據列0-4,F[20,19,0]佔據列5-9,依此類推,F[20,1,0]佔據列95-99,四個間隙濾波器方塊群組F[G]則是占據列100-119;F[20,0,1]佔據列120-124,F[20,19,1]佔據列125-129,依此類推,F[20,1,1]佔據列215-219,四個間隙濾波器方塊群組F[G]則是占據列220-239;F[20,0,2]佔據列240-244,F[20,19,2]佔據列245-249,依此類推,F[20,1,2]佔據列335-339,四個間隙濾波器方塊群組F[G]則是占據列340-359;F[20,0,3]佔據列360-364,F[20,19,3]佔據列365-369,依此類推,F[20,1,3]佔據列455-459,四個間隙濾波器方塊群組F[G]則是占據列460-479;F[20,0,4]佔據列480-484,F[20,19,4]佔據列485-489,依此類推,F[20,1,4]佔據列575-579,四個間隙濾波器方塊群組F[G]則是占據列580-599。此模式持續到濾波器方塊索引49:F[49,9,0]佔據列0-4,F[49,8,0]佔據列5-9,依此類推,F[49,10,0]佔據列95-99,四個間隙濾波器方塊群組F[G]則是占據列100-119;F[49,9,1]佔據列120-124,F[49,8,1]佔據列125-129,依此類推,F[49,10,1]佔據215-219,四個間隙濾波器方塊群組F[G]則是占 據列220-239;F[49,9,2]佔據列240-244,F[49,8,2]佔據列245-249,依此類推,F[49,10,2]佔據335-339,四個間隙濾波器方塊群組F[G]則是占據列340-359;F[49,9,3]佔據列360-364,F[49,8,3]佔據列365-369,依此類推,F[49,10,3]佔據455-459,四個間隙濾波器方塊群組F[G]則是占據列460-479;F[49,9,4]佔據列480-484,F[49,8,4]佔據列485-489,依此類推,F[49,10,4]佔據575-579,四個間隙濾波器方塊群組F[G]則是占據列580-599。濾波器方塊索引50至63之濾波器方塊群組內之數值為無所謂數值。第六十六圖之範例顯示儲存在權重隨機存取記憶體124列0至599之濾波器方塊群組,不過,濾波器方塊群組F[f,c,r]儲存在其他列之實施例亦屬於本發明之範疇。
對於權重隨機存取記憶體124進行定址以將第六十六圖之多種濾波器方塊群組之權重讀入神經處理單元126之定址方式,在後續對應於第六十七圖處會有更詳細的說明。在此可以觀察到,一般而言,沿著通道c由上而下檢視一給定濾波器方塊索引之濾波器方塊群組F[f,c,r]之數值時,欄值的順序,即c(計入間隙),就會是輸入方塊群組之通道,即c(計入間隙),被神經處理單元方塊5906看見的順序,而此神經處理單元方塊5906之索引會對應於輸 入方塊群組沿著神經網路單元121旋轉時之濾波器方塊索引。此外,前述由非架構程式依據第六十七圖之虛擬程式碼執行之輸入方塊5902之旋轉運作與權重隨機存取記憶體之定址動作,會使間隙濾波器方塊群組F[G]與間隙輸入方塊群組I[G]同時呈現於神經處理單元126內而產生零值欄加總。
現在請參照第六十七圖,圖中顯示一虛擬程式碼,描述一非架構程式,在一具有N=1024個神經處理單元126之神經網路單元121上,搭配第六十一圖之資料隨機存取記憶體122之配置6101與第六十六圖之權重隨機存取記憶體124之配置6602,對一12x12x20之輸入5802,利用50個5x5之濾波器5804執行卷積運算以產生50個8x8之輸出方塊5806,所執行之運算。第六十七圖之虛擬程式碼在許多方面係類似於第六十五圖之虛擬程式碼,不過,如第六十一與六十六圖所示,第六十七圖之虛擬程式碼假定間隙輸入/濾波器方塊群組係用不同之權重隨機存取記憶體124定址方式以搭配第六十六圖之配置6602。因此,在列9,C=20+4個間隙=24次重複(相較之下,第六十五圖之列9則為20)。此外,第六十七圖中不存在列18與列20,這是因為濾波器方塊5904係配置於第六十六圖之濾波器方塊群組F[f,c,r]內,如此,列16 使權重隨機存取記憶體124列以1為單位遞增之處理方式已足以確定正確列之位址,因而可以緩解使權重隨機存取記憶體124列遞增(如第六十五圖之列18)以及使權重隨機存取記憶體124列遞減(例如第六十五圖之列22)之需求。
現在請參照第六十八A與六十八B圖,整體稱為第六十八圖,圖中顯示一方塊圖,描述本發明對一12x12x20之輸入5802,利用50個5x5之濾波器5804執行卷積運算以產生50個8x8之輸出5806,而不包含間隙輸入/濾波器方塊群組之另一實施例中,權重隨機存取記憶體124內之濾波器方塊5904群組之配置6802。第六十八圖之範例在許多方面係類似於第六十四圖之範例,其差異點如下所述。基本上,第六十八圖之實施例與第六十四圖之實施例之主要差異點在於第六十九圖與第六十五圖之非架構程式係以不同方式對權重隨機存取記憶體124進行定址。
如同第六十四圖之範例,第六十八圖之範例假定一個具有2048個神經處理單元121之神經網路單元122,即N=2048。如此,因為超參數W=12,B就會是16,也就是N之因數中,至少與W一樣大之因數中之最小者;並且,因為B=16,G=2048/16=128。因此,一共有128個神經處理單元方塊5906,每個資料隨機存取 記憶體122列具有128個輸入方塊5902,並且,每個權重隨機存取記憶體124列具有128個濾波器方塊5904。第六十八圖所顯示之濾波器方塊索引是從零開始標示為0至127,對應至神經處理單元方塊索引0至127,如前文第五十九圖所述。也就是說,各個索引為0之輸入方塊5902與濾波器方塊5904會由索引為0之神經處理單元方塊5906接收;各個索引為1之輸入方塊5902與濾波器方塊5904會由索引為1之神經處理單元方塊5906接收;依此類推,各個索引為127之輸入方塊5902與濾波器方塊5904則會由索引為127之神經處理單元方塊5906接收。在第六十八圖之實施例中,位於索引0之輸入方塊包括資料隨機存取記憶體122之文字0-15;位於索引1之輸入方塊包括資料隨機存取記憶體122之文字16-31;依此類推,位於索引127之輸入方塊包括資料隨機存取記憶體122之文字2032-2047。類似地,位於索引0之濾波器方塊包括權重隨機存取記憶體124之文字0-15;位於索引1之濾波器方塊包括權重隨機存取記憶體124之文字16-31;依此類推,位於索引127之濾波器方塊包括權重隨機存取記憶體124之文字2032-2047。
如同第六十六圖之實施例,在第六十八圖之實施例中,每個濾波器方塊F[f,c,r] 是由其濾波器f,通道c,與濾波器5804之R個列中之列r所決定,並且,每個濾波器方塊F[f,c,r]具有S=5個濾波器方塊5904(位於權重隨機存取記憶體124之5個對應列)。相同的濾波器方塊5904會坐落在第六十四圖之配置6402與第六十八圖之配置6802;不過,這些濾波器方塊5904會設置於權重隨機存取記憶體124之不同位址或列。換句話說,相同的濾波器方塊5904會坐落在各個濾波器方塊索引內;不過,這些濾波器方塊5904係以不同順序沿縱向排列,而第六十五與六十九圖之虛擬程式碼係以不同方式對其定址。因此,第六十四圖與六十八圖之濾波器方塊群組都會在權重隨機存取記憶體124內占據500個列。如同第六十四圖之配置,第六十八圖之配置中不具有間隙濾波器方塊。因此,第六十九圖之虛擬程式碼對於權重隨機存取記憶體124之配置6802的定址方式係類似於第六十七圖之虛擬程式碼對於權重隨機存取記憶體124之配置6602的定址方式,不過,第六十九圖之虛擬程式碼係經調整而將不具有間隙濾波器/輸入方塊群組之情形納入考慮。
如同第六十六圖,在第六十八圖之內容中,濾波器方塊群組F[f,c,r]是一個由5個濾波器方塊5904構成之群組,而這些濾波器方塊係位於權重隨機存取記憶體124之5個不同 列;每個濾波器方塊群組F[f,c,r]具有80個權重隨機存取記憶體124之文字,即每個濾波器方塊具有16個文字x每個濾波器方塊群組具有5個濾波器方塊5904(位於5個權重隨機存取記憶體124列)=80;每個濾波器方塊5904係裝載濾波器5804,即濾波器f,之一相對應欄s,一相對應列r與一通道c之權重之P=8個複本,濾波器方塊5904內之剩餘B-P=16-8=8個文字則不被使用(在一實施例中,則為零值);每個濾波器方塊群組F[f,c,r]會為濾波器5804,即濾波器f,之一通道c,裝載一個5x5縱向部分之一列r之權重,或是在間隙濾波器方塊群組之情況下,裝載零值。
在第六十八圖之範例中,權重隨機存取記憶體124裝載128x100=12800個濾波器方塊群組,而各個濾波器方塊群組具有5個濾波器方塊5904,因此,在第六十八圖之範例中一共有64000個濾波器方塊5904,用以對於12x12x20之輸入5802,利用50個5x5x20之濾波器5804進行卷積運算,以產生50個8x8之輸出5806。不過,因為只具有50個濾波器5804,128-50=78個神經處理單元方塊5906產生之卷積不被使用;因此,如圖中所示,濾波器方塊索引50至127之濾波器方塊群組會包含無所謂數值。如圖中所示,坐落於濾波器方塊索引0 之濾波器方塊群組為濾波器方塊群組F[0,0,0]至F[0,19,0],濾波器方塊群組F[0,0,1]至F[0,19,1],依此類推直到濾波器方塊群組F[0,0,4]至F[0,19,4];坐落於濾波器方塊索引1之濾波器方塊群組為濾波器方塊群組F[1,0,0]至F[1,19,0],濾波器方塊群組F[1,0,1]至F[1,19,1],依此類推直到濾波器方塊群組F[1,0,4]至F[1,19,4];依此類推,坐落於濾波器方塊索引49之濾波器方塊群組為濾波器方塊群組F[49,0,0]至F[49,19,0],濾波器方塊群組F[49,0,1]至F[49,19,1],依此類推直到濾波器方塊群組F[49,0,4]至F[49,19,4];圖中並不具有間隙濾波器方塊群組F[G];並且,坐落於濾波器方塊索引50至127之濾波器方塊群組為無所謂數值。
在第六十八圖之範例中,就濾波器方塊索引來看,並不存在第六十六圖之間隙濾波器方塊群組,第六十六圖中位於間隙濾波器方塊群組下方之各個濾波器方塊群組都會上移佔據因為不存在間隙濾波器方塊群組所空出來的權重隨機存取記憶體124列。因此,如同第六十四圖不具有間隙輸入/濾波器方塊群組之實施例,第六十八圖之濾波器方塊群組亦佔據權重隨機存取記憶體124之500個列。在第六十八圖之範例中,濾波器方塊群組係儲存於權重隨 機存取記憶體124之列0至499,不過,濾波器方塊群組F[f,c,r]儲存於其他列之實施例亦屬於本發明之範疇。對權重隨機存取記憶體124進行定址以將第六十八圖中各種不同之濾波器方塊群組之權重讀入神經處理單元126之定址方式,在第六十九圖處會有更詳細的說明。
現在請參照第六十九圖,圖中顯示一虛擬程式碼,描述一非架構程式,在一具有N=2048個神經處理單元126之神經網路單元121上,搭配第六十四圖之資料隨機存取記憶體122之配置6401與第六十八圖之權重隨機存取記憶體124之配置6802,對一12x12x20之輸入5802,利用50個5x5x20之濾波器5804執行卷積運算以產生50個8x8之輸出5806,所執行之運算。第六十九圖之虛擬程式碼在許多方面係類似於第六十七圖之虛擬程式碼,不過,相較於第六十七圖之虛擬程式碼設定有如第六十一與六十六圖所示之間隙輸入/濾波器方塊群組,第六十九圖之虛擬程式碼則不具有間隙輸入/濾波器方塊群組。因此,在列9,C=20次重複(相較之下,第六十七圖之列9則為24)。
較佳地,架構程式會將權重載入權重隨機存取記憶體124(例如,將權重邏輯性分割為濾波器方塊5904)並將輸入資料載入資料隨機存取記憶體122(例如,將資料邏輯性分割 為輸入方塊5902)。架構程式可採用類似於前述之方式,如對應於第二十五圖之方式,將權重與資料載入隨機存取記憶體122/124,不過,在第二十五圖中,資料隨機存取記憶體122係裝載權重而權重隨機存取記憶體124係裝載輸入資料與結果資料,相較之下,在此執行三維卷積運算之實施例中,資料隨機存取記憶體122則是裝載輸入與輸出資料,而權重隨機存取記憶體124則是裝載權重。
由此可以觀察到,雖然輸入方塊5902之輸入資料呈現為動態,濾波器方塊5904之權重仍然呈現為靜態。也就是說,每次神經網路執行時,輸入資料就會改變,例如輸入一個新的影像或是一組新的影像並由神經網路單元121執行。相較之下,權重則是在發展(例如訓練)神經網路的過程中產生,並且在神經網路之每一次執行中都維持不變。因此,設置濾波器方塊5904內之權重所需之成本只需耗費一次,並且可以事先離線完成。也因此,將權重設置濾波器方塊5904內,可能有利於縮短非架構程式完成對於輸入利用濾波器執行卷積以產生輸出之操作所需耗費的時間。此外,第六十四至六十五與六十八至六十九圖之非架構程式之實施例(即不具有間隙)需要執行之旋轉運作與乘法累加運算之數量較少而只在較少之時 鐘週期內執行,這些實施例可能會需要額外時間來適當地將輸入資料設置於輸入方塊5902內(例如透過架構程式),這些實施例對於輸入利用濾波器執行卷積以產生輸出所花費之全部時間可能會少於利用間隙之實施例。至於何種方式速度較快,則會受到多種因素影響,這些因素包括間隙尺寸,神經網路之超參數,架構處理器之可用度與記憶體子系統特性。
由此可以觀察到,當C(通道數量)是G(方塊數量)之一因數,就不需要間隙輸入/濾波器方塊群組(間隙)。此外,當C不是G之一因數,若是G減去F之差值大於或等於C減去1而使輸入5802在通道0以外之所有通道之複本都可被放置於資料隨機存取記憶體122列末端處之未使用方塊,就不需要間隙。
由此可觀察到關聯於動態超參數以及對應於資料隨機存取記憶體122之一列中所包含之輸入5802之C個通道之複本數量,即包含於一個資料隨機存取記憶體122列中對應於C個通道中之各個通道之輸入方塊5902之複本數量,之靜態神經網路單元121硬體配置之各種不同情況。舉例來說,在第六十一與六十四圖之實施例中,資料隨機存取記憶體122之一列中所包含之輸入5802之C個通道之複本數量為三。由此可以觀察到所需之間隙數量以及伴隨 迴圈3執行次數之效應,即如前述對應於虛擬程式碼之通道執行迴圈。
在第一種情況下,C少於G的一半,並且F少於G。資料隨機存取記憶體122之一列中所包含之輸入5802之C個通道之複本數量是G之下取整(floor)函數除以C。因此,在第六十一與六十四圖之範例中,C=20且G=64且F=50,滿足第一種情況之條件,而G之下取整函數除以C=floor(64/20)=3,即為資料隨機存取記憶體122之一列中所包含之輸入5802之C個通道之複本數量。間隙之數量為G模除C,以第六十一與六十六圖為例,即64%20=4。此外,未使用之神經處理單元方塊5906數量為G減F,因為沒有濾波器來使用這些神經處理單元方塊,以第六十一與六十六圖為例,即64-50=14。
在第二種情況下,C介於G的一半與G之間,F少於G。資料隨機存取記憶體122之一列中僅包含之輸入5802之C個通道之單一個複本。類似於第一種情況,在第二種情況中,間隙之數量為G模除C。
在第三種情況下,C大於G且F少於G。對於輸入5802之H個列中之每個列而言,C個通道係分割至N個資料隨機存取記憶體122列,其中N大於等於2。也就是說,對於各個橫 向二維輸入部分(即輸入5802之H個列中一給定列之全部C個通道),資料隨機存取記憶體122之N個列被用於裝載此給定列之C個通道之輸入方塊5902,並且,這C個通道向上分配給N個資料隨機存取記憶體列。這C個通道分割散布之資料隨機存取記憶體122之列數,即N,是C之上取整(ceiling)函數除以G。舉例來說,假定C=200且G=64;對於關聯於輸入5802之H個列中一給定列之一給定橫向二維部分之全部C=200個通道,會有N=ceiling(200/64)=4個不同之資料隨機存取記憶體122列用於裝載輸入方塊5902;對於關聯於輸入5802之全部H個列中所有列之全部C=200個通道,資料隨機存取記憶體122總共會有HxN個列用於裝載輸入方塊5902。相較之下,第六十一與六十四圖之範例只需要單一個資料隨機存取記憶體122列,因為C=20小於G=64。對於前面數起之N-1個列中之每一列,不會存在間隙,並且全部的神經處理單元方塊5906都會被用於產生卷積結果。不過,對於資料隨機存取記憶體122之N個列中之最後列,若是C並非G之一因數,裝載於最後一個資料隨機存取記憶體122列之剩餘通道數量就會少於G,在此情況下,此N個列中之最後列會以如前述第一種情況與第二種情況之方式處理。在第三種情況中,第六十圖之虛擬程式碼 係經調整加入一第五迴圈於迴圈2內。也就是說,第五迴圈包含迴圈3以及列8中,先於迴圈3,將資料隨機存取記憶體122列讀入多工暫存器208之操作。此第五迴圈會重複N次,如此,對於N個資料隨機存取記憶體122列中之各個列而言,該列會被讀入多工暫存器208並執行迴圈3之一次操作。對於此第五迴圈之前面N-1次重複執行,迴圈3之執行計數為G;對於此第五迴圈之N次重複執行中之最後一次,迴圈3之執行計數為C模除G,如果有就再加上間隙數。因此,完成一次第五迴圈之操作後(如,對應於迴圈2之每一次重複執行),每一個神經處理單元126之累加器202內就會累加另一個欄通道加總。換句話說,迴圈2之每一次重複係隱含著一個橫向之二維輸入部分(即輸入5802之H個列中一給定列之全部C個通道)與一個橫向之二維濾波器部分(即濾波器5804之R個列中一給定列之全部C個通道)。對於全部C個通道中之各個通道而言,欄通道加總即為對於此隱含之橫向二維輸入部分中此通道之部分以及此隱含之橫向二維濾波器部分中此通道之部分進行卷積運算以產生一欄加總並連續地累加全部C個通道之欄加總以產生欄通道加總之執行結果。
在第四個情況中,F大於G。這F個濾波器分割成N-1個由G個濾波器構成之群 組,以及最後第N個,由F模除G個濾波器構成之群組,這些由G(或F%G)個濾波器構成之群組係依據通道數量於前述三種情況選擇其一予以執行。在第一實施例中,對於濾波器之N個群組中之一給定群組,所有的Q個輸入列(即所有的Q個欄通道列加總或卷積結果)係在移動至下一個濾波器群組前,經計算並寫入資料隨機存取記憶體122。也就是說,虛擬程式碼之第一次操作是針對此N個群組中之第一個群組,隨後虛擬程式碼之第二次操作是針對此N個群組中之第二個群組,依此類推,直到虛擬程式碼完成對於全部F個濾波器之N個群組之操作。在第二實施例中,對於所有的N個濾波器群組,Q個輸出列之其中之一係在移動至下一個濾波器群組前,經計算並寫入資料隨機存取記憶體122。也就是說,迴圈1之第一次操作會對於全部F個濾波器之N個群組中之每一個群組,產生這Q個輸出列中之第一個輸出列,接下來,迴圈1之第二次操作會對於全部F個濾波器之N個群組中之每一個群組,產生這Q個輸出列中之第二個輸出列,依此類推,直到迴圈1之操作對於全部F個濾波器之N個群組中之每一個群組,產生所有的Q個輸出列。此二個實施例何者為優,會受到許多因素影響,包括可由非架構程式與/或架構程式取用之資料隨機 存取記憶體122與權重隨機存取記憶體124量。 不過,較佳地,如前所述,個別的卷積欄通道列加總值會全部產生於神經處理單元126累加器202內,而不在資料隨機存取記憶體122(或權重隨機存取記憶體124)內寫入任何中間部分加總值然後再讀回這些數值。如此處理可以避免降低卷積欄通道列加總運算之精確度。此外,由於對於資料隨機存取記憶體122與權重隨機存取記憶體124之存取動作會耗費時間,如此處理亦有助於節省時間。
由此可以觀察到,在此描述以欄通道列之順序進行卷積並將不同之輸入方塊5902沿著神經處理單元方塊5906利用多工暫存器208旋轉器進行旋轉之實施例,係優於傳統以欄列通道之順序進行而不具有多工暫存器208旋轉器之卷積。此實施例並隱含有減少對記憶體進行存取以讀取輸入5802資料之次數的優點。 請參照第六十圖之虛擬程式碼,對於資料隨機存取記憶體122單一次存取動作所取得之輸入5802資料,會執行SxC個乘法累加操作,舉例來說,在第六十四圖之實施例中即5x20=100個乘法累加操作。此實施例並隱含有減少儲存輸入5802資料之記憶體數量之優點,這是因為傳統方式需要複製輸入5802資料配合以欄列通道順序進行之卷積運算。此傳統方法所需對於輸 入5802資料之複製動作會需要由架構程式取得額外頻寬並會使用更多之記憶體頻寬。
隨然在前述實施例中,神經網路單元121具有之權重隨機存取記憶體124與資料隨機存取記憶體122為各自獨立之記憶體,不過,本發明並不限於此,權重與輸入資料儲存於神經網路單元121之單一個記憶體之實施例亦屬於本發明之範疇。相較於具有獨立之權重隨機存取記憶體124與資料隨機存取記憶體122之實施例,能夠對二個記憶體併行進行存取動作,此單一個記憶體之實施例會產生對於記憶體之爭奪情形並且須要對此記憶體之存取順序進行排序,而可能導致效能降低,不過,此實施例可能較具有成本效益。此外,為了說明本發明,前述實施例中之神經網路具有特定之超參數組合(例如,H=W=12,C=20,F=50,R=S=5,P=Q=8,有效卷積)並且係執行於一特定神經網路單元121配置(例如,1024或2048個神經處理單元126),不過,本發明並不限於此,其他具有不同超參數組合與不同神經網路單元121硬體配置之實施例亦屬於本發明之範疇,只要這些硬體配置可以有效率地執行神經處理單元/輸入/濾波器方塊與多工暫存器208旋轉器之運作,將輸入方塊5902依照欄通道列迴圈之順序沿著神經網路單元121旋轉,以產生欄通道列 加總,或稱卷積結果。
多文字距離旋轉
現在請參照第七十圖,圖中顯示一方塊圖,描述本發明支援多文字距離轉動運算之另一個實施例之神經處理單元126之一部分。第七十圖包括一神經處理單元126之一多工暫存器208。此神經處理單元126係神經網路單元121中由N個神經處理單元126構成之陣列之其中之一,並以神經處理單元J表示。第七十圖中之多工暫存器208在許多方面係類似於第七圖之多工暫存器208,包含一輸入207以接收來自資料隨機存取記憶體122之一資料文字,並具有一控制輸入213與一輸出209。不過,不同於第七圖之實施例只具有單一個來自相鄰神經處理單元126之輸入,第七十圖之多工暫存器208具有五個輸入來自五個相鄰之神經處理單元126。第一個輸入211-1是來自神經處理單元J-1之輸出209,即與當前之神經處理單元126距離為一之神經處理單元126,如同第七圖之實施例中之輸入211。第二個輸入211-2是來自神經處理單元J-2之輸出209,即與當前之神經處理單元126距離為二之神經處理單元126。第三個輸入211-4是來自神經處理單元J-4之輸出209,即與當前之神經處理單元126距離為四之神經處 理單元126。第四個輸入211-8是來自神經處理單元J-8之輸出209,即與當前之神經處理單元126距離為八之神經處理單元126。第五個輸入211-16是來自神經處理單元J-16之輸出209,即與當前之神經處理單元126距離為十六之神經處理單元126。控制輸入213之運作會在輸入207,211-1,211-2,211-4,211-8與211-16中選擇其一提供於輸出209。如此,由神經網路單元121執行之一非架構指令即可完成一多文字距離轉動運算,即控制輸入由輸入211-2,211-4,211-8與211-16中擇一提供於輸出209。 如此處理有助於縮減前述執行三維卷積之非架構程式之大小並增加其效率,如第六十,六十三,六十五,六十七與六十九圖中列19之對準轉動運作。
雖然在第七十圖之實施例中,多工暫存器208具有五個輸出以接收來自五個不同之相鄰神經處理單元126之輸出209,而這五個神經處理單元126與當前神經處理單元126之距離為一,二,四,八與十六,不過,本發明並不限於此,多工暫存器208具有較多或較少數量(如三,四,六,七)輸入以接收來自不同數量與不同距離之相鄰神經處理單元126之輸出209之其他實施例亦屬於本發明之範疇。舉例來說,在一實施例中,多工暫存器208不包含輸入 211-2與211-16。此外,雖然在第七十圖之實施例中,距離為二的次方,不過,本發明並不限於此,其中某些距離並非二之次方之實施例亦屬於本發明之範疇。
在其他實施例中,多工暫存器208也用於接收並選擇第二十三圖之一相鄰窄文字輸入1811以支援窄/漏斗配置之特徵,並且/或接收並選擇第四十九圖之輸出暫存器1104輸入4905以支援輸出暫存器1104回饋之特徵。為了簡化說明,在第七十圖中係省略這些輸入。此外,雖然圖中並未顯示,不過,權重多工暫存器705亦可以類似於第七十圖之多工暫存器208之方式進行配置,即配置為接收並選擇來自多文字距離之相鄰神經處理單元126之輸出203。
現在請參照第七十一圖,圖中顯示四個指令,描述神經網路單元121之多文字距離轉動特性,此神經網路單元121包含多個具有如第七十圖所示之多工暫存器208之神經處理單元126。這四個指令中之每一個指令會設定一乘法累加算術邏輯單元運算,接收其來自於權重隨機存取記憶體124之當前列之次一個列之權重文字,並透過第七十圖之多工暫存器208接收其來自於一相鄰距離分別為二,四,八與十六之神經處理單元126之資料文字;也就是說,這四個指令中之第一個指令會指示N個神經處理 單元126中之每一個神經處理單元126分別在輸入211-2,211-4,211-8或211-16中進行選擇(例如透過控制輸入213)。非架構程式內可包含一個或多個此種指令,如此,非架構程式可利用如前述第六十,六十三,六十五,六十七與六十九圖中之虛擬程式碼執行列19之對準旋轉運作。除了前述乘法累加運算,此非架構指令可執行其他算術邏輯單元運算,例如加法,乘法,取最大值,取最小值,無操作(no-op)。特別是,無操作算術邏輯單元運算可以單純將從資料隨機存取記憶體122讀取之列沿著N個神經處理單元126旋轉,而不影響累加器202,如此處理在對準旋轉(例如列19)之旋轉量(即旋轉之文字數)不直接受到多工暫存器208支援之情況下特別有用。舉例來說,若是旋轉量為十一,在一個數值為八之乘法累加旋轉後,會需要一個數值為一之無操作旋轉接著一個數值為二之無操作旋轉。此外,在一實施例中,神經處理單元126之權重文字裝載於一個類似於第七圖之多工暫存器705之多工暫存器,此多工暫存器係包含於一個N個文字之旋轉器以對於接收自權重隨機存取記憶體124之一列權重進行旋轉,並且此多工暫存器係經提升以接收來自多個距離不等(例如一,二,四,八與十六)之不同相鄰神經處理單元126之輸出209作為其輸 入,類似於第七十圖之多工暫存器208。此外,指定一多文字距離轉動運算之非架構指令可指定一大於一之計數值,例如第四圖中位於位址2之非架構指令所設定之COUNT=511。
可尺寸重調記憶體與可分割旋轉器模式
由前述實施例可以發現,透過神經網路之執行,神經網路單元121可提供非常高效能的計算。這是因為陣列內之神經處理單元126數量非常多,記憶體122/124具有相當大的寬度以搭配陣列之寬度,並且資料隨機存取記憶體122所提供之資料列可旋轉至所有神經處理單元126用於搭配不同權重進行算術運算,例如:乘法累加運算,而在每秒鐘造成非常大量的計算。由此可以理解並確認,在許多深度學習之應用中,關於節點數之考量會產生動機提供一個具有更大神經處理單元126陣列與伴隨而來更寬之記憶體的實施例。例如,神經處理單元126之數量與記憶體122/124文字之數量為4096之實施例。
不過,在一給定神經網路中,某些層出現節點數減少之情形,特別是網路中較深之層,並非罕見,例如執行共源運作。此外,某些LSTM層會傾向於比其他類型之層來的窄。因此,對於這麼寬的神經處理單元126陣列 而言,可能會產生神經處理單元126陣列與/或記憶體122/124無法被完全使用之情況,也就是某些記憶體122/124欄與/或神經處理單元126會是不被使用的。不過,以下描述之實施例有利於在此情況下提升神經網路單元121使用率。特別是將多個神經處理單元126之多工暫存器208構成之N個文字之旋轉器分割為多個旋轉器之實施例,如兩個N/2個文字之旋轉器或四個N/4個文字之旋轉器。此外,在某些實施例中,則是重新調整一個或多個記憶體122/124之大小使其變窄變高,而讓記憶體122/124內之儲存空間可以被充分使用,這些實施例特別有利於需要大量權重與資料文字之網路。在必須使用較高的隨機存取記憶體(例如權重隨機存取記憶體124)才能使一給定層與/或網路之所有權重配合權重隨機存取記憶體124,而較寬且較短之權重隨機存取記憶體124無法最佳地配合之情況下,此處理方式特別有用,這是因為,此處理方式可以避免將權重組移入移出權重隨機存取記憶體124,而有助於當許多不同批次之輸入需要在緊密鄰接之短暫時間內依序執行之情形。最後,在一實施例中則是結合旋轉器分割與記憶體尺寸重調。
現在請參照第七十二圖,圖中顯示一方塊圖,描述第一圖之一神經處理單元126。 第七十二圖之神經處理單元126在許多方面係類似於第二與七圖之神經處理單元126之相對應部分。不過,第七十二圖之資料文字多工暫存器208會接收一個額外的輸入,以720X表示,第七十二圖之權重文字多工暫存器705會接收一個額外的輸入,以721X表示。這些額外的輸入720X與721X是用以達成對於資料隨機存取記憶體122與/或權重隨機存取記憶體124所進行之尺寸重調,對多個多工暫存器208集體構成之一個N個文字之旋轉器所進行分割操作,或是前述之各種組合,如後續對應於第七十五,七十八,八十一,八十四,八十六與八十八圖所述,例如輸入7202,7212,7204與7206。
現在請參照第七十三圖,圖中顯示一方塊圖,描述神經網路單元121執行運算所處於之一普通模式。也就是說,第七十三圖中顯示之普通模式是一個不具有隨機存取記憶體尺寸重調與旋轉器分割之模式,即類似於前述第一至七十一圖所述之模式。在此呈現出普通模式之目的是為了說明並用以與其他採用隨機存取記憶體尺寸重調與/或旋轉器分割之模式相區別。基本上,神經處理單元126陣列之寬度即為N,在第七十三圖之範例中即為4096;不過,N大於或小於此數值之其他實施例亦屬本發明之範疇。
在普通模式下,權重隨機存取記憶體124具有W個列(例如,在前述實施例中即為2048列)並且具有4096個文字之寬度。因此,如圖中所示,權重隨機存取記憶體124之位址123會具有log2W個位元(如log22048=11位元)用以對W個列進行定址。如前述,權重隨機存取記憶體124同時輸出4096個文字,如圖中所示,這些文字係給予索引為文字0-4095。在普通模式下,資料隨機存取記憶體122具有D個列(例如,在前述實施例中即為64列)並且具有4096個文字之寬度。因此,如圖中所示,資料隨機存取記憶體122之位址125會具有log2D個位元(如log264=6位元)用以對D個列進行定址。如前述,權重隨機存取記憶體124同時輸出4096個文字,其索引為文字0-4095,而資料隨機存取記憶體122同時輸出4096個文字,這些文字係輸出至如圖中所示寬度為4096之神經處理單元126陣列。控制邏輯7399產生控制信號213以控制資料多工暫存器208,並產生控制信號213以控制第七十二圖之權重多工暫存器705。 如第七十三圖所示,在普通模式下,陣列中所有神經處理單元126之多工暫存器208,例如4096個多工暫存器,會集體運作成為單一個4096個文字之旋轉器。
此模式-無論是普通模式或是任 何一個在此所述之記憶體尺寸重調與/或旋轉器分割模式-會確認控制邏輯7399產生於控制信號213/713之數值以控制資料多工暫存器208與/或權重多工暫存器705,並確認產生於控制信號7606之數值以控制第七十六圖之寫入多工器7602。此外,此模式並會確認產生給啟動信號之數值,以啟動(即啟用(activate))或中止記憶體122/124之記憶體陣列中之各種區塊(bank)(如第十六與十七圖)以達成記憶體122/124尺寸重調之目的。在一實施例中,此模式是以程式記憶體129之執行指令(例如MULT-ACCUM指令)進行設定;不過,在其他實施例,此模式則可以配置指令(configuration instruction)(例如INITIALIZE NPU指令)進行設定,舉例來說,可透過寫入控制邏輯7399內或是會提供信號至控制邏輯7299之一配置暫存器以設定模式;而在其他實施例中,此模式可由配置指令與執行指令之組合進行設定。因此,隨著指令之轉換,此模式會呈現動態變化。 產生控制信號213/713/7606之控制邏輯7399可以是序列器128(如第一圖)之一部分,而如前述,這些控制信號213/713/7606可以是一微運算3418(如第三十四圖)之一部分。此模式,特別是對應於記憶體尺寸重調之模式,中之至少一部分亦可由提供至控制邏輯7399之定址額 外位元7497/7498(如第七十四,八十三與八十五圖所示)予以確認。較佳地,額外位元7497/7498係包含於存取記憶體122/124之個別執行指令內。在一實施例中,若是額外位元7497/7498為設定(set),就表示記憶體122/124中相對應之記憶體已經進行尺寸重調至一窄高模式(narrow-tall mode)。
現在請參照第七十四圖,圖中顯示一方塊圖,描述神經網路單元121執行運算所處於之一窄高模式。執行於第七十四圖之窄高模式時,權重隨機存取記憶體124與資料隨機存取記憶體122的高度會有效地變成是普通模式下之兩倍,而寬度則是一半。權重隨機存取記憶體124變窄即表示在一次給定存取中只提供N/2個權重文字,例如4096/2=2048個權重文字;而資料隨機存取記憶體122變窄即表示在一次給定存取中只提供N/2個資料文字,例如4096/2=2048個資料文字。權重隨機存取記憶體124變高,表示其有效地定出2*W個列之位址,例如2*2048=4096個列;而資料隨機存取記憶體122變高,即表示其有效地定出2*D個列之位址,例如2*64=128個列。因此,N個文字之列中,對應於欄0至(N/2)-1之左半部列0至W-1,係給予列0至W-1之位址,而N個文字之列中,對應於欄N/2至N-1之右半部列0至W-1,係給予 列W至2*W-1之位址,而使權重隨機存取記憶體124變高,即高度變成2*W。類似地,N個文字之列中,對應於欄0至(N/2)-1之左半部列0至D-1,係給予列0至D-1之位址,而N個文字之列中,對應於欄N/2至N-1之右半部列0至D-1,係給予列D至2*D-1之位址,而使資料隨機存取記憶體122變高,即高度變成2*W。因此,在窄高模式下,權重隨機存取記憶體124之位址具有一額外位元7497,資料隨機存取記憶體122之位址具有一額外位元7498,這兩個位元都會提供至控制邏輯7399。控制邏輯7399會利用這些額外位元7497/7498來控制資料多工暫存器208與權重多工暫存器705,如此,記憶體122/124就可以有效地作為比普通模式下更窄更高之記憶體進行運作,詳如後續第七十五圖所述。雖然未呈現於第七十三圖,這些定址額外位元7497/7498之出現無關於神經網路單元121運行時所處之模式;不過,在一實施例中,這些額外位元7497/7498在普通模式下會被忽略,在另一實施例中,這些額外位元7497/7498則是在被設定為零時,標示為普通模式。在一實施例中,為了節省耗能,若是額外位元7497為零,權重隨機存取記憶體124就會中止欄N/2至N-1之運作;而若是額外位元7497為一,權重隨機存取記憶體124就會中止欄0至(N/2)-1之運作;若是 額外位元7498為零,資料隨機存取記憶體122就會中止欄N/2至N-1之運作;而若是額外位元7498為一,資料隨機存取記憶體122就會中止欄0至(N/2)-1之運作。在第七十四圖之實施例中,儘管記憶體122/124係經尺寸重調運作於窄高模式,神經處理單元陣列126則是作為一個4096個文字之旋轉器運作,而類似於普通模式。不過,在以下所述之其他實施例中(例如第八十三圖),記憶體122/124中之一個或多個記憶體經尺寸重調運作於窄高模式,而神經處理單元陣列126則可作為多個旋轉器進行運作,而非單一個旋轉器。
現在請參照第七十五圖,圖中顯示一方塊圖,詳述第七十二圖之資料多工暫存器208與權重多工暫存器705,藉以在普通模式之外,還能支援第七十四圖之窄高模式。進一步來說,第七十五圖描述一普通神經處理單元,其索引為J,表示為神經處理單元126-J,J之數值為0至(N/2)-1,也就是索引為0至(N/2)-1之神經處理單元126。資料多工暫存器208接收輸入211,即相鄰神經處理單元126 J-1之多工暫存器208之輸出209。資料多工暫存器208並接收輸入207,即資料隨機存取記憶體122輸出之資料文字J。資料多工暫存器208並接收輸入7202,即資料隨機存取記憶體122輸出之資料文字 J+(N+2)。也就是說,雖然第七十四圖描述之資料隨機存取記憶體122經尺寸重調作為一窄高記憶體(例如寬度為N/2,高度為2*D)進行運作,此D個列N個文字之記憶體122之實體連結維持不變,如此,資料隨機存取記憶體122之一N個文字之列中,由log2D定址位元123選定之欄N/2至N-1之N/2個資料文字輸出仍然會提供至神經處理單元0至(N/2)-1之資料多工暫存器208之相對應資料文字J+(N+2)輸入7202,如此,如下所述,多工暫存器208即可在定址額外位元7498為設定時,選擇資料文字J+(N/2)。權重多工暫存器705接收輸入206,即權重隨機存取記憶體124輸出之權重文字J。權重多工暫存器並接收輸入7212,即權重隨機存取記憶體124輸出之權重文字J+(N/2)。也就是說,雖然第七十四圖描述之權重隨機存取記憶體124經尺寸重調作為一窄高記憶體(例如寬度為N/2,高度為2*W)進行運作,此W個列N個文字之記憶體124之實體連結維持不變,如此,權重隨機存取記憶體124之一N個文字之列中,由log2W定址位元125選定之欄N/2至N-1之N/2個資料文字輸出,仍然會提供至神經處理單元0至(N/2)-1之權重多工暫存器705之相對應權重文字J+(N+2)輸入7212,如此,如下所述,多工暫存器705即可在定址額外位元7497為設定時,選擇 權重文字J+(N/2)。如此,舉例來說,神經處理單元37之資料多工暫存器208由輸入207接收來自資料隨機存取記憶體122之資料文字37,並由輸入7202接收資料文字2085(即37+2048),神經處理單元37之權重多工暫存器705則是由輸入206接收來自權重隨機存取記憶體124之權重文字37,並由輸入7212接收權重文字2085(即37+2048)。
運作於普通模式與窄高模式時,若是指令將旋轉器指定為其資料源(例如類似於第四,四十二與四十五圖之位址2或是第五十七圖之位址8之MULT-ACCUM ROTATE,WE ROW+1,COUNT=511指令),控制邏輯7399會在控制信號213上產生數值以選擇輸入211,即來自相鄰神經處理單元126之資料文字,提供給所有的N個神經處理單元126。運作於普通模式時,若是指令將資料隨機存取記憶體122指定為其資料源,控制邏輯7399會在控制信號213上產生一數值以選擇輸入207,即來自資料隨機存取記憶體122之資料文字J,提供給所有N個神經處理單元126。運作於窄高模式且指令將資料隨機存取記憶體122指定為其資料源時,若是額外位元7498為零,控制邏輯7399會選擇資料隨機存取記憶體122文字J 207,不過,若是額外位元7498為一,控制邏輯7399則會選擇資料隨機 存取記憶體122文字J+(N/2)7202,提供給神經處理單元0至(N/2)-1。
運作於普通模式時,若是指令將權重隨機存取記憶體124指定為其資料源,控制邏輯7399會在控制信號713上產生一數值以選擇輸入206,即來自權重隨機存取記憶體124之權重文字J。運作於窄高模式且指令將權重隨機存取記憶體124指定為其資料源時,若是額外位元7497為零,控制邏輯7399會選擇權重隨機存取記憶體124文字J 206,不過,若是額外位元7497為一,控制邏輯7399則會選擇權重隨機存取記憶體124文字J+(N/2)7212。
雖然圖中並未顯示,不過,神經處理單元N/2至N-1之多工暫存器208具有輸入211與207,但不具有額外的資料文字J+(N/2)輸入7202,而權重多工暫存器705具有輸入206,但不具有額外的權重文字J+(N/2)輸入7212。在另一個替代的實施例中,神經處理單元N/2至N-1之資料多工暫存器208可額外接收資料文字J-(N/2)作為輸入,而控制邏輯7399會在神經處理單元0至(N/2)-1接收資料文字時,讓相對應之神經處理單元N/2至N-1從資料隨機存取記憶體122接收相同的資料文字。如此,因為提供至神經處理單元0至(N/2)-1之資料會有一複本提供至神經處理單元N/2至N-1,因 此,即使不將旋轉器如同第七十七圖之實施例分割成兩半,依然能夠獲得類似的益處,也就是較短的旋轉距離。
雖然本文所述之實施例中,資料隨機存取記憶體122接收之一個資料文字列會由多個資料多工暫存器208構成之一個或多個旋轉器進行旋轉,不過,本發明並不限於此,在其他實施例中,則是將權重隨機存取記憶體124接收之一個權重文字列由多個權重多工暫存器705構成之一個或多個旋轉器進行旋轉。舉例來說,權重多工暫存器705亦可接收相鄰神經處理單元126之權重多工暫存器705輸出之權重文字203,類似於前述第七圖所示。
現在請參照第七十六圖,圖中顯示一方塊圖,描述一寫入多工器7602,在普通模式之外,還能支援第七十四圖之窄高模式。進一步來說,第七十六圖描述一普通寫入多工器7602,其索引為J+(N/2),J的數值為0至(N/2)-1,也就是說,寫入多工器7602之索引為N/2至N-1。寫入多工器7602之索引係關聯於資料隨機存取記憶體122之一列N個文字中一資料文字之索引,寫入多工器7602所提供之輸出係用以寫入資料隨機存取記憶體122之一列N個文字中,具有相同索引之資料文字。寫入多工器7602有助於在窄高模式且額外位元7498為 設定之情況下,將索引0至(N/2)-1之神經處理單元126(即神經處理單元陣列126之左半部)產生之結果寫入資料隨機存取記憶體122之一列N個文字中,欄N/2至N-1之資料文字(即資料隨機存取記憶體之右半部),寫入多工器7602並有助於在普通模式下,或是在窄高模式且額外位元7498清空之情況下,將索引N/2至N-1之神經處理單元126(即神經處理單元陣列126之右半部)產生之結果寫入資料隨機存取記憶體122之右半部之資料文字。
寫入多工器J+(N/2)7602接收輸入133J與133J+(N/2),這些輸入是啟動函數單元212/1112(舉例來說,請參照第二與十一圖)對於神經處理單元J與神經處理單元J+(N/2)之累加器202分別執行一運算(如啟動函數與/或輸出函數)產生之結果,同樣地,J的數值為0至(N/2)-1。如此,舉例來說,位於索引4000之寫入多工器7602之輸入133J接收執行於神經處理單元1952之累加器202之結果,其輸入133J+(N/2)接收執行於神經處理單元4000之累加器202之結果,亦即,J=1952,N=4096,N/2=2048,因此J+(N/2)=1952+2048=4000,4000即為寫入多工器7602之索引以及資料隨機存取記憶體122之N個文字之列中由log2D定址位元123選定之相對應資料文字之索引。控制輸入 7606控制寫入多工器7602在兩個輸入中選擇其一提供於輸出7604以寫入資料隨機存取記憶體122之文字J+(N/2),即資料隨機存取記憶體122中由N個文字構成之一個列之右半部資料文字之其中之一。進一步來說,如前述,運作於普通模式時,控制邏輯7399會產生數值於控制信號7606以選擇輸入133J+(N/2),即關聯於神經處理單元J+(N/2)之結果。運作於窄高模式時,若是額外位元7498為零,控制邏輯7399會選擇輸入133J+(N/2),不過,若是額外位元7498為一,則會選擇輸入133J,即關聯於神經處理單元J之結果。
現在請參照第七十七圖,圖中顯示一方塊圖,描述神經網路單元121執行運算可處於之一分割旋轉器(split-rotator)模式。運作於第七十七圖之分割旋轉器模式時,神經處理單元0至(N/2)-1之N/2個資料多工暫存器208會作為N/2個文字之第一旋轉器進行運作,而神經處理單元N/2至N-1之N/2個資料多工暫存器208會作為N/2個文字之第二旋轉器進行運作。在第七十七圖之實施例中,N為4096,第一旋轉器呈現為包含神經處理單元0至2047之2048個文字之旋轉器0,第二旋轉器呈現為包含神經處理單元2048至4095之2048個文字之旋轉器1。如圖中所示,神經處理單元0至2047從資料隨機存取 記憶體122接收相對應之資料文字0至2047,並從權重隨機存取記憶體124接收相對應之權重文字0至2047;神經處理單元2048至4095從資料隨機存取記憶體122接收相對應之資料文字2048至4095,並從權重隨機存取記憶體124接收相對應之權重文字2048至4095。進一步來說,運作於分割旋轉器模式時,旋轉器0會將先前由資料隨機存取記憶體122之左半部讀取之2048個資料文字沿著神經處理單元0至2047旋轉,旋轉器1會將先前由資料隨機存取記憶體122之右半部讀取之2048個資料文字沿著神經處理單元2048至4095旋轉。分割旋轉器模式可以使神經網路更有效率地執行於網路或至少其中某些層太窄而無法使用N個神經處理單元126構成之陣列中超過半數之神經處理單元的情形。也就是說,在分割旋轉器模式下,兩個不同的資料組會呈現於資料隨機存取記憶體122之兩個半部,兩個不同的相對應權重組會呈現於權重隨機存取記憶體124之兩個半部,也就是,N個欄中之左半部具有第一資料組,N個欄中之右半部具有第二資料組,N個欄中之左半部具有第一資料權重,N個欄中之右半部具有第二權重組。舉例來說,第一與第二資料組可以是關聯於兩個不同的影像或同一個影像中兩個不同的部分。在另一個範例中,第一與第二資料組可 以是關聯於在不同時段接收之兩個不同的輸入,例如提供時間遞歸神經網路處理之輸入,不過,這些輸入之時間並不互相關聯。
現在請參照第七十八圖,圖中顯示一方塊圖,詳述神經處理單元0與神經處理單元N/2內之第七十二圖之資料多工暫存器208,以126-0與126-N/2表示,以及神經處理單元J之一普通(generic)資料多工暫存器208,以126-J表示,藉以在普通模式外,還能支援第七十七圖之分割旋轉器模式。如同第七十二圖之多工暫存器208,在第七十八圖中,神經處理單元0之資料多工暫存器208接收輸入211與輸入207,輸入211即為相鄰神經處理單元126N-1之多工暫存器208之輸出209,輸入207即為資料隨機存取記憶體122輸出之資料文字0。神經處理單元0之資料多工暫存器208並接收額外輸入7204,此輸入即為神經處理單元126(N/2)-1之多工暫存器208之輸出209,在第七十七圖N=4096之實施例中,此神經處理單元即為神經處理單元2047。類似地,神經處理單元N/2(例如2048)之資料多工暫存器208接收輸入211與輸入207,輸入211即為相鄰神經處理單元126(N/2)-1之多工暫存器208之輸出209,輸入207即為資料隨機存取記憶體122輸出之資料文字N/2,神經處理單元N/2之資料多工暫存器208 並接收額外輸入7204,此輸入即為神經處理單元126N-1之多工暫存器208之輸出209,在第七十七圖N=4096之實施例中,此神經處理單元即為神經處理單元4095。如第七十八圖所示,剩下的神經處理單元126-J(也就是神經處理單元0與N/2以外之其他神經處理單元)之資料多工暫存器208也具有輸入211與207,但不具有額外的資料文字輸入7204。
運作於普通模式與分割旋轉器模式時,若是指令將資料隨機存取記憶體122指定為其資料源,控制邏輯7399會在控制信號213上產生一數值以選擇輸入207,即相對應資料隨機存取記憶體122列之文字,提供給所有N個神經處理單元126。運作於普通模式且指令將旋轉器指定為其資料源時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入211,即來自於相鄰神經處理單元126之資料文字,提供給所有N個神經處理單元126。運作於分割旋轉器模式且指令將旋轉器指定為其資料源時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入7204,對於神經處理單元0而言,此輸入即為來自於神經處理單元(N/2)-1之資料文字,對於神經處理單元N/2而言,此輸入即為來自於神經處理單元N-1之資料文字,而對於剩下的神經處理單元126,控制邏輯7399會在控制信號 213上產生一數值以選擇輸入211。
現在請參照第七十九圖,圖中顯示一方塊圖,描述N=4096個神經處理單元126之多工暫存器208,耦接作為單一個4096文字之旋轉器以選擇性執行於普通模式,或作為兩個2048文字之旋轉器選擇性執行於分割旋轉器模式。類似於第三圖之方式,N=4096個神經處理單元126中之每一個神經處理單元會接收其相對應資料隨機存取記憶體122文字J之輸入以及來自於其相鄰神經處理單元J-1之資料文字輸入211。也就是說,神經處理單元1之輸入211會接收神經處理單元2輸出209,神經處理單元1之輸入211會接收神經處理單元1之輸出209,依此類推,神經處理單元4095之輸入211會接收神經處理單元4094之輸出209,神經處理單元0之輸入211會接收神經處理單元4095之輸出209。此外,神經處理單元0並會接收神經處理單元2047之輸出209作為其額外輸入7204,神經處理單元2048並會接收神經處理單元4095之輸出209作為其額外輸入7204。運作於普通模式時,控制信號213會使4096個神經處理單元126中之每一個神經處理單元選擇其相對應輸入211以產生單一個4096個文字之旋轉器;不過,運作於分割旋轉器模式時,控制信號213則會使神經處理單元0與神經處理單元2048改為選擇其額 外輸入7204以產生兩個2048個文字之旋轉器。
現在請參照第八十圖,圖中顯示一方塊圖,描述神經網路單元121執行運算可處於之一第二分割旋轉器模式。運作於第八十圖之第二分割旋轉器模式時,神經處理單元0至(N/4)-1之N/4個資料多工暫存器208會做為N/4個文字之第一旋轉器運作,神經處理單元N/4至(N/2)-1之N/4個資料多工暫存器208會做為N/4個文字之第二旋轉器運作,神經處理單元N/2至(3N/4)-1之N/4個資料多工暫存器208會做為N/4個文字之第三旋轉器運作,神經處理單元3N/4至N-1之N/4個資料多工暫存器208會做為N/4個文字之第四旋轉器運作。在第八十圖之實施例中,N為4096,第一旋轉器呈現為包含神經處理單元0至1023之1024個文字之旋轉器0,第二旋轉器呈現為包含神經處理單元1024至2047之1024個文字之旋轉器1,第三旋轉器呈現為包含神經處理單元2048至3071之1024個文字之旋轉器2,第一旋轉器呈現為包含神經處理單元3072至4095之1024個文字之旋轉器3。如圖中所示,神經處理單元0至1023接收來自資料隨機存取記憶體122之相對應資料文字0至1023以及來自權重隨機存取記憶體124之相對應權重文字0至1023,神經處理單元1024至2047接收來自資料隨機存取記憶體122之相對應資料文字 1024至2047以及來自權重隨機存取記憶體124之相對應權重文字1024至2047,神經處理單元2048至3071接收來自資料隨機存取記憶體122之相對應資料文字2048至3071以及來自權重隨機存取記憶體124之相對應權重文字2048至3071,神經處理單元3072至4095接收來自資料隨機存取記憶體122之相對應資料文字3072至4095以及來自權重隨機存取記憶體124之相對應權重文字3072至4095。進一步來說,運作於第二分割旋轉器模式時,旋轉器0會將先前由一4096個文字之資料隨機存取記憶體122列之欄0至1023讀取之1024個資料文字沿著神經處理單元0至1023旋轉,旋轉器1會將先前由一4096個文字之資料隨機存取記憶體122列之欄1024至2047讀取之1024個資料文字沿著神經處理單元1024至2047旋轉,旋轉器2會將先前由一4096個文字之資料隨機存取記憶體122列之欄2048至3071讀取之1024個資料文字沿著神經處理單元2048至3071旋轉,旋轉器3會將先前由一4096個文字之資料隨機存取記憶體122列之欄3072至4095讀取之1024個資料文字沿著神經處理單元3072至4095旋轉。如此,第二分割旋轉器模式可以使神經網路更有效率地執行於網路或至少其中某些層太窄而無法使用N個神經處理單元126構成之陣列中超過四分之一之神經處理 單元的情形。
現在請參照第八十一圖,圖中顯示一方塊圖,詳述神經處理單元0,神經處理單元N/4,神經處理單元N/2與神經處理單元3N/4(例如神經處理單元0,神經處理單元1024,神經處理單元2048,神經處理單元3072)內之第七十二圖之資料多工暫存器208,這些神經處理單元分別以126-1,126-N/4,126-N/2,126-3N/4表示,藉以在普通模式外,還能支援第七十七與八十圖所示之第一與第二分割旋轉器模式。如同第七十八圖所示,第八十一圖中之神經處理單元0之資料多工暫存器208接收輸入211,輸入207,以及額外輸入7024。在第八十一圖中,神經處理單元0並接收額外輸入7026以促進第二分割旋轉器模式之執行,此輸入7026係神經處理單元126(N/4)-1多工暫存器208之輸出209,在第八十圖N=4096之實施例中,此神經處理單元即為神經處理單元1023。類似地,神經處理單元N/2(如2048)之資料多工暫存器208接收輸入211,輸入207,以及額外輸入7024。在第八十一圖中,神經處理單元N/2並接收額外輸入7206以促進第二分割旋轉器模式之執行,此輸入7026係神經處理單元126(3N/4)-1多工暫存器208之輸出209,在第八十圖之實施例中,此神經處理單元即為神經處理單元3071。
此外,神經處理單元N/4之資料多工暫存器208接收輸入211,輸入207,以及額外輸入7206以促進第二分割旋轉器模式之執行,此輸入7026係神經處理單元126(N/2)-1多工暫存器208之輸出209,在第八十圖之實施例中,此神經處理單元即為神經處理單元2047;並且,神經處理單元3N/4之資料多工暫存器208接收輸入211,輸入207,以及額外輸入7206以促進第二分割旋轉器模式之執行,此輸入7026係神經處理單元126N-1多工暫存器208之輸出209,在第八十圖之實施例中,此神經處理單元即為神經處理單元4095。剩下的神經處理單元(也就是神經處理單元0,神經處理單元N/4,神經處理單元N/2與神經處理單元3N/4以外之其他神經處理單元)之資料多工暫存器208雖未見於第八十一圖,這些資料多工暫存器也具有輸入211與207,但不具有額外的資料文字輸入7204以及7026。
運作於普通模式,第一分割旋轉器模式與第二分割旋轉器模式時,若是指令將資料隨機存取記憶體122指定為其資料源,控制邏輯7399會在控制信號213上產生一數值以選擇輸入207,即相對應資料隨機存取記憶體122列之文字,提供給所有N個神經處理單元126。運作於普通模式且指令將旋轉器指定為其資料源 時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入211,即來自於相鄰神經處理單元126之資料文字,提供給所有N個神經處理單元126。運作於第一分割旋轉器模式且指令將旋轉器指定為其資料源時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入7204,對於神經處理單元0而言,此輸入即為來自於神經處理單元(N/2)-1之資料文字,對於神經處理單元N/2而言,此輸入即為來自於神經處理單元N-1之資料文字,而對於剩下的神經處理單元126,控制邏輯7399會在控制信號213上產生一數值以選擇輸入211。運作於第二分割旋轉器模式且指令將旋轉器指定為其資料源時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入7206,對於神經處理單元0而言,此輸入即為來自於神經處理單元(N/4)-1之資料文字,對於神經處理單元N/4而言,此輸入即為來自於神經處理單元(N/2)-1之資料文字,對於神經處理單元N/2而言,此輸入即為來自於神經處理單元(3N/4)-1之資料文字,對於神經處理單元3N/4而言,此輸入即為來自於神經處理單元N-1之資料文字,而對於剩下的神經處理單元126,控制邏輯7399會在控制信號213上產生一數值以選擇輸入211。
現在請參照第八十二圖,圖中顯示 一方塊圖,描述N=4096個神經處理單元126之多工暫存器208,耦接作為單一個4096個文字之旋轉器以選擇性執行於普通模式,或做為兩個2048個文字之旋轉器選擇性執行於第一分割旋轉器模式,或做為四個1024個文字之旋轉器選擇性執行於第二分割旋轉器模式。類似於第七十九圖,N=4096個神經處理單元126中之每一個神經處理單元都會接收其相對應資料隨機存取記憶體122文字J輸入207以及來自其相鄰神經處理單元J-1之資料文字輸入211。也就是說,神經處理單元1接收神經處理單元2之輸出209作為其輸入211,神經處理單元1接收神經處理單元1之輸出209作為其輸入211,依此類推,神經處理單元4095接收神經處理單元4094之輸出209作為其輸入211,而神經處理單元0接收神經處理單元4095之輸出209作為其輸入211。類似於第七十九圖,神經處理單元0並會接收神經處理單元2047之輸出209作為其額外輸入7204,神經處理單元2048並會接收神經處理單元4095之輸出209作為其額外輸入7204。此外,神經處理單元0並會接收神經處理單元1023之輸出209作為其額外輸入7206,神經處理單元1024並會接收神經處理單元2047之輸出209作為其額外輸入7206,神經處理單元2048並會接收神經處理單元3071之輸出209作為其額外輸 入7206,神經處理單元3072並會接收神經處理單元4095之輸出209作為其額外輸入7206。運作於普通模式時,控制信號213會使4096個神經處理單元126中之每一個神經處理單元選擇其相對應輸入211以產生單一個4096個文字之旋轉器;運作於第一分割旋轉器模式時,控制信號213則會使神經處理單元0與神經處理單元2048改為選擇其額外輸入7204以產生兩個2048個文字之旋轉器;運作於第二分割旋轉器模式時,控制信號213則會使神經處理單元0,1024,2048與3072改為選擇其額外輸入7206以產生四個1024個文字之旋轉器。
現在請參照第八十三圖,圖中顯示一方塊圖,描述神經網路單元121執行運算可處於之一混合模式。運作於第八十三圖之混合模式時,如圖中所示,權重隨機存取記憶體124-如同於窄高模式-的高度會有效地變成是普通模式下之兩倍,而寬度則是一半,不過,資料隨機存取記憶體122會維持普通模式下之N個資料文字之寬度與D個列之高度,而旋轉器-如同於分割旋轉器模式-會分割為兩個N/2個文字之旋轉器。因此,如同於窄高模式,此模式下之權重隨機存取記憶體124會接收提供給控制邏輯7399定址額外位元7497。運作於第八十三圖之混合模式時,神經處理單元0至 (N/2)-1之N/2個資料多工暫存器208會作為一個N/2個文字之第一旋轉器運作,神經處理單元N/2至N-1之N/2個資料多工暫存器208會作為一個N/2個文字之第二旋轉器運作,如同第七十七圖所示。如圖中所示,神經處理單元0至2047接收來自資料隨機存取記憶體122之相對應資料文字0至2047以及來自權重隨機存取記憶體124之相對應權重文字0至2047,神經處理單元2048至4095接收來自資料隨機存取記憶體122之相對應資料文字2048至4095;不過,不同於第七十七圖,在此模式下,神經處理單元2048至4095也是接收來自權重隨機存取記憶體124之相對應權重文字0至2047。如同運作於分割旋轉器模式,運作於混合模式時,旋轉器0會將先前由資料隨機存取記憶體122列之左半部讀取之2048個資料文字沿著神經處理單元0至2047旋轉,旋轉器1會將先前由資料隨機存取記憶體122列之右半部讀取之2048個資料文字沿著神經處理單元2048至4095旋轉。不過,這些由所有神經處理單元126執行之運算,也可以搭配高度較高之權重隨機存取記憶體124內裝載之一共同權重組執行,因此,對於一給定窄資料組,即寬度為N/2個資料文字之資料組,可裝載普通模式下之兩倍數量之權重。因此,混合模式可以使神經網路更有效率地執行於網路或至少其 中某些層太窄而無法使用N個神經處理單元126構成之陣列中超過半數之神經處理單元的情形。也就是說,在混合模式下,兩個不同之資料組會呈現於資料隨機存取記憶體122之兩半,也就是說,在N個欄之左半部會呈現一第一資料組,在N個欄之右半部會呈現一第二資料組,而這兩個資料組會共用權重隨機存取記憶體124內同一個權重組,而因為所使用之權重隨機存取記憶體124高度較高,因而可以有效地加大此共用權重組。舉例來說,第一與第二資料組可以是關聯於兩個不同的影像或同一個影像中兩個不同的部分,而神經網路利用相同的權重進行處理。在另一個範例中,第一與第二資料組可以是關聯於在不同時段接收之兩個不同的輸入,例如提供時間遞歸神經網路處理之輸入,不過這些輸入之時間並不互相關聯,而神經網路利用相同的權重進行處理。
現在請參照第八十四圖,圖中顯示一方塊圖,詳述第七十二圖之資料多工暫存器208與權重多工暫存器705,藉以在普通模式外,還能支援第八十三圖所示之混合模式。第八十四圖顯示神經處理單元0與神經處理單元N/2之資料多工暫存器208(例如神經處理單元0與神經處理單元2048),這些神經處理單元分別以126-0與126-N/2表示,這些資料多工暫存器 208相同於前述第七十八圖之資料多工暫存器,以支援第八十三圖中之旋轉器分割。此外,第八十四圖並顯示神經處理單元126-J之一權重多工暫存器705,其中J=0至(N/2)-1,此權重多工暫存器相同於前述第七十五圖之權重多工暫存器,以支援第八十三圖中權重隨機存取記憶體124之尺寸重調。最後,第八十四圖並顯示神經處理單元126-J之一權重多工暫存器705,而其中J=N/2至N-1,以支援第八十三圖中權重隨機存取記憶體124之尺寸重調,並從尺寸重調後之權重隨機存取記憶體124提供共用之權重文字組至神經處理單元陣列126之右半部,即提供至神經處理單元N/2至N-1。
神經處理單元126-J之權重多工暫存器705,其中J=N/2至N-1,接收輸入206,此輸入即權重隨機存取記憶體124輸出之權重文字J。此權重多工暫存器705並接收輸入7214,此輸入即權重隨機存取記憶體124輸出之權重文字J-(N/2)。因此,舉例來說,位於索引J=3707之神經處理單元之權重多工暫存器705之輸入206會接收來自權重隨機存取記憶體124位於索引3707之權重文字,其輸入7214會接收來自權重隨機存取記憶體124位於索引1659之權重文字(即J-(N/2)=3707-2048=1659)。
運作於普通模式時,若是指令將旋 轉器指定為其資料源,控制邏輯7399會在控制信號213上產生數值以選擇輸入211,即來自相鄰神經處理單元126之資料文字,提供給所有的N個神經處理單元126。運作於普通模式時,若是指令將資料隨機存取記憶體122指定為其資料源,控制邏輯7399會在控制信號213上產生一數值以選擇輸入207,即來自資料隨機存取記憶體122之資料文字J,提供給所有N個神經處理單元126。運作於普通模式時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入206,即來自權重隨機存取記憶體124之權重文字J,提供給所有N個神經處理單元126。
運作於混合模式且指定將旋轉器指定為其資料源時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入7204,對於神經處理單元0而言,此輸入即為來自於神經處理單元(N/2)-1之資料文字,對於神經處理單元N/2而言,此輸入即為來自於神經處理單元N-1之資料文字,而對於剩下的神經處理單元126,控制邏輯7399會在控制信號213上產生一數值以選擇輸入211。運作於混合模式時,若是指令將資料隨機存取記憶體122指定為其資料源,控制邏輯7399會在控制信號213上產生一數值以選擇輸入207,即來自資料隨機存取記憶體122之資料文字J,提供給所有N個神經處理單元126。
運作於混合模式時,若是額外位元7497為零:(1)J=0至(N/2)-1時,控制邏輯7399會在控制信號713上產生一數值使神經處理單元J之權重多工暫存器705選擇輸入206,即來自權重隨機存取記憶體124之權重文字J;(2)J=N/2至N-1時,控制邏輯7399會在控制信號713上產生一數值使神經處理單元J之權重多工暫存器705選擇輸入7214,即來自權重隨機存取記憶體124之權重文字J-(N/2)。運作於混合模式時,若是額外位元7497為一:(1)J=0至(N/2)-1時,控制邏輯7399會在控制信號713上產生一數值使神經處理單元J之權重多工暫存器705選擇輸入7212,即來自權重隨機存取記憶體124之權重文字J+(N/2);(2)J=N/2至N-1時,控制邏輯7399會在控制信號713上產生一數值使神經處理單元J之權重多工暫存器705選擇輸入206,即來自權重隨機存取記憶體124之權重文字J。
現在請參照第八十五圖,圖中顯示一方塊圖,描述神經網路單元121執行運算可處於之一窄高半轉動(narrow-tall-half-rotate)模式。運作於第八十六圖之窄高半旋轉模式時,神經網路單元121之運作類似於窄高模式,如前文第七十四圖所述,資料隨機存取記憶體122與權重隨機存取記憶體124會經尺寸重調為較 窄且較高之記憶體。不過,在窄高半旋轉模式中,旋轉器會被有效地縮減為原本尺寸的一半,而陣列中剩餘的神經處理單元126會被關閉。進一步來說,旋轉器會被分割成一個包含神經處理單元0至(N/2)-1之N/2個文字之旋轉器,如同第七十七圖之分割旋轉器模式;不過,神經處理單元N/2至N-1則是被關閉。
現在請參照第八十六圖,圖中顯示一方塊圖,詳述第七十二圖之資料多工暫存器208與權重多工暫存器705,藉以在普通模式外,還能支援第八十五圖所示之窄高半轉動模式。第八十六圖之權重多工暫存器705相同於第七十五圖之權重多工暫存器705,並發揮相同功能。對於所有N個神經處理單元126,除了神經處理單元0,第八十六圖之資料多工暫存器208係相同於第七十五圖之資料多工暫存器208並發揮相同功能。不過,對應於神經處理單元0之第八十六圖之資料多工暫存器208具有額外輸入7204以接收來自神經處理單元(N/2)-1之資料多工暫存器208之輸出209(如同第七十八圖之神經處理單元0),如此,在窄高半旋轉模式下,即可使神經處理單元0至(N/2)-1作為一個N/2個文字之旋轉器進行運作(例如在第八十五圖中標示為旋轉器0之2048個文字之旋轉器)。也就是說,第八十六圖之資料多工暫存器 208與權重多工暫存器705在窄高半旋轉模式下之運作係相同於前述第七十五圖之窄高模式下之運作,其差異點僅在於在窄高半旋轉模式下,控制邏輯7399會在控制信號213上產生一數值使資料多工暫存器208選擇輸入7204而非輸入211。相較於窄高模式,窄高半旋轉模式具有節能之優點。
前述實施例係針對接收自資料隨機存取記憶體122之資料文字進行旋轉器分割,不過,本發明並不限於此,針對來自權重隨機存取記憶體124之權重文字進行旋轉器分割所使用之由神經處理單元126構成之旋轉器,亦可以採用類似於前述對應於資料文字旋轉器之方式,分割成兩個或更多不同的旋轉器。
在前述實施例中,資料/權重隨機存取記憶體122/124係經尺寸重調為兩倍高度與一半寬度,不過,本發明並不限於此,資料/權重隨機存取記憶體122/124經調整為不同尺寸之實施例亦屬於本發明之範疇,例如,四倍高度與四分之一寬度。而此實施例會提供另外的額外位元,例如額外位元7497/7498。舉例來說,當資料/權重隨機存取記憶體122/124經尺寸重調為四倍高度與四分之一寬度時,就需要兩個額外位元而非一個。
在前述實施例中,資料隨機存取記 憶體122於尺寸重調時,會被來自於神經處理單元陣列126之右半部或左半部之結果寫入,不過,本發明並不限於此,權重隨機存取記憶體124於尺寸重調時被來自於神經處理單元陣列126之右半部或左半部之結果寫入之實施例亦屬於本發明之範疇。
現在請參照第八十七圖,圖中顯示一方塊圖,描述神經網路單元121執行運算可處於之一分割旋轉器模式之另一實施例。第八十七圖之實施例在許多方面係類似於第七十七圖之實施例。不過,運作於第八十七圖之分割旋轉器模式時,神經處理單元0至(N/4)-1以及神經處理單元3N/4至N-1之N/2個資料多工暫存器208係集體作為一個N/2個文字之第一旋轉器進行運作,而神經處理單元N/4至(3N/4)-1之N/2個資料多工暫存器208係集體作為一個N/2個文字之第二旋轉器進行運作。在第八十七圖之實施例中,N是4096,第一旋轉器呈現為一個包含神經處理單元0至1023以及神經處理單元3072至4095之2048個文字之旋轉器0,而第二旋轉器呈現為一個包含神經處理單元1024至3071之2048個文字之旋轉器1。
如圖中所示,神經處理單元0至1023從資料隨機存取記憶體122接收相對應之資料文字0至1023並從權重隨機存取記憶體124 接收相對應之權重文字0至1023,神經處理單元1024至3071從資料隨機存取記憶體122接收相對應之資料文字1024至3071並從權重隨機存取記憶體124接收相對應之權重文字1024至3071,神經處理單元3072至4095從資料隨機存取記憶體122接收相對應之資料文字3072至4095並從權重隨機存取記憶體124接收相對應之權重文字3072至4095。進一步來說,運作於此交替分割旋轉器模式時,旋轉器0會將先前由資料隨機存取記憶體122列之左側四分之一與右側四分之一讀取之2048個資料文字沿著神經處理單元0至1023以及3072至3095旋轉,旋轉器1會將先前由資料隨機存取記憶體122列之中間二分之一讀取之2048個資料文字沿著神經處理單元1024至3071旋轉。如此,相同於第七十七圖之分割旋轉器模式之實施例,第八十七圖之交替分割旋轉器模式之實施例也可以使神經網路更有效率地執行於網路或至少其中某些層太窄而無法使用N個神經處理單元126構成之陣列中超過半數之神經處理單元的情形。也就是說,在此交替分割旋轉器模式中,兩個不同的資料組會呈現於資料隨機存取記憶體122之兩個半部,兩個不同的相對應權重組會呈現於權重隨機存取記憶體124之兩個半部,也就是,N個欄之左側四分之一與右側四分之一(也就是 欄0至(N/4)-1以及欄3N/4至N-1)之組合具有第一資料組,N個欄之中間二分之一(也就是欄N/4至(3N/4)-1)具有第二資料組,N個欄之左側四分之一與右側四分之一(也就是欄0至(N/4)-1以及欄3N/4至N-1)之組合具有第一資料權重,N個欄之中間二分之一(也就是欄N/4至(3N/4)-1)具有第二權重組。舉例來說,第一與第二資料組可以是關聯於兩個不同的影像或同一個影像中兩個不同的部分。在另一個範例中,第一與第二資料組可以是關聯於在不同時段接收之兩個不同的輸入,例如提供時間遞歸神經網路處理之輸入,不過這些輸入之時間並不互相關聯。
相較於第七十七圖之分割旋轉器模式之實施例,第八十七圖之交替分割旋轉器模式之實施例有利於縮短為達成旋轉器分割所需增設之導線路徑長度,而可享有較佳之時點,詳如後述,特別是第八十九圖。為了享有較佳之時點,需要利用軟體(也就是執行於神經網路單元121之程式或是執行於處理器100或處理核心之架構程式,而此處理器或處理核心會存取神經網路單元121並將其視為一周邊設備而非一執行單元,如美國專利申請號15366027,15366053與15366057所述)分割第一資料組並將其放置於資料隨機存取記憶體 122之欄0至(N/4)-1以及欄3N/4至N-1,並將第二資料組放置於資料隨機存取記憶體122之欄N/4至(3N/4)-1。也就是說,基本上,此軟體必須意識到構成旋轉器0(實際上,就是除了最右側之旋轉器以外之任何旋轉器)之神經處理單元126的索引並非連續不斷而必須分割並將各個資料組之片段放置於資料隨機存取記憶體之適當欄位供這些神經處理單元126之分割旋轉器處理。
現在請參照第八十八圖,圖中顯示一方塊圖,詳述神經處理單元N/4與神經處理單元3N/4(即神經處理單元1024與神經處理單元3072)內之第七十二圖之資料多工暫存器208,這些神經處理單元以神經處理單元126-N/4與126-3N/4表示,以及神經處理單元J之一普通資料多工暫存器208,此神經處理單元以神經處理單元126-J表示,藉以在普通模式外,還能支援第八十七圖之交替分割旋轉器模式。如同第七十二圖之多工暫存器208,在第八十八圖中,神經處理單元N/4之資料多工暫存器208接收輸入211,此輸入即為相鄰神經處理單元126(N/4)-1之資料多工暫存器208之輸出209,以及輸入207,此輸入即為資料隨機存取記憶體122輸出之資料文字N/4。神經處理單元N/4之資料多工暫存器208並接收額外輸入7204,此輸入即為神 經處理單元126(3N/4)-1之多工暫存器208之輸出209,在第八十七圖N=4096之實施例中,此神經處理單元即為神經處理單元3071。類似地,神經處理單元3N/4(例如3702)之資料多工暫存器208接收輸入211,此輸入即為相鄰神經處理單元126(3N/4)-1之資料多工暫存器208之輸出209,以及輸入207,此輸入即為資料隨機存取記憶體122輸出之資料文字3N/4,並且接收額外輸入7204,此輸入即為神經處理單元126(N/4)-1之多工暫存器208之輸出209,在第八十七圖N=4096之實施例中,此神經處理單元即為神經處理單元1023。如第八十八圖所示,剩下的神經處理單元126-J(也就是神經處理單元N/4與神經處理單元3N/4以外之其他神經處理單元)之資料多工暫存器208也具有輸入211與207,但不具有額外的資料文字輸入7204。
運作於普通模式與前述交替分割旋轉器模式時,若是指令將資料隨機存取記憶體122指定為其資料源,控制邏輯7399會在控制信號213上產生一數值以選擇輸入207,即相對應資料隨機存取記憶體122列之文字,提供給所有N個神經處理單元126。運作於普通模式且指令將旋轉器指定為其資料源時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入211,即來自於相鄰神經處理單元126之資料文 字,提供給所有N個神經處理單元126。運作於此交替分割旋轉器模式且指令將旋轉器指定為其資料源時,控制邏輯7399會在控制信號213上產生一數值以選擇輸入7204,對於神經處理單元N/4而言,此輸入即為來自於神經處理單元(3N/4)-1之資料文字,對於神經處理單元3N/4而言,此輸入即為來自於神經處理單元(N/4)-1之資料文字,而對於剩下的神經處理單元126,控制邏輯7399會在控制信號213上產生一數值以選擇輸入211。
現在請參照第八十九圖,圖中顯示一方塊圖,描述N=4096個神經處理單元之多工暫存器208,耦接作為單一個4096文字之旋轉器以選擇性執行於普通模式,或做為兩個2048文字之旋轉器選擇性執行於此交替分割旋轉器模式。類似於第三圖所示之方式,N=4096個神經處理單元126中之每一個神經處理單元會接收其相對應資料隨機存取記憶體122之文字J輸入207以及來自於相鄰神經處理單元J-1之資料文字輸入211。也就是說,神經處理單元1接收神經處理單元2之輸出209作為其輸入211,神經處理單元1接收神經處理單元1之輸出209作為其輸入211,依此類推,神經處理單元4095接收神經處理單元4094之輸出209作為其輸入211,而神經處理單元0接收神經處理單元4095之輸出 209作為其輸入211。此外,神經處理單元N/4並會接收神經處理單元3071之輸出209作為其額外輸入7204,神經處理單元3072並會接收神經處理單元1023之輸出209作為其額外輸入7204。運作於普通模式時,控制信號213會使4096個神經處理單元126中之每一個神經處理單元選擇其相對應輸入211以產生單一個4096個文字之旋轉器;不過,運作於分割旋轉器模式時,控制信號213則會使神經處理單元1024與神經處理單元3072改為選擇其額外輸入7204以產生兩個2048個文字之旋轉器。
第八十九圖,如同第七十九圖,係用以描述神經網路單元121之多個神經處理單元126之多工暫存器208之邏輯連接。第八十九圖(第九十圖亦同)並描述神經網路單元121之多個神經處理單元126之多工暫存器208之實體配置之一實施例。由第八十九與九十圖可以觀察到,神經處理單元126與其相關聯之多工暫存器208之實體係配置於一迴圈。也就是說,神經處理單元126之陣列本身係折疊,或反折,而使陣列126之一末端(例如神經處理單元4095)回到陣列126之起始端(例如神經處理單元0)。在第八十九圖之實施例中,神經處理單元0至2047係沿著一底部列由左而右設置,而神經處理單元2048至4095係沿著一頂部列由右而左設 置。此迴圈結構會使各個神經處理單元J實體相鄰於其邏輯相鄰之神經處理單元J-1。特別是,此迴圈結構會使神經處理單元2047與2048實體相鄰,而神經處理單元0與4095實體相鄰。此迴圈結構並會使互相連接以達成交替分割旋轉器模式之神經處理單元實體相鄰。進一步來說,此迴圈結構會使神經處理單元3072相鄰於神經處理單元1023(例如,位於正上方),並使神經處理單元1024相鄰於神經處理單元3071(例如,位於正下方)。實體上緊密相鄰的配置方式會使連接多工暫存器208之輸出209至多工暫存器208之輸入211與7204之導線路徑的長度變得相當短,而會使關聯於此導線路徑之傳播延遲變得相當短。相當短的傳播延遲有助於改善時序,例如,讓神經網路單元121能夠執行於高於神經處理單元126採用它種配置而產生較長導線路徑之情況下所能達到之最大時頻。
現在請參照第九十圖,圖中顯示一方塊圖,描述本發明一實施例之部分神經網路單元121之實體配置。第九十圖描述資料隨機存取記憶體122,權重隨機存取記憶體124,與神經處理單元陣列126。陣列126之4096個神經處理單元係依照前述第八十七至八十九圖之迴圈方式進行配置與連結。進一步來說,神經處理單元0至2047之實體係依序配置於一第一列,神 經處理單元2048至4095之實體係依序配置於相鄰於第一列之一第二列,如此神經處理單元0所在之第一列之末端就會相鄰於神經處理單元4095所在之第二列之末端,神經處理單元2047所在之第一列之末端就會相鄰於神經處理單元2048所在之第二列之末端。權重隨機存取記憶體124與資料隨機存取記憶體122之欄0至2047係配置於包含神經處理單元0至2047之神經處理單元陣列126之側邊,權重隨機存取記憶體124與資料隨機存取記憶體122之欄2048至4095係配置於包含神經處理單元2048至4095之神經處理單元陣列126之側邊。如次配置可以縮短由隨機存取記憶體122/124之各個欄連接至陣列126中其相對應神經處理單元之導線路徑。
如圖中所示,各個神經處理單元J係連接至其邏輯且實體相鄰之神經處理單元J-1,舉例來說,神經處理單元1係連接至神經處理單元0,神經處理單元2係連接至神經處理單元1,依此類推,神經處理單元4095係連接至神經處理單元4094,而神經處理單元0係連接至神經處理單元4095。進一步來說,如第八十九圖所述(在第九十圖中並未呈現),神經處理單元J之輸入211係連接至其邏輯且實體相鄰之神經處理單元J-1之多工暫存器208之輸出209。此外,神經處理單元3072係連接至神經處理單元 1023,而神經處理單元1024係連接至神經處理單元3071。進一步來說,如第八十九圖所述(在第九十圖中並未呈現),神經處理單元1023之多工暫存器208之輸出209係連接至神經處理單元3072之輸入7204,神經處理單元3071之多工暫存器208之輸出209係連接至神經處理單元1024之輸入7204。如此連結使神經處理單元陣列126在普通模式下可以作為單一個4096個文字之旋轉器進行運作,而在交替分割旋轉器模式下可以作為兩個2048個文字之旋轉器進行運作,這兩個旋轉器係以旋轉器0與旋轉器1表示。如圖中所示,旋轉器0包括神經處理單元0至1023以及3072至4095,旋轉器1包括神經處理單元1024至3071。此神經處理單元陣列126之迴圈結構會使各個神經處理單元J實體相鄰於其邏輯相鄰之神經處理單元J-1,使神經處理單元3N/4(例如神經處理單元3072)實體相鄰於神經處理單元(N/4)-1(例如神經處理單元1023),使神經處理單元N/4(例如神經處理單元1024)實體相鄰於神經處理單元(3N/4)-1(例如神經處理單元3071)。
需要理解的是,雖然第九十圖所描述的是一種幾何具規則的神經處理單元實體配置,不過,在某些方面,此實體配置也可以是幾何不規則。舉例來說,自動化設計工具用於 執行神經網路單元121之各種元件之部分設置與布線作業時,可能造成一定程度之幾何不規則。此外,雖然第九十圖中所呈現之神經處理單元126與隨機存取記憶體122/124具有一特定長寬比,不過,此僅為範例,其他不同長寬比之配置方式亦可適用於本發明。此外,就一實施例而言,一組神經處理單元可以集結設計成一實體方塊,而這些由神經處理單元構成之實體方塊可以連接於迴圈之兩個列。舉例來說,一組32個邏輯相鄰之神經處理單元(神經處理單元J至J+31)可以集結設計為一實體方塊,而64個實體方塊可以連接成一列(例如,作為神經處理單元0至2047),而另外64個實體方塊可以連接成一列(例如,作為神經處理單元2048至4095)。在此實施例中,依據32個神經處理單元構成之實體方塊之設計,此迴圈會類似於某種相似於兩列互相堆疊之緞帶糖果(ribbon candy)結構。
在第三與十九圖之實施例中,連接神經處理單元511之輸出209與神經處理單元0之輸入211之導線路徑看起來相當的長,不過,需要理解的是,這些圖示並非用以表示實體導線長度,而這些神經處理單元126之實體可以設置於一迴圈結構,如第八十九與九十圖所示,如此,連接神經處理單元511之輸出209與任何 神經處理單元之輸入211之導線路徑之實體長度就會變得相當短,而有利於時序。類似地,雖然在第七十九圖之實施例中,連接神經處理單元4095之輸出209與神經處理單元0與2048之輸入211以及連接神經處理單元2047之輸出209與神經處理單元0與2048之輸入211的導線路徑看起來相當的長,不過,需要理解的是,這些圖示並非用以表示實體導線長度,而這些神經處理單元126之實體可以設置於一迴圈結構,如第八十九與九十圖所示,如此,連接神經處理單元511之輸出209與任何神經處理單元之輸入211之導線路徑之實體長度就會變得相當短,而有利於時序。最後,雖然在第八十二圖之實施例中,連接神經處理單元4095之輸出209與神經處理單元0,2048與3072之輸入211,連接神經處理單元3071之輸出209與神經處理單元2048與3072之輸入211,連接神經處理單元2047之輸出209與神經處理單元0,1024與2048之輸入211,以及連接神經處理單元1023之輸出209與神經處理單元0與1024之輸入211的導線路徑看起來相當的長,不過,需要理解的是,這些圖示並非用以表示實體導線長度,而這些神經處理單元126之實體可以設置於一迴圈結構,如第八十九與九十圖所示,如此,連接神經處理單元511之輸出209與任何神經處理單元之輸入 211之導線路徑之實體長度就會變得相當短,而有利於時序。
此外,在第八十七至九十圖所描述之實施例中,權重隨機存取記憶體124係運作於普通模式以執行交替分割旋轉器模式,不過,本發明並不限於此,其他類似於前述第八十三圖之方式,在交替分割旋轉器模式時,權重隨機存取記憶體選擇性地運作於窄高模式之實施例亦屬於本發明之範疇。在此實施例中,軟體會以類似於前述方式,將第一資料組進行分割並將放置於資料隨機存取記憶體122之欄0至(N/4)-1以及欄3N/4至N-1,並且將第二資料組放置於資料隨機存取記憶體之欄N/4至(3N/4)-1。不過,此軟體也會將第二資料組分割為兩個半部並互換此兩個半部;也就是說,此軟體會將第二資料組之左半部放置於資料隨機存取記憶體122之欄N/2至(3N/4)-1,而將第二資料組之右半部放置於資料隨機存取記憶體122之欄N/4至(N/2)-1,如此適當的權重值就可用於這些資料組。在另一實施例中,控制邏輯7399係用以在控制信號713上產生數值,以控制權重多工暫存器705以硬體方式執行此互換。
此外,在第八十七至九十圖所描述之實施例中,係將位於神經處理單元頂部與底部列中間處之特殊神經處理單元相連,以利於 交替分割旋轉器模式之運作,也就是神經處理單元3N/4之輸入7204連接至神經處理單元(N/4)-1之輸出209,以及神經處理單元N/4之輸入7204連接至神經處理單元(3N/4)-1之輸出209,不過,本發明並不限於此,其他具有特殊神經處理單元採用以下所述之連接方式所概括的實施例,亦屬於本發明之範圍:神經處理單元K之輸入7204係連接神經處理單元K+N/2-1之輸出209,其中,K介於0與N/2-1之間,以及,神經處理單元L之輸入7204係連接神經處理單元L-N/2-1之輸出209,其中,L介於N/2與N-1之間,並且L=K+N/2。當K是N/4以外之其他數值(因而L是3N/4以外之其他數值,亦即不同於第八十七至九十圖之實施例)時,可採用不同之實體配置使神經處理單元K與神經處理單元K+N/2-1實體相鄰,並使神經處理單元K與神經處理單元L-N/2-1實體相鄰。在此實施例中,會包含有額外的折疊或彎折。較佳地,隨機存取記憶體122/124之設置,以及自動設計工具對這些神經處理單元126進行之設置與佈線,係透過最小化形成旋轉器之神經處理單元126間以及隨機存取記憶體122/124與神經處理單元126間之導線路徑,以最佳化時序。在一實施例中,隨機存取記憶體122/124係分成四個部分,而非兩個部分,舉例來說,這四個部分可設置於神 經處理單元陣列126之四邊。
現在請參照第九十一圖,顯示一方塊圖,描述本發明另一實施例之部分神經網路單元121之實體配置,此實施例係將神經處理單元陣列126分割為四個旋轉器。第九十一圖類似於第九十圖,其差異點如下所述。在第九十一圖中並未呈現資料隨機存取記憶體122與權重隨機存取記憶體124。神經處理單元3584係連接至神經處理單元511,神經處理單元512係連接至神經處理單元3583,神經處理單元1536係連接至神經處理單元2559,並且神經處理單元2560係連接至神經處理單元1535。進一步來說,雖然未見於第九十圖,神經處理單元511之多工暫存器208之輸出209係連接至神經處理單元3584之輸入7204,神經處理單元3583之多工暫存器208之輸出209係連接至神經處理單元512之輸入7204,神經處理單元2559之多工暫存器208之輸出209係連接至神經處理單元1536之輸入7204,並且神經處理單元1535之多工暫存器208之輸出209係連接至神經處理單元2560之輸入7204。此連結方式可使神經處理單元陣列126在普通模式下作為單一個4096個文字之旋轉器進行運作,或是如第九十圖所示,在交替分割旋轉器模式下作為兩個2048個文字之旋轉器進行運作,或是在一第二交替分割旋轉器模 式下作為四個1024個文字之旋轉器進行運作,這四個旋轉器表示為旋轉器0,旋轉器1,旋轉器2與旋轉器3。如圖中所示,旋轉器0包含神經處理單元0至511以及3584至4095,旋轉器1包含神經處理單元512至1023以及3072至3583,旋轉器2包含神經處理單元1024至1535以及2560至3071,而旋轉器3包含神經處理單元1526至2559。此神經處理單元陣列126之迴圈結構會使各個神經處理單元J實體相鄰於其邏輯相鄰之神經處理單元J-1,使神經處理單元3N/4(例如神經處理單元3072)實體相鄰於神經處理單元(N/4)-1(例如神經處理單元1023),使神經處理單元N/4(例如神經處理單元1024)實體相鄰於神經處理單元(3N/4)-1(例如神經處理單元3071),如同第九十圖之實施例,不過,也會使神經處理單元7N/8(例如神經處理單元3584)實體相鄰於神經處理單元(N/8)-1(例如神經處理單元511),使神經處理單元5N/8(例如神經處理單元2560)實體相鄰於神經處理單元(3N/8)-1(例如神經處理單元1535),使神經處理單元3N/8(例如神經處理單元1536)實體相鄰於神經處理單元(5N/8)-1(例如神經處理單元2559),使神經處理單元N/8(例如神經處理單元512)實體相鄰於神經處理單元(7N/8)-1(例如神經處理單元3583)。
惟以上所述者,僅為本發明之較佳實施例而已,當不能以此限定本發明實施之範圍,即大凡依本發明申請專利範圍及發明說明內容所作之簡單的等效變化與修飾,皆仍屬本發明專利涵蓋之範圍內。舉例來說,軟體可以執行本發明所述之裝置與方法的功能、製造、形塑、模擬、描述以及/或測試等。這可由一般的程式語言(如C、C++)、硬體描述語言(HDL)包含Verilog HDL,VHDL等,或是其他既有程式來達成。此軟體可以設置於任何已知的電腦可利用媒介,如磁帶、半導體、磁碟、光碟(如CD-ROM、DVD-ROM等)、網路接線、無線或是其他通訊媒介。此處描述之裝置與方法的實施例可被包含於一半導體智財核心,例如一微處理核心(如以硬體描述語言的實施方式)並且透過積體電路的製作轉換為硬體。此外,本文所描述之裝置與方法亦可包含硬體與軟體之結合。因此,本文所述的任何實施例,並非用以限定本發明之範圍。此外,本發明可應用於一般通用電腦之微處理器裝置。最後,所屬技術領域具有通常知識者利用本發明所揭露的觀念與實施例作為基礎,來設計並調整出不同的結構已達成相同的目的,亦不超出本發明之範圍。

Claims (21)

  1. 一種裝置,包含:一第一記憶體,裝載多個由N個權重文字構成之列,其中N至少是512;一第二記憶體,裝載多個由N個資料文字構成之列;一個由N個處理單元構成之陣列,該N個處理單元係賦予0至N-1之索引,索引J之處理單元包含:一暫存器;一累加器,具有一輸出;一算術單元,具有第一,第二與第三輸入,並執行一運算以產生一結果儲存於該累加器,該第一輸入接收該累加器之該輸出,該第二輸入接收該第一記憶體輸出之一相對應權重文字,該第三輸入接收該暫存器輸出之一相對應資料文字;以及一多工邏輯,接收該第二記憶體輸出之一相對應資料文字,接收處理單元J-1之該暫存器輸出之一資料文字,並輸出一選定資料文字至該暫存器,其中,對於處理單元0而言,處理單元J-1是處理單元N-1;其中,處理單元N/4之該多工邏輯並接收處理單元(3N/4)-1之該暫存器輸出之該資料文字;以及其中,處理單元3N/4之該多工邏輯並接收處理單元(N/4)-1之該暫存器輸出之該資料文字。
  2. 如申請專利範圍第1項之裝置,其中,在一第一模式,處理單元N/4之該多工邏輯選擇處理單元(3N/4)-1之該暫存器輸出之該資料文字,處理單元3N/4之該多工邏輯選擇處理單元(N/4)-1之該暫存器輸出之該資料文字,並且,剩下的處理單元之該多工邏輯選擇處理單元J-1之該暫存器輸出之該資料文字。
  3. 如申請專利範圍第2項之裝置,其中,在該第一模式,該多工邏輯擇一地選擇該第二記憶體輸出之該相對應資料文字提供至該暫存器。
  4. 如申請專利範圍第2項之裝置,其中,在一第二模式,該N個處理單元之該多工邏輯選擇處理單元J-1之該暫存器輸出之該資料文字。
  5. 如申請專利範圍第4項之裝置,其中,在該第二模式,該多工邏輯擇一地選擇該第二記憶體輸出之該相對應資料文字提供至該暫存器。
  6. 如申請專利範圍第4項之裝置,其中,在該第一模式,處理單元0至(N/4)-1與3N/4至N-1之該多工邏輯與該暫存器集體作為一個N/2個文字之第一旋轉器進行運作,並且,處理單元N/4至(3N/4)-1之該多工邏輯與該暫存器集體作為一個N/2個文字之第二旋轉器進行運作;以及其中,在該第二模式,處理單元0至N-1之該多工邏輯與該暫存器集體作為一個N個文字之旋轉器進行運作。
  7. 如申請專利範圍第2項之裝置,其中,處理單元N/8之該多工邏輯並接收處理單元(7N/8)-1之該暫存器輸出之該資料文字;其中,處理單元3N/8之該多工邏輯並接收處理單元(5N/8)-1之該暫存器輸出之該資料文字;其中,處理單元5N/8之該多工邏輯並接收處理單元(3N/8)-1之該暫存器輸出之該資料文字;其中,處理單元7N/8之該多工邏輯並接收處理單元(N/8)-1之該暫存器輸出之該資料文字;以及其中,在一第二模式:處理單元7N/8之該多工邏輯選擇處理單元(N/8)-1之該暫存器輸出之該資料文字;處理單元N/8之該多工邏輯選擇處理單元(7N/8)-1之該暫存器輸出之該資料文字;處理單元3N/4之該多工邏輯選擇處理單元(N/4)-1之該暫存器輸出之該資料文字;處理單元N/4之該多工邏輯選擇處理單元(3N/4)-1之該暫存器輸出之該資料文字;處理單元5N/8之該多工邏輯選擇處理單元(3N/8)-1之該暫存器輸出之該資料文字;處理單元3N/8之該多工邏輯選擇處理單元(5N/8)-1之該暫存器輸出之該資料文字;以及剩下的處理單元之該多工邏輯選擇處理單元J-1之該暫存器輸出之該資料文字。
  8. 如申請專利範圍第7項之裝置,其中,在該第一模式,處理單元0至(N/4)-1與3N/4至(N/4)-1之該多工邏輯與該暫存器集體作為一個N/2個文字之第一旋轉器進行運作,處理單元N/4至(3N/4)-1之該多工邏輯與該暫存器集體作為一個N/2個文字之第二旋轉器進行運作;以及其中,在該第二模式:處理單元0至(N/8)-1與7N/8至N-1之該多工邏輯與該暫存器集體作為一個N/4個文字之第一旋轉器進行運作;處理單元N/8至(N/4)-1與3N/4至(7N/8)-1之該多工邏輯與該暫存器集體作為一個N/4個文字之第二旋轉器進行運作;處理單元N/4至(3N/8)-1與5N/8至(3N/4)-1之該多工邏輯與該暫存器集體作為一個N/4個文字之第三旋轉器進行運作;以及處理單元3N/8至(5N/8)-1之該多工邏輯與該暫存器集體作為一個N/4個文字之第四旋轉器進行運作。
  9. 如申請專利範圍第1項之裝置,其中,該N個處理單元之實體係設置於一迴圈,而使:處理單元0實體相鄰於處理單元N-1;處理單元N/4實體相鄰於處理單元(3N/4)-1;處理單元N/2實體相鄰於處理單元(N/2)-1;以及處理單元3N/4實體相鄰於處理單元(N/4)-1。
  10. 如申請專利範圍第1項之裝置,其中,該N個處理單元之實體係設置於一迴圈,而使:對於J等於1至(N/2)-1與(N/2)+1至N-1而言,連接處理單元J-1之該暫存器之一輸出與接收處理單元J-1之該暫存器之該輸出之處理單元J之該多工邏輯之一輸入之一導線路徑之一長度Q大致維持相同;一長度R大致維持相同,該些具有長度R之導線路徑包括:連接處理單元N-1之該暫存器之該輸出與接收處理單元N-1之該暫存器之該輸出之處理單元0之該多工邏輯之一第二輸入之一導線路徑;連接處理單元(3N/4)-1之該暫存器之該輸出與接收處理單元(3N/4)-1之該暫存器之該輸出之處理單元N/4之該多工邏輯之一第二輸入之一導線路徑;連接處理單元(N/2)-1之該暫存器之該輸出與接收處理單元(N/2)-1之該暫存器之該輸出之處理單元N/2之該多工邏輯之一第二輸入之一導線路徑;以及連接處理單元(N/4)-1之該暫存器之該輸出與接收處理單元(N/4)-1之該暫存器之該輸出之處理單元3N/4之該多工邏輯之一第二輸入之一導線路徑。
  11. 如申請專利範圍第10項之裝置,其中R介於Q的五倍與Q的五分之一間。
  12. 一種運作一裝置之方法,該裝置具有一第一記憶體,一第二記憶體與一個由N個處理單元構成之陣列,該第一記憶體裝載多個由N個權重文字構成之列,其中N至少是512,該第二記憶體裝載多個由N個資料文字構成之列,該N個處理單元係賦予0至N-1之索引,索引J之處理單元具有一暫存器,一累加器,一算術單元與一多工邏輯,該累加器具有一輸出,該算術單元具有第一,第二與第三輸入,並執行一運算以產生一結果儲存於該累加器,該第一輸入接收該累加器之該輸出,該第二輸入接收該第一記憶體輸出之一相對應權重文字,該第三輸入接收該暫存器輸出之一相對應資料文字,該多工邏輯接收該第二記憶體輸出之一相對應資料文字,接收處理單元J-1之該暫存器輸出之一資料文字,並輸出一選定資料文字至該暫存器,其中,對於處理單元0而言,處理單元J-1是處理單元N-1,其中,處理單元N/4之該多工邏輯並接收處理單元(3N/4)-1之該暫存器輸出之該資料文字,並且,處理單元3N/4之該多工邏輯並接收處理單元(N/4)-1之該暫存器輸出之該資料文字,該方法包含:在一第一模式:利用處理單元N/4之該多工邏輯,選擇處理單元(3N/4)-1之該暫存器輸出之該資料文字;利用處理單元3N/4之該多工邏輯,選擇處理單元(N/4)-1之該暫存器輸出之該資料文字;以及利用剩下的處理單元之該多工邏輯,選擇處理單元J-1之該暫存器輸出之該資料文字。
  13. 如申請專利範圍第12項之方法,更包括:在該第一模式:利用該多工邏輯,擇一地選擇該第二記憶體輸出之該相對應資料文字提供至該暫存器。
  14. 如申請專利範圍第12項之方法,更包括:在一第二模式:利用該N個處理單元之該多工邏輯,選擇處理單元J-1之該暫存器輸出之該資料文字。
  15. 如申請專利範圍第14項之方法,更包括:在該第二模式:利用該多工邏輯,擇一地選擇該第二記憶體輸出之該相對應資料文字提供至該暫存器。
  16. 如申請專利範圍第14項之方法,更包括:在該第一模式:利用處理單元0至(N/4)-1與3N/4至N-1之該多工邏輯與該暫存器,集體作為一個N/2個文字之第一旋轉器進行運作;以及利用處理單元N/4至(3N/4)-1之該多工邏輯與該暫存器,集體作為一個N/2個文字之第二旋轉器進行運作;以及在該第二模式:利用處理單元0至N-1之該多工邏輯與該暫存器,集體作為一個N個文字之旋轉器進行運作。
  17. 如申請專利範圍第12項之方法,其中,處理單元N/8之該多工邏輯並接收處理單元(7N/8)-1之該暫存器輸出之該資料文字,處理單元3N/8之該多工邏輯並接收處理單元(5N/8)-1之該暫存器輸出之該資料文字,處理單元5N/8之該多工邏輯並接收處理單元(3N/8)-1之該暫存器輸出之該資料文字,處理單元7N/8之該多工邏輯並接收處理單元(N/8)-1之該暫存器輸出之該資料文字,該方法更包含:在一第二模式:利用處理單元7N/8之該多工邏輯,選擇處理單元(N/8)-1之該暫存器輸出之該資料文字;利用處理單元N/8之該多工邏輯,選擇處理單元(7N/8)-1之該暫存器輸出之該資料文字;利用處理單元3N/4之該多工邏輯,選擇處理單元(N/4)-1之該暫存器輸出之該資料文字;利用處理單元N/4之該多工邏輯,選擇處理單元(3N/4)-1之該暫存器輸出之該資料文字;利用處理單元5N/8之該多工邏輯,選擇處理單元(3N/8)-1之該暫存器輸出之該資料文字;利用處理單元3N/8之該多工邏輯,選擇處理單元(5N/8)-1之該暫存器輸出之該資料文字;以及利用剩下的處理單元之該多工邏輯,選擇處理單元J-1之該暫存器輸出之該資料文字。
  18. 如申請專利範圍第17項之方法,更包括;在該第一模式:利用處理單元0至(N/4)-1與3N/4至(N/4)-1之該多工邏輯與該暫存器,集體作為一個N/2個文字之第一旋轉器進行運作;以及利用處理單元N/4至(3N/4)-1之該多工邏輯與該暫存器,集體作為一個N/2個文字之第二旋轉器進行運作;以及在該第二模式:利用處理單元0至(N/8)-1與7N/8至N-1之該多工邏輯與該暫存器,集體作為一個N/4個文字之第一旋轉器進行運作;利用處理單元N/8至(N/4)-1與3N/4至(7N/8)-1之該多工邏輯與該暫存器,集體作為一個N/4個文字之第二旋轉器進行運作;利用處理單元N/4至(3N/8)-1與5N/8至(3N/4)-1之該多工邏輯與該暫存器,集體作為一個N/4個文字之第三旋轉器進行運作;以及利用處理單元3N/8至(5N/8)-1之該多工邏輯與該暫存器,集體作為一個N/4個文字之第四旋轉器進行運作。
  19. 一種裝置,包含:一第一記憶體,裝載多個由N個權重文字構成之列,其中N至少是512;一第二記憶體,裝載多個由N個資料文字構成之列;一個由N個處理單元構成之陣列,該N個處理單元係賦予0至N-1之索引,索引J之處理單元包含:一暫存器;一累加器,具有一輸出;一算術單元,具有第一,第二與第三輸入,並執行一運算以產生一結果儲存於該累加器,該第一輸入接收該累加器之該輸出,該第二輸入接收該第一記憶體輸出之一相對應權重文字,該第三輸入接收該暫存器輸出之一相對應資料文字;以及一多工邏輯,接收該第二記憶體輸出之一相對應資料文字,接收處理單元J-1之該暫存器輸出之一資料文字,並輸出一選定資料文字至該暫存器,其中,對於處理單元0而言,處理單元J-1是處理單元N-1;其中,處理單元K之該多工邏輯並接收處理單元K+N/2-1之該暫存器輸出之該資料文字,其中,K係介於0與N/2-1之間;其中,處理單元L之該多工邏輯並接收處理單元L-N/2-1之該暫存器輸出之該資料文字,其中,L係介於N/2與N-1之間;以及其中,L=K+N/2。
  20. 如申請專利範圍第19項之裝置,其中,在一第一模式,處理單元K之該多工邏輯選擇處理單元K+N/2-1之該暫存器輸出之該資料文字,處理單元L之該多工邏輯選擇處理單元L-N/2-1之該暫存器輸出之該資料文字,並且,剩下的處理單元之該多工邏輯選擇處理單元J-1之該暫存器輸出之該資料文字。
  21. 如申請專利範圍第20項之裝置,其中,在一第二模式,該N個處理單元之該多工邏輯選擇處理單元J-1之該暫存器輸出之該資料文字。
TW106140991A 2016-12-31 2017-11-24 裝置與運作裝置之方法 TWI667612B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/396,577 US10565492B2 (en) 2016-12-31 2016-12-31 Neural network unit with segmentable array width rotator
US15/396,577 2016-12-31

Publications (2)

Publication Number Publication Date
TW201826115A TW201826115A (zh) 2018-07-16
TWI667612B true TWI667612B (zh) 2019-08-01

Family

ID=58671338

Family Applications (1)

Application Number Title Priority Date Filing Date
TW106140991A TWI667612B (zh) 2016-12-31 2017-11-24 裝置與運作裝置之方法

Country Status (4)

Country Link
US (1) US10565492B2 (zh)
EP (1) EP3343464B1 (zh)
CN (1) CN108268945B (zh)
TW (1) TWI667612B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI774147B (zh) * 2019-12-09 2022-08-11 大陸商南京惟心光電系統有限公司 脈衝卷積神經網路演算法、積體電路及其製造方法、運算裝置及存儲介質

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10699189B2 (en) * 2017-02-23 2020-06-30 Cerebras Systems Inc. Accelerated deep learning
EP3388981B1 (en) * 2017-04-13 2021-09-01 Nxp B.V. Convolutional processing system
US10614357B2 (en) 2017-04-17 2020-04-07 Cerebras Systems Inc. Dataflow triggered tasks for accelerated deep learning
WO2018193370A1 (en) 2017-04-17 2018-10-25 Cerebras Systems Inc. Task activating for accelerated deep learning
US11488004B2 (en) 2017-04-17 2022-11-01 Cerebras Systems Inc. Neuron smearing for accelerated deep learning
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
CN107832839B (zh) * 2017-10-31 2020-02-14 南京地平线机器人技术有限公司 执行卷积神经网络中的运算的方法和装置
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
US11580353B2 (en) * 2018-05-04 2023-02-14 Apple Inc. Neural network processor for handling differing datatypes
US11340936B2 (en) 2018-05-04 2022-05-24 Apple Inc. Compiling and scheduling transactions in neural network processor
US11537838B2 (en) 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine
CN109063822B (zh) * 2018-07-19 2023-04-07 郑州云海信息技术有限公司 一种计算方法及计算装置
WO2020021395A1 (en) * 2018-07-25 2020-01-30 Cerebras Systems Inc. Numerical representation for neural networks
CN108984426B (zh) * 2018-08-03 2021-01-26 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
US10956814B2 (en) * 2018-08-27 2021-03-23 Silicon Storage Technology, Inc. Configurable analog neural memory system for deep learning neural network
WO2020044152A1 (en) 2018-08-28 2020-03-05 Cerebras Systems Inc. Scaled compute fabric for accelerated deep learning
WO2020044208A1 (en) 2018-08-29 2020-03-05 Cerebras Systems Inc. Isa enhancements for accelerated deep learning
US11328208B2 (en) 2018-08-29 2022-05-10 Cerebras Systems Inc. Processor element redundancy for accelerated deep learning
CN109388806B (zh) * 2018-10-26 2023-06-27 北京布本智能科技有限公司 一种基于深度学习及遗忘算法的中文分词方法
TWI700605B (zh) * 2018-12-28 2020-08-01 新唐科技股份有限公司 安全晶片之時脈頻率攻擊偵測系統
CN111985628B (zh) * 2019-05-24 2024-04-30 澜起科技股份有限公司 计算装置及包括所述计算装置的神经网络处理器
US11507814B1 (en) * 2019-09-09 2022-11-22 Meta Platforms Technologies, Llc Neural network based on total hamming distance
US11392820B2 (en) * 2020-01-14 2022-07-19 National Tsing Hua University Transpose memory unit for multi-bit convolutional neural network based computing-in-memory applications, transpose memory array structure for multi-bit convolutional neural network based computing-in-memory applications and computing method thereof
KR20210157636A (ko) * 2020-06-22 2021-12-29 삼성전자주식회사 가속기, 가속기의 동작 방법 및 이를 포함한 가속기 시스템
CN111985618B (zh) * 2020-08-14 2024-03-05 杭州海康威视数字技术股份有限公司 3d卷积神经网络在神经网络处理器上的处理方法和装置
US20220121925A1 (en) * 2020-10-21 2022-04-21 International Business Machines Corporation Chips supporting constant time program control of nested loops

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5465375A (en) * 1992-01-14 1995-11-07 France Telecom Multiprocessor system with cascaded modules combining processors through a programmable logic cell array
WO1997050030A1 (en) * 1996-06-26 1997-12-31 Philips Electronics N.V. Signal processor
TW201415225A (zh) * 2012-08-13 2014-04-16 Lsi Corp 矽獨立元件之部分冗餘陣列

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5204938A (en) 1989-05-30 1993-04-20 Loral Aerospace Corp. Method of implementing a neural network on a digital computer
US5634135A (en) * 1991-12-13 1997-05-27 Texas Instruments Incorporated Microprocessor with priority determination and priority based instruction selection
US5623628A (en) 1994-03-02 1997-04-22 Intel Corporation Computer system and method for maintaining memory consistency in a pipelined, non-blocking caching bus request queue
US5956703A (en) * 1995-07-28 1999-09-21 Delco Electronics Corporation Configurable neural network integrated circuit
US6223198B1 (en) * 1998-08-14 2001-04-24 Advanced Micro Devices, Inc. Method and apparatus for multi-function arithmetic
US7689641B2 (en) 2003-06-30 2010-03-30 Intel Corporation SIMD integer multiply high with round and shift
EP1656622B1 (en) * 2003-08-15 2007-05-16 Koninklijke Philips Electronics N.V. Parallel processing array
AT413895B (de) 2003-09-08 2006-07-15 On Demand Informationstechnolo Digitale signalverarbeitungseinrichtung
CN1658153B (zh) 2004-02-18 2010-04-28 联发科技股份有限公司 复合式动态定点数表示法与运算法及其处理器结构
NZ567815A (en) * 2005-11-15 2011-08-26 Bernadette Garner Training neural networks including selecting an output to be trained and connecting an output neuron to input neurons
CN101452400B (zh) 2007-11-29 2011-12-28 国际商业机器公司 处理多处理器系统中事务缓冲器溢出的方法和系统
US8965819B2 (en) 2010-08-16 2015-02-24 Oracle International Corporation System and method for effective caching using neural networks
US8937622B2 (en) 2010-09-20 2015-01-20 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US8930291B1 (en) * 2012-05-03 2015-01-06 Hrl Laboratories, Llc Cortical neuromorphic network, system and method
US9424514B2 (en) * 2012-07-25 2016-08-23 Board Of Trustees Of Michigan State University Synapse maintenance in the developmental networks
JP6314628B2 (ja) * 2014-04-28 2018-04-25 株式会社デンソー 演算処理装置
US10817425B2 (en) 2014-12-26 2020-10-27 Intel Corporation Hardware/software co-optimization to improve performance and energy for inter-VM communication for NFVs and other producer-consumer workloads
US20160210044A1 (en) 2015-01-15 2016-07-21 Commvault Systems, Inc. Intelligent hybrid drive caching
US9971965B2 (en) * 2015-03-18 2018-05-15 International Business Machines Corporation Implementing a neural network algorithm on a neurosynaptic substrate based on metadata associated with the neural network algorithm
US20160328644A1 (en) 2015-05-08 2016-11-10 Qualcomm Incorporated Adaptive selection of artificial neural networks
US9805303B2 (en) * 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US11244225B2 (en) * 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
CN105260776B (zh) * 2015-09-10 2018-03-27 华为技术有限公司 神经网络处理器和卷积神经网络处理器
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
US10671564B2 (en) 2015-10-08 2020-06-02 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs convolutions using collective shift register among array of neural processing units
US10380481B2 (en) * 2015-10-08 2019-08-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs concurrent LSTM cell calculations
US10776690B2 (en) * 2015-10-08 2020-09-15 Via Alliance Semiconductor Co., Ltd. Neural network unit with plurality of selectable output functions
CN106228238B (zh) * 2016-07-27 2019-03-22 中国科学技术大学苏州研究院 现场可编程门阵列平台上加速深度学习算法的方法和系统
US20180113840A1 (en) * 2016-10-25 2018-04-26 Wisconsin Alumni Research Foundation Matrix Processor with Localized Memory

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5465375A (en) * 1992-01-14 1995-11-07 France Telecom Multiprocessor system with cascaded modules combining processors through a programmable logic cell array
WO1997050030A1 (en) * 1996-06-26 1997-12-31 Philips Electronics N.V. Signal processor
TW201415225A (zh) * 2012-08-13 2014-04-16 Lsi Corp 矽獨立元件之部分冗餘陣列

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI774147B (zh) * 2019-12-09 2022-08-11 大陸商南京惟心光電系統有限公司 脈衝卷積神經網路演算法、積體電路及其製造方法、運算裝置及存儲介質

Also Published As

Publication number Publication date
CN108268945A (zh) 2018-07-10
EP3343464A1 (en) 2018-07-04
TW201826115A (zh) 2018-07-16
EP3343464B1 (en) 2020-05-06
US20180189633A1 (en) 2018-07-05
US10565492B2 (en) 2020-02-18
CN108268945B (zh) 2020-09-11

Similar Documents

Publication Publication Date Title
TWI667612B (zh) 裝置與運作裝置之方法
TWI662485B (zh) 裝置,運作裝置之方法與其電腦程式產品
TWI616825B (zh) 具有輸出緩衝器反饋與遮蔽功能之神經網路單元
CN108133263B (zh) 神经网络单元
JP6357525B2 (ja) 効率的な3次元畳み込みを行うニューラルネットワークユニット
CN108268946B (zh) 具有阵列宽度可分段之旋转器之神经网络单元
CN106445468B (zh) 利用处理器架构指令加载架构缓存器文件的微运算的执行单元的直接执行
CN108564169A (zh) 硬件处理单元、神经网络单元和计算机可用介质
CN108804139A (zh) 可编程设备及其操作方法和计算机可用介质
CN110443360A (zh) 用于操作处理器的方法
CN108805275A (zh) 可编程设备及其操作方法和计算机可用介质