TWI650707B - 處理器,其運作方法與電腦程式產品 - Google Patents

處理器,其運作方法與電腦程式產品 Download PDF

Info

Publication number
TWI650707B
TWI650707B TW105132059A TW105132059A TWI650707B TW I650707 B TWI650707 B TW I650707B TW 105132059 A TW105132059 A TW 105132059A TW 105132059 A TW105132059 A TW 105132059A TW I650707 B TWI650707 B TW I650707B
Authority
TW
Taiwan
Prior art keywords
neural network
instruction
data
text
unit
Prior art date
Application number
TW105132059A
Other languages
English (en)
Other versions
TW201714078A (zh
Inventor
G 葛蘭 亨利
泰瑞 派克斯
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
Priority claimed from US15/090,807 external-priority patent/US10380481B2/en
Priority claimed from US15/090,708 external-priority patent/US10346350B2/en
Priority claimed from US15/090,727 external-priority patent/US10776690B2/en
Priority claimed from US15/090,796 external-priority patent/US10228911B2/en
Application filed by 上海兆芯集成電路有限公司 filed Critical 上海兆芯集成電路有限公司
Publication of TW201714078A publication Critical patent/TW201714078A/zh
Application granted granted Critical
Publication of TWI650707B publication Critical patent/TWI650707B/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/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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • G06F7/575Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • 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/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register
    • 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)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Memory System (AREA)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

一種處理器,包括一個將指令集架構之指令從記憶體攫取至處理器之指令攫取單元與複數個對指令之運算元執行運算以產生結果之執行單元。這些執行單元包括一個神經網路單元,其包括一算術邏輯單元陣列、一第一記憶體、一第二記憶體與複數個啟動函數單元。第一記憶體裝載關聯於神經元輸出之資料文字。第二記憶體裝載關聯於神經元間連結之權重文字。算術邏輯單元將部分資料文字與部分權重文字相乘並將這些乘積累加。啟動函數單元對累加值執行標準化運算以產生輸出。指令集架構包括至少一指令指示處理器將資料文字與權重文字寫入相對應之記憶體。

Description

處理器,其運作方法與電腦程式產品
本申請案主張下列之美國臨時申請案之國際優先權。這些優先權案之全文併入本案以供參考。
本申請案係關聯於下列同時提出申請之美國臨時申請案。這些關聯申請案之全文併入本案以供參考。
近年來,人工神經網路(artificial neural networks,ANN)重新吸引了人們的注意。這些研究通常被稱為深度學習(deep learning)、電腦學習(computer learning)等類似術語。通用處理器運算能力的提升也推升了人們在數十年後的現在對於人工神經網路的興趣。人工神經網路近期的應用包括語言與影像辨識等。對於提升人工神經網路之運算效能與效率的需求似乎正在增加。
有鑑於此,本發明提供一種裝置,包括一個由N個處理單元構成之陣列、一第一記憶體與一第二記憶體。N個處理單元構成之陣列中之各個處理單元包括一個累加器(accumulator)、一個算術單元、一權重輸入與一個多工暫存器。累加器具有一輸出。算術單元具有第一、第二與第三輸入,並對其執行運算以產生一結果儲存至累加器,前述第一輸入係接收累加器之輸出。權重輸入係由前述第二輸入接收至算術單元。多工暫存器具有第一與第二資料輸入、一輸出與一控制輸入,多工暫存器之輸出係由前述第三輸入接收至算術單元,控制輸入係控制對於第一與第二資料輸入之選擇。其中, 多工暫存器之輸出並由一相鄰處理單元之多工暫存器之第二資料輸入所接收,當控制輸入選定第二資料輸入時,N個處理單元之多工暫存器係共同運作如同一N個文字之旋轉器。第一記憶體係裝載W個列之N個權重文字,並將W個列之其中一個列之N個權重文字提供至處理單元陣列之N個處理單元之相對應權重輸入。第二記憶體係裝載D個列之N個資料文字,並將D個列之其中一個列之N個資料文字提供至處理單元陣列之N個處理單元之多工暫存器之相對應第一資料輸入。
本發明並提供一種處理器。此處理器包括一指令集、一個由N個處理單元構成之陣列,一第一記憶體與一第二記憶體。指令集具有架構指令以指示處理器運作。由N個處理單元構成之陣列中之各個處理單元包括一個累加器、一個算術單元、一權重輸入與一個多工暫存器。累加器具有一輸出。算術單元具有第一、第二與第三輸入,並對其執行運算以產生一結果儲存至累加器,前述第一輸入係接收累加器之輸出。權重輸入係由前述第二輸入接收至算術單元。多工暫存器具有第一與第二資料輸入、一輸出與一控制輸入,多工暫存器之輸出係由前述第三輸入接收至算術單元,控制輸入係控制對於第一與第二資料輸入之選擇。其中,多工暫存器之輸出並由一相鄰處理單元之多工暫存器之第二資料輸入所接收,當控制輸入選定第二資料輸入時,N個處理單元之多工暫存器係共同運作如同一N個文字之旋轉器。第一記憶體係裝載W個列之N個權重文字,並將W個 列之其中一個列之N個權重文字提供至處理單元陣列之N個處理單元之相對應權重輸入。第二記憶體係裝載D個列之N個資料文字,並將D個列之其中一個列之N個資料文字提供至處理單元陣列之N個處理單元之多工暫存器之相對應第一資料輸入。
本發明並提供一種編碼於至少一非暫態電腦可利用紀錄媒介以供一電腦裝置使用之一電腦程式產品。此電腦程式產品包括內含於該媒介之電腦可使用程式碼,用以描述一裝置,此電腦可使用程式碼包括第一程式碼、第二程式碼與第三程式碼。第一程式碼係指定一個由N個處理單元構成之陣列。此陣列中之各個處理單元包括一個累加器、一個算術單元、一權重輸入與一個多工暫存器。累加器具有一輸出。算術單元具有第一、第二與第三輸入,並對其執行運算以產生一結果儲存至累加器,前述第一輸入係接收累加器之輸出。權重輸入係由前述第二輸入接收至算術單元。多工暫存器具有第一與第二資料輸入、一輸出與一控制輸入,多工暫存器之輸出係由前述第三輸入接收至算術單元,控制輸入係控制對於第一與第二資料輸入之選擇。其中,多工暫存器之輸出並由一相鄰處理單元之多工暫存器之第二資料輸入所接收,當控制輸入選定第二資料輸入時,N個處理單元之多工暫存器係共同運作如同一N個文字之旋轉器。第二程式碼係指定一第一記憶體,以裝載W個列之N個權重文字,並將W個列之其中一個列之N個權重文字提供至處理單元陣列之N個處理單元之相對應權重輸入。 第三程式碼係指定一第二記憶體,以裝載D個列之N個資料文字,並將D個列之其中一個列之N個資料文字提供至處理單元陣列之N個處理單元之多工暫存器之相對應第一資料輸入。
本發明所採用的具體實施例,將藉由以下之實施例及圖式作進一步之說明。
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‧‧‧輸入
第一圖係顯示一包含一神經網路單元(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時間遞歸神經網路。
具有架構神經網路單元之處理器
第一圖係顯示一包含一神經網路單元(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之一代表範例。就一較佳實施例而言,神經處理單元126之J範例之多工暫存器208的輸入211係接收神經處理單元126之J-1範例之多工暫存器208之輸出209,而神經處理單元J之多工暫存器208的輸出209係提供給神經處理單元126之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執行之指令就可以執行啟動函數單元212無法執行之複雜啟動函數,例如常見的軟極大(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個神經處理單元216將其啟動函數單元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位元之權重文字會分別從權重隨機存取記憶體122讀出並提供至這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個位元,而神經處理單元216可用以輸出一個16位元之結果文字133;如此,舉例來說,多工器802(或第三十圖之多工器3032與/或多工器3037)具有三個輸入分別接收累加器202輸出217之位元[15:0]、位元[31:16]與位元[47:32]。就一較佳實施例而言,非由累加器202提供之輸出位元(例如位元[47:41])會被強制設定為零值位元。
定序器128會在控制輸入803產生一數值,控制多工器802在累加器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與控制暫存器127之輸出命令2956欄之數值(第二十九A圖),以將累加器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中第一個神經處理單元216,而啟動函數單元1112之輸出將會被儲存於列暫存器1104之文字0。同樣在時頻週期513,每個啟動函數單元1112都會開始對相對應神經處理單元216群組中第一個神經處理單元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中第二個神經處理單元216,而啟動函數單元1112之輸出將會被儲存於列暫存器1104之文字1。同樣在時頻週期514,每個啟動函數單元1112都會開始對相對應神經處理單元216群組中第二個神經處理單元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都會開始對相對應神經處理單元216群組中第八個神經處理單元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欄位指定通用暫存器檔案116內之一通用暫存器。在一實施例中,每個通用暫存器均為64位元。此通用暫存器檔案116提供所選定之通用暫存器之數值至神經網路單元121,如圖中所示,而神經網路單元121係將此數值作為位址1422使用。此位址1422會選擇函數1432中指定之記憶體之一列。就資料隨機存取記憶體122或權重隨機存取記憶體124而言,此位址1422會額外選擇一資料塊,其大小是此選定列中媒體暫存器之位置的兩倍(如512個位元)。就一較佳實施例而言,此位置係位於一個512位元邊界。在一實施例中,多工器會選擇位址1422(或是在以下描述之MFNN指令1400之情況下的位址1422)或是來自定序器128之位址123/125/131提供至資料隨機存取記憶體124/權重隨機存取記憶體124/程式記憶體129。在一實施例中,資料隨機存取記憶體122具有雙埠,使神經處理單元126能夠利用媒體暫存器118 對此資料隨機存取記憶體122之讀取/寫入,同時讀取/寫入此資料隨機存取記憶體122。在一實施例中,為了類似的目的,權重隨機存取記憶體124亦具有雙埠。
圖中之src1欄位1404與src2欄位1406均指定媒體暫存器檔案118之一媒體暫存器。在一實施例中,每個媒體暫存器118均為256位元。媒體暫存器檔案118會將來自所選定之媒體暫存器之相連資料(例如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之資料塊。
第十五圖係一方塊示意圖,顯示一移動至神經網路(MTNN)架構指令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指定通用暫存器檔案116內之一通用暫存器。此通用暫存器檔案116提供所選定之通用暫存器之數值至神經網路單元121,如圖中所示,而神經網路單元121係將此數值作為位址1522並以類似於第十四圖之位址1422之方式進行運算,藉以選擇函數1532中指定之記憶體之一列。就資料隨機存取記憶體122或權重隨機存取記憶體124而言,此位址1522會額外選擇一資料塊,其大小即為此選定列中媒體暫存器(如256個位元)之位置。就一較佳實施例而言,此位置係位於一個256位元邊界。
此dst欄位1504係於一媒體暫存器檔案118內指定一媒體暫存器。如圖中所示,媒體暫存器檔案118係將來自資料隨機存取記憶體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可被充分利用而使架構程式(通過媒體暫存器118)得以持續提供資料至資料隨機存取記憶體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還可以寫入緩衝器118或是從緩衝器118讀取(不過若是神經處理單元126正在執行,在較佳之情況下係擱置這些神經處理單元126,以避免當緩衝器1704存取權重隨機存取記憶體124時,存取權重隨機存取記憶體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(以及接下去之權重隨機存取記憶體124之一列)歸零,程式設計者可以將零值載入來源暫存器並且設定位元遮罩之所有位元。此外,位元遮罩也可以讓程式設計者僅寫入緩衝器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並對其執行一啟動函數以產生一寬結果133A。神經處理單元126處於窄配置時,寬啟動函數單元212A會依此配置理解累加器202A之輸出217A並對其執行一啟動函數以產生一窄結果,如8位元,這部分在後續章節如對應於第二十九A至三十圖處有更詳細的說明。
如前所述,單一個神經處理單元126在處於窄配置時實際上可以作為兩個窄神經處理單元來運作,因此,對於較小的文字而言,相較於寬配置時,大致上可以提供多達兩倍的處理能力。舉例來說,假定神經網路層具有1024個神經元,而每個神經元從前一層接收1024個窄輸入(並具有窄權重文字),如此就會產生一百萬個連結。對於具有512個神經處理單元126之神經網路單元121而言,在窄配置下(相當於1024個窄神經處理單元),雖然處理的是窄文字而非寬文字,不過其所能處理之連結數可以達到寬配置之四倍(一百萬個連結對上256K個連結),而所需的時間大致為一半(約1026個時 頻週期對上514個時頻週期)。
在一實施例中,第十八圖之動態配置神經處理單元126包括類似於多工暫存器208A與208B之三輸入多工暫存器以取代暫存器205A與205B,以構成一旋轉器,處理由權重隨機存取記憶體124接收之權重文字列,此運作部分類似於第七圖之實施例所描述之方式但應用於第十八圖所述之動態配置中。
第十九圖係一方塊示意圖,顯示依據第十八圖之實施例,利用第一圖之神經網路單元121之N個神經處理單元126之2N個多工暫存器208A/208B,對於由第一圖之資料隨機存取記憶體122取得之一列資料文字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之乘積。
在時頻週期1025,這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進行卷積計算時,資料陣列2402會被分為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之指令會透過啟動函數單元121傳遞累加器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之列0),列0之資料可以被覆寫,不過,列1-3的資料需要留給第二次傳遞經過指令迴圈之運算而不能被覆寫;同樣地,在第二次傳遞經過指令迴圈之後,列1之資料可以被覆寫,不過,列2-4的資料需要留給第三次傳遞經過指令迴圈之運算而不能被覆 寫;依此類推。在此實施例中,可以增大各個資料矩陣2406(資料塊)之高度(如800列),因而可以使用較少之資料塊。
另外,架構程式可以使神經網路單元程式將卷積運算之結果寫回卷積核2402上方之資料隨機存取記憶體122列(例如在列8上方),而非將卷積運算結果寫回權重隨機存取記憶體124,當神經網路單元121寫入結果時,架構程式可以從資料隨機存取記憶體122讀取結果(例如使用第二十六圖中資料隨機存取記憶體122之最近寫入列2606位址)。此配置適用於具有單埠權重隨機存取記憶體124與雙埠資料隨機存取記憶體之實施例。
依據第二十四至二十六A圖之實施例中神經網路單元121之運算可以發現,第二十六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數值進行除以16之除法運算之啟動函數神經網路單元指令可用於以下所述之高斯模糊矩陣。
第二十四圖之範例中所使用之卷積核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數值217寫入權重隨機存取記憶體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)指令,執行合併功能。以類似於前述同時進行之方式並利用神經網路單元121之混合本質,執行於處理器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為真的時候,即表示由權重隨機存取記憶體122接收之權重文字為帶符號值,若為假,則表示這些權重文字為不帶符號值。
資料二進位小數點2922值表示由資料隨機存取記憶體122接收之資料文字之二進位小數點位置。就一較佳實施例而言,對於二進位小數點之位置而言,資料二進位小數點2922值即表示二進位小數點從右側計算之位元位置數量。換言之,資料二進位小數點2922表示資料文字之最低有效位元中屬於小數位元之數量,即位於二進位小數點右側之位元數。類似地,權重二進位小數點2924值表示由權重隨機存取記憶體124接收之權重文字之二進位小數點位置。就一較佳實施例而言,當算術邏輯單元函數2926是一個乘法與累加或輸出累加,神經處理單元126將裝載於累加器202之數值之二進位小數點右側之位元數確定為資料二進位小數點2922與權重二進位小數點2924之加總。因此,舉例來說,若是資料二進位小數點2922之值為5而權重二進位小數點2924之值為3,累加器202內之值就會在二進位小數點右側有8個位元。當算術邏輯單元函數2926是一個總數/最 大值累加器與資料/權重文字或是傳遞資料/權重文字,神經處理單元126會將裝載於累加器202之數值之二進位小數點右側之位元數分別確定為資料/權重二進位小數點2922/2924。在另一實施例中,則是指定單一個累加器二進位小數點2923,而不去指定個別的資料二進位小數點2922與權重二進位小數點2924。這部分在後續對應於第二十九B圖處會有更詳細的說明。
算術邏輯單元函數2926指定由神經處理單元126之算術邏輯單元204執行之函數。如前述,算術邏輯單元函數2926可包括以下運算但不限於:將資料文字209與權重文字203相乘並將此乘積與累加器202相加;將累加器202與權重文字203相加;將累加器202與資料文字209相加;累加器202與資料文字209中之最大值;累加器202與權重文字209中之最大值;輸出累加器202;傳遞資料文字209;傳遞權重文字209;輸出零值。在一實施例中,此算術邏輯單元函數2926係由神經網路單元初始化指令予以指定,並且由算術邏輯單元204使用以因應一執行指令(未圖示)。在一實施例中,此算術邏輯單元函數2926係由個別的神經網路單元指令予以指定,如前述乘法累加以及maxwacc指令。
捨入控制2932指定(第三十圖中)捨入器3004所使用之捨入運算的形式。在一實施例中,可指定之捨入模式包括但不限於:不捨入、捨入至最近值、以及隨機捨入。就一較佳實施例而言,處理器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之未經處理的最低有效文字作為輸出結果133輸出;而輸出命令2956之第五預設值會指示啟動函數單元212將累加器202之未經處理的中間有效文字作為輸出結果133輸出;輸出命令2956之第六預設值會指示啟動函數單元212將累加器202之未經處理的最高有效文字(其寬度係由配置2902所指定)作為輸出結果133輸出,這在前文對應於第八至十圖之章節有更詳細的說明。如前述,輸出整個累加器202尺寸或是標準尺寸之內部結果有助於讓處理器100之其他執行單元112可以執行啟動函數,如軟極大啟動函數。
第二十九A圖(以及第二十九B與二十九C圖)所描述之欄位係位於控制暫存器127內部,不過,本發明並不限於此,其中一個或多個欄位亦可位於神經網路單元121之其他部分。就一較佳實施例而言,其中許多欄位可以包含在神經網路單元指令內部,並由定序器128予以解碼以產生一微指令3416(請參照第三十四圖)控制算術邏輯單元204以及/或啟動函數單元212。此外,這些欄位也可以包含在儲存於媒體暫存器118之微運算3414內(請參照第三十四圖),以控制算術邏輯單元204以及/或啟動函數單元212。此實施例可以降低初始化神經網路單元指令之使用,而在其他實施例中則可去除此初始化神經網路單元指令。
如前述,神經網路單元指令可以指定對記憶體運算元(如來自資料隨機存取記憶體122與/或權重隨機存取記憶體123之文字)或一個旋轉後運算元(如來自多工暫存器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型模組3024以接收位元選擇器與飽和器3012之輸出、一個軟加模組3026以接收位元選擇器與飽和器3012之輸出、一個第二多工器3032以接收雙取正切模組3022、S型模組3024、軟加模組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)。
正類型轉換器3004會在累加器202數值217為負時,將其轉換為正類型,並產生一額外位元指出原本數值之正負,這個位元會隨同此數值向下傳遞至啟動函數單元212管線。將負數轉換為正類型可以簡化後續啟動函數單元121之運算。舉例來說,經此處理後,只有正值會輸入雙曲正切模組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位元結果,即其型式與此模組3026之輸入型式相同。就一較佳實施例而言,雙曲正切模組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係設定為神經處理單元216之窄配置。
在此範例中,累加器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明顯需要花費較長的時間來將512KB之權重值寫入權重隨機存取記憶體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,以完成對於神經網路單元程式之下一次範例(instance),或稱調用(invocation)或執行(run)之準備。
在第三十六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執行非架構程式最近讀取之資料隨機存取記憶體列的位址2608,如前述第二十六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作為輸入。此外,此神經網路單元121係配置為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之數值。各組中的第三列係裝載此時間步驟之輸出節點Y之數值。如圖中所示,資料隨機存取記憶體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,5/6/7,依此類推至列61/62/63之數值)係由執行於神經網路單元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之指令)。較佳地,此初始化指令並會使神經網路單元121處於寬配置而配置為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為例,如圖中所示,此資料隨機存取記憶體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之指令寫入),並且將前述數值相乘以產生第一乘積累加至剛剛由位址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,並且圖中具有相同標號之元件亦相類似。不過,多工暫存器208係經調整以包含四個額外的輸入4905,多工暫存器705係經調整以包含四個額外的輸入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)值。在對應至神經處理單元群組121之各組四行記憶體中(例如行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之OUTBUF[3]文字會寫入相對應長短期記憶胞4600之候選記憶胞狀態(C’)值,而輸出緩衝器1104之其他三個文字則會維持其先前數值。在位址10之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之OUTBUF[0]文字會寫入相對應長短期記憶胞 4600之輸入閘(I)數值,OUTBUF[1]文字會寫入相對應長短期記憶胞4600之遺忘閘(F)數值,OUTBUF[2]文字會寫入相對應長短期記憶胞4600之輸出閘(O)數值,而OUTBUF[3]文字則是維持其先前數值。在位址13之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之OUTBUF[3]文字會寫入相對應長短期記憶胞4600之新的記憶胞狀態(C)值(對於輸出緩衝器1104而言,包含槽(slot)3之C數值,係寫入權重隨機存取記憶體124之列6,詳如後續第五十一圖所述),而輸出緩衝器1104之其他三個文字則是維持其先前數值。在位址14之指令執行後,對於各個神經處理單元群組4901而言,輸出緩衝器1104之OUTBUF[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)值(例如0)並將其寫入輸出緩衝器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內之第一乘積相加。更精確地說,對於神經處理單元群組4901內標號除4之餘數為3之神經處理單元126而言,從列6讀取之文字是先前時間步驟計算出之當前記憶胞狀態(C)值,第一乘積與第二乘積之加總即為此新的記憶胞狀態(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]。第五十二圖之 神經網路單元212之運作方式類似於前文第四十九至五十一圖所述之實施例,並且其運作共享啟動函數單元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,以及多工暫存器705與其相關聯輸入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之數值指定接收來自輸出緩衝器1104之資料(在第五十七圖位址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,亦屬本發明之範疇。
惟以上所述者,僅為本發明之較佳實施例而已,當不能以此限定本發明實施之範圍,即大凡依本發明申請專利範圍及發明說明內容所作之簡單的等效變化與修飾,皆仍屬本發明專利涵蓋之範圍內。舉例來說,軟體可以執行本發明所述之裝置與方法的功能、製造、形塑、模擬、描述以及/或測試等。這可由一般的程式語 言(如C、C++)、硬體描述語言(HDL)包含Verilog HDL,VHDL等,或是其他既有程式來達成。此軟體可以設置於任何已知的電腦可利用媒介,如磁帶、半導體、磁碟、光碟(如CD-ROM、DVD-ROM等)、網路接線、無線或是其他通訊媒介。此處描述之裝置與方法的實施例可被包含於一半導體智財核心,例如一微處理核心(如以硬體描述語言的實施方式)並且透過積體電路的製作轉換為硬體。此外,本文所描述之裝置與方法亦可包含硬體與軟體之結合。因此,本文所述的任何實施例,並非用以限定本發明之範圍。此外,本發明可應用於一般通用電腦之微處理器裝置。最後,所屬技術領域具有通常知識者利用本發明所揭露的觀念與實施例作為基礎,來設計並調整出不同的結構已達成相同的目的,亦不超出本發明之範圍。

Claims (24)

  1. 一種處理器,具有一指令集架構(ISA),該處理器包括:一指令攫取單元,控制從記憶體將該指令集架構之指令攫取至該處理器之攫取動作;以及複數個執行單元,對該指令之運算元依據該指令集架構執行運算以產生該指令之結果;其中,該複數個執行單元包括一個硬體神經網路單元(NNU),以執行關聯於人工神經網路(ANN)之計算,該神經網路單元包括:一個算術邏輯單元(ALU)陣列;一第一記憶體,耦接至該算術邏輯單元陣列,以裝載關聯於人工神經網路神經元輸出之資料文字;一第二記憶體,耦接至該算術邏輯單元陣列,以裝載關聯於人工神經網路神經元間之連結之權重文字;其中,各該算術邏輯單元將該資料文字之一部分乘上該權重文字之一部分以產生乘積並在一累加器中將該些乘積累加為一累加值;以及複數個啟動函數單元,對該累加值執行標準化運算以產生關聯於該人工神經網路神經元之輸出;其中,該指令集架構包括至少一個指令指示該處理器將該資料文字與該權重文字寫入該神經網路單元之該相對應之第一與第二記憶體。
  2. 如申請專利範圍第1項之處理器,其中,該神經網路單元之該第一記憶體裝載關聯於一第一人工神經網路層之該人工神經網路神經元輸出之第一資料文字,該神經網路單元之該第二記憶體裝載關聯於該第一人工神經網路層之人工神經網路神經元與一第二人工神經網路層之人工神經網路神經元間之連結之第一權重文字,並且,該算術邏輯單元利用該第一權重文字與該第一資料文字產生該累加值,該複數個啟動函數單元產生關連於該第二人工神經網路層之該人工神經網路神經元之第一輸出,該神經網路單元將關聯於該第二人工神經網路層之該人工神經網路神經元之該第一輸出寫入該第一記憶體;或是,該第二記憶體裝載關聯於該第二人工神經網路層之該人工神經網路神經元與一第三人工神經網路層之人工神經網路神經元間之連結之第二權重文字,並且,該算術邏輯單元利用該第二權重文字與關聯於該第二人工神經網路層之該人工神經網路神經元並寫入該第一記憶體之該第一輸出產生該累加值,並且,該複數個啟動函數單元產生關聯於該第三人工神經網路層之該人工神經網路神經元之第二輸出。
  3. 如申請專利範圍第2項之處理器,其中,該神經網路單元將關聯於該第三人工神經網路層之該人工神經網路神經元之該第二輸出寫入該第一記憶體,並且,該指令集架構包括至少一個指令指示該處理器從該第一記憶體讀取由該神經網路單元寫入之該第二輸出。
  4. 如申請專利範圍第1項之處理器,其中,該神經網路單元更包括:一程式記憶體,裝載一神經網路單元程式之指令,該神經網路單元程式之該指令是屬於一個不同於該處理器指令集架構之該些指令之指令集,並且,該指令集架構包括至少一個指令指示該處理器將該神經網路單元程式之該指令寫入該程式記憶體。
  5. 如申請專利範圍第4項之處理器,其中,該指令集架構包括至少一個指令指示該處理器開始執行寫入該程式記憶體之該神經網路單元程式之該指令。
  6. 如申請專利範圍第5項之處理器,其中,指示該處理器開始執行該神經網路單元程式之該指令之該至少一個指令,係指定該神經網路單元程式開始執行之一第一指令之一位址。
  7. 如申請專利範圍第4項之處理器,其中,該指令集架構包括至少一個指令指示該處理器暫停執行該神經網路單元程式之該指令。
  8. 如申請專利範圍第4項之處理器,其中,該指令集架構包括至少一個指令指示該處理器讀取該神經網路單元程式之該指令之一執行狀態。
  9. 如申請專利範圍第4項之處理器,其中,該指令集架構包括至少一個指令指示該處理器在該神經網路單元程式之該指令完成執行時產生一中斷(interrupt)。
  10. 如申請專利範圍第1項之處理器,其中,該至少一指令指示該處理器將該資料文字與該權重文字寫入該神經網路單元之該相對應第一與第二記憶體之至少一指令,包括:一指定器,指定一架構暫存器裝載該第一記憶體或該第二記憶體中該神經網路單元寫入該相對應資料文字或權重文字之一位址。
  11. 如申請專利範圍第1項之處理器,其中,該至少一個指令指示該處理器將該資料文字與該權重文字寫入該神經網路單元之該相對應第一與第二記憶體,包括:一指定器,指定一個或多個架構暫存器裝載被寫入該第一記憶體或該第二記憶體之該相對應資料文字或權重文字。
  12. 如申請專利範圍第11項之處理器,其中,該一個或多個架構暫存器為x86指令集架構之媒體暫存器。
  13. 如申請專利範圍第1項之處理器,其中,該處理器相容於x86指令集架構。
  14. 如申請專利範圍第1項之處理器,其中,該神經網路單元更包括:一緩衝器,與該第二記憶體之一列具有相同之位元寬度;其中,該緩衝器因應該至少一個指令之複數個範例,接收複數組權重文字,並且,該緩衝器同時將該複數組權重文字寫入該第二記憶體之該列。
  15. 如申請專利範圍第14項之處理器,其中,該神經網路單元更包括:一個或多個架構暫存器,以裝載該權重文字;其中,該至少一指令包括:一指定器指定該一個或多個架構暫存器,該一個或多個架構暫存器集體具有一第二位元寬度;以及一位元遮罩,包括一位元對應於該緩衝器之複數個資料塊中之各個資料塊,各該資料塊為該第二位元寬度;其中,因應該至少一個指令之單一個範例,該緩衝器將裝載於該架構暫存器之該權重文字接收至該緩衝器之該複數個資料塊中對應之該位元遮罩之位元為設定之各該資料塊。
  16. 一種處理器之運作方法,該處理器包括一指令集架構,一指令攫取單元與複數個執行單元,該複數個執行單元包括一硬體神經網路單元,該方法包括:利用該指令攫取單元,控制從記憶體將該指令集架構之指令攫取至該處理器之攫取動作;利用該複數個執行單元,對該指令之運算元依據該指令集架構執行運算以產生該指令之結果;利用該硬體神經網路單元,執行關聯於人工神經網路(ANN)之計算,包括:利用一第一記憶體,耦接至一算術邏輯單元陣列,以裝載關聯於人工神經網路神經元輸出之資料文字;利用一第二記憶體,耦接至該算術邏輯單元陣列,以裝載關聯於人工神經網路神經元間之連結之權重文字;利用各該算術邏輯單元,將該資料文字之一部分乘上該權重文字之一部分以產生乘積並在一累加器中將該些乘積累加為一累加值;以及利用複數個啟動函數單元,對該累加值執行標準化運算以產生關聯於該人工神經網路神經元之輸出;以及利用包括於該指令集架構之至少一個指令,指示該處理器將該資料文字與該權重文字寫入該神經網路單元之該相對應之第一與第二記憶體。
  17. 如請求項第16項之方法,更包括:利用該第一記憶體裝載關聯於一第一人工神經網路層之該人工神經網路神經元輸出之第一資料文字,利用該神經網路單元之該第二記憶體裝載關聯於該第一人工神經網路層之人工神經網路神經元與一第二人工神經網路層之人工神經網路神經元間之連結之第一權重文字,利用該算術邏輯單元,利用該第一權重文字與該第一資料文字產生該累加值,利用該複數個啟動函數單元產生關連於該第二人工神經網路層之該人工神經網路神經元之第一輸出,利用該神經網路單元,將關聯於該第二人工神經網路層之該人工神經網路神經元之該第一輸出寫入該第一記憶體;或是利用該第二記憶體裝載關聯於該第二人工神經網路層之該人工神經網路神經元與一第三人工神經網路層之人工神經網路神經元間之連結之第二權重文字,並且,利用該算術邏輯單元,利用該第二權重文字與關聯於該第二人工神經網路層之該人工神經網路神經元並寫入該第一記憶體之該第一輸出產生該累加值,並且,利用該複數個啟動函數單元,產生關聯於該第三人工神經網路層之該人工神經網路神經元之第二輸出。
  18. 如請求項第17項之方法,更包括:利用該神經網路單元,將關聯於該第三人工神經網路層之該人工神經網路神經元之該第二輸出寫入該第一記憶體;以及利用該指令集架構之至少一個指令,指示該處理器從該第一記憶體讀取由該神經網路單元寫入之該第二輸出。
  19. 如請求項第16項之方法,更包括:利用一程式記憶體,裝載一神經網路單元程式之指令,該神經網路單元程式之該指令是屬於一個不同於該處理器指令集架構之該些指令之指令集;以及利用該指令集架構之至少一個指令,指示該處理器將該神經網路單元程式之該指令寫入該程式記憶體。
  20. 如請求項第16項之方法,其中,利用該至少一指令,指示該處理器將該資料文字與該權重文字寫入該神經網路單元之該相對應第一與第二記憶體之步驟包括:利用一指定器,指定一架構暫存器裝載該第一記憶體或該第二記憶體中該神經網路單元寫入該相對應資料文字或權重文字之一位址。
  21. 如請求項第16項之方法,其中,利用該至少一個指令指示該處理器將該資料文字與該權重文字寫入該神經網路單元之該相對應第一與第二記憶體之步驟包括:利用一指定器,指定一個或多個架構暫存器裝載被寫入該第一記憶體或該第二記憶體之該相對應資料文字或權重文字。
  22. 如請求項第16項之方法,更包括:利用一個與該第二記憶體之一列具有相同之位元寬度之緩衝器,因應該至少一個指令之複數個範例,接收複數組權重文字;以及利用該緩衝器,同時將該複數組權重文字寫入該第二記憶體之該列。
  23. 如請求項第22項之方法,其中,該至少一指令包括:一指定器指定一個或多個架構暫存器,該一個或多個架構暫存器集體具有一第二位元寬度;一位元遮罩,包括一位元對應於該緩衝器之複數個資料塊中之各個資料塊,各該資料塊為該第二位元寬度;該方法更包括:因應該至少一個指令之單一個範例,利用該緩衝器將裝載於該架構暫存器之該權重文字接收至該緩衝器之該複數個資料塊中對應之該位元遮罩之位元為設定之各該資料塊。
  24. 一種編碼於至少一非暫態電腦可利用紀錄媒介以供一電腦裝置使用之一電腦程式產品,包括:內含於該媒介之電腦可使用程式碼,用以描述一處理器,該處理器具有一指令集架構,該電腦可使用程式碼包括:第一指令碼,描述一指令攫取單元,控制從記憶體將該指令集架構之指令攫取至該處理器之攫取動作;第二指令碼,描述複數個執行單元,對該指令之運算元依據該指令集架構執行運算以產生該指令之結果;該複數個執行單元包括一個硬體神經網路單元(NNU),以執行關聯於人工神經網路(ANN)之計算,該神經網路單元包括:一個算術邏輯單元(ALU)陣列;一第一記憶體,耦接至該算術邏輯單元陣列,以裝載關聯於人工神經網路神經元輸出之資料文字;一第二記憶體,耦接至該算術邏輯單元陣列,以裝載關聯於人工神經網路神經元間之連結之權重文字;其中,各該算術邏輯單元將該資料文字之一部分乘上該權重文字之一部分以產生乘積並在一累加器中將該些乘積累加為一累加值;以及複數個啟動函數單元,對該累加值執行標準化運算以產生關聯於該人工神經網路神經元之輸出;以及其中,該指令集架構包括至少一個指令指示該處理器將該資料文字與該權重文字寫入該神經網路單元之該相對應之第一與第二記憶體。
TW105132059A 2015-10-08 2016-10-04 處理器,其運作方法與電腦程式產品 TWI650707B (zh)

Applications Claiming Priority (48)

Application Number Priority Date Filing Date Title
US201562239254P 2015-10-08 2015-10-08
US62/239,254 2015-10-08
US201562262104P 2015-12-02 2015-12-02
US62/262,104 2015-12-02
US201662299191P 2016-02-24 2016-02-24
US62/299,191 2016-02-24
US15/090,814 2016-04-05
US15/090,796 2016-04-05
US15/090,807 US10380481B2 (en) 2015-10-08 2016-04-05 Neural network unit that performs concurrent LSTM cell calculations
US15/090,829 2016-04-05
US15/090,801 2016-04-05
US15/090,672 2016-04-05
US15/090,708 US10346350B2 (en) 2015-10-08 2016-04-05 Direct execution by an execution unit of a micro-operation loaded into an architectural register file by an architectural instruction of a processor
US15/090,665 US10474627B2 (en) 2015-10-08 2016-04-05 Neural network unit with neural memory and array of neural processing units that collectively shift row of data received from neural memory
US15/090,708 2016-04-05
US15/090,722 2016-04-05
US15/090,666 US10275393B2 (en) 2015-10-08 2016-04-05 Tri-configuration neural network unit
US15/090,696 US10380064B2 (en) 2015-10-08 2016-04-05 Neural network unit employing user-supplied reciprocal for normalizing an accumulated value
US15/090,701 US10474628B2 (en) 2015-10-08 2016-04-05 Processor with variable rate execution unit
US15/090,794 2016-04-05
US15/090,727 2016-04-05
US15/090,678 US10509765B2 (en) 2015-10-08 2016-04-05 Neural processing unit that selectively writes back to neural memory either activation function output or accumulator value
US15/090,705 2016-04-05
US15/090,798 US10585848B2 (en) 2015-10-08 2016-04-05 Processor with hybrid coprocessor/execution unit neural network unit
US15/090,823 US10409767B2 (en) 2015-10-08 2016-04-05 Neural network unit with neural memory and array of neural processing units and sequencer that collectively shift row of data received from neural memory
US15/090,829 US10346351B2 (en) 2015-10-08 2016-04-05 Neural network unit with output buffer feedback and masking capability with processing unit groups that operate as recurrent neural network LSTM cells
US15/090,669 US10275394B2 (en) 2015-10-08 2016-04-05 Processor with architectural neural network execution unit
US15/090,712 2016-04-05
US15/090,807 2016-04-05
US15/090,691 US10387366B2 (en) 2015-10-08 2016-04-05 Neural network unit with shared activation function units
US15/090,794 US10353862B2 (en) 2015-10-08 2016-04-05 Neural network unit that performs stochastic rounding
US15/090,705 US10353861B2 (en) 2015-10-08 2016-04-05 Mechanism for communication between architectural program running on processor and non-architectural program running on execution unit of the processor regarding shared resource
US15/090,801 US10282348B2 (en) 2015-10-08 2016-04-05 Neural network unit with output buffer feedback and masking capability
US15/090,798 2016-04-05
US15/090,722 US10671564B2 (en) 2015-10-08 2016-04-05 Neural network unit that performs convolutions using collective shift register among array of neural processing units
US15/090,727 US10776690B2 (en) 2015-10-08 2016-04-05 Neural network unit with plurality of selectable output functions
US15/090,665 2016-04-05
US15/090,678 2016-04-05
US15/090,666 2016-04-05
US15/090,696 2016-04-05
US15/090,814 US10552370B2 (en) 2015-10-08 2016-04-05 Neural network unit with output buffer feedback for performing recurrent neural network computations
US15/090,672 US10353860B2 (en) 2015-10-08 2016-04-05 Neural network unit with neural processing units dynamically configurable to process multiple data sizes
US15/090,691 2016-04-05
US15/090,796 US10228911B2 (en) 2015-10-08 2016-04-05 Apparatus employing user-specified binary point fixed point arithmetic
US15/090,669 2016-04-05
US15/090,823 2016-04-05
US15/090,701 2016-04-05
US15/090,712 US10366050B2 (en) 2015-10-08 2016-04-05 Multi-operation neural network unit

Publications (2)

Publication Number Publication Date
TW201714078A TW201714078A (zh) 2017-04-16
TWI650707B true TWI650707B (zh) 2019-02-11

Family

ID=58556056

Family Applications (7)

Application Number Title Priority Date Filing Date
TW105132063A TWI591539B (zh) 2015-10-08 2016-10-04 具有可變率執行單元之處理器
TW105132061A TWI626587B (zh) 2015-10-08 2016-10-04 選擇性將啓動函數輸出或累加器値寫回神經記憶體之神經處理單元
TW105132064A TWI616825B (zh) 2015-10-08 2016-10-04 具有輸出緩衝器反饋與遮蔽功能之神經網路單元
TW105132058A TWI608429B (zh) 2015-10-08 2016-10-04 具有神經記憶體之神經網路單元以及集體將接收自神經記憶體之資料列進行移位之神經處理單元陣列
TW105132059A TWI650707B (zh) 2015-10-08 2016-10-04 處理器,其運作方法與電腦程式產品
TW105132065A TWI579694B (zh) 2015-10-08 2016-10-04 同時執行長短期記憶胞計算之神經網路單元
TW105132062A TWI601062B (zh) 2015-10-08 2016-10-04 利用使用者指定二維定點算術運算之裝置

Family Applications Before (4)

Application Number Title Priority Date Filing Date
TW105132063A TWI591539B (zh) 2015-10-08 2016-10-04 具有可變率執行單元之處理器
TW105132061A TWI626587B (zh) 2015-10-08 2016-10-04 選擇性將啓動函數輸出或累加器値寫回神經記憶體之神經處理單元
TW105132064A TWI616825B (zh) 2015-10-08 2016-10-04 具有輸出緩衝器反饋與遮蔽功能之神經網路單元
TW105132058A TWI608429B (zh) 2015-10-08 2016-10-04 具有神經記憶體之神經網路單元以及集體將接收自神經記憶體之資料列進行移位之神經處理單元陣列

Family Applications After (2)

Application Number Title Priority Date Filing Date
TW105132065A TWI579694B (zh) 2015-10-08 2016-10-04 同時執行長短期記憶胞計算之神經網路單元
TW105132062A TWI601062B (zh) 2015-10-08 2016-10-04 利用使用者指定二維定點算術運算之裝置

Country Status (2)

Country Link
CN (6) CN106599989B (zh)
TW (7) TWI591539B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI830669B (zh) * 2023-02-22 2024-01-21 旺宏電子股份有限公司 編碼方法及編碼電路

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11615285B2 (en) 2017-01-06 2023-03-28 Ecole Polytechnique Federale De Lausanne (Epfl) Generating and identifying functional subnetworks within structural networks
US10481870B2 (en) 2017-05-12 2019-11-19 Google Llc Circuit to perform dual input value absolute value and sum operation
US10019668B1 (en) 2017-05-19 2018-07-10 Google Llc Scheduling neural network processing
CN107291420B (zh) 2017-06-27 2020-06-05 上海兆芯集成电路有限公司 整合算术及逻辑处理的装置
CN107315710B (zh) 2017-06-27 2020-09-11 上海兆芯集成电路有限公司 全精度及部分精度数值的计算方法及装置
TWI680409B (zh) * 2017-07-08 2019-12-21 英屬開曼群島商意騰科技股份有限公司 適用於人工神經網路之矩陣及向量相乘的方法
WO2019032870A1 (en) * 2017-08-09 2019-02-14 Google Llc ACCELERATION OF NEURAL NETWORKS IN MATERIAL USING INTERCONNECTED CROSSBARS
US10079067B1 (en) * 2017-09-07 2018-09-18 Winbond Electronics Corp. Data read method and a non-volatile memory apparatus using the same
US11507806B2 (en) * 2017-09-08 2022-11-22 Rohit Seth Parallel neural processor for Artificial Intelligence
CN109472344A (zh) * 2017-09-08 2019-03-15 光宝科技股份有限公司 类神经网络系统的设计方法
CN109697507B (zh) * 2017-10-24 2020-12-25 安徽寒武纪信息科技有限公司 处理方法及装置
CN109960673B (zh) * 2017-12-14 2020-02-18 中科寒武纪科技股份有限公司 集成电路芯片装置及相关产品
CN108288091B (zh) * 2018-01-19 2020-09-11 上海兆芯集成电路有限公司 采布斯乘法的微处理器
US20190251429A1 (en) * 2018-02-12 2019-08-15 Kneron, Inc. Convolution operation device and method of scaling convolution input for convolution neural network
CN110197268B (zh) * 2018-02-27 2020-08-04 上海寒武纪信息科技有限公司 集成电路芯片装置及相关产品
CN110197270B (zh) * 2018-02-27 2020-10-30 上海寒武纪信息科技有限公司 集成电路芯片装置及相关产品
CN110197271B (zh) * 2018-02-27 2020-10-27 上海寒武纪信息科技有限公司 集成电路芯片装置及相关产品
TWI664585B (zh) * 2018-03-30 2019-07-01 國立臺灣大學 使用浮點標號位元表示的神經網路訓練方法
US10522226B2 (en) * 2018-05-01 2019-12-31 Silicon Storage Technology, Inc. Method and apparatus for high voltage generation for analog neural memory in deep learning artificial neural network
TWI650769B (zh) * 2018-05-22 2019-02-11 華邦電子股份有限公司 記憶體裝置及記憶胞陣列的程式化方法
US11893471B2 (en) 2018-06-11 2024-02-06 Inait Sa Encoding and decoding information and artificial neural networks
US11663478B2 (en) 2018-06-11 2023-05-30 Inait Sa Characterizing activity in a recurrent artificial neural network
US11972343B2 (en) 2018-06-11 2024-04-30 Inait Sa Encoding and decoding information
JP2020004247A (ja) * 2018-06-29 2020-01-09 ソニー株式会社 情報処理装置、情報処理方法およびプログラム
US10418109B1 (en) 2018-07-26 2019-09-17 Winbond Electronics Corp. Memory device and programming method of memory cell array
CN108984426B (zh) * 2018-08-03 2021-01-26 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
US11449756B2 (en) * 2018-09-24 2022-09-20 Samsung Electronics Co., Ltd. Method to balance sparsity for efficient inference of deep neural networks
CN111078286B (zh) * 2018-10-19 2023-09-01 上海寒武纪信息科技有限公司 数据通信方法、计算系统和存储介质
CN109376853B (zh) * 2018-10-26 2021-09-24 电子科技大学 回声状态神经网络输出轴突电路
KR20200061164A (ko) * 2018-11-23 2020-06-02 삼성전자주식회사 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
US10867399B2 (en) 2018-12-02 2020-12-15 Himax Technologies Limited Image processing circuit for convolutional neural network
TWI694413B (zh) * 2018-12-12 2020-05-21 奇景光電股份有限公司 影像處理電路
US11652603B2 (en) 2019-03-18 2023-05-16 Inait Sa Homomorphic encryption
US11569978B2 (en) 2019-03-18 2023-01-31 Inait Sa Encrypting and decrypting information
US20210182655A1 (en) * 2019-12-11 2021-06-17 Inait Sa Robust recurrent artificial neural networks
US11797827B2 (en) 2019-12-11 2023-10-24 Inait Sa Input into a neural network
US11816553B2 (en) 2019-12-11 2023-11-14 Inait Sa Output from a recurrent neural network
US11580401B2 (en) 2019-12-11 2023-02-14 Inait Sa Distance metrics and clustering in recurrent neural networks
US11651210B2 (en) 2019-12-11 2023-05-16 Inait Sa Interpreting and improving the processing results of recurrent neural networks
TWI722797B (zh) 2020-02-17 2021-03-21 財團法人工業技術研究院 記憶體內運算器及其運算方法
RU2732201C1 (ru) * 2020-02-17 2020-09-14 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Метод построения процессоров для вывода в сверточных нейронных сетях, основанный на потоковых вычислениях
CN111898752A (zh) * 2020-08-03 2020-11-06 乐鑫信息科技(上海)股份有限公司 执行lstm神经网络运算的装置和方法
TWI742802B (zh) 2020-08-18 2021-10-11 創鑫智慧股份有限公司 矩陣運算裝置及其操作方法
TWI746126B (zh) 2020-08-25 2021-11-11 創鑫智慧股份有限公司 矩陣乘法裝置及其操作方法
TWI798798B (zh) * 2020-09-08 2023-04-11 旺宏電子股份有限公司 記憶體內運算方法及裝置
TWI775170B (zh) * 2020-09-30 2022-08-21 新漢股份有限公司 Cpu應用於人工智慧相關程序時的執行方法
US11657864B1 (en) * 2021-12-17 2023-05-23 Winbond Electronics Corp. In-memory computing apparatus and computing method having a memory array includes a shifted weight storage, shift information storage and shift restoration circuit to restore a weigh shifted amount of shifted sum-of-products to generate multiple restored sum-of-products

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6647377B2 (en) * 1997-11-19 2003-11-11 Netuitive, Inc. Multi-kernel neural network concurrent learning, monitoring, and forecasting system
US6782375B2 (en) * 2001-01-16 2004-08-24 Providian Bancorp Services Neural network based decision processor and method
US7512573B2 (en) * 2006-10-16 2009-03-31 Alcatel-Lucent Usa Inc. Optical processor for an artificial neural network

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5138695A (en) * 1989-10-10 1992-08-11 Hnc, Inc. Systolic array image processing system
DE69132495T2 (de) * 1990-03-16 2001-06-13 Texas Instruments Inc Verteilter Verarbeitungsspeicher
US5563982A (en) * 1991-01-31 1996-10-08 Ail Systems, Inc. Apparatus and method for detection of molecular vapors in an atmospheric region
TW279231B (en) * 1995-04-18 1996-06-21 Nat Science Council This invention is related to a new neural network for prediction
US5956703A (en) * 1995-07-28 1999-09-21 Delco Electronics Corporation Configurable neural network integrated circuit
DE19625569A1 (de) * 1996-06-26 1998-01-02 Philips Patentverwaltung Signalprozessor
TW337568B (en) * 1996-10-11 1998-08-01 Apex Semiconductor Inc Pseudo cache DRAM controller with packet command protocol
US6557096B1 (en) * 1999-10-25 2003-04-29 Intel Corporation Processors with data typer and aligner selectively coupling data bits of data buses to adder and multiplier functional blocks to execute instructions with flexible data types
US8660939B2 (en) * 2000-05-17 2014-02-25 Timothy D. Allen Method for mortgage customer retention
US6581131B2 (en) * 2001-01-09 2003-06-17 Hewlett-Packard Development Company, L.P. Method and apparatus for efficient cache mapping of compressed VLIW instructions
US7146486B1 (en) * 2003-01-29 2006-12-05 S3 Graphics Co., Ltd. SIMD processor with scalar arithmetic logic units
US7689641B2 (en) * 2003-06-30 2010-03-30 Intel Corporation SIMD integer multiply high with round and shift
US7421565B1 (en) * 2003-08-18 2008-09-02 Cray Inc. Method and apparatus for indirectly addressed vector load-add -store across multi-processors
CN1306395C (zh) * 2004-02-13 2007-03-21 中国科学院计算技术研究所 Mips指令集的处理器扩展指令及其编码方法和部件
CN1658153B (zh) * 2004-02-18 2010-04-28 联发科技股份有限公司 复合式动态定点数表示法与运算法及其处理器结构
JP2006004042A (ja) * 2004-06-16 2006-01-05 Renesas Technology Corp データ処理装置
CN100383781C (zh) * 2004-11-26 2008-04-23 北京天碁科技有限公司 乔列斯基分解算法装置
US7743233B2 (en) * 2005-04-05 2010-06-22 Intel Corporation Sequencer address management
US8145887B2 (en) * 2007-06-15 2012-03-27 International Business Machines Corporation Enhanced load lookahead prefetch in single threaded mode for a simultaneous multithreaded microprocessor
TW200923803A (en) * 2007-11-26 2009-06-01 Univ Nat Taipei Technology Hardware neural network learning and recall architecture
CN101625735A (zh) * 2009-08-13 2010-01-13 西安理工大学 基于ls-svm分类和回归学习递归神经网络的fpga实现方法
US8380138B2 (en) * 2009-10-21 2013-02-19 Qualcomm Incorporated Duty cycle correction circuitry
US20120066163A1 (en) * 2010-09-13 2012-03-15 Nottingham Trent University Time to event data analysis method and system
EP2508980B1 (en) * 2011-04-07 2018-02-28 VIA Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
CN102402415B (zh) * 2011-10-21 2013-07-17 清华大学 一种动态可重构阵列内数据缓存的装置及方法
US9251116B2 (en) * 2011-11-30 2016-02-02 International Business Machines Corporation Direct interthread communication dataport pack/unpack and load/save
CN104115115B (zh) * 2011-12-19 2017-06-13 英特尔公司 用于多精度算术的simd整数乘法累加指令
US9207646B2 (en) * 2012-01-20 2015-12-08 Mediatek Inc. Method and apparatus of estimating/calibrating TDC gain
TWI602181B (zh) * 2012-02-29 2017-10-11 三星電子股份有限公司 記憶體系統以及使用測試元件傳輸失效位址至記憶體元件的操作方法
CN102665049B (zh) * 2012-03-29 2014-09-17 中国科学院半导体研究所 基于可编程视觉芯片的视觉图像处理系统
CN103019656B (zh) * 2012-12-04 2016-04-27 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
US9483263B2 (en) * 2013-03-26 2016-11-01 Via Technologies, Inc. Uncore microcode ROM
US9792121B2 (en) * 2013-05-21 2017-10-17 Via Technologies, Inc. Microprocessor that fuses if-then instructions
CN104216866B (zh) * 2013-05-31 2018-01-23 深圳市海思半导体有限公司 一种数据处理装置
EP2843550B1 (en) * 2013-08-28 2018-09-12 VIA Technologies, Inc. Dynamic reconfiguration of mulit-core processor
US9286268B2 (en) * 2013-12-12 2016-03-15 Brno University of Technology Method and an apparatus for fast convolution of signals with a one-sided exponential function
CN104952448A (zh) * 2015-05-04 2015-09-30 张爱英 一种双向长短时记忆递归神经网络的特征增强方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6647377B2 (en) * 1997-11-19 2003-11-11 Netuitive, Inc. Multi-kernel neural network concurrent learning, monitoring, and forecasting system
US6782375B2 (en) * 2001-01-16 2004-08-24 Providian Bancorp Services Neural network based decision processor and method
US7512573B2 (en) * 2006-10-16 2009-03-31 Alcatel-Lucent Usa Inc. Optical processor for an artificial neural network

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI830669B (zh) * 2023-02-22 2024-01-21 旺宏電子股份有限公司 編碼方法及編碼電路

Also Published As

Publication number Publication date
TW201714119A (zh) 2017-04-16
CN106599989B (zh) 2019-04-09
CN106599990A (zh) 2017-04-26
TW201714081A (zh) 2017-04-16
CN106599989A (zh) 2017-04-26
TW201714091A (zh) 2017-04-16
TW201714080A (zh) 2017-04-16
CN106650923A (zh) 2017-05-10
TWI579694B (zh) 2017-04-21
CN106599992B (zh) 2019-04-09
TWI601062B (zh) 2017-10-01
TW201714078A (zh) 2017-04-16
TWI616825B (zh) 2018-03-01
TW201714079A (zh) 2017-04-16
CN106650923B (zh) 2019-04-09
CN106599992A (zh) 2017-04-26
CN106599990B (zh) 2019-04-09
CN106599991A (zh) 2017-04-26
TWI608429B (zh) 2017-12-11
CN106598545A (zh) 2017-04-26
CN106599991B (zh) 2019-04-09
TWI591539B (zh) 2017-07-11
TWI626587B (zh) 2018-06-11
CN106598545B (zh) 2020-04-14
TW201714120A (zh) 2017-04-16

Similar Documents

Publication Publication Date Title
TWI650707B (zh) 處理器,其運作方法與電腦程式產品
TWI667612B (zh) 裝置與運作裝置之方法
TWI662485B (zh) 裝置,運作裝置之方法與其電腦程式產品
CN108133263B (zh) 神经网络单元
CN108133262B (zh) 具有用于执行高效3维卷积的存储器布局的神经网络单元
CN108133264B (zh) 执行高效3维卷积的神经网络单元
US10474628B2 (en) Processor with variable rate execution unit
CN111680789B (zh) 神经网络单元
US20170103305A1 (en) Neural network unit that performs concurrent lstm cell calculations
EP3153997A2 (en) Neural network unit with output buffer feedback and masking capability