TW202014935A - 處理器、利用處理電路進行計算的方法及利用處理工具進行計算的方法 - Google Patents
處理器、利用處理電路進行計算的方法及利用處理工具進行計算的方法 Download PDFInfo
- Publication number
- TW202014935A TW202014935A TW108121809A TW108121809A TW202014935A TW 202014935 A TW202014935 A TW 202014935A TW 108121809 A TW108121809 A TW 108121809A TW 108121809 A TW108121809 A TW 108121809A TW 202014935 A TW202014935 A TW 202014935A
- Authority
- TW
- Taiwan
- Prior art keywords
- ifm
- block
- multiplier
- output
- register
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/002—Image coding using neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Multimedia (AREA)
- Complex Calculations (AREA)
- Testing Of Coins (AREA)
Abstract
一種神經處理器。在一些實施例中,處理器包括第一塊元、第二塊元、記憶體及匯流排。匯流排可連接至記憶體、第一塊元及第二塊元。第一塊元可包括:第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器及第二乘法器。激活緩衝器可被配置成包括:連接至第一乘法器的第一隊列及連接至第二乘法器的第二隊列。第一隊列可包括第一暫存器與和第一暫存器相鄰的第二暫存器,第一暫存器是第一隊列的輸出暫存器。第一塊元可被配置成:在第一狀態中在第一乘法器中將第一權重乘以來自第一隊列的輸出暫存器的激活;以及在第二狀態中在第二乘法器中將第一權重乘以來自第一隊列的第二暫存器的激活。
Description
根據本揭露的實施例的一或多個態樣是有關於處理電路,且更具體而言有關於用於實行乘法與加法的組合的處理電路。
神經網路可在操作中實行涉及大量乘法及加法的張量運算(例如,張量乘法及卷積)。若由通用中央處理單元或甚至圖形處理單元(其可更佳地適合於此種任務)來實行,則該些運算的實行可能相對慢且每次運算造成相對高的能量成本。尤其是在功率預算可能受到嚴格約束的小裝置(例如,行動手持裝置)中,與通用中央處理單元或圖形處理單元的使用相關聯的功耗可能為一顯著缺點。
因此,需要一種改善的神經網路計算處理電路。
根據本揭露的一些實施例,提供一種處理器,所述處理器包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述第一塊元被配置用以實行激活陣列與權重的內核的卷積,所述實行所述卷積依次包括:形成所述內核與所述激活陣列的第一子陣列的張量積;形成所述內核與所述激活陣列的第二子陣列的張量積,所述第二子陣列在第一方向上相對於所述第一子陣列偏移n個陣列元素,n是正整數;以及形成所述內核與所述激活陣列的第三子陣列的張量積,所述第三子陣列在垂直於所述第一方向的第二方向上相對於所述第二子陣列偏移一個陣列元素。
在一些實施例中,所述實行所述卷積更依次包括在所述形成所述內核與所述第三子陣列的所述張量積之後:形成所述內核與所述激活陣列的第四子陣列的張量積,所述第四子陣列在與所述第一方向相反的第三方向上相對於所述第三子陣列偏移m個陣列元素,m是正整數;以及形成所述內核與所述激活陣列的第五子陣列的張量積,所述第五子陣列在所述第二方向上相對於所述第四子陣列偏移一個陣列元素。
在一些實施例中,m等於n。
在一些實施例中,n等於1。
在一些實施例中,所述實行所述卷積更依次包括在所述形成所述內核與所述第一子陣列的所述積之後:形成所述內核與所述激活陣列的n-1個相應子陣列的n-1個積,所述n-1個積中的第k個積中的子陣列在所述第一方向上相對於所述第一子陣列偏移k+1個陣列元素。
在一些實施例中,所述處理器更包括連接至所述激活緩衝器且被配置成向所述激活緩衝器供應激活的快取,所述快取具有足以儲存H + (H+n)*(W-1) – 1個激活的大小,其中:H是所述內核在所述第一方向上的大小,且W是所述內核在所述第二方向上的大小。
在一些實施例中,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述第一塊元更被配置成:在第一狀態中,在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理器更包括:第一加法器,被配置成在所述第一狀態中:連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
在一些實施例中,所述處理器更包括第二加法器,所述第二加法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
根據本揭露的一些實施例,提供一種利用處理電路進行計算的方法,所述處理電路包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述方法包括實行激活陣列與權重的內核的卷積,所述實行所述卷積依次包括:形成所述內核與所述激活陣列的第一子陣列的張量積;形成所述內核與所述激活陣列的第二子陣列的張量積,所述第二子陣列在第一方向上相對於所述第一子陣列偏移n個陣列元素,n是正整數;以及形成所述內核與所述激活陣列的第三子陣列的張量積,所述第三子陣列在垂直於所述第一方向的第二方向上相對於所述第二子陣列偏移一個陣列元素。
在一些實施例中,所述實行所述卷積更依次包括在所述形成所述內核與所述第三子陣列的所述張量積之後:形成所述內核與所述激活陣列的第四子陣列的張量積,所述第四子陣列在與所述第一方向相反的第三方向上相對於所述第三子陣列偏移m個陣列元素,m是正整數;以及形成所述內核與所述激活陣列的第五子陣列的張量積,所述第五子陣列在所述第二方向上相對於所述第四子陣列偏移一個陣列元素。
在一些實施例中,m等於n。
在一些實施例中,n等於1。
在一些實施例中,所述實行所述卷積更依次包括在所述形成所述內核與所述第一子陣列的所述積之後:形成所述內核與所述激活陣列的n-1個相應子陣列的n-1個積,所述n-1個積中的第k個積中的子陣列在所述第一方向上相對於所述第一子陣列偏移k+1個陣列元素。
在一些實施例中,所述處理電路更包括連接至所述激活緩衝器且被配置成向所述激活緩衝器供應激活的快取,所述快取具有足以儲存H + (H+n)*(W-1) – 1個激活的大小,其中:H是所述內核在所述第一方向上的大小,且W是所述內核在所述第二方向上的大小。
在一些實施例中:所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述第一塊元更被配置成:在第一狀態中,在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理電路更包括第一加法器,所述方法更包括在所述第一狀態中:將所述第一加法器連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及由所述第一加法器將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
根據本揭露的一些實施例,提供一種利用處理工具進行計算的方法,所述處理工具包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述方法包括實行激活陣列與權重的內核的卷積,所述實行所述卷積依次包括:形成所述內核與所述激活陣列的第一子陣列的張量積;形成所述內核與所述激活陣列的第二子陣列的張量積,所述第二子陣列在第一方向上相對於所述第一子陣列偏移n個陣列元素,n是正整數;以及形成所述內核與所述激活陣列的第三子陣列的張量積,所述第三子陣列在垂直於所述第一方向的第二方向上相對於所述第二子陣列偏移一個陣列元素。
根據本揭露的一些實施例,提供一種處理器,所述處理器包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述處理器被配置用以實行激活陣列與權重的第一內核的第一卷積,所述實行所述第一卷積包括:將所述激活陣列的第一子陣列廣播至所述第一塊元以及所述第二塊元;形成第一張量積,所述第一張量積是所述權重的第一內核的第一子陣列與所述激活陣列的所述第一子陣列的張量積;將所述第一張量積儲存於所述記憶體中;將所述激活陣列的第二子陣列廣播至所述第一塊元以及所述第二塊元;形成第二張量積,所述第二張量積是所述權重的第一內核的第二子陣列與所述激活陣列的所述第二子陣列的張量積;以及將所述第一張量積與所述第二張量積相加。
在一些實施例中,所述第一塊元更包括權重解壓縮單元,所述權重解壓縮單元被配置成:將以壓縮形式對多個權重進行編碼的資料字元解壓縮,以抽取第一權重及第二權重;將所述第一權重饋送至所述第一權重暫存器;以及將所述第二權重饋送至所述第二權重暫存器。
在一些實施例中,所述第一塊元更被配置用以實行激活陣列與權重的第二內核的第二卷積,所述實行所述第二卷積依次包括:形成所述第二內核的第一部分與所述激活陣列的第一子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的權重;形成所述第二內核的第二部分與所述激活陣列的所述第一子陣列的張量積,所述第二內核的所述第二部分包括儲存於所述第二權重暫存器中的權重;以及形成所述第二內核的所述第一部分與所述激活陣列的第二子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的所述權重。
在一些實施例中,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述第一塊元更被配置成:在第一狀態中,在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理器更包括第一加法器,所述第一加法器被配置成在所述第一狀態中:連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
在一些實施例中,所述處理器更包括第二加法器,所述第二加法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
在一些實施例中,所述處理器更包括:第一累加器,連接至所述第一加法器;以及第二累加器,連接至所述第二加法器,所述第一累加器包括暫存器且被配置成在所述第一狀態中:將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值;以及將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
在一些實施例中,所述第二累加器包括暫存器且被配置成在所述第二狀態中,將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值;以及將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
在一些實施例中,所述處理器更包括激活零跳過控制電路,所述激活零跳過控制電路被配置成:判斷所述第一隊列的所述輸出暫存器是否含有零;以及因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
根據本揭露的一些實施例,提供一種利用處理電路進行計算的方法,所述處理電路包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述方法包括實行激活陣列與權重的第一內核的第一卷積,所述實行所述第一卷積包括:將所述激活陣列的第一子陣列廣播至所述第一塊元以及所述第二塊元;形成第一張量積,所述第一張量積是所述權重的第一內核的第一子陣列與所述激活陣列的所述第一子陣列的張量積;將所述第一張量積儲存於所述記憶體中;將所述激活陣列的第二子陣列廣播至所述第一塊元以及所述第二塊元;形成第二張量積,所述第二張量積是所述權重的第一內核的第二子陣列與所述激活陣列的所述第二子陣列的張量積;以及將所述第一張量積與所述第二張量積相加。
在一些實施例中,所述第一塊元更包括權重解壓縮單元,且所述方法更包括:由所述權重解壓縮單元將以壓縮形式對多個權重進行編碼的資料字元解壓縮,以抽取第一權重及第二權重;將所述第一權重饋送至所述第一權重暫存器;以及將所述第二權重饋送至所述第二權重暫存器。
在一些實施例中,所述方法更包括實行激活陣列與權重的第二內核的第二卷積,所述實行所述第二卷積依次包括:形成所述第二內核的第一部分與所述激活陣列的第一子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的權重;形成所述第二內核的第二部分與所述激活陣列的所述第一子陣列的張量積,所述第二內核的所述第二部分包括儲存於所述第二權重暫存器中的權重;以及形成所述第二內核的所述第一部分與所述激活陣列的第二子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的所述權重。
在一些實施例中,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述第一塊元更被配置成:在第一狀態中,在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理電路更包括第一加法器,所述方法更包括在所述第一狀態中:將所述第一加法器連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及由所述第一加法器將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
在一些實施例中,所述處理電路更包括第二加法器,所述方法更包括在所述第二狀態中將所述第二加法器連接至所述第一乘法器的所述輸出。
在一些實施例中,所述處理電路更包括:第一累加器,連接至所述第一加法器;以及第二累加器,連接至所述第二加法器,所述第一累加器包括暫存器,所述方法更包括在所述第一狀態中:由所述第一累加器將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值;以及由所述第一累加器將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
在一些實施例中,所述第二累加器包括暫存器,且所述方法更包括在所述第二狀態中:由所述第二累加器將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值;以及由所述第二累加器將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
根據本揭露的一些實施例,提供一種利用處理工具進行計算的方法,所述處理工具包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述方法包括實行激活陣列與權重的第一內核的第一卷積,所述實行所述第一卷積包括:將所述激活陣列的第一子陣列廣播至所述第一塊元以及所述第二塊元;形成第一張量積,所述第一張量積是所述權重的第一內核的第一子陣列與所述激活陣列的所述第一子陣列的張量積;將所述第一張量積儲存於所述記憶體中;將所述激活陣列的第二子陣列廣播至所述第一塊元以及所述第二塊元;形成第二張量積,所述第二張量積是所述權重的第一內核的第二子陣列與所述激活陣列的所述第二子陣列的張量積;以及將所述第一張量積與所述第二張量積相加。
根據本揭露的一些實施例,提供一種處理器,所述處理器包括第一塊元、第二塊元、記憶體、輸入匯流排以及輸出匯流排,所述輸入匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述第一塊元被配置用以實行激活陣列與權重的內核的第一卷積,所述記憶體包括第一記憶庫組以及第二記憶庫組,所述輸入匯流排包括:第一分段匯流排,用於在第一方向上傳播資料;以及第二分段匯流排,用於在與所述第一方向相反的第二方向上傳播資料,所述第一分段匯流排包括第一切換區塊以及第二切換區塊,所述第一切換區塊連接至所述第一塊元以及所述第一記憶庫組,所述第二切換區塊連接至所述第二塊元以及所述第二記憶庫組,所述第二分段匯流排包括第三切換區塊以及第四切換區塊,所述第三切換區塊連接至所述第一塊元以及所述第一記憶庫組,所述第四切換區塊連接至所述第二塊元以及所述第二記憶庫組,所述第一切換區塊的輸入連接至所述第二切換區塊的輸出,並且所述第三切換區塊的輸出連接至所述第四切換區塊的輸入。
在一些實施例中,所述第一分段匯流排被配置成在第一匯流排狀態中:藉由所述第一切換區塊將所述第一記憶庫組連接至所述第一塊元;以及藉由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
在一些實施例中,所述第一分段匯流排更被配置成在第二匯流排狀態中:藉由所述第一切換區塊且藉由所述第二切換區塊將所述第二記憶庫組連接至所述第一塊元;以及藉由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
在一些實施例中,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述第一塊元更被配置成:在第一狀態中,在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理器更包括第一加法器,所述第一加法器被配置成在所述第一狀態中:連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
在一些實施例中,所述處理器更包括第二加法器,所述第二加法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
在一些實施例中,所述處理器更包括:第一累加器,連接至所述第一加法器;以及第二累加器,連接至所述第二加法器,所述第一累加器包括暫存器且被配置成在所述第一狀態中:將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值;以及將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
在一些實施例中,所述第二累加器包括暫存器且被配置成在所述第二狀態中:將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值;以及將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
在一些實施例中,所述處理器更包括激活零跳過控制電路,所述激活零跳過控制電路被配置成:判斷所述第一隊列的所述輸出暫存器是否含有零;以及因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
在一些實施例中,所述處理器更包括多工器,所述多工器具有:輸入,在所述多工器的單埠側處連接至所述第一乘法器;第一輸出,在所述多工器的多埠側處連接至所述第一加法器;以及第二輸出,在所述多工器的所述多埠側處連接至所述第二加法器。
根據本揭露的一些實施例,提供一種利用處理電路進行計算的方法,所述處理電路包括第一塊元、第二塊元、記憶體、輸入匯流排以及輸出匯流排,所述輸入匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述第一塊元被配置用以實行激活陣列與權重的內核的第一卷積,所述記憶體包括第一記憶庫組以及第二記憶庫組,所述輸入匯流排包括:第一分段匯流排,用於在第一方向上傳播資料;以及第二分段匯流排,用於在與所述第一方向相反的第二方向上傳播資料,所述第一分段匯流排包括第一切換區塊以及第二切換區塊,所述第一切換區塊連接至所述第一塊元以及所述第一記憶庫組,所述第二切換區塊連接至所述第二塊元以及所述第二記憶庫組,所述第二分段匯流排包括第三切換區塊以及第四切換區塊,所述第三切換區塊連接至所述第一塊元以及所述第一記憶庫組,所述第四切換區塊連接至所述第二塊元以及所述第二記憶庫組,所述第一切換區塊的輸入連接至所述第二切換區塊的輸出,並且所述第三切換區塊的輸出連接至所述第四切換區塊的輸入,所述方法包括在第一匯流排狀態中:由所述第一切換區塊將所述第一記憶庫組連接至所述第一塊元;以及由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
在一些實施例中,所述方法更包括在第二匯流排狀態中:由所述第一切換區塊及所述第二切換區塊將所述第二記憶庫組連接至所述第一塊元;以及由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
在一些實施例中,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述第一塊元更被配置成:在第一狀態中,在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理電路更包括第一加法器,所述方法更包括在所述第一狀態中:將所述第一加法器連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及由所述第一加法器將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
在一些實施例中,所述處理電路更包括第二加法器,所述方法更包括在所述第二狀態中將所述第二加法器連接至所述第一乘法器的所述輸出。
在一些實施例中,所述處理電路更包括:第一累加器,連接至所述第一加法器;以及第二累加器,連接至所述第二加法器,所述第一累加器包括暫存器,所述方法更包括在所述第一狀態中:由所述第一累加器將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值;以及由所述第一累加器將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
在一些實施例中,所述第二累加器包括暫存器,且所述方法更包括在所述第二狀態中:由所述第二累加器將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值;以及由所述第二累加器將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
根據本揭露的一些實施例,提供一種利用處理工具進行計算的方法,所述處理工具包括第一塊元、第二塊元、記憶體、輸入匯流排以及輸出匯流排,所述輸入匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述第一塊元被配置用以實行激活陣列與權重的內核的第一卷積,所述記憶體包括第一記憶庫組以及第二記憶庫組,所述輸入匯流排包括:第一分段匯流排,用於在第一方向上傳播資料;以及第二分段匯流排,用於在與所述第一方向相反的第二方向上傳播資料,所述第一分段匯流排包括第一切換區塊以及第二切換區塊,所述第一切換區塊連接至所述第一塊元以及所述第一記憶庫組,所述第二切換區塊連接至所述第二塊元以及所述第二記憶庫組,所述第二分段匯流排包括第三切換區塊以及第四切換區塊,所述第三切換區塊連接至所述第一塊元以及所述第一記憶庫組,所述第四切換區塊連接至所述第二塊元以及所述第二記憶庫組,所述第一切換區塊的輸入連接至所述第二切換區塊的輸出,並且所述第三切換區塊的輸出連接至所述第四切換區塊的輸入,所述方法包括在第一匯流排狀態中:由所述第一切換區塊將所述第一記憶庫組連接至所述第一塊元;以及由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
根據本揭露的一些實施例,提供一種處理器,所述處理器包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述第一塊元被配置成:在第一狀態中,在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理器更包括第一加法器,所述第一加法器被配置成在所述第一狀態中:連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
在一些實施例中,所述處理器更包括第二乘法器,所述第二乘法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
在一些實施例中,所述處理器更包括:第一累加器,連接至所述第一加法器;以及第二累加器,連接至所述第二加法器,所述第一累加器包括暫存器且被配置成在所述第一狀態中:將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值;以及將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
在一些實施例中,所述第二累加器包括暫存器且被配置成在所述第二狀態中:將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值;以及將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
在一些實施例中,所述處理器更包括激活零跳過控制電路,所述激活零跳過控制電路被配置成:判斷所述第一隊列的所述輸出暫存器是否含有零;以及因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
在一些實施例中,所述處理器更包括多工器,所述多工器具有:輸入,在所述多工器的單埠側處連接至所述第一乘法器;第一輸出,在所述多工器的多埠側處連接至所述第一加法器;以及第二輸出,在所述多工器的所述多埠側處連接至所述第二加法器。
在一些實施例中,所述激活零跳過控制電路被配置成控制所述多工器:在所述第一狀態中,將所述輸入連接至所述第一輸出;以及在所述第二狀態中,將所述輸入連接至所述第二輸出。
在一些實施例中:所述第二隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第二隊列的輸出暫存器;並且所述第一塊元被進一步配置成在第三狀態中:在所述第一乘法器中將所述第一權重乘以來自所述第二隊列的所述第二暫存器的激活。
根據本揭露的一些實施例,提供一種利用處理電路進行計算的方法,所述處理電路包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述方法包括:在第一狀態中,由所述第一乘法器將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,由所述第一乘法器將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
在一些實施例中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
在一些實施例中,所述處理電路更包括第一加法器,所述方法更包括在所述第一狀態中:將所述第一加法器連接至所述第一乘法器的輸出以及所述第二乘法器的輸出;以及由所述第一加法器將以下相加:自所述第一乘法器的所述輸出接收的積與自所述第二乘法器的所述輸出接收的積。
在一些實施例中,所述處理電路更包括第二加法器,所述方法更包括在所述第二狀態中將所述第二加法器連接至所述第一乘法器的所述輸出。
在一些實施例中,所述處理電路更包括:第一累加器,連接至所述第一加法器;以及第二累加器,連接至所述第二加法器,所述第一累加器包括暫存器,所述方法更包括在所述第一狀態中:由所述第一累加器將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值;以及由所述第一累加器將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
在一些實施例中,所述第二累加器包括暫存器,且所述方法更包括在所述第二狀態中:由所述第二累加器將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值;以及由所述第二累加器將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
在一些實施例中,所述處理電路更包括激活零跳過控制電路,且所述方法更包括:由所述激活零跳過控制電路判斷所述第一隊列的所述輸出暫存器是否含有零;以及因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
在一些實施例中,所述處理電路更包括多工器,所述多工器具有:輸入,在所述多工器的單埠側處連接至所述第一乘法器;第一輸出,在所述多工器的多埠側處連接至所述第一加法器;以及第二輸出,在所述多工器的所述多埠側處連接至所述第二加法器。
在一些實施例中,所述方法更包括由所述激活零跳過控制電路控制所述多工器:在所述第一狀態中,將所述輸入連接至所述第一輸出;以及在所述第二狀態中,將所述輸入連接至所述第二輸出。
根據本揭露的一些實施例,提供一種利用處理工具進行計算的方法,所述處理工具包括第一塊元、第二塊元、記憶體以及匯流排,所述匯流排連接至所述記憶體、所述第一塊元以及所述第二塊元,所述第一塊元包括第一權重暫存器、第二權重暫存器、激活緩衝器、第一乘法器以及第二乘法器,所述激活緩衝器被配置成包括:第一隊列,連接至所述第一乘法器;以及第二隊列,連接至所述第二乘法器,所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,所述方法包括:在第一狀態中,在所述第一乘法器中將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活;以及在第二狀態中,在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
以下結合附圖闡述的詳細說明旨在作為對根據本揭露而提供的神經處理器的示例性實施例的說明,且並非旨在表示可在其中構造或利用本揭露的唯一形式。所述說明結合所示實施例來闡述本揭露的特徵。然而,要理解,藉由亦旨在囊括於本揭露的範圍內的不同實施例可達成相同或等效的功能及結構。如本文他處所示,相同的元件編號旨在指示相同的元件或特徵。
圖1A示出根據一些實施例的神經處理器的高層階方塊圖。神經處理器可被配置用以高效地計算輸入特徵映射(input feature map,IFM)(或「激活(activation)」的張量)與多維權重陣列(或張量)的卷積或張量積,以形成輸出特徵映射(output feature map,OFM)。神經處理器亦可被配置用以計算特徵映射池化(feature map pooling)及激活函數(activation function),然而,出於清晰及簡潔的目的,在此特定揭露中基本上不涵蓋池化及激活函數。
多個靜態隨機存取記憶體(static random access memory,SRAM)記憶庫組109(各自包括若干個SRAM記憶庫,例如在圖4AB及圖4AC中包括四個SRAM記憶庫108)可藉由輸入特徵映射(IFM)遞送組構104連接至乘法與縮減(Multiply-and-Reduce,MR)塊元102(或「MR塊元」)(在下文進一步詳細論述),IFM遞送組構104將儲存於SRAM記憶庫組109中的輸入激活映射引帶至塊元102以供後續計算。如將在下文進一步詳細論述,塊元102含有由乘法器單元(Multiplier Unit,MU)103構成的陣列。塊元102亦藉由輸出特徵映射(OFM)遞送組構106連接至SRAM記憶庫組109,OFM遞送組構106將計算結果自塊元102傳輸至SRAM記憶庫組109以進行儲存。
IFM遞送組構104可為分段匯流排(如下文所進一步詳細論述),且因此,如下文所進一步論述,SRAM記憶庫組109中的每一者可與塊元102中的一者相關聯。中央控制器110可經由公用匯流排(utility bus)112向系統中的控制暫存器供應控制字元。資料可經由先進可擴展介面(advanced eXtensible interface,AXI)(由ARM有限公司生產的先進可擴展互連)互連114遞送至神經處理器,且由神經處理器實行的處理操作的結果可以相似的形式經由AXI互連114擷取。微控制器(micro-controller,MCU)116可用於藉由以及時的方式恰當地配置中央控制器來精心安排計算,以及利用位於神經處理器與外部記憶體120之間的直接記憶體存取(direct memory access,DMA)控制器118來協調及執行資料傳送。
每一塊元102可包括由乘法與縮減(MR)行133構成的乘法與縮減(MR)陣列122。圖1B示出在一些實施例中的MR陣列122。每一MR陣列含有八個MR行133。每一MR行133含有十六個乘法器單元MU 103及兩個加法器樹128A及128B。注意,為清晰起見,圖1B僅示出十六個MU 103中的四個。
每一MU 103可包括多個暫存器(例如,可被稱為「權重暫存器(weight register)」的含有18個9位元暫存器的暫存器檔案127)以及乘法器126。乘法器126將輸入激活(input activation)乘以權重。隨後,每一MR行133中的加法器樹128A及128B對來自所述行中的所述十六個MU的所得積進行求和(縮減)以形成點積(dot product)。所述求和是以如下文所詳細闡釋的特定方式實行。
每一塊元102亦含有IFM快取139及激活廣播單元(Activation Broadcast Unit,ABU)141。IFM快取139旨在藉由對自SRAM接收的IFM值進行快取來縮減對輸入特徵映射的SRAM讀取。正如每一MR行133含有十六個乘法器單元103一樣,IFM快取139含有十六個並行的「激活通路(activation lane)」,每一激活通路137有效地對應於MR陣列中的乘法器單元的「列」。
激活廣播單元負責準備輸入激活。準備過程中的第一步驟包括遵循所需卷積順序將輸入激活自IFM快取139提取至IFM激活緩衝器124中,同時亦在可能時省略零值激活以達成稀疏激活計算(sparse activation computation)。可以選擇地將稀疏激活計算特徵去能,從而形成「稠密(dense)」張量計算模式。準備過程中的第二步驟包括將激活的數值類型轉換成符號與8位元量值格式(sign-and-8bit-magnitude format),此包括利用類型轉換器135將位元寬度超過8位元的資料類型分割成一系列符號與8位元量值值。當已利用由谷歌張量流(Google TensorFlow)支援的「零點(zero-point)」對激活進行編碼時,可在將激活轉換為符號與8位元量值格式之前將零點常數值Z加到所述激活中。
正如每一MR行133含有十六個乘法器單元103一樣,ABU 141、IFM緩衝器124及類型轉換器135亦各自含有十六個通路。所得的經轉換的十六個激活值被並行地廣播至MR陣列122,進而使得每一激活通路將一輸入激活值引帶至由八個乘法器單元構成的對應列。
每一MR行亦含有分別用於加法器樹128A及128B的累加器130A及130B。本文中所使用的「累加器」是加法器與暫存器的組合,其被配置成將輸入值加到暫存器的內容中並以和對暫存器的內容進行重寫(overwrite)。
如先前所提及,MR陣列122中的乘法器單元可排列成多個列(例如,16個列),為清晰起見,圖1B示出16個列中的僅四個列,且圖1B中示出其中兩者被標記為「O0」及「O7」的行(或「OFM」通道)(例如,八個行)。
將長度為十六的IFM向量稱作「IFM片(IFM slice)」。IFM片可將平面座標(x, y)及與其相關聯的深度通道索引d作為相關聯IFM張量的索引,例如IFM[x, y, d:d+15]。在一般情形中,塊元102一次自含有三維(3D)IFM張量的晶片上SRAM(on-chip SRAM)接收一個IFM片,其中每一輸入IFM片在輸入層中的平面位置(x, y)處含有十六個深度通道的值,即索引d至索引d+15(包括d及d+15)。
相似地,將長度為八的OFM向量稱作「OFM片(OFM slice)」。OFM片可將與其相關聯的平面座標(x, y)及深度通道索引d作為相關聯OFM張量的索引,例如OFM[x, y, d:d+7]。在一般情形中,塊元102產生OFM片作為輸出。如將在下文看出,當塊元未停止時,輸出速率的範圍可介於每時脈一個OFM片至例如在一些實施例中每時脈多達兩個OFM片的最大值之間。注意,在經由OFM遞送組構106傳輸最終OFM向量結果以儲存於SRAM中之前,來自塊元102的塊元102 OFM輸出向量(OFM片)可需要藉由縮減組構(Reduction Fabric,RF)111進一步縮減以完成OFM向量計算。
注意,IFM張量與OFM張量二者亦可具有第四「批次(batch)」維度,然而,神經處理器的目的是加速神經網路模型實時推理(相對於神經網路模型訓練),且實時推理通常是以為1的批次大小實行。為闡釋簡單起見,將在大部分論述中省略批次維度,且稍後單獨地闡述批次維度細節。
神經處理器可以同步邏輯實施,且每一MR行133可整體地處於一個時脈域內。在一些實施例中,在運算中,在每一運算周期期間(例如,在時脈的每一周期期間),所述十六個乘法器126中的每一者可在其輸入處自兩個因數形成相應積,加法器128中的每一者可在其輸入處形成該十六個積中的一些積的和(如圖1B中針對四個通路所示),且每一累加器130的加法器可形成(i)累加器130的暫存器的當前值與(ii)對應加法器128的輸出的和。在下一時脈周期開始時,每一累加器130的每一加法器的輸出可被寫入累加器130的暫存器中。
在一些實施例中,計算可為管線式(pipelined),且在圖1B中所示元件之間可存在附加暫存器(即,正反器陣列),以例如以電路欲進行運算的時脈速度提供足夠的時序餘裕(timing margin)。在此種實施例中,通量(throughput)可為相同的(即,在無附加暫存器的情況下相同,例如,每時脈周期一次乘法及加法),但(i)被饋送至乘法器126的輸入資料與(ii)被寫入累加器130的暫存器的乘法及加法的最終結果之間的潛時(latency)可較大(例如,若干個時脈周期)。
圖1C至圖1H說明以下運算的實例:在所述運算中,神經處理器利用IFM中的稀疏度、藉由在IFM的元素等於零時不按次序地將某些乘法及加法運算提前以利用將以另外一種方式實行乘零(multiplication by zero)的乘法器來加速計算的完成。IFM可儲存於SRAM記憶庫組109中,且自SRAM記憶庫組109提取資料的過程可被排程為使得激活緩衝器124作為多個隊列進行操作,所述多個隊列中的每一者對應於如圖1B中所示的一個資料列,且所述多個隊列中的每一者饋送MR陣列122的相應通路。
為闡釋清晰起見,假定位於SRAM與激活緩衝器124之間的IFM快取139已被去能及略過。假定激活資料類型為uint8且權重資料類型為int8,在此種情形中,類型轉換器135起到使激活值在不改變的情況下傳遞的作用,且MU 103中的乘法佔用一個時脈(即,一個時脈周期)。假定SRAM記憶庫組109在實例性運算開始時含有一些樣本IFM值(如圖1B中所示),且使用僅一個塊元。
亦假定與16個IFM通路、8個OFM行及10個IFM輸入向量a至j對應的權重張量W[0…15,0…7, a…j]已被預加載至對應的MU暫存器檔案中。
一旦實例性運算開始,便可自圖1C看出,在所示實例中,將兩個IFM向量a[]及b[](圖1C中最右側的兩個行)提取至激活緩衝器124中,進而使得激活緩衝器124的第一行(即,如所示的右手邊的行a[])含有IFM的第一向量(由元素a0至a3組成)且激活緩衝器124的第二行(即,如所示的左手邊的行b[])含有IFM的第二向量(由元素b0至b3組成,在用於辨識形成IFM的陣列的記法中,b1 = 0)。在圖1C中,第二隊列含有a1作為其第一元素(最靠近MR陣列122),且第二隊列含有零(0)作為其第二元素(即,b1 = 0)。
位於激活緩衝器124前面的IFM向量a[0…3]被廣播至MR陣列122,即IFM值a0被作為輸入而經由頂部激活通路廣播至頂列中的所述八個乘法器126中的每一者。同時,行0至7中的頂列乘法器分別自其相應的本地暫存器檔案接收權重W[0,0…7,a]作為每一乘法器的第二輸入。
相似地,值a1被作為輸入而經由自上數第二激活通路廣播至自上數第二列乘法器。同時,行0至7中的自上數第二列乘法器分別自其相應的本地暫存器檔案接收權重W[1,0…7,a]作為每一乘法器的第二輸入。
在運算中,可在由乘法器126構成的(16 × 8)陣列中的每一者中形成IFM的第一向量(由元素a0至a3組成)與相應權重的積,且可在第一加法器128A中形成與所期望點積對應的積的和並將所述和保存於第一累加器130A中:
ΣA,0
= a0
*w0,0,a
+ a1
*w1,0,a
+ a2
*w2,0,a
+ a3
*w3,0,a
…
ΣA,7
= a0
*w0,7,a
+ a1
*w1,7,a
+ a2
*w2,7,a
+ a3
*w3,7,a
此時,與IFMa[]對應的OFM輸出向量的計算完成,結果在累加器130A(在圖1C中示為ΣA,0…7
)中可用並準備好被發出至OFM遞送組構106(且可接著將每一行的累加器130A清空)。
在圖1D中,在已處理IFM的第一向量之後,將IFM的第三向量(由元素c0至c3組成,c2 = 0)讀取至激活緩衝器124中。不按次序地將IFM的第三向量的第二元素(即,元素c1)提前並乘以第二通路的每一乘法器126中的相應權重,而不再形成權重與IFM的第二向量的元素中的所有者(由元素b0至b3組成,b1 = 0)的積(此將需要在第二通路的每一乘法器126中形成零與相應權重的積)。
同時,通路0、2及3中的乘法器對應地自其相應的本地暫存器檔案接收權重W[0,0…7,b]、W[2,0…7,b]及W[3,0…7,b]。然而,由於通路1因激活b1=0被跳過而不按次序地進行運算,因此,注意,通路1中的乘法器正在接收與IFM向量(「畫素」)c而非IFM向量(畫素)b相關聯的權重W[0,0…7,c]。
由於塊元122現在同時處理兩個畫素(畫素b以及畫素c的一部分),因此將行中的乘積相加可能產生不正確的結果。為獲得正確的結果,使用所述兩個加法器樹中的一者來計算畫素b的點積,同時使用另一加法器樹來開始計算畫素c的點積。
由第二通路的每一乘法器126形成的積被饋送至相應的第二加法器128B(在圖1C中示為ΣB,0…7
),而由其它通路的乘法器126形成的積被饋送至相應的第一加法器128A。不按次序地將元素c1提前使得在激活緩衝器124中形成「空洞(hole)」,在後續時脈周期中可利用所述空洞以不按次序地將另一元素提前(如圖1E中所示,當不按次序地將元素d1提前時)。
由此,一旦已計算出IFM的第二向量的非零元素與相應權重的積且其和位於每一行的第一累加器130A中,則每一行的第一累加器130A含有IFM的第二向量(b[])與所述行的權重向量的點積,且可將其發出至OFM遞送組構106(且可接著將每一行的第一累加器130A清空)。
ΣA,0
= b0
*w0,0,b
+ b2
*w2,0,b
+ b3
*w3,0,b
…
ΣA,7
= b0
*w0,7,b
+ b2
*w2,7,b
+ b3
*w3,7,b
此時,每一行的第二累加器130B含有IFM的第三向量(c1)與相應權重向量的點積的僅一個項。
ΣB,0
= c1
*w1,0,c
…
ΣB,7
= c1
*w1,7,c
參照圖1E,在後續運算中(例如,在下一時脈周期期間),可(藉由MR陣列122的每一行的第一乘法器及第四乘法器126)形成IFM的第三向量的元素(c0、c3)與權重向量的積的餘項,且在第二累加器130B中將所述余項加到已儲存於第二累加器130B中的所述一個積中,以在第二累加器130B中完成IFM的第三向量(c[])與相應權重向量的點積。
ΣB,0
= c0
*w0,0,c
+ c1
*w1,0,c
+ c3
*w3,0,c
…
ΣB,7
= c0
*w0,7,c
+ c1
*w1,7,c
+ c3
*w3,7,c
藉由不按次序地將d1(由於在前一周期上實行了涉及c1的積,而在激活緩衝器124中留下「空洞」)與d2(由於c2 = 0)二者提前,可同時計算IFM的第四向量(由元素d0至d3組成,d0 = d4 = 0)與權重向量的點積。
ΣA,0
= d1
*w1,0,d
+ d2
*w2,0,d
…
ΣA,7
= d1
*w1,7,d
+ d2
*w2,7,d
此時,對IFM向量c[]與IFM向量d[]二者的OFM計算完成。
藉由相似的方式,當激活緩衝器如圖1F中所示含有具有互補稀疏度的兩個向量e[]與f[]時,MR行122的每一行可同時形成兩個點積。在圖1F所示實例中,舉例而言,IFM的第五向量(由元素e0至e3組成,e0 = e1 = 0)與每一權重向量的點積和IFM的第六向量(由元素f0至f3組成,f2 = f3 = 0)與每一權重向量的點積同時形成,第六向量的兩個非零元素均被不按次序地提前。
圖1G示出IFM的第七向量g[](由元素g0至g3組成,g1 = g2 = g3 = 0)位於激活緩衝器124的第一行中且IFM的第八向量(由元素h0至h3組成,h2 = h3 = 0)位於激活緩衝器124的第二行中的狀態。圖1G示出如何藉由不按次序地將IFM的第八向量的(非零)元素提前以使其與IFM的第七向量的(非零)元素同時被處理來同時形成IFM的第八向量h[]與每一對應權重的點積和IFM的第七向量與每一對應權重的點積。由於IFM的第八向量(h0)的(非零)元素中的一者與IFM的第七向量(g0)的(非零)元素位於同一通路中,因此將IFM的第八向量的(非零)元素中的每一者移位至MR行122的相鄰通路,以使該些元素可被不按次序地提前。
由此,將IFM的第八向量h[]的第一元素(h0)饋送至每一行的自上數第二乘法器126(由於其在此位置中具有零元素,因此其不用於IFM的第七向量g[]),並將IFM的第八向量h[]的第二元素(h1)饋送至每一行的第三乘法器126(其亦不用於IFM的第七向量g[]),使得IFM的第八向量的(非零)元素能夠與IFM的第七向量的(非零)元素同時被處理。亦將權重向量的對應元素移位。具體而言,與最頂側通路相關聯的每一乘法器單元提取兩個權重,一個權重與g0相關聯且在圖1G中標記為w0,0..7,g
(其中0..7指示對應的行),而另一權重與h0相關聯且在圖1G中標記為w0,0..7,h
。每一權重w0,0..7,g
被饋送至其在正接收g0的最頂側通路中的相應乘法器126中。然而,每一權重w0,0..7,h
被向下移位一個通路並被饋送至正接收h0的自上數第二通路的相關聯乘法器126中。最後,自上數第二通路中的乘法器單元各自提取與h1相關聯的權重w1,0..7,h
並將該些權重向下移位一個通路而到達正接收h1的自上數第三通路。
在圖1G中所示狀態中,在一個周期內不使用底部通路中的每一MR行122的每一乘法器126。在一些實施例中,藉由將MR塊元102構造成具有較深的(例如,3深度式(3-deep))激活緩衝器124、進而使得每一激活通路可具有來自同一通道的更多(例如,3個)值以從中選擇,無法充分利用乘法器126中的所有者的此種故障的可能性可降低。自距通路大於一的距離引帶非零激活(將非零激活移位)亦會在以非零激活替換零值激活方面提供更大的靈活性。具有多於兩組加法器樹及相關聯累加器亦可提高乘法器利用率(multiplier utilization,MU)。
圖1H示出在圖1G中所示周期之後的後續周期,其中激活緩衝器124的第一行含有IFM的第九向量(完全由零組成),且激活緩衝器124的第二行含有IFM的第十向量(由元素j0至j3組成)。在圖1H中所示狀態中,可不按次序地將IFM的第十向量的元素中的所有者提前,且可計算IFM的第十向量j[]與每一權重向量的點積,而不會因處理IFM的第九向量而引起一個周期的延遲(delay)。
如以上實例中所示,乘法器單元126的輸出可在一些時脈周期期間饋送至加法器樹128A中,而在其它時脈周期期間則饋送至加法器樹128B中。當乘法器單元不將其輸出饋送至加法器樹128A或128B中時,對應的加法器樹輸入被設置為零。圖1I示出利用多工器132將任意乘法器126的輸出引導至第一加法器128A或第二加法器128B以支援例如圖1D至圖1H所示運算的配置。此處,多工器控制訊號sel_adder_tree[0…15]來自塊元控制邏輯144,塊元控制邏輯144協調塊元內的計算,此包括自快取提取IFM向量、自激活緩衝器選擇非零激活並將其多工至激活通路、選擇加法器樹以與每一IFM向量一起使用、將乘法器單元輸出多工至正確的加法器樹並將行累加器清空。
由於乘法器輸出總是饋送加法器樹128A或加法器樹128B,但決不會同時饋送加法器樹128A與加法器樹128B二者,因此可有可能以較少的邏輯來實施加法器樹128A與加法器樹128B二者。圖1J示出第一加法器128A與第二加法器128B二者如何可為以單一實體加法器樹及適合的多工器(未示出)實施的邏輯概念。為說明清晰起見,考量構造兩個加法器樹,所述兩個加法器樹中的每一者具有四個輸入。可利用三個加法器來實施四輸入式加法器樹(four-input adder tree)。在簡單的情形中,每一加法器樹將需要三個加法器元件,因此構造兩個四輸入式加法器樹將耗用六個加法器子元件。借助幾個額外的多工器來構造使用僅三個加法器元件的所述兩個四輸入式加法器樹。要考量三種相關情形。在第一種情形(i)中,第一邏輯加法器128A對輸入中的所有四者進行求和(且第二邏輯加法器128B的輸出為零);在第二種情形(ii)中,第一邏輯加法器128A對輸入中的三者進行求和(且第二邏輯加法器128B的輸出等於其餘輸入);在第三種情形(iii)中,第一邏輯加法器128A對輸入中的兩者進行求和,且第二邏輯加法器128B對輸入中的兩者進行求和。在另外兩種情形(未例示)中,分別而言,第二邏輯加法器128B對輸入中的三者或所有四者進行求和,且第一邏輯加法器128A等於其餘輸入或等於零。本文中所使用的「加法器」是用於將至少兩個數字相加以形成和的實體電路或者如圖1J所示實例中一樣利用實體加法器與多工器的組合形成的多個邏輯加法器中的一者。如自圖1J看出,僅三個加法器元件(具有一些附加多工器(未示出))(而非六個)便足以實施所有可能的情形。
圖1K示出在一些實施例中的乘法器單元103的內部電路圖。乘法器單元103含有由無符號8位元×無符號8位元乘法器126、保持本地權重的暫存器檔案134、用於為乘法器126選擇輸入權重的邏輯143、用於將本地權重「移位」至相鄰通路的邏輯149及151、用於檢測乘零情況並使乘法器閒置下來以降低動態功耗的邏輯145、136、157、155及159、以及權重加載邏輯157。
暫存器檔案134保持權重。一個暫存器對應於單一int8或uint8權重。具有較大位元寬度的權重佔用多於一個暫存器,例如int16或uint16權重佔用兩個暫存器。暫存器檔案134保持十八個int8或uint8權重或對應地保持九個int16或uint16權重。暫存器的數目可被選擇為使得能夠利用16位元權重來計算3×3卷積,而不必訴諸於生成部分結果(partial result)(如稍後詳細闡述)。
暫存器檔案134具有單一輸入埠以經由垂直權重加載匯流排101{swt_in[C], wt_abs_ld_in[7:0][C]}加載權重。每一MR行133 C接收其自身的權重加載匯流排,其中C的範圍介於零至七。藉由在垂直權重加載匯流排101{swt_in[C], wt_abs_ld_in[7:0][C]}上設置權重值、在權重暫存器索引匯流排wt_ld_idx[4:0]上規定目的地暫存器(零至十七)索引並且使通路權重加載賦能訊號wt_ld_en_lane[L]置位以將權重加載至通路L中,權重被以一次一整個通路(即,同時在單一通路中的所有八個行中)的方式自權重解壓縮單元138加載。
如圖1K中所示,加載單一通路中的所有權重要耗用十八個周期,且加載整個MU陣列122中的所有權重要耗用18*16=288個時脈周期。在一些情況下,此種權重加載速度可能為不足夠的,當計算全連接(fully-connected,FC)層時尤其如此。與卷積層計算不同,在FC層計算期間,每一權重僅被使用一次且此後便被捨棄。因此,為當計算FC層時維持乘法器126的最大利用率,有必要每一時脈加載每一乘法器單元103中的一個權重,此較圖1K中所示情形快十六倍。在此種情形中,所述實施例可被例如修改為包括附加權重加載匯流排101 {swt_in[C0], wt_abs_ld_in[7:0][C0]}、{swt_in[C1], wt_abs_ld_in[7:0][C1]}等以使權重加載加速。
在圖1K中,權重暫存器檔案127具有三個輸出埠以使得能夠同時提取三個權重,以應對所述權重中的一者必須向上移位一個通路、同時第二權重向下移位一個通路且第三權重被在本地消耗的情況。
自本地暫存器檔案提取用於本地消耗的權重是利用多工器147達成。舉例而言,在圖1C中,多工器147選擇在本地儲存的權重w0,0,a
以與IFM值a0相乘。此外,在圖1D中,多工器147選擇在本地儲存的權重w1,0,c
以乘以IFM值c1。
自本地暫存器檔案134提取權重並將此權重移位至下部通路是利用多工器149達成。舉例而言,在圖1G中,在本地儲存的權重w0,0,h
向下移位一個通路以與h0相乘。
最後,自本地暫存器檔案134提取權重並將此權重移位至上部通路是利用多工器151達成。
激活廣播單元141分別利用訊號sel_wt_self[4:0]、sel_wt_dn1[4:0]及訊號sel_wt_up1[4:0]來控制所有三個暫存器檔案提取多工器147、149及151,乃因ABU具有關於每一激活通路的移位及與每一被廣播(至激活通路)的IFM值相關聯的向激活緩衝器中的偏移的完整資訊。
為縮減MR行133的面積,可例如藉由不允許權重相對於同一暫存器檔案同時上下移位來將暫存器檔案134中的輸出埠的數目自3個縮減為2個。可例如藉由不允許所有權重移位或者允許任一個權重移位或在本地消耗所述權重來將暫存器檔案134中的輸出埠的數目進一步縮減為一個。然而,限制移位及最大移位距離可能稍微降低多工器利用率。可構思移位目標通路選擇與激活緩衝器深度的多種變型及組合,以在降低MR行及激活廣播單元複雜度、面積及功率的同時使多工器利用率最佳化。如相關揭露中所述,達成此目的的一種特別有效的方法及設備涉及以偽隨機方式(pseudo-random fashion)對激活通路進行混洗(重排),同時相應地加載相關聯權重。
在圖1K中,多工器143選擇欲被乘法器126用於乘法中的輸入權重。如先前所論述,輸入權重可來自本地權重暫存器檔案127或相對於相鄰上部通路(且在一些實施例中相對於相同的行)中的權重暫存器檔案「向下移位」或者相對於相鄰下部通路(且在一些實施例中相對於相同的行)中的權重暫存器檔案「向上移位」,該些情形由訊號{swt_self, wt_abs_self[7:0]}、{swt_dn1, wt_abs_dn1[7:0]}及{swt_up1, wt_abs_up1[7:0]}對應地表示。激活廣播單元141利用訊號sel_mult_wt[1:0]控制多工器143,乃因ABU具有關於每一激活通路的移位及與每一被廣播(至激活通路)的IFM值相關聯的激活緩衝器偏移的完整資訊。
舉例而言,在圖1C中,多工器143將選擇載送欲與IFM值a1相乘的權重w0,0,a
的{swt_self, wt_abs_self[7:0]}。在圖1D中,多工器143將選擇載送欲與IFM值c1相乘的權重w1,0,c
的{swt_self, wt_abs_self[7:0]}。在圖1G中,多工器143將選擇載送欲藉由行零中自上數第二乘法器來與IFM值h0相乘的權重w0,0,h
的{swt_dn, wt_abs_dn[7:0]}。
注意,如圖1K中所示,每一暫存器檔案134具有為九的位元寬度,其中八個位元保持權重量值且一個位元保持權重符號(以符號與8位元量值格式儲存),且當適用時被預添加以「零點」常數Z。由於權重是自暫存器檔案134提取,因此可藉由添加將帶符號int8類型即時地轉換為符號與8位元量值表示形式的邏輯(包括當適用時添加零點)來將暫存器檔案134的位元寬度縮減至8個位元。當暫存器檔案134的大小被選擇為大到足以節省所述面積時,可進行此種即時轉換。
激活廣播單元141將欲用作輸入的激活{sact, act_abs[7:0]}廣播至乘法器126。邏輯閘145及159使用訊號wt_zero及act_zero(來自ABU的輔助訊號)來檢查其中權重(欲被乘)等於零的乘零情況或激活(欲被乘)等於零的乘零情況或者該兩種乘零情況。當發生乘零情況時,使所得訊號mult_by_zero置位,從而利用mult_in_ce訊號對權重及激活乘法器輸入暫存器的時脈進行閘控。對輸入乘法器暫存器時脈進行閘控使乘法器輸入及乘法器內部訊號保持(凍結)其先前狀態,從而防止切換活動以降低動態功率。在此活動的同時,正反器閘157使mult_in_ce訊號延遲一個周期以生成mult_out_zero訊號,mult_out_zero訊號使邏輯閘155與乘零對應地將乘法器輸出mult_result[15:0]零化。注意,如稍後所論述,每當必須停止整個塊元中的計算時,ABU亦發送訊號en_mult以使所有乘法器閒置。
注意,圖1K中的訊號名稱遵循以下約定用法:其中「act」代表激活,「wt」代表權重,「sact」、「swt」、「mult_out_s」、「s_in_a」等中的「s」代表「符號」,且「wt_abs」、「act_abs」等中的「abs」代表絕對值(量值)。
ABU以符號與8位元量值格式廣播激活{sact, act_abs[7:0]}。相似地,所選擇(用於乘法)的權重{mult_swt, mult_wt_abs[7:0]}亦是以符號與8位元量值格式供應。暫存器136鎖存欲被相乘的激活與權重以為乘法器126創建輸入訊號{s_in_a, mult_in_a[7:0]}、{s_in_b, mult_in_b[7:0]}。在一些實施例中,乘法器藉由將所述兩個絕對8位元值相乘並對所述兩個符號進行互斥或來計算積,從而產生符號與16位元量值輸出{mult_out_s, mult_out_abs[15:0]}。邏輯153藉由在積符號被指派(即,積結果為負)時對積絕對量值mult_out_abs[15:0]反相而將符號與16位元量值結果轉換成欲被饋送至加法器樹中的16位元帶符號輸出,從而產生訊號mult_out[15:0]。最後,如早已提及,在乘零情形中,邏輯155將mult_out[15:0]零化。
綜上所述,ABU在乘法控制中的作用是:ABU以符號與8位元量值格式提供輸入IFM,提供包括將通路向上移位及將通路向下移位在內的權重選擇控制以及指示被廣播的當前激活等於零的輔助訊號act_zero。注意,當act_zero訊號被指派時,{sact, act_abs[7:0]}的實際值可保持不變,以減少激活通路切換活動。儘管可能發生廣播零值激活的情形,然而一些實施例旨在將此種事件最小化。
圖1B至圖1H說明藉由(在任何可能情況下)自ABU 141內部的IFM緩衝器124提取非零值激活並將相關聯權重多工至乘法器以獲得正確點積來進行支援稀疏激活的計算。參見圖1L及圖1MA,IFM緩衝器124自快取139提取IFM,並在激活分級先進先出(First in First out,FIFO)165中對所提取的IFM值進行分級。隨後,所述多個激活多工器166起到自IFM分級FIFO 165提取非零(當可能時)激活而使得激活可相對於相鄰通路向上或向下「移位」的作用及不按次序地提取激活的作用。
在圖1MA及圖1MB(在下文進行論述)中,「預看(look-ahead)」距離(h)是沿相同通道的搜索距離,「旁看(look-aside)」距離(d)是側向搜索距離,且FIFO深度(F)是指激活FIFO 165的深度。為術語清晰起見,注意,激活多工器163中的所述多個激活多工器166自IFM分級FIFO 165接受IFM通道作為輸入,應用預看及旁看以提取激活並將所得值輸出至激活「通路」(而非通道)。此術語有助於區分張量內的深度「通道」的邏輯索引與沿實體硬體「通路」流動的激活的概念。
注意,IFM分級FIFO 165內部的暫存器161可為可選的且是為闡釋清晰起見而示出。在一些情形中,可有可能藉由以下方式減小面積及功率:去除激活分級FIFO暫存器161,將IFM多工器163直接連接至多埠快取輸出,並修訂IFM快取讀取邏輯以直接以正確的次序將IFM自快取139提取至多工器163。
圖1MA示出多工器163的配置,多工器163可用於自儲存於激活FIFO 165中的若干個可能值中的任一者(包括相同通路中的值及其他通路中的值)中選擇來自激活分級FIFO暫存器161的激活以廣播至MR陣列122(經由類型轉換器135)並饋送至塊元的多個通路(例如,塊元中的總共16個通路)中的任一者中的乘法器126。對於更一般的情形,每一胞元(cell)可轉至2*d個多工器,且除通路1及通路16因位於端部處而具有h*(d+1)個來源以外,每一目的地亦可具有相等數目的來源(2*h*d)。
進一步定義輸出快取大小(C)作為輸出快取的大小,參見圖1N,輸出快取駐留於每一MR行的累加與返回單元(Accumulate and Return Unit,ARU)167中;輸入頻寬(I)是IFM串流頻寬(每時脈周期的16位元組長IFM向量的數目);且輸出頻寬(O)是OFM遞送組構頻寬(每時脈周期的8位元組長OFM向量結果的數目)。此外,原始稀疏度(sr
%)是基於對激活張量中的零元素(與激活張量中的激活的總數目成比例)進行計數而觀察到的稀疏度;實際稀疏度(sa
%)是在激活張量的二維卷積(conv2d)過程期間應用的零元素的實際數目(與激活張量中的激活的總數目成比例),其慮及卷積跨距(convolution stride)(例如,卷積跨距可不使用某些零值激活,或者可多次包括某些零值激活)且慮及卷積填充(convolution padding);且乘法器利用率(UM
)是期間乘法器實行有效乘法(將非零激活相乘)的周期的百分比。舉例而言,對於1×1卷積,若激活張量具有為sr
%的原始稀疏度,則若使用「簡單」方式(無零跳過的「稠密」計算模式),乘法器利用率將為(1-sr
%),而對於非1×1卷積,當使用簡單(稠密)計算時,乘法器利用率將為(1-sa
%)。
圖1MB示出(i)呈第一配置(圖1MA中所示配置)的圖1MA所示電路的四個列的放大圖、(ii)呈第二配置的圖1MA所示電路的四個列的放大圖以及(iii)呈第三配置的圖1MA所示電路的四個列的放大圖。在第一配置中,多工器輸入來自上方的列及下方的列,但不來自相同的列。第一配置具有較少的導線且使搜索散佈至其他通道(即,擴展至較少的列),若一個通道傾向於具有連續的零,則此可為有利的。此外,若以加速兩倍為目標,則兩個位置便可足夠,且在h = 2, d = 1配置中,通道1與通道16具有相同數目的候選。第二配置可稱為「全多工方案(full multiplex scheme)」。在此種配置中,多工器輸入來自上方的通道及下方的通道以及為下一深度的相同通道。在第三配置中,多工器輸入僅來自相同的通道(即,旁看d = 0)。此種配置具有低複雜度(即,需要少於一半的多工器及導線),且使得能夠以稍微降低的乘法器利用率為代價達成較簡單的權重跳過支援。
圖1N示出包括MR陣列122的塊元102的最高層階圖(top-level diagram),MR陣列122含有由被組織成八個MR行133及16個列的乘法器單元126構成的柵格。每一乘法器單元126的元素(標記為MU)具有與乘法器單元在MR陣列122內的列座標及行座標對應的下標(MU列
,行
)。可使用權重解壓縮單元138自位於塊元本地的SRAM記憶庫組109接收壓縮權重,在將權重寫入權重暫存器134的過程期間將所述權重解壓縮。權重可被壓縮以利用所述權重中的稀疏度,從而減少儲存所述權重所需的記憶體及將所述權重傳輸至乘法器單元126所需的匯流排頻寬。作為另一選擇,權重可以未壓縮的形式儲存於SRAM中。如例如在圖1D至圖1H的上下文中所述,可使用IFM快取139對資料進行快取,以降低IFM遞送組構104的瓶頸效應(bottleneck effect),且可使用激活廣播單元(ABU)141實施對零值激活的跳過(或「激活跳過」)。
圖1O說明神經處理器控制的階層(hierachy)。神經處理器可具有可控制圖1A中所示各種元件的狀態機或「控制有限狀態機(control finite state machine,control FSM)」(控制FSM)或「控制邏輯」。控制階層具有包括「全域」及「本地」在內的兩個層階。在操作中,全域控制(global control,GC)FSM 140精心安排本地控制狀態機142及144的操作,所述操作包括開始權重加載階段以及開始並控制計算階段。由於塊元102支援跳過零值激活,因此塊元102的輸出速率可相依於由每一塊元102所接收的IFM片的實際稀疏度而稍微有所變化。因此,塊元102中的計算可提前或拖後運行幾個時脈。因此,全域控制邏輯140協調本地塊元控制邏輯144的操作以使來自所述多個塊元102的輸出恢復同步,以利用縮減組構111完成縮減並經由OFM遞送組構106將最終OFM結構傳輸至SRAM記憶庫組109。所述多個塊元的輸出的同步可例如利用ARU內部的小輸出FIFO 198(以及179)來達成,且在塊元輸出FIFO 198變滿的極端情形中,所述同步可藉由對輸出FIFO已滿的塊元進行節流(停止)以使得其他塊元能夠跟上來達成。
多個SRAM控制(SRAM control,SC)FSM 142中的每一者生成SRAM位址,且為SRAM記憶庫組109內的每一SRAM記憶庫讀取/寫入訊號。多個塊元控制(tile control,TC)FSM 144中的每一者跳過激活(例如,當其具有為零的值時)。為準備進行運算,主機CPU將每一IFM張量及OFM張量的開始位址及大小(高度、寬度、深度、批次大小)加載至SRAM控制FSM 142,將運算類型(全連接(FC)或卷積)以及IFM、OFM及權重資料類型加載至全域控制FSM 140,加載IFM及OFM權重循環配置、IFM遍歷次序、IFM通行數目(稍後詳細闡釋)及其他計算映射設置,加載對激活函數及池化(若有的話)的選擇,對部分結果生成進行賦能或去能,加載權重張量大小(高度、寬度、輸入深度通道及輸出深度通道的數目),加載Z字形(zig-zag)Z高度(下文進一步詳細論述),且加載卷積填充及卷積跨距的選項。主機CPU進一步向與IFM遞送組構、OFM遞送組構及縮減組構(RF)相關聯的暫存器中進行寫入,以配置包括每一SRAM記憶庫組109內的IFM張量的位址及OFM張量的位址在內的運算參數所需的連接性。為開始進行運算,主機CPU向全域控制FSM 140中的暫存器進行寫入。全域控制FSM 140接著傳訊給SRAM控制FSM 142及塊元控制FSM 144開始。
在一些實施例中,全域控制FSM 140控制卷積窗口內的掃描、平移卷積窗口並遍歷IFM張量以產生IFM片的串流。全域控制FSM 140向SRAM控制FSM 142發送平面畫素(x,y)座標、深度通道索引d以及IFM片及讀取訊號。SRAM控制FSM 142中的每一者添加開始位址、提取適宜的IFM資料並將資料輸出至IFM遞送組構104。通常,IFM(及OFM)張量大小過大而不能配合於單一SRAM記憶庫組109中,從而導致IFM(及OFM)張量被細分為欲跨多個SRAM記憶庫組109儲存的部分。在計算期間,全域控制FSM 140精心安排欲遍歷(以某種順序提取或儲存)的IFM張量及(對應的)OFM張量,同時亦影響IFM遞送組構及OFM遞送組構的即時重新配置(on-the-fly reconfiguration),以自正確的SRAM記憶庫組提取IFM及向正確的SRAM記憶庫組寫入OFM。
所有塊元快取139可實質上同時接收此資料。全域控制FSM 140計算並為所有塊元控制FSM 144提供(i)欲在其中保存每一傳入資料的IFM快取139暫存器檔案的位址以及(ii)用於將資料自IFM遞送組構104寫入快取139中的寫入賦能訊號。當IFM片是自SRAM記憶庫組109經由IFM遞送組構104而傳入時,寫入賦能訊號為現用的(active),且當IFM片已被快取時,寫入賦能訊號為非現用的(inactive)。當全域控制FSM 140以特定順序遍歷IFM層(張量)時,其亦追蹤計算所必需的哪些IFM片已被快取並傳訊給SRAM控制FSM 142何時讀取IFM快取139中尚未存在的資料。若資料已在塊元快取中被快取,則全域控制FSM 140使讀取訊號保持非現用,以使SRAM控制FSM 142跳過SRAM讀取。注意,為簡化對IFM快取的管理,在IFM快取139中的相同位址處將來自IFM遞送組構的每一IFM片寫入所有相關聯目的地塊元(如稍後詳細論述,由映射指定)及其相應IFM快取,而無論目的地塊元的數目如何。然而,由於塊元計算因非均勻激活稀疏度而以稍微不同的速率運行,因此每一塊元的控制邏輯獨立於其他塊元之外對在本地進行讀取的IFM快取139加以管理。
在一些實施例中,寫入OFM結果的過程是相似的。然而,由於激活跳過,因此計算延遲可有所變化。每一塊元控制FSM 144具有指示此塊元中的所有行何時完成計算的資訊。每一塊元的塊元控制FSM 144向全域控制FSM 140發送ofm_ready訊號,ofm_ready訊號命令SRAM控制FSM 142在OFM張量的恰當(x, y, d)索引處將來自OFM遞送組構的所得OFM片寫入SRAM記憶庫。在OFM張量遍歷期間,全域控制FSM 140以與其在IFM張量遍歷期間生成IFM(x, y, d)片座標的方式類似的方式生成OFM (x, y, d) OFM片座標。一旦計算完成,則全域控制FSM 140向主機CPU發送中斷(interrupt)。
如先前所提及,由於激活跳過,因此塊元可例如每時脈產生多達兩個輸出結果。因此,IFM遞送組構104應能夠每時脈供應多達兩個IFM片以避免乘法器利用率降低。因此,本地塊元控制FSM 102將仍待處理的快取中的資料量通知給全域控制FSM 140,以使全域控制FSM 140可引導SRAM控制邏輯142重新開始提取IFM資料以避免IFM快取下溢(underflow)。當塊元IFM快取中的任一者變滿時,全域控制FSM 140命令SRAM控制FSM 142暫停包括自SRAM讀取IFM片及將IFM片寫入塊元快取中在內的IFM張量遍歷。
參照圖1P,在一些實施例中,IFM快取139包括十六個通路170。每一通路含有具有雙輸入埠及雙輸出埠的暫存器檔案169。可使用雙埠是因為:由於激活跳過(及每MU行具有兩個加法器樹),因此系統塊元102能夠每時脈處理多達兩個激活(當存在足夠的零激活時)。為更快地處理激活—比如每時脈處理三個IFM片,則可每MU行使用三重輸入埠、三重輸出埠、三重IFM遞送組構頻寬、三重OFM遞送組構頻寬及三個加法器樹。
激活以高達雙倍的速率自SRAM經由IFM遞送組構而傳入。塊元控制FSM 144追蹤每一快取通路146中仍待處理的IFM資料量。當快取通路中的任一者即將變滿時,塊元控制FSM 144將至少一個通路快取即將變滿通知給全域控制FSM 140,且全域控制FSM 140可對由SRAM控制FSM 142控制的IFM讀取進行節流(停止),以在快取空間釋放之前避免塊元快取通路溢出(overflow)。
全域控制FSM 140亦當卷積窗口掃描完成(且所述窗口平移至下一位置)時及當IFM循環完成時通知塊元控制FSM 144,以使塊元恰當地重置行累加器且使在一個位置處實行卷積的過程不與在下一位置處實行卷積的過程混合。稍後定義並詳細論述IFM循環的概念。
塊元控制FSM 144生成自每一快取通路暫存器檔案169讀取IFM資料(包括讀取每一暫存器檔案的輸出埠的位址及賦能訊號)所需的訊號。對於每一時脈周期,除非塊元已完成處理且正等待其他塊元完成其處理(以使結果可用於藉由縮減組構來縮減),否則塊元控制FSM 144(對應地自一個埠或兩個快取埠)讀取一或兩個資料值。每單一時脈讀取一個位元組還是兩個位元組取決於激活稀疏度。激活廣播單元141內的IFM緩衝器124檢查激活是否稀疏並通知給塊元控制FSM 144,以使得若ABU IFM分級FIFO 165釋放一個槽(slot),則塊元控制FSM 144將加載一個位元組,且若ABU IFM分級FIFO 165釋放兩個槽,則塊元控制FSM 144將加載兩個位元組。
圖1Q中的表示出足以在利用為1×1、2×2、3×3及4×4的卷積窗口大小實行卷積運算以避免當卷積窗口自一個(x,y)位置平面地滑動至下一(x,y)位置時自SRAM進行重覆讀取的同時保持所有IFM片的快取大小。表中的資料假定乘法器單元的暫存器檔案134含有18個權重暫存器且假定卷積窗口以「Z字形」順序掃描輸入張量(如下文進一步詳細論述),乃因「Z字形」掃描順序起到將對IFM快取的使用最大化且因此使自SRAM進行的讀取以及功耗最小化(乃因自SRAM進行的單一讀取通常較自本地暫存器檔案169進行的單一讀取消耗大得多的功率)的作用。
舉例而言,在Z字形掃描參數Z(下文進一步詳細論述)設置為2且MU保持18個權重(足以保持兩個3×3的8位元卷積內核或一個3×3的16位元卷積內核)的情況下,暫存器檔案169應具有為20位元組的大小。
神經網路可具有介於50%至90%之間的乘法,其中至少一個乘法引數(激活及/或權重)為零。舉例而言,全面啟動v3神經網路(Inception v3 neural network)在應用權重修剪(weight pruning)之後便可出現此種情形。若MR塊元102可高效地跳過乘零事件,則MR塊元102可能夠在不進行跳過的情況下以例如100% - 80% = 20%的時間處理資料(此快了五倍)。對應地,如先前所提及,在一些實施例中,MR實施方案可被配置用於讓快取使用多於兩個輸入來足夠快地遞送(欲被乘或欲被跳過的)資料。在本文中的一些方塊圖中,為闡釋簡單及清晰起見,僅示出雙倍輸入頻寬(且對應地示出深度僅為二的激活緩衝器124)。然而,將理解,對於足夠稀疏的資料,IFM激活緩衝器124的深度可大於二,且對應地,速度增加(相較於不跳過乘零的配置)可大於兩倍。
如以上在圖1B至圖1H的上下文中所述且如以下段落中所更詳細闡述,資料稀疏度可用於藉由IFM快取及ABU的適合操作來達成處理通量的顯著改善。圖1R說明位於儲存於SRAM中的IFM張量內的開始位置處以將輸入層卷積初始化的3×3卷積窗口。為使層卷積運算開始,自SRAM讀取所述九個IFM片a0
[0..15]至i0
[0..15],將其經由IFM組構遞送至目標塊元並寫入每一目標塊元的IFM快取139中。圖1S示出此種資料的另一實例,其中元素中的若干個元素為零。
圖1T說明值以(自SRAM)抵達的順序排序的資料可如何剛好在層卷積運算開始之前以邏輯方式儲存於IFM快取139中,且未必根據所述值的實際儲存位址示出其排列。在本實例中,實行3×3卷積;儘管快取可儲存更多8位元激活值以適應卷積窗口的運動,然而,為清晰起見,圖式示出九個(3×3 = 9)8位元激活值。相似地,圖1U說明來自圖1T的本實例明確地具有值為零的一些激活。
圖1V說明根據一些實施例的激活廣播單元141的單一通路171。每一ABU通路171包括可利用暫存器檔案實施的IFM通路分級FIFO 173、通路多工器163、通路控制邏輯模組146及激活通路數值類型轉換電路148。每一ABU通路141(與塊元控制FSM 144及其他ABU通路一起)可控制此通路中的激活跳過(即,跳過值為零的激活元素)。
其可進一步將激活自帶符號二補數編碼(signed two’s complement numerical encoding)轉換為符號與8位元量值格式,以簡化乘法器電路對為各種位元寬度(包括uint8、int8、uint16、int16、uint24、int24、uint32、int32等)的帶符號資料及無符號資料的處理。每一ABU通路171亦可將激活作為激活通路137的訊號組的一部分廣播至MR行133內的乘法器126的相關聯列。
通路IFM分級FIFO 173具有兩個輸入埠、兩個輸出埠且深度可為兩個值。所述兩個輸入埠用於以每時脈周期多達兩個激活(位元組)的速率自IFM快取引帶激活。由此,當存在足夠的零激活時,由於MU行中具有兩個加法器樹、通路快取具有兩個輸入埠及兩個輸出埠且分級緩衝器173的深度為二,因此可有可能每時脈周期處理多達兩個激活。在一些實施例中,若預測出IFM將足夠稀疏以每時脈引發(justify)較大數目的激活(例如,每時脈三個激活),則可使用具有每MU行三個加法器樹、三個通路快取輸入/輸出埠、三個分級FIFO輸入埠且分級FIFO深度為三(其中在此上下文中,「分級FIFO」是指IFM通路分級FIFO 173)的電路來處理激活。
通路控制邏輯146可將一組控制訊號作為激活通路137的訊號組的一部分廣播至乘法器單元126的相關聯列,以將所述激活為零還是非零通知給乘法器單元126,且若所述激活為零,則將哪一非零激活被以多工方式引入以替換零(包括來自哪一通路以及在分級FIFO中有多深(偏移至分級FIFO中的程度))通知給乘法器單元126,以使每一乘法器將能夠選擇正確的權重及加法器樹以用於乘法。相似地,通路控制邏輯146亦控制通路多工器163將來自位於正確相鄰IFM通道中的正確分級FIFO 173深度偏移的激活多工至激活通路137上。
圖1V示出具有四個輸出邏輯連接的IFM通路分級FIFO 173,所述四個輸出邏輯連接足以向上方的相鄰通路提供所述兩個經緩衝激活中的任意一者,向下方的相鄰通路提供所述兩個經緩衝激活中的任意一者並且向通路激活多工器163提供該兩個經緩衝激活。注意,儘管圖1V示出具有四個輸出邏輯連接的分級FIFO 173,然而由於在所說明實施例中FIFO 173的深度僅為兩個值且因此保持僅兩個可用於同時輸出的值,因此FIFO 173具有僅兩個實體輸出埠。
圖1WA示出在已讀入IFM的前兩個向量之後(如亦示出於圖1C中)IFM分級FIFO 165的內容,IFM分級FIFO 165具有四個各別的IFM通路分級FIFO 173(為說明清晰起見,並非16個)。在此種狀態中,FIFO可檢查哪些激活值為零以及哪些激活值不為零。在一些實施例中,每一FIFO暫存器具有零檢測器(例如,8輸入式反或邏輯(8-input NOR logic))。每一通路分級FIFO 173向相應的通路控制邏輯146報告哪些激活為零,通路控制邏輯146追蹤此通路中的哪些激活已被用盡(例如,被借用,此會導致形成如圖1D中所示的「空洞」)。每一通路的控制邏輯146將關於通路分級FIFO佔用的此資訊(包括哪些激活為零)轉發至塊元控制FSM 144。激活a0、a1、a2及a3經歷數值格式轉換(若其為如int8或int16的帶符號激活),被細分成8位元值(若激活位元寬度超過8,例如uint16、int16、uint24、int24、uint32、int32等),並被廣播至乘法器單元126的相應列。
在下一時脈周期上,IFM分級FIFO 165可含有圖1WB中(及圖1D中)所示的值。此時,激活a0..a3已被處理,且b0、b2及b3正在被廣播至乘法器單元126的相應列。由於b1為0,因此b1的通路未被使用。每一通路的控制邏輯146將此資訊(哪些激活為零或「空洞」)轉發至塊元控制FSM 144。塊元控制FSM 144接著作出關於以下的決定:(i)多工輸出哪些資料(在圖1WB及圖1D中,將b0多工輸出至通路0,將c1多工輸出至通路1,將b2多工輸出至通路2,將b3多工輸出至通路3,等等)以及(ii)利用來自每一通路的控制邏輯146的輸入檢測整個FIFO行是否由空洞及/或零組成且因此可被跳過。當後者發生時,塊元控制FSM 144使(i)快取提取兩個值(而不是一個值)且使(ii)FIFO接受該兩個值(而不是一個值),從而跳過整個空洞及/或零FIFO行。此外,若與此通路(相對於整個行)相關聯的IFM通路分級FIFO 173中的所述多個值包括零及/或空洞,則通路控制邏輯亦使快取提取兩個值。
舉例而言,通路1(輸出c1)有6個選擇要輸出:c0、c1、c2(其為零)以及b0、b1(其亦為零)及b2。多工器163輸出該6個選擇中的一者。輸出哪一選擇是由塊元控制FSM 144確定。為能夠達成此目的,多工器163可被配置成能夠自上方的一個通路的兩個FIFO行、下方的一個通路的兩個FIFO行以及與多工器163位於同一通路中的兩個FIFO行中擷取資料。此種能力可利用例如與圖1MA及圖1MB中所示電路相似的電路來實施。如早前在對該些圖式的說明中提及,自上方的一個通路及下方的一個通路擷取(及多工輸入)資料的能力可稱為「1的旁看」,且從自右數第二FIFO行擷取(及多工輸入)資料的能力可稱為「2的預看」。注意,每一IFM分級FIFO 165行與通路組合可具有與其相關聯的單獨的預看值及/或旁看值,然而,為說明清晰起見,假定IFM分級FIFO 165中的所有行及通路具有相同的相關聯旁看值及相同的預看值。此外,可採用預看概念概念及旁看概念所未涵蓋的關於每一多工器163具有多少個輸入以及該些輸入連接至何處的其他變型,所述其他變型包括例如禁止將輸入自分級FIFO轉發至相同的激活通路上以及以更靈活的方式連接通路0與通路15以補償其不具有兩個相鄰通路中的一者的情況。
旁看及/或預看可大於二。較大的數目可造成更佳的效能:更佳地跳過零激活而使塊元計算時間進一步縮減。可達成此益處是因為當旁看及/或預看數目較大時,每一通路具有更多關於自何處擷取非零激活的選擇。非零激活的更多選擇有助於使非零激活跨所有通路而更均勻地散佈,進而使得每一通路最終具有大約相同數目的非零激活(而非一些通路具有較多非零激活且其他通路具有較少非零激活),此會潛在地使塊元處理等待完成,直至具有大部分激活的通路完成計算為止。如早前所提及,散佈非零激活可藉由如在單獨的相關揭露中所述以偽隨機方式對激活通路及相關聯權重進行混洗來達成。
圖1WC示出一種配置,其中對於每一FIFO行,預看為2且旁看為2,且其中多工器163具有10個輸入。在此種實施例中,FIFO的深度可為二且可對應地具有兩個輸出埠。
圖1WD示出一種配置,其中預看為3且旁看為1,且其中多工器163具有9個輸入。在此種實施例中,FIFO的深度可為三且其可具有三個輸出埠。
圖1WE示出一種配置,其中預看與旁看二者均為3,且其中多工器163具有15個輸入。在此種實施例中,FIFO的深度可為三且可具有三個輸出埠。
激活廣播單元141及塊元控制FSM 144可相似地參與圖1E至圖1G中所示的運算。舉例而言,圖1E說明當在前一時脈周期中借用(從自最右數第二行多工)c1時會形成(c1最初所在的通路中的)通路控制邏輯146所追蹤的「空洞」。每一通路控制邏輯146將IFM分級FIFO 165中的哪些資料胞元為零或空的(empty)通知給塊元控制FSM 144,以使塊元控制FSM 144可適宜地控制激活多工器163。塊元控制FSM 144決定進行多工器控制以散佈激活,以使通量增大或最佳化。當所有通路具有相同數目的非零激活(而非不平衡的,進而使得一些通路具有諸多非零激活,而(同一塊元中的)其他通路大部分具有零)時,可達成最佳通量。在此種不平衡的情形中,大部分具有零的通路可能較具有諸多非零激活(此可能延遲此塊元的計算的結束並使富零通路(zero-rich lane)中的乘法器利用率降低)的通路更快地完成其計算(即,可能更快地輸出所有非零激活)。
作為另一實例,在圖1G中所示狀態中,通路控制邏輯146亦自塊元控制FSM 144接收多工器選擇訊號,以追蹤(i)所形成的空洞及(ii)哪些激活是自何處多工。通路控制邏輯146接著將此資訊廣播至乘法器單元126的相關聯列,以使得當激活已被無序(out of order)地多工輸出時(舉例而言,其中圖1G中的「有序(in order)」意指來自激活緩衝器的g0被輸出至標記為g0的激活通路上),此列中的每一乘法器單元126可將此無序激活乘以其對應權重。
舉例而言,如所示,若激活是從自最右數第二分級FIFO行、自上方的一個通路多工,則欲乘此激活的對應權重位於上方的一個通路(對於每一行)的乘法器單元中。
當預看大於二(例如,三)且激活是從自最右數第三行擷取時,欲擷取的對應權重提前3-1=2,此意味著若有序激活將與權重w[列,行, i]相乘,則欲乘以的適宜權重為w[列,行, i+2]。
圖1H說明當激活被多工(無序地提前)而使整個FIFO行(所有16個通路)釋放(僅含有零或空洞)時的(自通量角度來看,有利的)情況。塊元控制FSM 144檢測此種狀況並指令IFM快取139將兩個值加載至FIFO中,乃因該兩個FIFO行同時被消耗——最右全零行被跳過(捨棄)且自最右數第二行被廣播並在用於計算後用盡。此使塊元中的計算延遲縮減了一個時脈周期。
圖1X說明累加與返回單元(ARU)167。ARU的作用是完成點積計算以及應用激活函數(當適用時)以產生準備經由OFM遞送組構傳輸回SRAM以進行儲存的完成的輸出特徵映射(OFM)。如圖1N中所示,每一MR行133含有兩個ARU 167——加法器樹128A及加法器樹128B各一個。
ARU 167具有兩個輸入,一個來自本地加法器樹128A或128B,且一個來自縮減組構111。每一ARU的中心是可如稍後所詳細闡釋藉由累加(隨時間)完成點積計算的加法器181及累加器暫存器130A。為完成OFM計算,可利用單元187(可選地)對完全縮減的點積進行截位(藉由舍入(rounding))且利用乘法器189以因數191進行縮放(scaled),可利用加法器193與OFM偏差項195進行求和,且可經歷激活函數197。激活函數模組197可支援例如整流線性單元(rectified linear unit,ReLU)、S型函數(sigmoid)、雙曲正切(hyperbolic tangent)等激活函數。若點積縮減無法完成(出於稍後所詳細闡釋的原因),則來自累加器130A(130B)的部分點積或僅「部分積」可在經由多工器199及輸出FIFO 198去往OFM遞送組構的途中繞過縮放、偏差及激活函數。多工器183繞過加法器181使得能夠將加法器樹值直接加載至累加器130A中(例如,以將累加初始化)。
多工器174在(i)ARU所在的相同(本地)塊元內的加法器樹與(ii)包括可配置加法器樹的縮減組構之間選擇用於「返回」(縮放、偏差及激活應用以及(當適用時)部分路徑)的ARU的輸入源,所述可配置加法器樹將本地(「塊元內(intra-tile)」)加法器樹128A與本地加法器樹128B組合成甚至更大的(「塊元間(inter-tile)」)加法器樹,所述更大的加法器樹能夠對來自多個塊元(例如,來自32個或64個或128個或256個乘法器單元)的乘法器單元積進行縮減。
塊元ARU 167由塊元控制FSM 144控制,乃因塊元控制FSM追蹤每一MR行133中哪一通路及加法器樹被用於獲得每一部分IFM縮減。ARU 167具有兩個輸出,所述兩個輸出包括經由FIFO 198及即時池化邏輯196連接至OFM遞送組構的一個輸出及經由FIFO 179連接至縮減組構的一個輸出。塊元控制FSM 144亦追蹤輸出FIFO 198及輸出FIFO 179的狀態。由於每一塊元以略微不同的速度實行計算(由於零激活跳過的不可預測性),因此輸出FIFO 198及輸出FIFO 179各自起到藉由延遲最終較其他塊元提前(更快)的塊元的輸出來使塊元輸出恢復同步的作用。由於塊元輸出可能經歷由縮減組構111(其可被視為一組附加加法器樹級且因此可能需要其輸入(來自塊元)並行地抵達且進行同步)實行的進一步縮減,因此可能需要藉由FIFO 179對塊元輸出進行同步。相似地,為同時將OFM片的所有通道輸出至OFM遞送組構,可能需要藉由FIFO 198對塊元輸出進行同步。在諸多情形中,各自為四個表項或少於四個表項的輸出FIFO 198及輸出FIFO 179大小便可足夠。在輸出FIFO 198或輸出FIFO 179將要在一或多個塊元中溢出的情形中,塊元控制FSM 144可停止計算,直至輸出FIFO 198或輸出FIFO 179騰空為止。輸出FIFO 198或輸出FIFO 179可具有兩個輸入埠,以合併來自兩個加法器樹(A與B)路徑的結果。
最後,塊元控制FSM 144與SRAM控制142一起工作,以自輸出FIFO 198讀取資料、實行縮減組構處理、經由OFM遞送組構傳輸結果並儲存至SRAM。
回顧激活數值類型轉換器135如何和累加與返回單元167一起工作以支援為各種位元寬度的帶符號輸入及輸出資料類型以及無符號輸入及輸出資料類型(包括能夠任意地對激活使用一種資料類型且對權重使用另一種資料類型),下文稱為「對資料類型進行混合」。
在一些實施例中,對於IFM、OFM及權重,可使用以下資料類型:int8、uint8、int16、uint16、int24、uint24、int32及uint32。如下文所詳細闡釋,IFM資料類型與權重資料類型可自由混合。舉例而言,可利用uint8激活與int8權重、或int8激活與int8權重、或int16激活與int8權重或者int16激活與int16權重等來實行卷積或全連接層計算。OFM資料類型(包括uint8、int8、uint16、int16、uint24、int24、uint32、int32等)亦可藉由應用縮放、舍入及激活函數選擇的組合來任意地選擇。
可根據如下操作準備激活。如使用者所規定,可將激活例如作為int8或uint8或int16或uint16而儲存於SRAM中。如圖1L中所示,此IFM資料被提取至快取(即,提取至IFM快取139),接著經由激活廣播單元141進行傳遞,激活廣播單元141包括激活數值類型轉換器135。作為第一步驟,若利用如在谷歌的張量流中所使用的「零點」偏移來量化激活,則類型轉換器135將「零點」偏移添加至激活。隨後,數值類型轉換器135藉由應用適合的變換(或「變換方案(transformation)」)來準備激活,此使得有可能進行欲利用8位元無符號乘法器126來實行、使用寬於8位元(例如,16位元權重及/或16位元激活(帶符號或無符號))的資料類型的乘法。如圖1K中所示,對於每一通路,激活廣播單元141廣播激活的8位元絕對值act_abs[7:0]以及1位元符號sact。由激活數值類型轉換器135應用的變換將int8/uint8轉換為「符號與8位元絕對值」。若輸入激活為uint8,則類型轉換器135將輸出廣播8位元絕對值設置為等於輸入uint8值(即,無變換)且將廣播符號設置為零(此意指代表非負值)。
若輸入激活資料類型為int8,則激活數值類型轉換器135將輸出絕對值設置為激活的絕對值,且若激活為負,則將輸出符號設置為1,若激活為非負,則設置為0。
可根據如下操作準備權重。如使用者所規定,可將權重作為int8或uint8或int16或uint16而儲存於SRAM中。當權重被加載至MU暫存器中時,在權重解壓縮單元138中(利用與被激活數值類型轉換器141用來變換激活的變換方式相同的變換方式)對權重進行變換。將權重作為8位元絕對值及1位元符號進行儲存。參照圖1K及圖1N,當權重經由垂直權重加載匯流排101自SRAM加載至MU暫存器中並饋送至乘法器單元中時,將被表達為int8及uint8的值轉換為8位元絕對值wt_abs_ld_in[7:0][C]及1位元符號表達形式swt_in[C]。
可以如下方式實行八位元乘法。乘法器可為無符號8位元×無符號8位元乘法器。乘法運算可採用均呈8位元絕對值與1位元符號表達形式的激活與權重作為輸入。乘法器接著將所述兩個8位元絕對值相乘並對所述兩個符號進行互斥或。若所述兩個8位元絕對值的積為零,則將輸出符號設置為零。接著將乘法器結果(16位元絕對值以及其符號)轉換為int17並遞送至加法器樹。隨後,加法器樹對自行乘法器單元接收的帶符號int17值進行縮減並將帶符號的和遞送至與所述加法器樹相關聯的ARU 167。
在一些實施例中,可以如下方式對16位元輸入資料類型與8位元輸入資料類型進行混合。可在一個周期中將8位元權重與8位元激活相乘。在一些實施例中,支援8位元數值資料類型的所有可能組合,例如,uint8激活×int8權重、int8激活×int8權重、uint8激活×uint8權重及int8激活×int8權重。可利用兩個周期來計算(i)16位元權重與8位元激活的積或者(ii)16位元激活與8位元權重的積。可利用四個周期來計算16位元激活與16位元權重的積。可支援8位元數值資料類型與16位元數值資料類型的所有可能組合,例如,uint16激活×int8權重、int16激活×int8權重、uint16激活×int16權重、uint8激活×int16權重、int16激活×int16權重,等等。
在一些實施例中,可以如下方式處置16位元激活。當激活為uint16或int16時,類型轉換器135可藉由應用變換(相似於以上所述的8位元變換方案)來準備資料。可將呈uint16或int16格式的值變換為16位元絕對值與符號格式。若使用8位元(uint8或int8)權重,則激活廣播單元141的第一周期輸出可為因所述變換而產生的16位元絕對值與符號的最低有效位元組(least significant byte,LSB)(用於與8位元權重相乘),且激活廣播單元141的第二周期輸出可為因所述轉換而產生的16位元絕對值與符號的最高有效位元組(most significant byte,MSB)(亦用於與8位元權重相乘)。除最高有效位元組乘積在被加之前亦可利用符號擴展移位175(及多工器177)向上移位8個位元以外,各自轉換為帶符號int17的兩個部分積結果可接著被發送至行的累加器130A或130B(如往常一樣,經由行的加法器樹128A或128B發送至行的累加與返回單元167)且可由累加器130A(或130B)相加於一起。
若權重為16位元(uint16或int16),則可使用四個時脈周期來實行(16位元)激活與權重的相乘。激活廣播單元141的第一周期輸出可為因激活的變換而產生的16位元絕對值與符號的最低有效位元組,乘法器可同時被饋送以權重的16位元絕對值的最低有效位元組,且可實行第一乘法。在第二周期期間,激活的相同部分的積(即,因激活的變換而產生的16位元絕對值與符號的最低有效位元組)可再次與權重的16位元絕對值的最高有效位元組一起饋送至乘法器,且可實行第二乘法。
激活廣播單元141的第三周期輸出可為因激活的變換而產生的16位元絕對值與符號的最高有效位元組,乘法器可同時被饋送以權重的16位元絕對值的最低有效位元組,且可實行第三乘法。在第四周期期間,激活的相同部分的積(即,因激活的變換而產生的16位元絕對值與符號的最高有效位元組)可再次與權重的16位元絕對值的最高有效位元組一起饋送至乘法器,且可實行第四乘法。除第二部分積及第三部分積可在加法之前利用符號向上擴展移位器175及多工器177各自預先移位8位元且第四部分積預先移位16位元以外,所有四個部分積結果可各自被發送至行的累加器130A(或130B)(如往常一樣,經由相關聯行的加法器樹128A或128B發送至行的累加與返回單元)且被相加於一起。
實行卷積運算涉及:遍歷儲存於SRAM 109中的IFM張量,將IFM張量的內容作為經由IFM遞送組構104遞送的一系列IFM片串流至一或多個塊元102。IFM張量具有三個維度且具有被表達為(x, y, d)的座標(及批次索引(為闡釋清晰起見,暫且將其省略)),其中x索引及y索引對應於激活的平面座標,且索引d對應於深度通道。神經處理器藉由以特定順序對(x, y, d)索引值進行循環來遍歷IFM張量。將對(x, y)座標的循環遍歷稱為「平面」遍歷,且將對d座標的循環遍歷稱為「深度」遍歷。
以下若干段落闡述平面遍歷(包括IFM快取139的使用)。參照圖1N,IFM遞送組構104可經由IFM快取139連接至IFM塊元102。每一塊元可存在一個IFM快取139,每一IFM快取139均放置在相關聯塊元本地。利用IFM快取139(每一塊元)有助於減少自SRAM 109進行的讀取的數目。減少自SRAM 109進行的讀取的數目在三個方面上是有益的,所述三個方面包括:(i)減少SRAM對神經處理器的總功耗的貢獻;(ii)減少SRAM讀取或寫入停止的可能性;以及(iii)減少經由IFM遞送組構104流動的通訊量(amount of traffic)。
當SRAM消耗的功率相較於正反器暫存器功耗而言高得多(此在實踐中可能發生)時,降低SRAM功耗可有意義。當位於每一SRAM單元109中的SRAM記憶庫的數目相較於欲實行的輸入-輸出(I/O、讀取或寫入)操作的數目而言較低時,SRAM停止方面可尤其重要。舉例而言,如稍後將更詳細闡述,每一SRAM記憶庫組單元109可含有四個SRAM記憶庫,因此能夠同時執行多達4個I/O操作(每一時脈週期)。該些I/O操作可為IFM片讀取、對一或兩個OFM片的寫入、部分結果讀取或寫入以及AXI互連114所請求的片讀取或寫入。
當多於四個此種I/O操作必須同時存取駐留於同一SRAM記憶庫中的資料或者一或多個I/O操作必須存取同一記憶庫中的資料時,可能發生記憶庫存取衝突(bank access collision),從而導致SRAM記憶庫仲裁邏輯停止AXI存取或IFM提取或OFM寫入或部分結果I/O,亦潛在地導致計算停止。因此,減少自SRAM單元109進行的IFM讀取的IFM快取139起到減少出現該些類型的停止的可能性。
如稍後將更詳細論述,在權重內核大小特別大的情形中,可或必須訴諸於將計算劃分成多個部分,並將部分完成的計算結果(「部分結果」或「部分」)儲存於SRAM中。為維持可接受的計算精度,相較於IFM及OFM,部分結果常具有長得多的位元寬度(例如,4個位元組或6個位元組)。向SRAM寫入(自SRAM讀取)具有長位元寬度的部分結果會對應地消耗較高的SRAM頻寬,此可能增加SRAM記憶庫存取衝突的可能性且因此導致AXI停止或計算停止。因此,具有IFM快取139可有助於緩解SRAM I/O瓶頸(對於使用部分結果的計算而言尤其如此)。
當通訊匯流排面積非常珍貴時,減少IFM遞送組構通訊量可為有意義的。回顧一下,如圖1P中所示,IFM遞送組構每時脈可將多達兩個IFM片遞送至IFM快取139。當IFM遞送組構可同時(例如,每一單一時脈)將N個片遞送至IFM快取139時,稱IFM遞送組構具有「N個片的寬度」。藉由在本地快取IFM片(至每一塊元),當計算所需的IFM片已由塊元在本地快取且隨時可用於處理時,IFM遞送組構104可保持閒置。具有閒置周期(利用率小於100%)的IFM遞送組構104使得使用閒置周期來傳輸額外的IFM片成為可能,因此使總的「有效」IFM遞送頻寬超過2x。因此,當IFM遞送組構面積非常珍貴時,可將IFM遞送組構104的寬度自例如兩個片減小為一個片,同時仍然將總的IFM遞送頻寬保持在1x或大於1x,有時達到2x或大於2x。
如將在下文看出,IFM快取139對於內核平面寬度及/或高度大於一的卷積運算而言益處最大。「深度」卷積(內核寬度與內核高度均等於1的卷積)及全連接計算亦可受益於IFM快取,但通常僅在鮮少情況下才會受益。
為領會被設計用以增大IFM快取命中率、稱為「Z字形」平面遍歷的一個實施例的解決方案,首先考量如圖2AA至圖2AD中所示利用2×2×2×16×16權重內核以「簡單」的方式平面遍歷IFM張量。此處,2×2是指權重內核的平面高度及寬度,16是指IFM深度(即,一個片)且1是指OFM深度。然而,為闡釋清晰起見,可將卷積視為純平面的,即2×2×1×1。在圖2AA中示出以放置於IFM張量左上角的卷積(內核權重)窗口開始的卷積運算。在此位置處計算2×2卷積之後,窗口向右滑動一個畫素。在滑動過程之後,計算重覆進行,直至窗口到達IFM張量的右上角為止。一旦位於右上角,卷積便被計算出且卷積窗口現在如圖2AB中所示向下(而非向右)滑動一個列。隨後,如圖2AC中所示,除卷積窗口現在如圖2AD中所示繼續向左滑動直至其到達IFM張量的左邊緣為止(其在左邊緣處再一次向下滑動一個列)以外,相同的計算與滑動步驟進一步重覆。重複該些步驟最終會得到對IFM張量的完整平面掃描(遍歷)。由於窗口主要水平地滑動(即,內環(inner loop)循環遍歷x座標),因此將此種掃描稱為水平掃描(而非垂直掃描)。
考量如圖2BA至圖2BL中所示將IFM快取139與簡單「水平」掃描結合使用。在卷積運算開始時,將IFM快取139清空,將2×2卷積窗口放置於IFM張量的左上角,隨後擷取在此開始位置計算卷積所需的四個IFM值。如圖2BA中所示,自IFM感測器中的最左上位置擷取所述四個IFM值中的第一IFM值。稱此位置位於第0列第0行。由於快取已被清空,因此必須自SRAM(而非IFM快取)擷取第0列第0行的IFM值,從而導致快取未中(在圖2BA中標記為「M」)。一旦被擷取,IFM值便會被快取。圖2BB示出在第0列第1行處擷取的(四個IFM值中的)第二IFM值。快取不含有與此位置(第0列第1行)相關聯的值,從而導致另一快取未中(由「M」標記)。第0列第0行位置的淺陰影指示在前一步驟中擷取的IFM值已快取。圖2BC及圖2BD說明對各自導致快取未中的其餘兩個IFM值的擷取。此時,已擷取所有四個IFM值,當前位置處的卷積計算可完成,所有四個IFM值亦已被快取且卷積窗口可向右滑動一個行。
圖2BE至圖2BH說明擷取另外四個IFM值以在新位置處計算卷積。在圖2BE中,在第0列第1行處擷取IFM值造成快取命中,從而避免了SRAM讀取。相似地,圖2BG示出第1列第2行處的另一快取命中,同時擷取另外兩個IFM值各自導致快取未中。
隨著卷積窗口繼續滑動,最左側的先前被快取的IFM值(如由圖2BI至圖2BL(及圖2BE至2BH)中的暗陰影指示)將在較長的時間週期內不參與計算(或者根本不參與計算),直至卷積窗口一直滑動至IFM張量最右邊緣、向下滑動一個列並一直滑動回經快取的值為止。因此,一旦卷積窗口滑動,該些值便可被自快取中清除以使快取大小保持較小。
圖2BI至圖2BL說明擷取接下來的四個IFM值以在下一位置(向右一步)處計算卷積而造成兩次快取命中及兩次快取未中。由於每當卷積窗口向右滑動一步時四個IFM值中的兩者(以淺陰影標記)被重覆使用一次,因此,如圖2BM中所示,在2×2卷積期間水平地快取IFM值造成近似50%的快取命中機率(快取命中率)。更一般而言,結合水平快取來利用H × W平面內核大小且假定快取具有足夠大小的卷積會造成H*(W-1) / (H*W)的快取命中率。足以達成此種卷積的快取大小可為每塊元每通路(W-1)個位元組。然而,如稍後將詳細闡釋,在點積計算期間,神經處理器亦可使用「IFM權重循環」(以藉由依序循環乘法器單元的權重來將若干個IFM通道累加成點積)。因此,如稍後將變得清楚,在最一般的情形中,最大快取大小等於每個塊元每個通路的儲存於MU權重暫存器檔案127中的權重的數目(對於8位元權重資料類型而言,其等於18)。
在圖2BA至圖2BM中,使快取大小保持相對較小需要積極地清除快取值。參照圖2BM,當卷積窗口在列R(列2)上滑動時,來自前一列R-1(列1)的IFM值早已被自快取清除(被指示為第1列第2行處的快取未中「M」)。為將快取命中率增大到高於H*(W-1) / (H*W),可考慮例如對IFM張量的一或多個列的值進行快取。然而,對整個IFM張量列進行快取將需要增大快取大小,進而使得(一般而言)快取大小成為IFM張量寬度的函數。由於在設計應用專用積體電路(application specific integrated circuit,ASIC)時IFM張量寬度常為未知的且由於IFM張量寬度可能相對較大,因此對IFM列進行快取會非常耗費矽面積且因此是非期望的。同樣的推理適用於卷積窗口主要垂直地掃描(平面座標內環迭代遍歷列號)而非水平地掃描的對稱情形。
相對於簡單平面掃描,一些實施例在卷積運算期間以「Z字形」的形狀對IFM張量實行平面遍歷。Z字形平面遍歷有助於提高快取命中機率,同時仍使快取大小保持較小。圖2C示出在此種實施例中卷積窗口可沿其位移(滑動)的下-右-上-右的Z字形路徑。與簡單水平遍歷不同,圖2C中的卷積窗口在已計算兩個卷積(在垂直相鄰的位置中)而非一個卷積之後向右滑動。因此,由卷積窗口對IFM張量進行的單一完整的從左至右的邊緣至邊緣拂掠(left-to-right edge-to-edge sweep)會產生兩列卷積結果(相對於由簡單水平遍歷產生的一系列結果)。
在更一般的情形中,Z字形遍歷可利用「Z數(Z number)」來參數化,所述「Z數」對應於在單一水平IFM張量拂掠中處理的輸出列的數目。舉例而言,在圖2C中,Z數等於二。如稍後將看出,較高的Z數會造成較高的快取命中率。
在圖2C中,每單一水平拂掠產生兩列結果的Z字形遍歷可被想像為對兩倍寬但一半高的IFM張量實行簡單水平遍歷。更一般而言,可將Z字形遍歷路徑視為「展開(unrolled)」成長度為H*Z行的單一(水平)拂掠,從而需要總共進行H/Z次拂掠來完成IFM張量卷積,其中H及W分別為IFM張量高度及IFM張量寬度。舉例而言,在圖2C中,Z=2,因此,作為藉由簡單掃描遍歷H × W IFM層的替代,箭頭路徑的長度為近似H*Z=W*2,因此邏輯IFM層寬度變為W*Z=2W,而邏輯IFM層高度則變為H/Z=H/2。簡單水平等效於Z=1的Z字形遍歷。
圖2DA至圖2DD說明對於卷積窗口的第一位置,擷取所有四個IFM值會導致快取未中,從而導致發生四次SRAM讀取。如圖2DE至圖2DH中所示,對於卷積窗口的下一位置,提取另外兩個IFM值會導致快取未中,而其他兩個IFM提取位置與卷積窗口的前一位置重疊,從而造成兩次快取命中。
如圖2DI至圖2DL中所示,對於卷積窗口的下一位置,兩個IFM值為快取未中,且兩個IFM值與卷積窗口的前一位置重疊而各自造成快取命中。如圖2DM至圖2DP中所示,對於卷積窗口的下一位置,一個IFM值為快取未中,且三個IFM值與卷積窗口的前一位置重疊且為快取命中。由此,進一步參照圖2DQ至圖2DX,使用Z字形路徑顯著提高了快取命中對快取未中的比率。
圖2E是示出以理想快取中的SRAM讀取數目(對Z字形遍歷效率的度量)為參照、與Z字形遍歷相關聯的SRAM讀取的實際數目的表。所述表假定在實行單一拂掠(即,來自前一拂掠的值被清除)的同時,快取大小對於給定的Z而言是足夠的。表中較低的數字對應於較高的效率,且1.0是理想情形。卷積大小是指正方形權重內核的平面維度。舉例而言,相較於利用理想快取(即,具有無限容量且從不清除任何值的快取)進行的3×3卷積,以Z=2的Z字形遍歷進行的3×3卷積造成2x多的SRAM讀取。然而,相較於利用理想快取的情形,利用Z=1的Z字形遍歷進行的3×3卷積(即,簡單(例如,水平)遍歷)造成3x多的SRAM讀取。因此,在此種情形中,如藉由下文所述公式來計算,相較於簡單遍歷,Z=2的Z字形遍歷使SRAM讀取計數減小3/2 = 1.5x,而Z=2的Z字形簡單遍歷及Z=1的Z字形簡單遍歷二者的快取大小幾乎保持不變。注意,較大的Z數會節省較大的SRAM讀取計數。舉例而言,對於3×3卷積,將快取Z增大為4會節省3/1.5 = 2x個SRAM讀取。
圖2F示出在假定每時脈處理一個IFM片的條件下,供應IFM快取所必需的平均預期IFM SRAM讀取(每時脈)的表。舉例而言,相較於無快取且以100%的時間(即,每一時脈)實行SRAM讀取的方案以及相較於快取Z=1且以20%的時間實行SRAM讀取的方案(即,簡單遍歷方案),快取Z=4的5×5卷積以平均僅8%的時間實行SRAM讀取。
圖2GA至圖2GB說明快取命中/未中計數及快取大小的導出。Z字形遍歷涉及重覆兩步序列(two-step sequence),其中卷積窗口垂直滑動Z-1個列,接著側向滑動一個行。在為簡單起見而忽略IFM張量邊緣處的特殊情形的情況下,平面大小為W × H的卷積窗口側向滑動一個行(在圖2GA中向右滑動)造成H個快取未中(標記為「m」)及H*(W-1)個命中。垂直滑動Z-1個列(在圖2GB中向下滑動)的後續步驟造成(Z-1)個快取未中及(Z-1)*(H*W-1)個快取命中。
對應地,一旦卷積窗口已水平滑動一個行,其便可使用內核窗口內部的先前被快取的值(被在前一垂直平移期間快取,在圖2GA中標記為「c」)來進行當前計算。在內核窗口外(在圖2GA中位於下方)被標記為「c」的先前被快取的值亦應留在快取中,以便在窗口將開始垂直滑動(在圖2GA中向下滑動)時使用。此外,自SRAM提取的值(標記為「m」)應添加至快取中,以便在當前位置處進行計算時使用以及稍後在卷積窗口向下滑動Z-1個列、向右滑動一個行且向上滑回之後進行計算時使用。接下來,每當卷積窗口向下滑動一個列時,便可清除一個快取值(左上方)並添加來自SRAM的一個值(標記為「m」)。因此,藉由對圖2GB中「c」標記的數目進行計數,確定所需的快取大小為(H + (H+Z-1)*(W-1))。
若使用權重循環,則如稍後所詳細闡釋,快取大小可以與同時儲存於任意塊元中的內核的數目相同的因數增大。如上所述,當卷積內核小時,系統可將若干個平面內核儲存至每一MU中。舉例而言,若MU具有18個權重暫存器且卷積為2×2,則四個2×2內核可儲存於MU權重暫存器中。舉例而言,可藉由隨時間循環遍歷四個所儲存內核來計算具有64個通道0...63的IFM的點積以得到OFM 0…7。系統可提取保持通道0…15的IFM片,將其乘以(四個中的)第一內核,並將結果保存於塊元的累加器中;提取具有通道16..31的IFM片,將其乘以(四個中的)第二2x2內核,並將結果加到已儲存的累加器值中;並且重覆進行第三次及第四次。該些IFM亦可被快取,從而導致快取大小對應地增大。然而,無論對平面平移方法的選擇(簡單方法或Z字形方法或其他方法)如何,IFM快取大小均具有上限,所述上限是乘法器單元權重暫存器檔案大小的函數。此乃因每一經快取的IFM必須在權重暫存器檔案中具有欲被乘的對應權重,且權重暫存器檔案本身被限制為例如18個權重。注意,同理,IFM快取大小具有下限,所述下限等於權重暫存器檔案大小。
因此,慮及所有可能支援的H與W組合,應將IFM快取大小設置為(H + (H+Z-1)*(W-1) –1)及MU_WEIGHTS的最大值,其中MU_WEIGHTS等於乘法器單元權重暫存器檔案大小(例如,18)。舉例而言,若神經處理器每乘法器單元具有18個權重且支援Z=2的Z字形遍歷以及內核權重平面大小的所有自然H與W(進而使得H*W <= 18,例如1×1、1×2、2×1、... 4×4、9×2、2×9),則IFM快取大小是(1 + (1+2-1) * (1-1) – 1) = 0、(1 + (1+2-1) * (2-1) – 1) = 2、(2 + (2+2-1) * (1-1) – 1) = 2、… (4 + (4+2-1) * (4-1) – 1) = 18、(2 + (2+2-1) * (9-1) – 1) = 25、(9 + (2+2-1) * (2-1) – 1) = 11及18中的最大值,即25。
在一些實施例中,MU權重暫存器檔案容量等於18個8位元權重(uint8或int8),或者等效地,等於9個16位元權重(uint16或int16)。當IFM資料為16位元(uint16或int16)時,IFM快取可藉由每一個16位元IFM分派兩個位元組來儲存16位元IFM資料。因此,與能夠儲存9個16位元權重的MU權重暫存器相似,IFM快取可儲存9個16位元IFM值。Z字形(以及簡單)平面遍歷可以與其應用於8位元值的方式相似的方式應用於16位元IFM值。在此種情形中,上述快取大小計算亦應在最大函數中附加的W項及H項(例如(H + (H+Z-1) * (W-1) – 1) * size_of(IFM_DATA_TYPE)),其中size_of(IFM_DATA_TYPE)是指IFM值的資料類型的位元組大小(例如,24位元IFM值為3位元組,且32位元IFM值為4位元組)。在IFM資料類型為24位元、32位元或更長的情形中,可使用Z字形(及簡單)快取,然而,建議將MU權重暫存器檔案127的大小(及IFM快取大小)增大到3 × 3 × size_of(IFM_DATA_TYPE)。如稍後所詳細闡釋,此確保為流行的3×3平面大小的權重內核可在不訴諸於使用部分結果(其可為非期望的)的條件下得到卷積。
如早前所述,全域控制邏輯單元140、SRAM控制邏輯單元142、塊元控制邏輯單元144及通路控制邏輯單元146一起工作,以對SRAM IFM提取、經由IFM遞送組構傳輸IFM片、在本地塊元中快取IFM值、擷取被快取的IFM值(常對於每一激活通路以稍微不同的速率進行)以及在塊元之間將OFM結果重新同步執行恰當的控制。為配置IFM及OFM平面遍歷,主機CPU將計算參數(包括Z字形高度z)加載至全域控制FSM 140及SRAM控制邏輯142。全域控制FSM 140接著精心安排SRAM控制FSM 142及塊元控制FSM 144開始施行計算。
當卷積窗口以Z字形平面方式遍歷輸入與輸出層時,每一累加與返回單元167可有利地接收對於即時計算池化而言必需的OFM值,而無需將預池化結果保存至SRAM及稍後將其讀回以應用池化。ARU可在池化窗口不重疊(如圖2HA至圖2HD中所示)的情形中藉由以下方式實行池化:不發送出每一卷積OFM結果,而是將卷積結果保存於其池化邏輯196的暫存器中,直至每一池化輸出完成為止。只有在每一池化輸出完成之後,ARU才會將池化輸出寫入SRAM。對於最大池化,ARU輸出暫存器可保持最大值,當最末OFM輸出超過當前最大值時,所述最大值將與卷積輸出進行比較並進行更新。一旦池化窗口滑動,ARU輸出暫存器便會被重置以重新開始最大運算。對於平均池化,ARU累加器繼續添加OFM輸出,直至池化窗口即將滑過為止。累加器接著被乘以1 / (POLLING_WIDTH * POLLING_HEIGHT)以計算平均值,所述平均值被舍入並寫入SRAM。一旦池化窗口滑過,累加器便會被重置以重新開始求平均值。
舉例而言,圖2HA說明結合2×2平面池化實行的Z=2的Z字形平面遍歷,其中IFM層被以使得(每一池化窗口中的)OFM值依序得到計算的方式遍歷。由於ARU輸出逐一地生成(計算每一池化所必需的)四個OFM值中的每一者,因此ARU池化邏輯196可取所述四個連續結果中的最大值,以便計算最大池化。圖2HB說明Z=3的Z字形平面遍歷及3×3平面池化。由於Z值等於池化內核高度,因此以Z字形方式遍歷IFM層自然會使每一池化窗口內的OFM以適合於最大輪詢及平均輪詢的順序生成。圖2HC提供對Z=H=4的附加說明,其中H是指池化內核的高度。
圖2HD說明Z值不與池化內核的高度匹配、進而使得Z=4且池化內核的高度為2的情形。在此種情形中,池化邏輯196可將池化細分成兩個區域(如所示的上部2×2及下部2×2)且使用附加暫存器臨時儲存來自所述兩個池化區域中的一者(圖2HD中的下部2×2)的未完成結果。更一般而言,Z字形池化窗口高度可為Z字形遍歷高度的自然倍數。合理的數字可包括2、3及4。如先前所提及,Z字形池化垂直跨距應等於Z字形遍歷高度,此將即時池化僅限於此種情形。然而,池化窗口可水平重疊,只要輸出池化邏輯196具有足夠的池化邏輯複本即可,每一複本處理相應的水平重疊池化窗口,對所有此種水平重疊池化窗口並行地進行此種處理。Z字形池化窗口寬度及跨距一般可為任意的,且合理的池化窗口寬度數字包括例如2、3及4。
在池化窗口垂直重疊、因此使即時池化成問題的情形及/或需要定制池化(最大值及平均值除外)的情形中,池化可藉由以下方式達成:(i)將讀取-修改-寫入邏輯放置於SRAM記憶庫附近(本發明中未揭露)及/或(ii)經由AXI將SRAM讀出至外部CPU、GPU、數位訊號處理器(digital signal processor,DSP)或其他類型的計算核心,實行池化並經由AXI將結果寫回NPU SRAM。注意,亦可重新使用SRAM記憶庫附近的定制讀取-修改-寫入邏輯來高效地添加部分結果,而無需將部分結果發送回塊元。
為配置神經處理器來實行某一運算(例如,卷積或全連接層計算),有必要慮及IFM張量大小及OFM張量大小,並結合運算參數(例如,運算類型、跨距等)將計算「映射」至可用硬體上。每一各別塊元可僅具有固定數目的16個IFM深度通道輸入及8個OFM深度通道輸出,而深度學習神經網路模型層中的深度通道的數目有所變化且常遠超過16個及8個。「映射演算法(mapping algorithm)」離線運行(在編譯時間期間而非運行時間期間),以將該些大的IFM張量及OFM張量細分成多個部分(子張量),將該些部分指派至可用塊元來進行計算並產生對來自可用塊元的輸出將被如何重新裝配以完成計算的描述(配置)。如下文將更詳細闡釋,映射演算法亦確定平面IFM(及對應的OFM)張量遍歷與(特別是)深度IFM(及對應的OFM)張量遍歷的次序。由於對於特定的映射問題(即,對於給定的IFM、OFM及權重張量大小及運算參數)可能存在多種解決方案,因此映射演算法亦可接受指示是否將解決方案最佳化以達成最低功率、最低SRAM大小、最低計算潛時(藉由將乘法器利用率最大化而達成)或該些的組合(例如,在慮及可用固定SRAM大小的情況下的最低功率)的參數。
隨著自簡單情形進展到越來越先進的情形,藉由閱讀一組實例,可理解一些實施例的映射運算的態樣。為闡釋清晰起見,由於激活跳過在很大程度上不影響映射,因此忽略與零激活跳過相關聯的特徵且假定每一OFM行具有僅一個加法器樹及累加器(即,此計算是「稠密」的)。由於快取在很大程度上不影響映射,因此亦忽略快取(包括Z字形平面平移方法)且假定卷積窗口以光柵方式(raster fashion)移動(平面滑動)。在圖3AA至圖3AK中所示的第一實例中,利用單一塊元計算3×3×16×8卷積。圖3AA示出接受具有16個深度通道的IFM作為輸入(一個IFM片)並產生具有8個深度通道的OFM(一個OFM片)的塊元。如圖3AB中所示,IFM張量304大小為64×64×16,OFM張量大小為64×64×8且權重張量大小為3×3×16×8。
最初,如圖3AC中所示,將權重自SRAM預加載至MU權重暫存器檔案127中。權重內核302大小為3×3×16×8。平面大小為3×3的權重內核具有3×3=9個平面「位置」(在圖3AC中標記為A至I)。每一平面位置均與長16的權重向量相關聯,所述長16的權重向量用於與一個OFM通道的長16的IFM值向量計算點積。由於存在8個OFM通道,因此如圖3AC中所示,權重內核可被視為對於每一OFM具有一個3D張量。
具體而言,可以如下方式將權重加載至MU權重暫存器檔案127中。可將整個MR陣列122中的所述多個MU權重暫存器檔案視為維度為18×16×8(每MU 18個權重、16個MU列及8個MU行)的張量,所述維度足以保持大小為3×3×16×8的整個權重內核。亦可將大小為18×16×8的權重暫存器檔案張量重寫為(3×3)×16×8,其中第R列第C行處的每一MU權重暫存器檔案在權重張量W × H × R × C中儲存3×3 = 9個平面位置(x,y)的所有9個權重,其中W及H是權重內核平面寬度及高度,即W=3且H=3。舉例而言,參照圖3AC,第0列第0行中的權重暫存器檔案儲存權重{A0[0], B0[0], C0[0], D0[0], E0[0], F0[0], G0[0], H0[0], I0[0]},其中記法為「A…I」,後跟OFM行「0…7」及IFM列「[0…15]」。對應地,第15列第0行中的權重暫存器檔案儲存權重{A0[15], B0[15], C0[15], D0[15], E0[15], F0[15], G0[15], H0[15], I0[15]},第15列第7行中的權重暫存器檔案儲存權重{A7[15], B7[15], C7[15], D7[15], E7[15], F7[15], G7[15], H7[15], I7[15]},等等。由於塊元「垂直」計算點積(利用行加法樹),因此可看出所加載權重的所述排序使得能夠在每一平面位置A...I處計算IFM輸入的點積。
參照圖3AD,可接著將卷積窗口定位於開始位置處,且可清空所述八個累加器(如早前所提及,為映射闡釋清晰起見,所述8個OFM通道中的每一者具有所述八個累加器中的一者)。
參照圖3AE,塊元可接著自SRAM讀取IFM a[0..15](其中a…z是指IFM的平面位置且0...15是指IFM深度通道),並將該些值廣播至其8個行。第一行可將a[0..15]以元素方式與預加載權重A0[0] ... A0[15]相乘,第二行可將a[0..15]以元素方式與預加載權重A1[0] ... A1[15]相乘,等等。可(利用每一行的加法器樹)垂直地對所得積進行求和(縮減)並添加至累加器。所得點積尚不是最終結果,乃因仍要處理(3*3=9中的)另外8個平面位置以在單一位置處完成3×3卷積。
參照圖3AF,塊元可接著自SRAM讀取IFM b[0..15],並將該些值廣播至其8個行。第一行可將b[0..15]以元素方式與預加載權重B0[0] ... B0[15]相乘,第二行可將b[0..15]以元素方式與預加載權重B1[0] ... B1[15]相乘,等等。可垂直地對所得積進行求和並添加至累加器。參照圖3AG,塊元可接著自SRAM讀取IFM c[0..15],並將該些值廣播至其8個行。第一行可將c[0..15]以元素方式與預加載權重C0[0] ... C0[15]相乘,第二行可將c[0..15]以元素方式與預加載權重C1[0] ... C1[15]相乘,等等。可垂直地對所得積進行求和並添加至累加器。
參照圖3AH,塊元可接著自SRAM讀取IFM g[0..15],並將該些值廣播至其8個行。第一行可將g[0..15]以元素方式與預加載權重D0[0] ... D0[15]相乘,第二行可將g[0..15]以元素方式與預加載權重D1[0] ... D1[15]相乘,等等。可垂直地對所得積進行求和並添加至累加器。參照圖3AI,塊元可接著自SRAM讀取IFM h[0..15],並將該些值廣播至其8個行。第一行可將h[0..15]以元素方式與預加載權重E0[0] ... E0[15]相乘,第二行可將h[0..15]以元素方式與預加載權重E1[0] ... C1[15]相乘,等等。可垂直地對所得積進行求和並添加至累加器。
參照圖3AJ,可對內核的所述九個位置(標記為a至o)中的其餘位置實行類似的運算。可接著對儲存於累加器中的值進行舍入以形成8位元輸出OFM,且可將所有8個OFM結果寫入SRAM。此便完成了對一個卷積的計算。可接著如圖3AK中所示將卷積窗口平面平移一個行,且可重覆進行所述運算。
在圖3BA至圖3BC中所示的第二實例中,利用單一塊元計算3×3×16×128卷積。如早前所提及,為方便起見,可將用語「IFM片」定義為意指16個IFM深度通道(即,IFM讀取(及塊元輸入)的單位),且可將用語「OFM片」定義為意指8個IFM深度通道(即,如圖3BA中所示的OFM塊元輸出的單位)。以矩形對運算映射進行說明可為方便的,其中如圖3BB中所示,矩形的高度對應於IFM通道的數目,且矩形的寬度表示OFM通道的數目。可藉由將其劃分成16個3×3×16×8卷積來達成3×3×16×128卷積,因而實行3×3×16×8卷積的前一實例可重覆16次。在第一步驟中,可計算OFM[0..7]的3×3×16×8卷積;在第二步驟中,可計算OFM[8..15]的3×3×16×8卷積,等等,直至在第十六步驟中,可計算OFM[120..127]的3×3×16×8卷積。對OFM通道的下一子集的處理可稱為「對OFM進行步進(stepping)」。所述十六個步驟可對應於十六個矩形(圖3BC中示出其中的第一矩形、第二矩形及第十六矩形),且可自圖3BB及圖3BC看出,當所述十六個步驟完成時,3×3×16×128卷積已得到計算。
假設可以此種方式僅藉由將OFM劃分成足夠小的片段(piece)來處理無限數目的OFM通道。每當系統「對OFM進行步進」時,IFM會被整個地重新讀取(在此實例中被整個地讀取十六次)。對(整個)IFM的每一讀取可稱為「IFM通行(IFM pass)」,且每一此種IFM通行可能消耗相當多的能量(或功率(若重覆實行所述運算))。降低功耗常是非常期望的(對於例如行動智慧型電話等電池供電裝置而言尤其如此)。下一實例說明一種避免一些此種能量成本的方法。
在圖3CA及圖3CB中所示的第三實例中,此次利用十六個塊元(而非一個塊元)計算3×3×16×128卷積。每一塊元具有16*8 = 128個乘法器,因此所述16個塊元總共具有128 * 16 = 2,048個乘法器。可將IFM[0..15]廣播至所有16個塊元,以使塊元1將計算OFM[0..7],塊元2將計算OFM[8..15],等等,且塊元16將計算OFM[120..127]。注意,本文中所使用的IFM「廣播」是指將IFM同時饋送至若干個MR塊元102(相對於對塊元102的說明,在對塊元102的說明中,廣播是指利用單一塊元將ABU輸出饋送至所有MU行)。
神經處理器具有多個SRAM記憶庫組109(圖1A及圖3AC)。由此,參照圖3CB,輸入IFM[0..15]可饋送自SRAM記憶庫組0。塊元1的輸出(OFM[0..7])可與塊元2的輸出(OFM[8..15])依序連成16通道式OFM[0..15]並保存至SRAM記憶庫組1中。相似地,塊元2的輸出可與塊元3的輸出序連並保存至SRAM記憶庫組2,等等,且塊元15的輸出與塊元16的輸出序連並保存至SRAM記憶庫組8。可看出,在此第三實例中,所有OFM均是在單一「通行」(即,讀取整個IFM一次)中計算,且由於使用IFM廣播而使IFM僅被讀取一次,因此避免了第二實例中因實行多個IFM通行而引發的能量消耗中的大部分。
在圖3DA中所示的第四實例中,利用十六個塊元計算3×3×16×256卷積。十六個塊元可僅能夠在單一通行中生成多達16 * 8 = 128個OFM通道;在此實例中,欲生成256個OFM通道。因此,可運行兩個OFM步驟,其中第一步驟用於計算OFM[0 .. 127]且第二步驟用於計算OFM[128 .. 255]。可使用兩個IFM通行(完整地讀取IFM兩次)。圖3DA中例示分兩步形成OFM的過程。
在圖3EA及圖3EB中所示的第五實例中,利用十六個塊元計算3×3×32×64卷積。與前面的具有16個IFM通道的實例不同,此實例涉及32個IFM通道。所有32個IFM通道(2個片)可被同時自SRAM讀取。神經處理器可具有若干個SRAM記憶庫組。每一記憶庫組(在映射實例中)每時脈周期可對1個片進行串流。由此,為同時讀取2個片(32個IFM通道)(對2個片進行串流),可使用兩個記憶庫組,所述兩個記憶庫組中的第一記憶庫組可對IFM[0..15]進行串流,且第二記憶庫組可對IFM[16..31]進行串流。
參照圖3EB,可跨塊元1及塊元9對OFM[0..7]的計算進行劃分。塊元1可將IFM[0..15]縮減成未完成的OFM[0..7](加到未完成的OFM[0..7]中)。塊元2可將IFM[16..31]縮減成未完成的OFM[0..7]。可接著藉由將塊元1輸出與塊元2輸出相加(以及應用偏差、激活函數等)來完成OFM[0..7]的計算。為實行此加法,可利用另外一個附加硬體加法器級(hardware adder stage)將塊元1的加法器樹與塊元2的加法器樹「聯合」。縮減組構111提供此種附加硬體加法器級。類似的運算可用於OFM[8..15](將塊元2與塊元10相加)、... OFM[56..63](將塊元8與塊元16相加)。參照圖3EB,在此實例中,塊元1..8均不向SRAM進行輸出;如稍後將詳細闡釋,僅塊元9..16將OFM保存至SRAM。
在圖3FA至圖3FC中所示的第六實例中,利用十六個塊元計算3×3×32×512卷積。參照圖3FA,如在第五實例中,可自兩個SRAM記憶庫讀取兩個IFM片(IFM[0..31])並可將所述兩個IFM片中的每一者廣播至8個塊元。兩個此種由8個塊元構成的組可一起計算OFM [0..63]且該些結果可保存至4個SRAM記憶庫組。參照圖3FB,每IFM通行可計算64個OFM(即,可讀取整個IFM以計算64個OFM)。由此,藉由與第四實例的方式相似的方式,可在8個IFM通行(及(等效地)8個OFM「步驟」)中計算512個OFM。可在第一IFM通行期間計算OFM[0..63],可在第二IFM通行期間計算OFM[64..127],等等,且在第八IFM通行期間計算OFM[448..511]。在此實例中,「2個IFM片×64個OFM片」運算已被劃分成8個OFM步驟。每一OFM步驟對「2個IFM片×8個OFM片」進行卷積。參照圖3FC,在一些實施例中,可使用虛擬SRAM記憶庫來處置SRAM記憶庫(其可具有約32千位元組(kB)的容量)耗盡IFM資料或充滿OFM資料的情形。
在此種情形中,神經處理器的資料組構可通透地(對於接收IFM串流的塊元而言)切換以連接另一SRAM記憶庫組。如早前所提及,IFM張量及OFM張量可能過大而無法儲存於單一SRAM記憶庫組109中且因此可能需要劃分成各自小到足以納入於SRAM記憶庫組109中以進行儲存的子張量。全域控制邏輯140含有規定IFM張量及OFM張量被如何劃分並儲存於SRAM記憶庫組中的配置暫存器,包括IFM及OFM子張量索引、大小、儲存每一子張量的SRAM記憶庫組的索引以及每一子張量在相關聯SRAM記憶庫組內的儲存位址。
隨著計算繼續進行且IFM(OFM)遍歷自儲存於一個SRAM記憶庫組109中的子張量移動至儲存於另一SRAM記憶庫組109中的另一子張量,全域控制FSM 140精心安排IFM遞送組構及OFM遞送組構的即時重新配置,從而自當前的IFM來源(及OFM目的地)SRAM記憶庫組切換至下一IFM來源(及OFM目的地)SRAM記憶庫組。在一些實施例中,重新配置是以對於消耗IFM的塊元(及生成輸出的塊元)而言通透的方式達成且不會在匯流排切換期間使計算停止或減慢。
如早前所提及,被稱為「映射器(mapper)」的軟體可靜態地(在編譯時間處)決定如何跨SRAM記憶庫組及實體SRAM記憶庫整個地劃分IFM及OFM儲存以及權重內核儲存及部分結果。為清晰地闡釋映射,忽略跨多個SRAM記憶庫組的實體IFM及OFM儲存的細節,且如圖3FC中所示,將SRAM記憶庫組視為IFM及OFM的「虛擬」圖或「邏輯」圖306。
在圖3GA至圖3GD中所示的第七實例中,利用十六個塊元計算3×3×32×512卷積。在此實例中,利用較少的IFM通行來計算與第六實例中相同的卷積以節省能量。參照圖3GA,對於3×3卷積,每一乘法器單元權重暫存器檔案127可具有18個權重,在第六實例中使用了其中的僅9個權重。由此,可儲存兩組3×3權重(而非一組)並隨時間「循環」遍歷所述兩組3×3權重。具體而言,3×3×32×512卷積可被劃分成兩個在時間上交錯的3×3×16×512卷積。參照圖3GB,藉由與第三實例的方式類似的方式,3×3×16×512卷積可被映射至16個實體塊元。對於每一IFM通行,可(自SRAM記憶庫組)讀取一個IFM片並廣播至16個實體塊元,所述16個實體塊元輸出128個OFM通道(至8個SRAM記憶庫組)。在此實例中,完成OFM計算要耗用四個IFM通行(及四個OFM步驟)。
參考圖3GC,在一些實施例中,在第一步驟中,可饋入IFM[0..15]以在OFM位置(x,y)處計算OFM[0..127]的卷積,但可將OFM結果保存於累加器中,而非將其寫出至SRAM。參照圖3GD,在第二步驟中,每一乘法器單元權重暫存器檔案127可接著切換至第二組3×3權重並饋入IFM[16..31]以完成計算OFM[0..127]。此過程可稱為「IFM權重循環(IFM weight cycling)」。接著,在第三步驟中,可將OFM[0..127]保存至SRAM且可將累加器清空。可重覆進行該三個步驟,直至計算完成為止。
參照圖3GA,在一些實施例中,可將邏輯塊元定義為儲存多組權重的實體塊元。可看出,在本實例(第七實例)中,兩組16個此種邏輯塊元(在時間上交錯)(即,32個邏輯塊元)是藉由儲存兩組3x3權重而形成。相較於第六實例,在第七實例中,32個邏輯塊元可在每一IFM通行中實體地計算較多(例如,較寬)的OFM,以使IFM通行數目(及SRAM IFM讀取能量)減少兩倍。
在圖3HA至圖3HC中所示的第八實例中,首先利用十六個實體塊元計算3×3×512×256卷積。注意,在此實例中,IFM及OFM通道的數目(分別為512及256)均相當大。如下文所進一步詳細論述,當卷積內核過大而無法以另外一種方式計算時,可使用部分結果或「部分」。然而,此實例說明在不使用部分的條件下仍可如何實行大權重內核的卷積。如圖3HB中所示,可計算3×3×512×256卷積。對於3×3 8位元卷積,可將2組3×3的8位元權重儲存於每一乘法器單元中,以使得存在(2組權重) * (16個實體塊元) = 32個邏輯塊元。32個邏輯塊元可對32個IFM片進行縮減,以使得可在不利用部分的條件下處理的IFM通道的最大數目為(32個片) * (每片16個IFM通道) = 512個IFM通道。由此,有可能在不利用部分的條件下計算3×3×512×N卷積,其中N是任何正整數。
參照圖3HB及圖3HC,可結合縮減組構、利用塊元加法器樹來每時脈對256個IFM通道進行縮減。為對所有512個IFM通道進行縮減(並生成8個OFM通道),實行兩個權重循環。在權重循環1中,如圖3HB中所示,可將IFM [0…15]饋送至塊元1,可將IFM [16..31]饋送至塊元2,等等,且可將IFM [240..255]饋送至塊元16。硬體樹可利用由縮減組構提供的硬體加法器級而在所有16個塊元(每一行)上進行聯合。加法器樹根可在塊元16處結束(如稍後在縮減組構、OFM遞送組構及加法器樹的上下文中進一步詳細論述),以使僅塊元16生成結果,而塊元1 … 15的累加器不用於此配置中。在圖3HC中所示的權重循環2中,可將IFM [256…271]饋送至塊元1,可將IFM [272…287]饋送至塊元2,等等,且可將IFM [496…511]饋送至塊元16。塊元16可接著將完成的OFM[0..7](x, y)結果寫入SRAM記憶庫16。最終,可實行32個IFM通行(32個OFM步驟)來計算OFM[0…7],接著計算OFM[8..15],等等,直至計算OFM[248..255]。注意,儘管在此特定實例中,IFM通行數目與OFM步驟數目相同,但在稍後的實例中,IFM通行與OFM步驟之間的差異將變得更加清楚。
圖3HD另外說明圖3HA至圖3HC中所示的3×3×512×256卷積如何可僅藉由實行64個IFM通行(64個OFM步驟)而非32個IFM通行(32個OFM步驟)而變更成3×3×512×512卷積。
在圖3IA至圖3IF中所示的第九實例中,利用十六個塊元並利用部分結果計算3×3×512×256卷積。在一些情形中,藉由減少SRAM讀取的數目(相較於例如第八實例),利用部分可使能量節省成為可能。當利用部分時,映射演算法可將權重張量分割成若干個部分(尤其是在深度通道方面),從而將單一卷積運算(包括加載權重張量、遍歷IFM、寫入OFM)轉換成兩個或更多個。該兩個或更多個所得卷積的輸出稍後被加以組合以產生最終結果。
首先,回顧一下說明在不利用部分的條件下計算3×3×512×256卷積的圖3HB至圖3HC。圖3IA至圖3IB及圖3IC至圖3ID說明在被分割成256與256(對應於兩個單獨的卷積,每一卷積的大小為3×3×256×256)的權重張量(及對應的IFM及OFM)的512個IFM通道之後相關聯的硬體資源映射。
圖3IA至圖31B說明所述兩個3×3×256×256卷積中的第一者。由於權重內核平面大小為3×3 = 9,因此每一能夠保持18個8位元權重的MU權重暫存器檔案具有足夠的容量來儲存兩組3×3權重,因此使32個邏輯塊元可用於計算。
可接著加載八個IFM片。可接著將每一IFM片廣播至2個實體塊元。可實行十六個OFM步驟(16個IFM通行)。在第一權重循環期間,如圖3IA中所示,可饋入3×3的IFM[0..127],將其與第一組3×3權重進行卷積、利用加法器樹進行縮減並累加於塊元8及塊元16的累加器暫存器中。參照圖3IB,在第二權重循環期間,可饋入3×3的IFM[128..255],將其與第二組3×3權重進行卷積、利用加法器樹進行縮減並進一步累加於塊元8及塊元16中的累加器暫存器中。此時,對於OFM通道0 … 15,3×3的 IFM[0..255]與對應的3×3×256×16權重內核的卷積完成且可作為部分結果寫入虛擬SRAM記憶庫組8及虛擬SRAM記憶庫組9。由於此為部分結果(相對於完成的結果),因此累加器130的值在去往SRAM的途中繞過激活函數模組197。可選地,為降低SRAM大小要求及功耗,位元範圍選擇模組187可藉由舍入來減小部分結果位元寬度,例如,當利用8位元激活及權重時減小至4位元組或者當利用16位元激活及權重時減小至6位元組。
重覆進行以上步驟,直至已處理整個IFM[0…255]為止(即,對所有所期望平面(x, y)位置進行了處理為止),此對應於完成了一遍IFM[0…255]並得到對OFM[0…15]計算的一組對應部分結果。其餘OFM通道[16…255]的部分結果是藉由對IFM[0…255]實行另外15個通行(對應於另外15個OFM步驟)來計算。
注意,在此映射實例中,使用兩個部分通行使得能夠將實體上同時在一個通行中生成的OFM加寬(擴展)兩倍(自一個OFM片加寬(擴展)為兩個OFM片)。此外,在每一部分通行期間處理的IFM張量的大小縮短兩倍,而自H×W×512縮短為H×W×256。
除可在第一權重循環期間饋送IFM [256..383]且可在第二權重循環期間饋送IFM [384..511](如圖3IC及圖3ID中所分別例示)以外,第二部分IFM通行可與第一部分IFM通行相同。
完成原初的3×3×512×256卷積需要(以元素方式,來自所述兩個3×3×256×256卷積)對部分結果進行相加以及應用縮放、偏差及激活函數(與ARU相似)。可以若干種方式達成此最終步驟,所述若干種方式包括:(i)讀取由第一部分卷積生成的部分結果,將部分經由IFM遞送組構傳輸至塊元ARU,從而以元素方式與第二組部分結果進行求和,進而使得ARU將在第二部分卷積期間生成最終結果;(ii)在該兩個部分卷積期間使ARU輸出部分結果,同時使SRAM記憶庫組中的附加邏輯實行讀取-修改-寫入以添加部分及應用激活函數。更具體而言,用以將部分最終化的附加邏輯將在第二部分卷積期間接收部分結果,自第一部分卷積的SRAM結果進行讀取,對該些結果進行求和且即時地應用激活函數並將最終結果寫回SRAM;(iii)使SRAM記憶庫組中的附加邏輯能夠對部分進行讀取-相加-寫入操作(read-add-write operation),以在不應用激活函數的條件下以元素方式持續對來自兩個或更多個部分運算的部分結果進行相加,隨後讀取部分結果並將其發送至塊元ARU以在最末一輪部分運算期間最終化。
與不使用部分的情形不同,當使用部分時,在安排卷積運算時可能需要慮及OFM高度及寬度。參照圖3IE,可使用四個位元組來儲存每一部分結果(假定IFM與OFM二者均為8位元式)。在此種情形中,用於部分結果的SRAM儲存大小等於(OFM高度) * (OFM寬度) * (OFM深度) * (4個位元組)。若(晶片上)SRAM的儲存容量對於部分結果而言不足夠,則OFM可如所示被劃分成子窗口且一次被處理一個。然而,每當處理子窗口時,可有必要加載(或重新加載)整組內核權重,此可能增加能耗。舉例而言,假定OFM平面大小被設置為10×10且IFM平面大小被設置為等於OFM平面大小。在此種情形中,內核權重大小相對較大(為3*3*512*256 = 1.2百萬位元組)。用於儲存整個部分結果(全部IFM平面大小,而不將其細分成平面子窗口)的SRAM大小為10*10*256*4 = 102,400位元組。為簡單起見,進一步假定SRAM具有充足的容量,進而使得沒有必要使用子窗口。
圖3IF總結此實例中計算卷積的過程,藉由此過程,IFM[0..255]的第一組部分及所有OFM部分[0..255]得到計算並保存,且IFM[0..255]的第二組部分及所有OFM[0..255]得到計算(但由於此為最後一輪部分,因此未被寫入SRAM),且所述部分被以元素方式相加且被即時地應用以激活函數並且在計算第二部分卷積時被寫入SRAM。
如早前所提及,使用MR塊元來以元素方式添加部分及應用激活函數是可選的。作為替代,可使用專用於以元素式平面(通道間無縮減)運算的輔助平面與激活處理(Auxiliary Planar and Activation Processing,APAP)單元。該些單元可位於SRAM記憶庫組內而可以存取儲存於SRAM本地的該些部分以及抵達SRAM記憶庫組的部分。APAP單元接著將完成的結果寫入SRAM中。
根據此第九實例實行的計算可藉由實行兩個通行來節省顯著的能量。由於IFM通行數目自32減少到了16,因此被讀取的IFM資料量為(IFM高度) * (IFM寬度) * (IFM通道) * (IFM通行) = 10*10*512*(32–16) = 819,200個位元組(忽略快取),寫入SRAM的部分資料量為(OFM高度) * (OFM寬度) * (OFM通道) * (部分卷積數- 1) * (4個位元組) = 10*10*256*(2-2)*4 = 102,400個位元組。換言之,若第二部分通行欲將結果保存至SRAM而非直接將其饋送至平面/激活單元,則會產生兩倍於此的量。此外,自SRAM讀取的部分資料量為(OFM高度) * (OFM寬度) * (部分卷積數–1) * (4個位元組) = 10*10*256*(2-1)*4 = 102,400位元組。換言之,若第二部分通行欲將結果保存至SRAM而非直接將其饋送至平面/激活單元,則會產生兩倍於此的量。由此,儘管將部分寫入SRAM會產生附加的102,400個位元組且自SRAM讀取部分會產生另外102,400個位元組,然而,在本文的實例中,相對於不利用部分的情形,利用部分來實行3×3×512×256(8位元式)卷積會使得自SRAM少讀取819,000個IFM位元組。
假定一次SRAM寫入的能量大約為一次SRAM讀取的能量的兩倍,則總供節省的SRAM能量等於819,000 - 2*102,400 – 102,400 = 511,800 * (每次SRAM讀取的能量)。
在圖3JA至圖3JD中所示的第十實例中,利用四個塊元計算8×8×16×64卷積。8×8卷積具有8*8 = 64個權重,其可能無法納入於可儲存例如僅18個權重的單一乘法器單元中。因此,如圖3JA中所示,64個權重可被劃分成四個塊元,以使塊元1儲存W[0..1,0..7,*,*],塊元2儲存W[2..3,0..7,*,*],塊元3儲存W[4..5,0..7,*,*],且塊元4儲存W[6..7,0..7,*,*],其中權重內核記法為W[列,行,IFM通道,OFM通道]且「*」是指整個可適用範圍。系統可接著跨塊元進行相加(縮減)以計算OFM[0..7],進而使得每一塊元有效地實行2×8×16×64卷積,且利用四個塊元而同時實行的四個2×8×16×64卷積集合成一個8×8×16×64卷積。每一2×8×16×64卷積進一步由利用IFM權重循環組合於一起的兩個1×8×16×64卷積組成。
圖3JB說明IFM權重循環的第一步驟,其中卷積窗口內的偶數列被卷積(奇數列尚未被卷積)。此處,塊元1對卷積窗口的第0列W[0,*,*,*]與IFM值「a0、b0、c0、d0、e0、f0、g0、h0」進行卷積,而塊元2對卷積窗口的第2列W[2,*,*,*]與IFM值「a2、b2、c2、d2、e2、f2、g2、h2」進行卷積,塊元3對卷積窗口的第4列W[4,*,*,*]與IFM值「a4、b4、c4、d4、e4、f4、g4、h4」進行卷積,且塊元4對卷積窗口的第6列W[2,*,*,*]與IFM值「a6、b6、c6、d6、e6、f6、g6、h6」進行卷積。乘法器單元積利用塊元內的塊元加法器樹以及利用由縮減組構提供的附加加法器樹級而縮減,並且在塊元4的累加器暫存器130中累加(隨著IFM值「a*、b*、... h*」經由IFM遞送組構串流至所述四個塊元)。
圖3JC說明IFM權重循環的第二步驟,其中卷積窗口內的奇數列被卷積。此處,塊元1對卷積窗口的第1列W[1,*,*,*]與IFM值「a1、b1、c1、d1、e1、f1、g1、h1」進行卷積,而塊元2對卷積窗口的第3列W[3,*,*,*]與IFM值「a3、b3、c3、d3、e3、f3、g3、h3」進行卷積,塊元3對卷積窗口的第5列W[5,*,*,*]與IFM值「a5、b5、c5、d5、e5、f5、g5、h5」進行卷積,且塊元4對卷積窗口的第7列W[2,*,*,*]與IFM值「a7、b7、c7、d7、e7、f7、g7、h7」進行卷積。與第一IFM權重循環步驟相似,乘法器單元積利用塊元內的塊元加法器樹以及利用由縮減組構提供的附加加法器樹級而縮減,並且在塊元4的累加器暫存器130中累加(隨著IFM值「a*、b*、... h*」經由IFM遞送組構串流至所述四個塊元)。然而,與在第一IFM權重循環步驟期間不同,累加器暫存器130在第二IFM權重循環步驟開始時不被清空,進而使得一旦該兩個IFM權重循環步驟完成,累加器暫存器130便含有偶數列與奇數列二者的點積。
可接著將所得的OFM [0...7]寫入SRAM,從而完成對於一個OFM位置的8×8×16×8窗口的卷積。如圖3JD中所示,為繼續進行計算,可接著平移卷積窗口以計算下一8×8卷積,且可重覆進行所述過程,直至整個OFM完成為止。
在圖3KA及圖3KB中所示的第十一實例中,利用十六個塊元計算8×8×64×64卷積。8×8卷積可應用於16個塊元,且可使用更多IFM通道及OFM通道。如圖3KA中所示,將8×8卷積劃分到四個實體塊元上使得「邏輯」塊元的數目減少四倍,例如,(16個實體塊元) / (每次運算4個實體塊元) = 4個邏輯塊元。本文中所使用的實體塊元的「實體分組(physical grouping)」是藉由將塊元加法器樹連接成單一加法器樹(每行)以實行對於單一實體塊元而言過大的運算來定義。
參照圖3KA,由於8×8卷積可能過大而無法納入於單一塊元中,因此可將8×8卷積劃分到四個塊元上。藉由將來自所述四個塊元的加法器樹連接成單一加法器樹,所述四個塊元可實體地組成一個邏輯塊元。參照圖3KB,將8×8×64×64映射至16個實體塊元在邏輯上變換為將8×8×64×64映射至4個邏輯塊元,其中每一邏輯塊元具有18*4 = 72個權重而足以納入8×8 = 64個卷積權重。
圖3KB說明將8×8×64×64卷積運算映射至所述4個邏輯(且因此16個實體)塊元上的過程。可以如下方式實行變換的運算。首先,可讀取所述四個IFM片;可一次讀取所有IFM通道,以避免部分。第二,可將每一IFM片「廣播」至一個邏輯塊元。第三,可在一個IFM通行中計算8個OFM(一個OFM片)。可重覆進行此過程,以使得可實行(64個OFM) / (每一通行8個OFM) = 8個IFM通行(8個OFM步驟)來計算所有OFM通道。
在一些情況下,可能需要更多OFM通道來例如計算8×8×64×1024卷積。此能夠在不利用部分的條件下藉由借助於實行更多IFM通行以重新讀取IFM來添加更多OFM步驟達成。在一些情況下,可能需要更多IFM通道來例如計算8×8×128×64卷積。在此種情形中,除非(i)實體塊元的數目增大或者(ii)每乘法器的權重的數目增大,否則可有必要使用部分。然而,在一些應用中,大小較大的卷積(如8×8)可僅適用於紅綠藍(red-green-blue,RGB)影像或具有較少IFM通道的影像。保持N個權重的MU權重暫存器檔案可容納多達H*W <= N個卷積內核,其中H及W是指權重內核的平面高度及平面寬度。舉例而言,具有18個8位元權重容量的MU可保持包括4×4、5×3、3×5、6×2、2×6、7×2、2×7、8×2、2×8、9×2、2×9、18×1及1×18在內的卷積內核。在實踐中可能鮮少需要計算8×8×128×64卷積且因此可由CPU而非神經處理器來實行,從而使相關聯的神經處理器附加硬體邏輯為可選的。出於清晰的目的,IFM、OFM及縮減組構的說明將省略H*W > N的需要連接的情形(例如此實例中所述的情形)。
在圖3LA至圖3LD中所示的第十二實例中,利用十六個塊元計算1×1×1024×64卷積。每一MU可具有18個權重。由於1×1卷積需要僅1×1 = 1個權重,因此可有可能將(每乘法器18個權重) / (每卷積窗口1個權重) = 18組1×1卷積權重納入至每一塊元中。邏輯塊元的數目可被計算為(16個實體塊元) * (每乘法器18個卷積權重組) = 288個邏輯塊元。利用16個實體塊元計算1×1×1024×16卷積可變換為利用288個邏輯塊元計算1×1×1024×16卷積。可在一個IFM通行中讀取所有(1024個)IFM通道,以避免部分。利用288個邏輯塊元使得可有可能接受大小高達(每IFM片16個IFM通道) * (288個邏輯塊元) = 4,608個通道的IFM。1×1×1024×64卷積需要所述4,608個可用IFM通道中的僅1024個IFM通道,而不利用部分。因此,每一IFM通行可計算的OFM片的數目為floor((4,608個最大IFM通道) / (1024個IFM通道)) = 4個OFM片。
以如下方式實行計算。首先,可將16組1×1權重儲存於每一MU中。在每一OFM步驟(IFM通行)期間,可讀取64個片(所有1024個IFM通道)。在實體上,此對應於讀取(64個IFM片) / (每MU 16組1x1權重) = 一次4個IFM片。可將所述四個IFM片中的每一者廣播至(16個實體塊元) / (4個IFM片) = 4個塊元以在一個OFM步驟(及一個IFM通行)中計算4個OFM片。可利用(8個OFM片) / (在4個塊元上廣播) = 2個OFM步驟(及2個IFM通行)來計算OFM。IFM權重可循環16次。
具體而言,參照圖3LA,卷積計算可與以下步驟一起繼續進行。在第一步驟中,將累加器清空。在第二步驟中,提取IFM[0..15]、IFM[16..31]、IFM[32..47]及IFM[48..63]並分別廣播至塊元1、5、9及13、塊元2、6、10及14、塊元3、7、11及15以及塊元4、8、12及16。在第三步驟中,系統將由塊元1..4計算的點積累加至OFM[0..7]中、將由塊元5..8計算的點積累加至OFM[8..15]中、將由塊元9..12計算的點積累加至OFM[16..23]中且將由塊元13..16計算的點積累加至OFM[24..31]中來分別作為塊元4、8、12及16的累加器暫存器中的中間(未完成)結果。
參照圖3LB,在第四步驟中,不將累加器清空,且將MU切換為使用下一組1×1權重(對應於IFM權重循環中的一步驟)。在第五步驟中,提取IFM[64..79]、IFM[80..95]、IFM[96..111]及IFM[112..127]並分別廣播至塊元1、5、9及13、塊元2、6、10及14、塊元3、7、11及15以及塊元4、8、12及16。在第十二步驟中,系統將由塊元1..4計算的點積累加至OFM[0..7]中、將由塊元5..8計算的點積累加至OFM[8..15]中、將由塊元9..12計算的點積累加至OFM[16..23]中且將由塊元13..16計算的點積累加至OFM[24..31]中來分別作為塊元4、8、12及16的累加器暫存器中的中間(未完成)結果。
參照圖3LC,計算可繼續進行,從而持續循環IFM權重(針對總共16個IFM權重循環步驟)、提取並廣播IFM、計算並累加點積,直至到達最末IFM片(通道960至1023)為止。在此步驟中,不將累加器清空,且將MU切換至下一組(最末第16組)1×1權重(對應於IFM權重循環中的最末步驟)。在下一步驟中,提取IFM[960..975]、IFM[976..991]、IFM[992..1007]及IFM[1008..1023]並分別廣播至塊元1、5、9及13、塊元2、6、10及14、塊元3、7、11及15以及塊元4、8、12及16。在下一步驟中,系統將由塊元1..4計算的點積累加至OFM[0..7]中、將由塊元5..8計算的點積累加至OFM[8..15]中、將由塊元9..12計算的點積累加至OFM[16..23]中且將由塊元13..16計算的點積累加至OFM[24..31]中以分別在塊元4、8、12及16的累加器暫存器中獲得完成的點積結果。在下一步驟中,對在塊元4、8、12及16的累加器暫存器中累加的點積結果應用激活,並將所述四個所得OFM片寫入SRAM。此便完成了對OFM[0..31]的計算。
參照圖3LD,系統接著繼續進行至下一OFM步驟(借助於實行另一IFM通行),並重覆進行計算(此次是針對OFM[32..63])。系統加載用於下一OFM步驟的權重片:W[0,0,0..1023,32..63]。權重加載可利用如圖1K及圖1N中所示的垂直權重加載匯流排101而與計算同時進行,在此種情形中,權重加載過程不會引起附加的延遲。系統可將累加器清空,並將MU切換至第一組1×1權重。系統可接著重覆如在圖3LA至圖3LC的上下文中闡述的運算,以計算OFM[32..63]。
如圖3LD中所示(與圖3LC所示情形相似),一旦系統已經歷16個IFM權重循環中的15個IFM權重循環、已提取對應的IFM片、已計算並累加中間點積結果,系統便會達到最末一輪(第16輪)IFM權重循環。在此輪中,不將累加器清空,且將MU切換至下一組(最末第16組)1×1權重(最末第16IFM權重循環步驟)。系統提取IFM[960..975]、IFM[976..991]、IFM[992..1007]及IFM[1008..1023]並分別廣播至塊元1、5、9及13、塊元2、6、10及14、塊元3、7、11及15以及塊元4、8、12及16。接下來,系統將由塊元1..4計算的點積累加至OFM[32..39]中、將由塊元5..8計算的點積累加至OFM[40..47]中、將由塊元9..12計算的點積累加至OFM[48..55]中且將由塊元13..16計算的點積累加至OFM[56..63]中。在此過程結束時,系統對儲存於(塊元4、8、12及16中的)累加器130中的完成的點積應用(塊元4、8、12及16中的)激活函數197,並將最終的OFM[32..63]結果寫入SRAM以完成卷積運算。
現在考量全連接(FC)層計算(相對於卷積)。首先慮量利用單一塊元及單一IFM樣本進行的16×8 FC計算的簡單情形。注意,除權重在與IFM相乘之後必須被捨棄以外,FC層計算與(在前一實例中所述的)1×1卷積相似。可藉由以下方式來達成單一16×8 FC計算:將1個權重加載至每一MU中,提取單一IFM[0…15]片,利用塊元的加法器樹計算點積,對所得點積應用激活函數,並將完成的OFM[0...7]結果寫入SRAM。
考量藉由單一塊元及單一IFM樣本計算16×16 FC的情形。可藉由以下方式來達成單一16×16 FC計算:將2個權重加載至每一MU中,提取單一IFM[0...15],讓MU選擇所述兩個預加載權重中的第一者來進行乘法運算,如上所述計算OFM[0...7],讓MU選擇所述兩個預加載權重中的第二者來進行乘法運算並計算OFM[8..15]。循環遍歷MU權重以計算來自同一IFM的多個OFM的此過程稱為「OFM權重循環(OFM weight cycling)」。
注意,16×16 FC計算是利用一個IFM通行、但利用兩個OFM步驟(對應於兩個OFM權重循環)而達成。因此,如在大部分其他實例中觀察到,除非使用OFM權重循環,否則OFM步驟的數目通常等於IFM通行的數目。
考量另一種利用單一塊元及單一IFM樣本計算16×128 FC的簡單情形。可藉由以下方式達成此種計算:將16個權重加載至每一MU中,提取單一IFM片,借助於OFM權重循環來實行16個OFM步驟(即,藉由循環遍歷MU權重來逐一地計算OFM[0...7]、OFM[8..15]、... OFM[120..127])。
考量利用單一塊元對一批18個IFM樣本計算16×8 FC(即,IFM張量形狀可表達為1×16×18)的簡單情形。作為附注,由於所揭露的神經處理器實行推理(而非訓練(training)),因此映射實例隱含地假定IFM批次大小為1(此對於推理應用而言是典型的)。亦可將IFM批次大小大於一的計算映射至硬體上。舉例而言,如早已闡述,可對IFM批次中的每一樣本重覆進行計算。然而,對一批18個IFM樣本進行的16×8 FC單一塊元計算可利用MU權重暫存器檔案容量將18個權重預加載至每一MU中(每一IFM樣本一個權重)。隨後,可藉由以下方式來達成計算:(自所述一批18個中)提取第一IFM[0..15][0]樣本,計算所提取的IFM樣本與每一MU中的所述18個權重中的第一者的點積,應用激活函數並將結果OFM[0..7][0]寫入SRAM。接下來,在應用激活函數之後,提取IFM[0..15][1]樣本並將其與每一MU中的所述18個權重中的第二者相乘,以獲得OFM[0..7][1]。此一系列步驟持續進行,直至整批IFM[0..15][0..17]樣本(總共18個)均已被處理為止,從而產生一批OFM[0..7][0..17]樣本。將循環遍歷MU權重以處理一批IFM樣本稱為「IFM批次循環(IFM batch cycling)」。注意,只要MU權重暫存器檔案容量足夠,便可將IFM權重循環、OFM循環及IFM批次循環加以組合以實行計算。
在圖3MA及圖3MB中所示的第十三實例中,利用單一塊元實行288×8全連接計算。參照圖3MA,如先前所提及,全連接計算與1x1卷積相似,其中卷積窗口不被平移,且權重不被重新使用且必須在單一使用之後被捨棄。一個塊元可計算並行的8個OFM通道(即,1個OFM片)。288個IFM通道可對應於288 / (每MR塊元16列) = 18個片。系統可使用每一MU中的18個權重來儲存所有18片FC權重。
為實行全連接計算,系統可執行以下步驟(該些步驟可在某種程度上同時實行,即其可在時間上重疊)。在第一步驟中,可自SRAM加載權重。權重可例如利用如圖1K及圖1N中所示的垂直權重加載匯流排101而在計算的同時進行加載。由此,系統可確保FC權重被放置至SRAM中。在第二步驟中,可將用於OFM[0..7]的累加器清空。在第三步驟中,可將IFM[0..15]的一個樣本饋送至塊元中,且可將結果添加至OFM[0..7]累加器130中,以形成中間(未完成)結果。
在第四步驟中,可不將OFM[0..7]累加器清空,且系統可切換至下一組FC權重(循環IFM權重)。在第五步驟中,可將IFM[16..31]饋送至塊元中,且可將結果添加至OFM[0..7]累加器中。參照圖3MB,可重覆該些步驟,直至所有IFM通道(及相關聯的權重)均已被循環遍歷為止,其中IFM[280..287]為最末片。最終,可對所累加的點積應用激活函數且可將最終的OFM[0..7]結果寫入SRAM。此便完成了全連接計算。
在圖3NA中所示的第十四實例中,實行288×64全連接計算。在此實例中,OFM通道計數自8(在第十三實例中)增加至64。若系統將FC 288×64計算劃分成8個大小為288×8的較小FC計算並將其逐一實行(例如,在8個OFM步驟中),則此等效於第十三實例。此造成8個IFM通行。
在圖3OA至圖3OC中所示的第十五實例中,對單一IFM樣本(即,批次大小為1)實行1024×32全連接計算。參照圖3OA,由於FC與1×1卷積相似,因此可存在各自實行1×1卷積的(每MU 18個權重) * (16個實體塊元) = 多達288個邏輯塊元。由此,系統可在單輪中讀取所有1024個IFM通道(1024/16 = 32個IFM片),以避免部分。
為讀取所有32個IFM片,可使用32個邏輯塊元。所述計算可涉及計算32個OFM(4個OFM片)。為在一個通行中完成此計算(一次計算所有OFM),可使用(32個IFM片) * (4個OFM片) = 128個邏輯塊元。由此,可用數目的邏輯塊元(288)便已足夠。可藉由在每一MU中儲存8個權重(而非每MU儲存多達18個權重)將邏輯塊元的數目減少至所需的128個。
可以如下方式繼續進行計算。系統可每MU儲存8組IFM FC權重且使用128個邏輯塊元(如上所述)。可藉由計算四個OFM片來在單一IFM通行中完成整個計算。可提取所述四個IFM片中的每一者並廣播至所述四個塊元。由於每一MU中儲存有8個IFM權重組,因此權重可循環八次。順序可包括以下步驟。在第一步驟中,可將OFM累加器清空。在第二步驟中,可提取IFM[0..63](4個IFM片)且可將每一片廣播至所述四個塊元。在第三步驟中,可計算尚未完成的OFM[0..31](4個OFM片)並添加至OFM累加器。
參照圖3OB,在第四步驟中,可不將OFM累加器清空,且可使用下一組權重。在第五步驟中,可提取IFM[64..127](4個IFM片)。在第六步驟中,系統可藉由將積的和添加至OFM累加器來持續計算(尚未完成的)OFM[0..31](4個OFM片)。參照圖3OC,系統可持續循環權重並累加OFM結果,直至IFM中的所有者均已被處理為止。作為最末步驟,系統可提取IFM[960..1023]並累加至OFM[0..31]中,接著對經累加的OFM[0..31]應用激活函數並將結果寫入SRAM。
在圖3PA至圖3PC中所示的第十六實例中,利用十六個塊元及為1的批次大小實行4096×1024全連接計算。此計算可使用(4096 / 每塊元16個IFM通道) = 256個IFM片以及(1024 / 每塊元8個OFM通道) = 128個OFM片。如在以上論述的其他實例中的一些實例中一樣,讀取整個IFM以避免部分可為有利的。多達(每MU 18個權重) * (16個實體塊元) = 288個邏輯塊元可用於實行計算。為讀取整個IFM,可使用256個邏輯塊元。由此,可用數目的邏輯塊元(288)便已足夠。系統可被配置成藉由將16組權重加載至每一MU中來使用256個邏輯塊元。為在一輪中讀取256個IFM片(不利用部分),可使用所有256個邏輯塊元。因此,每一IFM通行將生成(256個邏輯塊元 / 256個IFM片) = 1個OFM片,且為完成計算,將實行(128個OFM片) / (每一IFM通行1個OFM片) = 128個OFM步驟(且因此128個IFM通行)。
圖3PA中示出實體配置。縮減組構可被配置成將所有16個塊元的輸出縮減成單一OFM片。將提取(來自16個虛擬SRAM記憶庫的)16個IFM片,且每一IFM片「廣播」至僅一個塊元。
可以如下若干個步驟實行所述計算。在第一步驟中,將OFM[0..7]累加器清空。在第二步驟中,提取16個IFM片(IFM[0..255])並縮減至OFM[0..7]累加器中來作為中間(未完成)結果。
在第三步驟中,不將OFM[0..7]累加器清空,且系統切換至MU中的下一IFM權重組。在第四步驟中,提取下一16個IFM片(IFM[256..511])、縮減並添加至OFM[0..7]累加器中。如圖3PB中所示,該些步驟可持續進行,直至IFM中的所有者(直至且包括IFM[4080..4095])均已被處理為止。可對(塊元16中)所累加的點積應用激活函數且可將最終結果寫入SRAM。此便完成了對OFM[0..7]的計算。參照圖3PC,為實行下一OFM步驟,系統可對OFM[8..15]重覆前一計算,加載權重W[0..4095,8..15],並持續對OFM進行步進,直至計算出所有OFM(直至OFM[1016..1023])為止,以完成整個FC計算。
當IFM具有多於(18個權重) * (每IFM片16個IFM通道) * (16個實體塊元) = 4,608個通道時,可能存在FC計算情形。在此種情形中,可能被迫地藉由將IFM通道劃分成多個部分(大小足以映射至現有實體硬體上)而使用部分,單獨地對每一部分計算FC,如先前所述繼續以元素方式累加部分結果(儲存於SRAM中),並藉由應用激活函數來完成計算。
在權重為16位元的情形中,MU權重暫存器檔案容量變為9(16位元權重)而非18(8位元權重),且可如早前所述利用多循環(multi-cycling)來實行計算。相似的推理適用於較大的權重位元長度(例如,24位元或32位元),其中,舉例而言,MU權重暫存器檔案具有足夠的容量來保持6個24位元權重或保持4個32位元權重。
可選地,除將運算映射至所有可用實體塊元以外,神經處理器亦可在邏輯上細分成各自具有較少數目的塊元的若干個神經處理器。舉例而言,具有16個實體塊元的神經處理器可在邏輯上被視為兩個神經處理器,所述兩個神經處理器各自具有數目是原始塊元數目的一半的塊元(例如,各自具有8個塊元),或者對於四個神經處理器,所述四個神經處理器各自具有數目是原始塊元數目的四分之一的塊元(例如,各自具有4個塊元),等等。慮及在劃分之後剩餘的實體塊元的數目,藉由此種細分而得到的每一神經處理器實質上與上述映射原理相同。將神經處理器細分成多個較小的處理器對於需要生成相對較少的IFM縮減及相對較少的OFM通道的運算(更具體而言,其積)而言可為所期望的。舉例而言,1×1×32×32卷積映射需要僅4個塊元。若映射至16個塊元,則1×1×32×32卷積將導致16個塊元中的12個塊元不被使用,因此大幅降低乘法器利用率。在類似此種情形的情形中,具有16個實體塊元的神經處理器可被細分成四個神經處理器,所述四個神經處理器各自具有4個塊元,將1×1×32×32卷積映射至所述四個所得神經處理器中的每一者上,將例如大小為H×W×32的IFM張量細分成大小為(H/2×W/2×32)的四個非重疊的IFM張量,將一個此種四分之一大小的IFM張量指派至所述四個較小的神經處理器中的一者,且因此並行地對所有四個IFM子張量計算卷積。注意,此種小的權重張量大小可能相對不常見,且類似此種運算模式的運算模式需要由IFM、OFM及縮減組構提供適宜的支援。
神經網路層運算到可用硬體的各種映射需要來自IFM遞送組構104、OFM遞送組構106及縮減組構111的支援。圖4AA示出具有16個硬體塊元102及16個SRAM記憶庫組109的神經處理器的實體佈局草圖。在一個實施例中,SRAM記憶庫組109的記憶體可以分布式方式放置,其中每一SRAM記憶庫組109相鄰於形成塊元與SRAM記憶庫組單元401的恰好一個塊元102(在所述一個塊元102本地)。此使得能夠以高度並行的方式(即,並行運行多達16個IFM及/或串流)在每一塊元與其本地SRAM之間串流IFM及OFM資料,以避免SRAM與計算塊元之間的頻寬瓶頸,若SRAM集合成更大的儲存陣列並遠離塊元而放置(即,當不對記憶體進行分佈時),則可能存在所述頻寬瓶頸。
圖4AB及圖4AC說明塊元102與其本地SRAM記憶庫組109之間的連接以及SRAM記憶庫組109的內容。每一SRAM記憶庫組109可具有四個SRAM記憶庫B0、B1、B2、B3,以便提供足夠的頻寬以達成為服務於IFM遞送組構、OFM遞送組構而進行的同時的讀-寫操作、經由AXI埠(未示出)進行CPU存取、讀取及寫入部分結果以及進行權重加載。圖4AB說明記憶庫B0、B1、B2、B3之間經由多工器403去往IFM遞送組構104的路徑。此路徑可每計算時脈遞送多達兩個IFM片,以向能夠進行激活零跳過的塊元供應足夠的IFM資料。IFM遞送組構104連接至塊元102,以自本地SRAM記憶庫組以及其他15個SRAM記憶庫組引入IFM資料。每一SRAM記憶庫組109亦直接向其本地塊元102(具體而言,向本地塊元139內部的權重解壓縮單元138)供應權重。為加快權重加載,所有四個SRAM記憶庫B0至B3可並行地提取權重並將權重饋送至WDU 139。由於與卷積不同,必須在每一乘法運算之後捨棄FC權重,因此在全連接層計算期間盡可能快地將權重加載至塊元尤其重要。
每一MR塊元102中的所述多個MU權重暫存器檔案可接受大小為18*16*8 = 2,304位元組 = 144個字元的權重內核,其中每一字元具有128個位元。舉例而言,若神經處理器可用的總SRAM容量為2百萬(2M)位元組,則每一SRAM記憶庫組具有(2百萬位元組) / (16個SRAM記憶庫組) = 128千(128K)位元組。此外,若每一SRAM記憶庫組含有4個SRAM記憶庫,則每一SRAM記憶庫大小為(SRAM記憶庫組大小) / (每SRAM記憶庫組的SRAM記憶庫) = 128千 / 4 = 32千位元組。因此,所述四個本地SRAM記憶庫中的每一者均可儲存(2048個可用字元中的)144/4=36個字元。
圖4AC說明塊元與其本地SRAM記憶庫組之間的本地OFM連接。塊元102向OFM遞送組構輸出完成的結果或部分結果,OFM遞送組構將此資料輸送至本地SRAM記憶庫組以及其他地點的其他SRAM記憶庫組,並藉由解多工器405而使此資料對SRAM記憶庫B0至B3可用。
以下若干段落論述IFM資料遞送組構及OFM資料遞送組構。IFM遞送組構形成連接並將資料自SRAM記憶庫組109輸送至塊元102,而OFM遞送組構形成連接並將資料自塊元102輸送回SRAM記憶庫組109。
慮及將IFM自SRAM記憶庫組引帶至塊元及將OFM自塊元引帶回SRAM的任務,SRAM記憶庫組至塊元之間的連接可能看上去必須是多對多(all-to-all)連接,且塊元與SRAM記憶庫組之間的連接亦必須是多對多連接。具有多對多連接可能需要使用縱橫式交換機(cross-bar switch)(例如,16對16),縱橫式交換機在類似此種的情形中可能會消耗過大的矽面積,且因此是非常不期望的。更具體而言,全縱橫式交換機(full cross-bar switch)的面積與O(NM)成比例,其中N是切換輸入的數目且M是切換輸出的數目。在本文的情形中,N=M=T=16,其中T是實體塊元的數目,因此,使O(NM) = O(T2
)(其為塊元數目的二次方程式)、使塊元的數目增加(按比例增加)(例如,自32增加至32或64)會非常耗費矽面積。
然而,如下文所詳細論述,不需要在塊元與SRAM記憶庫組之間進行多對多連接。為減小通訊組構的大小及複雜度,一些實施例旨在藉由將SRAM分割成非重疊的儲存器來在將(由實體塊元中的每一者)產生OFM的地點本地儲存OFM。IFM資料仍然被自各種SRAM記憶庫組遞送至每一塊元,然而IFM遞送組構配置可減少至與塊元之間的5種主要縮減模式對應的5種基本模式。注意,作為在本地儲存OFM及以分布式(全域)方式提取IFM的替代,亦有可能構建IFM遞送組構及OFM遞送組構來在本地提取IFM且同時以分布式(全域)方式寫入OFM結果。
一般而言,卷積或全連接層計算可分解成該五種塊元間縮減(inter-tile reduction)配置中的一者:(1)如圖4AD中所示,藉由將一個IFM片廣播至總共產生16個OFM片的所有16個塊元來饋送所述一個IFM片,(2)如圖4AE中所示,藉由將兩個IFM片中的每一者廣播至8個塊元來並行地饋送所述兩個IFM片,(3)如圖4AG中所示,藉由將四個IFM片中的每一者廣播至4個塊元來並行地饋送所述4個IFM片,(4)如圖4AJ中所示,藉由將所述四個IFM片中的每一者廣播至2個塊元來並行地饋送8個IFM片,(4)如圖4AL中所示,藉由將16個IFM片中的每一者廣播至1個塊元來並行地饋送所述16個IFM片。
由於將每一IFM片廣播至8個塊元且縮減2個塊元的輸出(藉由縮減組構111)以獲得完成的(或部分)結果,因此將情形(2)稱為「廣播8縮減2」情形。相似地,由於將每一IFM片廣播至4個塊元且縮減4個塊元的輸出,因此將情形(3)稱為「廣播4縮減4」情形,由於將每一IFM片廣播至2個塊元且縮減8個塊元的輸出,因此將情形(4)稱為「廣播2縮減8」情形,由於將每一IFM片廣播至僅一個塊元(即,無廣播),因此將情形(5)稱為「廣播1縮減16」情形,且由於將IFM片廣播至16個塊元且縮減1個塊元的輸出(即,無縮減),因此將情形(1)稱為「廣播16縮減1」情形。
更詳細地考量所述五種塊元間縮減配置以及在所述五種縮減配置情形中的每一者中,IFM遞送組構及OFM遞送組構究竟必須支援哪些連接模式。為更加清晰起見,以「塊元間」縮減來為塊元輸出的縮減(利用由縮減組構111提供的可重新配置加法器樹)命名,相對於以「塊元內」縮減來為利用塊元內部的加法器樹128A、128B的乘法器單元積的縮減命名。
可使用以下記法來辨識互連組構所可運用於的情形。記法Bm-Rn-是指將每一IFM片廣播至m個塊元且縮減n個塊元的輸出(藉由塊元間縮減組構111)以獲得結果的情形。由於有16個實體塊元可用,因此所述五個塊元間縮減情形包括圖4AD中所示的B16-R1、圖4AF中所示的B8-R2、圖4AH中所示的B4-R4、圖4AK中所示的B2-R8及圖4AM中所示的B1-R16。
塊元間縮減情形的最大數目等於LOG2(N),其中N是神經處理器中的實體塊元的數目。在具有N個塊元的神經處理器中可用的塊元間縮減配置是自配置BN-R1(m=N且n=1)開始構建,隨後對於每一下一配置將m除以二且將n乘以2,直至m達到1為止。舉例而言,若神經處理器具有僅8個塊元,則可有四個塊元間配置可用,包括B8-R1、B4-R2、B2-R4及B1-R8。具有32個塊元的神經處理器可提供多達六個塊元間配置,包括B32-R1、B16-R2、B8-R4、B4-R8、B2-R16及B1-R32。
由於計算可產生最終結果(例如,藉由應用激活函數)及部分結果,因此每一塊元間配置可要考量兩種OFM遞送路徑情形。將產生最終結果的情形稱為Bm-Rn-F且將產生部分結果的情形稱為Bm-Rn-P。
圖4AE、圖4AG、圖4AJ、圖4AL及圖4AN另外說明在所述五種縮減配置中的每一者中由縮減組構111相加於一起的塊元輸出。舉例而言,圖4AL示出B2-R8配置,8個塊元T0、T8、T4、T10、T2、T14及T6的輸出由一個加法器樹(圖4AK中的左加法器樹)求和,而8個塊元T7、T15、T3、T11、T13、T5、T9及T1的輸出則由另一個加法器樹(圖4AK中的右加法器樹)求和。
注意,縮減組構111的可配置加法器樹被設計成將彼此相鄰的塊元的輸出相加,而非將遠離彼此而散佈的塊元的輸出相加,因此使縮減組構的可配置加法器樹佈線緊湊且使樹本身為「分布式」。亦注意,與先前的實例不同,此處將所述16個塊元辨識為T0至15且已改變(相較於在映射實例中使用的記法)塊元辨識符的排序,以簡化下文的實例中的記法。
逐一地詳細檢查每一塊元間縮減配置。第一實例情形包括B16-R1操作。根據在全域地(自任何SRAM記憶庫組)提取IFM的同時盡可能在本地儲存OFM的原理,在此種配置中,所輸入的IFM可串流自任何SRAM記憶庫組S0..S15。如圖4BA中所示,SRAM記憶庫組S10將IFM片串流經由IFM遞送組構104供給至所有16個塊元T0至T15(如圖4AD中所示,將一個IFM片廣播至所有16個塊元)。舉例而言,當一個SRAM記憶庫組(例如,S10)耗盡IFM資料時,另一SRAM記憶庫組(例如,S11)可成為資料源並持續將IFM資料串流至塊元。該些步驟可持續進行,直至整個IFM張量已被串流輸入為止。在需要多個IFM通行的情形中,IFM張量串流序列可視需要進行重覆。
在B16-R1配置中,不存在塊元間縮減,進而使得每一塊元的加法器單元僅累加此塊元的結果,且OFM完成結果或OFM部分結果將如下所述被寫入附近的SRAM記憶庫組。因此,當結果為最終結果或部分結果串流時,B16-R1中的16個塊元中的每一者均會生成OFM片串流。具體而言,在部分情形中,當使用8位元IFM及8位元OFM來工作時,每一值可為高達32位元寬,或者假定使用16位元IFM及16位元OFM來工作,則每一值可為高達48位元寬,且如圖4BB中的箭頭106所示,每一部分結果將被儲存於本地。在此種情形中,每一SRAM記憶庫組充當儲存部分結果的目的地。此外,每一SRAM記憶庫組109自其本地塊元接收資料,例如,SRAM記憶庫組S8自塊元T8接收資料,S0自T0接收資料,等等。由於每一SRAM記憶庫組109具有4個SRAM記憶庫108,因此每一SRAM記憶庫組109一般可每時脈儲存16個4位元組部分結果。然而,當前的來源SRAM記憶庫組必須同時提取IFM,同時亦寫入部分結果,此在一些情形中可能超過SRAM記憶庫組的可用總頻寬。在類似此種的情形中,當卷積平面內核大小大於1×1時,IFM快取139可有助於減少自源SRAM記憶庫組進行的IFM讀取。此外,利用IFM權重循環及/或卷積平面內核大小大於1×1的運算會每若干個時脈生成一次輸出(相對於每一時脈生成一個結果),從而降低了對OFM頻寬的要求且避免了SRAM存取瓶頸。
當生成最終結果時,每一最終值將被量化為8位元值(或16位元值等)且所述值可被寫入SRAM記憶庫組[S0..S7]或[S8..S15]。圖4BC及圖4BD說明OFM遞送組構連接及配置選擇。由於OFM片寬度是IFM片寬度的一半(8個深度通道相對於16個深度通道),因此兩個垂直相鄰的塊元(「塊元行」)的輸出可經由短的本地連接發送至上部SRAM記憶庫組或下部SRAM記憶庫組。每一SRAM記憶庫組能夠處置具有16個通道的片(由於IFM片具有16個通道),因此每一SRAM記憶庫組亦可接受兩個OFM片。舉例而言,塊元T0及塊元T8(其一起構成塊元行)的輸出可被分組於一起,並經由本地短連接106發送至在下面緊靠T8而定位的任一SRAM記憶庫組S8(如圖4BC中所示)或者發送至在下面緊靠T0而定位的S0(如圖4BD中所示)。相似地,塊元行T4、T12的輸出可分組於一起並在本地發送至S4或S12,塊元行T10、T2的輸出在本地發送至S10或S2,塊元行T14、T6的輸出在本地發送至S14或S6,塊元行T7、T15的輸出在本地發送至S7或S15,塊元行T3、T11的輸出在本地發送至S3或S11,塊元行T13、T5輸出在本地發送至S13或S5,且塊元行T19、T1輸出在本地發送至S9或S1。
第二實例情形說明B8-R2操作。如圖4CA中所示,自上部SRAM記憶庫組109供應一個IFM片,其中「上部」被定義為包括S0、S4、S10、S14、S7、S3、S13及S9,且自下部SRAM記憶庫組109供應一個IFM片,其中「下部」被定義為包括S8、S12、S2、S6、S15、S11、S5及S1。更具體而言,上部SRAM記憶庫組109中的任一者可充當向所有上部塊元T0、T4、T10、T7、T3、T13及T9發送(廣播)IFM片的來源。舉例而言,IFM遞送組構可被配置用以自S10讀取IFM片並將此IFM片廣播至T0、T4、T10、T14、T7、T3、T13及T9。作為另一選擇,舉例而言,IFM遞送組構可被配置用以自S3讀取IFM片並將此IFM片廣播至T0、T4、T10、T14、T7、T3、T13及T9。
相似地,下部SRAM記憶庫組109中的任一者可充當向所有下部塊元T8、T12、T2、T6、T15、T11、T5及T1發送(廣播)IFM片的來源。舉例而言,IFM遞送組構可被配置用以自S11讀取IFM片並將此IFM片廣播至T8、T12、T2、T6、T15、T11、T5及T1。作為另一選擇,舉例而言,IFM遞送組構可被配置用以自S8讀取IFM片並將此IFM片廣播至T8、T12、T2、T6、T15、T11、T5及T1。
另外,參照圖4CA,可將SRAM記憶庫組配對以發送IFM片,進而使得在一個(時脈)周期中自以下對中的一者接收資料:[S0,S1] [S2,S3] [S4,S5] [S6,S7] [S8,S9] [S10,S11] [S12,S13] [S14,S15]。舉例而言,在圖4CA中,IFM片來源於SRAM記憶庫組的[S10,S11]對。
圖4CB示出饋送兩個IFM片,每一IFM片被廣播至8個塊元且兩個塊元的輸出以行的方式縮減。舉例而言,在圖4AF之後,T0的輸出與T8的輸出縮減而生成一個結果,T4輸出與T12輸出縮減而生成另一結果,T10輸出與T2輸出縮減而生成又一結果,T14輸出與T6輸出縮減而生成又一結果,T7輸出與T15輸出縮減而生成又一結果,T3輸出與T11輸出縮減而生成又一結果,T13輸出與T5輸出縮減而生成又一結果且T9輸出與T1輸出縮減而生成又一結果。
在部分結果的情形中,所述八個縮減結果可儲存於所述兩組SRAM記憶庫組[S0..S7]及[S8..15]中的一者中。舉例而言,圖4CB示出儲存於SRAM記憶庫組[S0..S7]中的所述八個部分結果。在最終結果的情形中,OFM遞送組構106可合併儲存於包括[S0..S3]、[S4..S7]、[S8..S11]及[S12..S15]在內的所述四個SRAM記憶庫組中的一者中的兩個鄰近塊元行的結果。舉例而言,圖4CC示出儲存於SRAM記憶庫組[S4..S7]中的所述八個最終結果。
第三實例情形說明B4-R4操作。如圖4DA中所示,自平面圖(floorplan)的每四分之一供應一個IFM片。參照圖4DB,所述操作可涉及廣播四個IFM片並在縮減之後生成四個結果。IFM遞送組構及OFM遞送組構可設法在一個(時脈)周期中發送輸入及接收輸出,只要IFM片來自包括[S0..S3]、[S4..S7]、[S8..S11]及[S12..S15]在內的四個群組中的一者即可,且若結果是部分結果,則如圖4DB中所示只要輸出被寫入四個群組[S0..S3]、[S4..S7]、[S8..S11]及[S12..S15]中的一者即可,且若結果是最終結果,則如圖4DC中所示只要輸出被寫入八個群組[S0 S1]、[S2 S3]、[S4 S5]、[S6 S7]、[S8 S9]、[S10 S11]、[S12 S13]及[S14 S15]中的一者即可。
參照圖4AJ,注意每一縮減群組407生成一個輸出結果。兩個結果將被儲存於頂部部分中,且兩個結果將被儲存於底部部分中。由於含有最終結果的OFM片的大小為8個位元組,因此OFM遞送組構可合併兩個鄰近行的結果。圖4AH亦說明正在廣播所述四個IFM片以在縮減之後形成四個輸出結果。
第四實例情形說明B2-R8操作。如圖4EA中所示,自平面圖的每八分之一供應一個IFM片。參照圖4EB,所述操作可涉及廣播八個IFM片以在縮減之後生成兩個結果。
IFM遞送組構及OFM遞送組構可設法在一個(時脈)周期中發送輸入及接收輸出,只要輸入來自包括[S0..S7]及[S8..S15]在內的兩個群組中的一者即可,且若結果是部分結果,則只要輸出被寫入八個群組[S0 S1]、[S2 S3]、[S4 S5]、[S6 S7]、[S8 S9]、[S10 S11]、[S12 S13]及[S14 S15]中的一者即可,且若結果是最終結果,則只要輸出被寫入任一SRAM記憶庫組即可。
對於第四實例情形,圖4EA示出正在廣播源資料,圖4EB示出正在形成部分結果,且圖4EC示出正在形成最終結果。參照圖4AJ,每一區段407在縮減之後生成一個結果。所述兩個結果中的一者可被儲存於頂部部分中,而另一結果則可被儲存於底部部分中。由於含有最終結果的OFM片的大小為8個位元組,因此OFM遞送組構可合併兩個鄰近行的結果。圖4AK亦說明正在廣播所述四個IFM片以在縮減之後形成兩個輸出結果。
第五實例情形說明B1-R16操作。如圖4FA中所示,與廣播一個IFM片對應,自每一SRAM記憶庫組供應一個IFM片。參照圖4FB,所述操作可涉及縮減所有16個塊元的輸出以生成一個結果,在所述結果是部分結果的情形與所述結果是最終結果的情形二者中,其均可被儲存於任一SRAM記憶庫組中。
由於含有最終結果的OFM片的大小為8個位元組,因此OFM遞送組構可合併兩個鄰近行的結果。圖4AM亦說明饋入16個IFM片以在縮減之後形成單一輸出結果。
對於當前運算及後續運算的縮減配置的所有排列方案,IFM遞送組構及OFM遞送組構的設計方式(包括以上所說明的一種方式)可使一個運算始終有可能藉由以使後續運算(消耗前一運算的結果)能夠提取該些結果的方式進行計算並儲存至SRAM。舉例而言,當前運算可使用B4-R4,並在與B4-R4相關聯的OFM遞送組構連接性選擇之後將其結果儲存至SRAM記憶庫組。所述下一(或下一)運算可與相關聯IFM遞送組構連接性選擇一起使用B2-R8縮減配置,同時能夠成功地提取由前一B4-R4運算計算及儲存的資料。
圖4G示出如早前所述支援所有縮減配置的所有IFM遞送組構連接性選項的IFM遞送組構104的一種可能實施方案。所述組構由四個雙向多點匯流排(two-way multi-drop bus)組成,所述雙向匯流排中的兩者放置於上部SRAM記憶庫組與上部塊元之間,且另兩個雙向匯流排放置於下部SRAM記憶庫組與下部塊元之間。匯流排藉由暫存器411而以循環的方式連接,進而使得來自上部匯流排的資料可流動至下部匯流排並返回。注意,為闡釋清晰起見,在圖4G中省略可能存在於IFM遞送組構104中的附加管線暫存器(pipeline register)。
圖4H示出如早前所述支援所有縮減配置的所有OFM遞送組構連接性選項的OFM遞送組構106的一種可能實施方案。所述組構由四個雙向16位元組寬多點匯流排(two-way 16-byte-wide multi-drop bus)組成,以支援縮減配置B2-R8及B1-R16。注意,為闡釋清晰起見,在圖4H中省略可能存在於OFM遞送組構106中的管線暫存器。
縮減組構111對除R1(當不存在塊元間縮減時)以外的所有縮減配置(例如B8-R2、B4-R4、B2-R8及B1-R16)實行「塊元間」縮減(相對於由加法器樹128A及加法器樹128B達成的塊元內縮減)。縮減組構111包括由圖5A中所示的縮減與累加(reduce-and-accumulate,RAA)節點520構成的可重新配置加法器樹。每一RAA節點對部分縮減的結果(即,應用激活函數之前的線性結果)進行運算。RAA自此RAA節點所在的同一塊元行ARU 167接收輸入或者自其他RAA節點接收輸入。RAA將輸出發送至加法器樹中更高層次的RAA節點或者發送回ARU。隨後,若結果是最終結果,則ARU應用激活函數,並將最終結果轉發至OFM遞送組構。作為另一選擇,若結果是部分結果,則ARU在繞過激活函數的同時將部分結果轉發至OFM遞送組構。
圖5B說明被配置用於R16配置的縮減組構111。此處,ARU模組167生成部分縮減結果(來自塊元內加法器樹128A及塊元內加法器樹128B),如圖1X中所示經由「至縮減組構」輸出將該些部分縮減結果串流輸出至第一層階RAA節點502。RAA節點502成對地將16個ARU部分縮減資料串流縮減為8個部分縮減資料串流。RAA第二層階節點504進一步將由RAA節點502成對產生的所述8個串流縮減為4個部分縮減資料串流。第三層階RAA節點及第四層階RAA節點完成縮減過程,以產生一個完全縮減資料串流,此資料串流被轉發至塊元T14的ARU以應用激活函數(當生成最終結果時)並被輸出至OFM遞送組構。注意,T14實體上位於樹根RAA節點508附近且對應於圖4FB中的塊元T14的ARU 167。
圖5C說明被配置用於R8配置的縮減組構111。與R16配置不同,R8配置包括兩個加法器樹(而非一個),每一加法器樹具有三個層階(而非四個)。第一加法器樹對來自塊元T0、T8、T4、T12、T10、T2、T14及T6的ARU的部分縮減資料進行縮減,並將完全縮減結果轉發至塊元T12的ARU以完成資料返回。第二加法器樹對來自塊元T7、T15、T2、T11、T13、T5、T9及T1的部分縮減資料進行縮減,並將完全縮減結果轉發至塊元T13的ARU以完成資料返回。注意,塊元T12及T13各自實體上位於相應的樹根RAA節點506附近且分別對應於圖4FB中的塊元T12及T3的ARU 167。
圖5D說明具有四個加法器樹的配置R4,每一加法器樹對來自四個塊元的部分縮減輸出進行縮減。圖4DB說明與所述四個樹根節點相關聯的ARU的實體位置。
圖5E說明具有八個加法器樹的配置R2,每一加法器樹對來自兩個塊元的部分縮減輸出進行縮減。圖4CB說明與所述八個樹根節點相關聯的ARU的實體位置。
最後,圖5F說明配置R1,其不具有加法器樹,且塊元ARU將結果直接輸出至OFM遞送組構,而不需要縮減組構111。圖4BB示出在此種情形中ARU的實體位置。注意,圖4BB、圖4BC、圖4BD、圖4CB、圖4CC、圖4DB、圖4DC、圖4EB、圖4EC及圖4DB中的ARU 167內部的數字指示如圖5B至圖5F中所示的RAA樹節點層階,其中層階0對應於配置R1(不利用縮減組構)。配置R1是藉由以下方式實施:如圖1X中所示,ARU中的ARU多工器174將資料自累加器130A(或130B)直接轉發至激活函數及部分路徑(其以位元範圍選擇單元187開始),從而繞過縮減組構。注意,為清晰地進行一般闡釋,未示出在稀疏激活支援的情形中恰當繞過縮減組構所需的一些輔助邏輯。
圖5G說明包括RAA節點502、504、506、508的縮減組構111。再次注意,每一RAA節點實體上位於恰好一個塊元附近。每一RAA節點502自節點502所在的塊元行中的兩個塊元接收輸入。每塊元行存在恰好一個RAA節點502。RAA節點508自節點506接收其輸入,節點506又自節點504接收其輸入,節點504則又自節點502接收輸入。注意,由於存在15個樹節點,而實體塊元的數目為16,因此塊元T12不具有與其相關聯的RAA節點。
如圖5A中所示,每一RAA節點具有兩種功能,所述兩種功能包括利用加法器512對兩個輸入A與B進行縮減,以及利用累加器518及加法器514累加經縮減結果。多工器516使得能夠在累加開始時將來自加法器512的經縮減結果直接加載至累加器518中以例如開始IFM權重循環。多工器516亦使得能夠在例如IFM權重循環隨時間繼續進行時累加經縮減結果。
以壓縮格式儲存權重可有助於降低儲存權重所需的SRAM(及晶片外雙倍資料速率(off-chip DDR))儲存量,降低與提取權重相關聯的SRAM(及晶片外DDR)功率,並且使權重加載加速(尤其是在全連接層計算期間)。在一些實施例中,可使用閒置周期來加載乘法器單元權重。此外,相對於示出每MR行僅一個權重加載匯流排的圖1K,在一些實施例中,可使用多個垂直權重加載匯流排101來使權重加載加速。
更具體而言,如先前在圖4AB中所示,權重儲存於每一塊元本地的四個SRAM記憶庫108中,所述四個SRAM記憶庫108能夠並行地讀取所有4個記憶庫。每一SRAM記憶庫提取16個8位元權重。由於每一塊元具有8個MR行,因此在權重未被壓縮的情形中,每激活通路加載一個8位元權重需要(每塊元8個MR行) / (每塊元4個本地SRAM記憶庫) = 2個時脈。每一塊元亦每塊元含有一權重解壓縮單元138,權重解壓縮單元138可用於將FC及卷積權重解壓縮。舉例而言,每一乘法器單元可具有18個權重,且加載所有MU權重可需要(每MU 18個權重) * (每權重加載2個) = 36個時鐘循環。不使用所有18個權重的較小內核可更快地加載。
與FC計算同時進行的權重串流可用於提高全連接計算的通量,以便在大型FC計算期間保持高的乘法器利用率。如早前所提及,FC計算不重新使用權重。因此,由此在FC計算期間可有必要快速地對權重進行串流。具體而言,IFM權重循環為1的FC計算將需要每時鐘向每一MU提供一個權重,以保持所有乘法器得到充分利用。IFM權重循環為2需要每兩個時鐘向每一MU提供一個權重,以保持所有乘法器得到充分利用。更一般而言,IFM權重循環為N需要每N時鐘向每一MU提供一個權重,以保持所有乘法器得到充分利用。
根據各種深度學習研究出版物,全連接層權重可被壓縮,有時可被壓縮2倍或大於2倍。與每兩個時鐘向每一MU中加載一個未壓縮權重相反,在此種情形中,可每一個時鐘向每一MU中加載一個解壓縮權重。
然而,另外,IFM資料亦必須與權重一起自SRAM提取,從而減小可用於提取權重的SRAM帶寬。反過來,自SRAM提取的IFM資料量相依於映射縮減配置。相較於較小的縮減配置(例如,R1),大的縮減數目(例如,R16)需要提取具有更多通道的IFM。
由於所有64個SRAM記憶庫可能忙於提取FC權重,因此可能無法同時自SRAM讀取IFM。為提高乘法器利用率,IFM可疊接地跨所有64個記憶庫進行儲存。在一些實施例中,為提取IFM,權重讀取停止一個時鐘循環,且所有64個記憶庫在靠近SRAM輸出的1深度式快取暫存器中進行一次IFM讀取。接著,IFM自經快取的64個16位元組行進行串流。更具體而言,並行地自所有64個記憶庫進行的一次IFM提取可一次提取足夠的資料以等於R = (64個SRAM記憶庫) * (廣播配置數目B) / (實體圖塊的數目)數目的IFM讀取。因此,如圖6中所示,對於一些實施例,可隨廣播配置數目B的變化而根據R / (1 + R)來計算全連接層計算的最大乘法器利用率。
如早前所提及,全域控件140以及本地控制單元142、144可具有各種配置暫存器。在一些實施例中,該些配置暫存器中的一些暫存器的內容能夠即時地切換,以例如在神經處理器自一種操作轉變為另一操作時或當一個SRAM記憶庫組耗盡資料且IFM遞送組構必須即時(無延遲)地切換以自另一SRAM記憶庫組串流輸入IFM資料時立即改變神經處理器配置。根據眾所習知的設計慣例,此種即時重新配置可藉由對配置暫存器進行雙倍緩衝來達成,且藉由在所述兩個緩衝器之間進行切換來使新的配置生效。如圖1A中所示,中央控件110可經由AXI匯流排自CPU接收配置資料,將此配置資料傳遞至公用匯流排112,公用匯流排112又可將配置值自CPU傳輸及加載至控制邏輯的配置暫存器(例如140、142及144)以及各種其他暫存器(包括ARU偏差暫存器195、比例縮放暫存器191、激活函數197配置暫存器,等等)。為視需要在不同時間協調涉及大量雙倍緩衝暫存器切換的即時配置變化,公用匯流排112可不僅加載配置暫存器值,而且亦加載雙倍緩衝暫存器必須將其配置切換為生效的時間(時鐘計數)。
圖1A亦說明SRAM記憶庫組109,每一SRAM記憶庫組109具有AXI從介面(slave interface),從而能夠使CPU寫入IFM及權重張量並回讀OFM結果。由於SRAM記憶庫組服務於來自IFM遞送組構及OFM遞送組構的I/O請求以及本地權重加載連接,因此可對AXI介面上的CPU I/O請求作出仲裁並指派較低的優先級,以使得神經網路計算能夠在CPU等待結果的同時無延遲地繼續進行。
本文中所使用的用語「多工器」及「解多工器」可互換使用;每一用語均意指一種在一側(「多埠」側)上具有多個資料終端(例如,資料輸入或資料輸出)且在另一側(「單埠」側)上具有單一資料終端(例如,資料輸出或資料輸入)的可切換裝置,所述裝置被配置成在所述一側(根據在所述裝置的控制輸入處接收的控制訊號而選擇)上的多個資料終端連接至另一側上的單一資料終端。
本文中所使用的用語「處理單元」旨在包括用於處理資料或數位訊號的硬體、韌體及軟體的任何組合。處理單元硬體可包括例如應用專用積體電路(ASIC)、通用或專用中央處理單元(CPU)、數位訊號處理器(DSP)、圖形處理單元(GPU)及例如現場可程式化閘陣列(field programmable gate array,FPGA)等可程式化邏輯裝置。在處理單元中,本文中所使用的每一功能均由被配置成(即,被硬佈線成)實行所述功能的硬體或由被配置成執行非暫時性儲存媒體中所儲存的指令的更通用硬體(例如CPU)實行。處理單元可製作於單一印刷電路板(printed circuit board,PCB)上或分佈於若干互連的PCB之上。處理單元可含有其他處理單元;舉例而言,處理單元可包括在PCB上互連的兩個處理單元,即FPGA與CPU。
將理解,儘管本文中可能使用用語「第一(first)」、「第二(second)」、「第三(third)」等來闡述各種元件、組件、區、層及/或區段,然而該些元件、組件、區、層及/或區段不應受限於該些用語。該些用語僅用於區分各個元件、組件、區、層或區段。因此,在不背離本發明概念的精神及範圍的條件下,本文中所論述的第一元件、組件、區、層或區段可被稱為第二元件、組件、區、層或區段。
為易於說明,本文中可使用例如「在……之下(beneath)」、「在……下面(below)」、「下方的(lower)」、「在……以下(under)」、「在……之上(above)」、「上方的(upper)」等空間相對性用語來闡述圖中所示一個元件或特徵與另一(其他)元件或特徵的關係。將理解,此種空間相對性用語旨在除圖中所繪示的定向外亦囊括裝置在使用或操作中的不同定向。舉例而言,若圖中的裝置被翻轉,則被闡述為位於其他元件或特徵「下面」或「之下」或「以下」的元件此時將被定向為位於所述其他元件或特徵「之上」。因此,實例性用語「在……下面」及「在……以下」可囊括上方及下方兩種定向。所述裝置亦可具有其他定向(例如,旋轉90度或處於其他定向),且本文中所使用的空間相對性描述語應相應地進行解釋。另外,亦將理解,當一層被稱為位於兩個層「之間」時,所述層可為所述兩個層之間僅有的層,抑或亦可存在一或多個中間層。
本文中所使用的術語僅用於闡述特定實施例且並非旨在限制本發明概念。本文中所使用的用語「實質上」、「約」及相似用語是作為近似值用語來使用、而並非作為程度用語來使用,並且旨在慮及此項技術中具有通常知識者將知的量測值或計算值的固有偏差。
除非上下文中清楚地另外指明,否則本文中所使用的單數形式「一(a及an)」旨在亦包括複數形式。更將理解,當在本說明書中使用用語「包括(comprises及/或comprising)」時,是指明所陳述特徵、整數、步驟、操作、元件及/或組件的存在,但不排除一或多個其他特徵、整數、步驟、操作、元件、組件及/或其群組的存在或添加。本文中所使用的用語「及/或(and/or)」包括相關所列項其中一或多個項的任意及所有組合。例如「……中的至少一者(at least one of)」等表達當出現在一系列元件之前時,是修飾整個系列的元件而並非修飾所述系列中的各別元件。此外,當闡述本發明概念的實施例時使用「可(may)」是指「本揭露的一或多個實施例」。此外,用語「示例性(exemplary)」旨在指實例或說明。本文中所使用的用語「使用(use)」、「正使用(using)」及「被使用(used)」可視為分別與用語「利用(utilize)」、「正利用(utilizing)」及「被利用(utilized)」同義。
將理解,當稱一元件或層位於另一元件或層「上(on)」、「連接至(connected to)」、「耦合至(coupled to)」或「相鄰於(adjacent to)」另一元件或層時,所述元件可直接位於所述另一元件或層上、直接連接至、直接耦合至或直接相鄰於所述另一元件或層,抑或可存在一或多個中間元件或層。相比之下,當稱一元件或層「直接(directly)」位於另一元件或層「上(on)」,「直接連接至(directly connected to)」、「直接耦合至(directly coupled to)」或「緊鄰於(immediately adjacent to)」另一元件或層時,則不存在中間元件或層。
本文中所述的任意數值範圍旨在包括所述範圍內所包含的具有相同數值精度的所有子範圍。舉例而言,範圍「1.0至10.0」旨在包括介於所述最小值1.0與所述最大值10.0之間(且包括1.0及10.0)的所有子範圍,即,具有等於或大於1.0的最小值及等於或小於10.0的最大值(例如(舉例而言,2.4至7.6))。本文中所述任意最大數值限制旨在包括其中所包含的所有較低的數值限制,且本說明書中所述的任意最小數值限制旨在包括其中所包含的所有較高的數值限制。
一些實施例具有以下第一組編號條款的特徵。
1. 一種處理器,包括:
第一圖塊,
第二圖塊,
記憶體,以及
匯流排,
所述匯流排連接至:
所述記憶體,
所述第一圖塊,以及
所述第二圖塊,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述第一塊元被配置用以實行激活陣列與權重的內核的卷積,所述實行所述卷積依次包括:
形成所述內核與所述激活陣列的第一子陣列的張量積;
形成所述內核與所述激活陣列的第二子陣列的張量積,所述第二子陣列在第一方向上相對於所述第一子陣列偏移n個陣列元素,n是正整數;以及
形成所述內核與所述激活陣列的第三子陣列的張量積,所述第三子陣列在垂直於所述第一方向的第二方向上相對於所述第二子陣列偏移一個陣列元素。
2. 如條款1所述的處理器,其中所述實行所述卷積更依次包括在所述形成所述內核與所述第三子陣列的所述張量積之後:
形成所述內核與所述激活陣列的第四子陣列的張量積,所述第四子陣列在與所述第一方向相反的第三方向上相對於所述第三子陣列偏移m個陣列元素,m是正整數,以及
形成所述內核與所述激活陣列的第五子陣列的張量積,所述第五子陣列在所述第二方向上相對於所述第四子陣列偏移一個陣列元素。
3. 如條款2所述的處理器,其中m等於n。
4. 如條款3所述的處理器,其中n等於1。
5. 如條款1所述的處理器,其中所述實行所述卷積更依次包括在所述形成所述內核與所述第一子陣列的所述積之後:
形成所述內核與所述激活陣列的n-1個相應子陣列的n-1個積,所述n-1個積中的第k個積中的子陣列在所述第一方向上相對於所述第一子陣列偏移k+1個陣列元素。
6. 如條款5所述的處理器,更包括連接至所述激活緩衝器且被配置成向所述激活緩衝器供應激活的快取,所述快取具有足以儲存H + (H+n)*(W-1) – 1個激活的大小,其中:
H是所述內核在所述第一方向上的大小,且
W是所述內核在所述第二方向上的大小。
7. 如條款1所述的處理器,其中:
所述激活緩衝器被配置成包括:
第一隊列,連接至所述第一乘法器,以及
第二隊列,連接至所述第二乘法器,
所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,
所述第一塊元更被配置成:
在第一狀態中:
在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及
在第二狀態中:
在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
8. 如條款7所述的處理器,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
9. 如條款7所述的處理器,更包括:
第一加法器,被配置成在所述第一狀態中:
連接至
所述第一乘法器的輸出,以及
所述第二乘法器的輸出,以及
將以下相加:
自所述第一乘法器的所述輸出接收的積與
自所述第二乘法器的所述輸出接收的積。
10. 如條款9所述的處理器,更包括第二加法器,所述第二加法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
11. 一種利用處理電路進行計算的方法,所述處理電路包括:
第一塊元,
第二塊元,
記憶體,以及
匯流排,
所述匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述方法包括實行激活陣列與權重的內核的卷積,所述實行所述卷積依次包括:
形成所述內核與所述激活陣列的第一子陣列的張量積;
形成所述內核與所述激活陣列的第二子陣列的張量積,所述第二子陣列在第一方向上相對於所述第一子陣列偏移n個陣列元素,n是正整數;以及
形成所述內核與所述激活陣列的第三子陣列的張量積,所述第三子陣列在垂直於所述第一方向的第二方向上相對於所述第二子陣列偏移一個陣列元素。
12. 如條款11所述的方法,其中所述實行所述卷積更依次包括在所述形成所述內核與所述第三子陣列的所述張量積之後:
形成所述內核與所述激活陣列的第四子陣列的張量積,所述第四子陣列在與所述第一方向相反的第三方向上相對於所述第三子陣列偏移m個陣列元素,m是正整數,以及
形成所述內核與所述激活陣列的第五子陣列的張量積,所述第五子陣列在所述第二方向上相對於所述第四子陣列偏移一個陣列元素。
13. 如條款12所述的方法,其中m等於n。
14. 如條款13所述的方法,其中n等於1。
15. 如條款11所述的方法,其中所述實行所述卷積更依次包括在所述形成所述內核與所述第一子陣列的所述積之後:
形成所述內核與所述激活陣列的n-1個相應子陣列的n-1個積,所述n-1個積中的第k個積中的子陣列在所述第一方向上相對於所述第一子陣列偏移k+1個陣列元素。
16. 如條款15所述的方法,其中所述處理電路更包括連接至所述激活緩衝器且被配置成向所述激活緩衝器供應激活的快取,所述快取具有足以儲存H + (H+n)*(W-1) – 1個激活的大小,其中:
H是所述內核在所述第一方向上的大小,且
W是所述內核在所述第二方向上的大小。
17. 如條款11所述的方法,其中:
所述激活緩衝器被配置成包括:
第一隊列,連接至所述第一乘法器,以及
第二隊列,連接至所述第二乘法器,
所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,
所述第一塊元更被配置成:
在第一狀態中:
在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及
在第二狀態中:
在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
18. 如條款17所述的方法,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
19. 如條款17所述的方法,其中所述處理電路更包括第一加法器,
所述方法更包括在所述第一狀態中:
將所述第一加法器連接至:
所述第一乘法器的輸出,以及
所述第二乘法器的輸出,以及
由所述第一加法器將以下相加:
自所述第一乘法器的所述輸出接收的積與
自所述第二乘法器的所述輸出接收的積。
20. 一種利用處理工具進行計算的方法,所述處理工具包括:
第一塊元,
第二塊元,
記憶體,以及
匯流排,
所述匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述方法包括實行激活陣列與權重的內核的卷積,所述實行所述卷積依次包括:
形成所述內核與所述激活陣列的第一子陣列的張量積;
形成所述內核與所述激活陣列的第二子陣列的張量積,所述第二子陣列在第一方向上相對於所述第一子陣列偏移n個陣列元素,n是正整數;以及
形成所述內核與所述激活陣列的第三子陣列的張量積,所述第三子陣列在垂直於所述第一方向的第二方向上相對於所述第二子陣列偏移一個陣列元素。
一些實施例具有以下第二組編號條款的特徵。
1. 一種處理器,包括:
第一塊元,
第二塊元,
記憶體,以及
匯流排,
所述匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述處理器被配置用以實行激活陣列與權重的第一內核的第一卷積,所述實行所述第一卷積包括:
將所述激活陣列的第一子陣列廣播至:
所述第一塊元,以及
所述第二塊元;
形成第一張量積,所述第一張量積是所述權重的第一內核的第一子陣列與所述激活陣列的所述第一子陣列的張量積;
將所述第一張量積儲存於所述記憶體中;
將所述激活陣列的第二子陣列廣播至:
所述第一塊元,以及
所述第二塊元;
形成第二張量積,所述第二張量積是所述權重的第一內核的第二子陣列與所述激活陣列的所述第二子陣列的張量積;以及
將所述第一張量積與所述第二張量積相加。
2. 如條款1所述的處理器,其中所述第一塊元更包括權重解壓縮單元,所述權重解壓縮單元被配置成:
將以壓縮形式對多個權重進行編碼的資料字元解壓縮,以抽取第一權重及第二權重;
將所述第一權重饋送至所述第一權重暫存器;以及
將所述第二權重饋送至所述第二權重暫存器。
3. 如條款1所述的處理器,其中所述第一塊元更被配置用以實行激活陣列與權重的第二內核的第二卷積,
所述實行所述第二卷積依次包括:
形成所述第二內核的第一部分與所述激活陣列的第一子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的權重;
形成所述第二內核的第二部分與所述激活陣列的所述第一子陣列的張量積,所述第二內核的所述第二部分包括儲存於所述第二權重暫存器中的權重;以及
形成所述第二內核的所述第一部分與所述激活陣列的第二子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的所述權重。
4. 如條款1所述的處理器,其中:
所述激活緩衝器被配置成包括:
第一隊列,連接至所述第一乘法器,以及
第二隊列,連接至所述第二乘法器,
所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,
所述第一塊元更被配置成:
在第一狀態中:
在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及
在第二狀態中:
在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
5. 如條款4所述的處理器,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
6. 如條款4所述的處理器,更包括:
第一加法器,被配置成在所述第一狀態中:
連接至
所述第一乘法器的輸出,以及
所述第二乘法器的輸出,以及
將以下相加:
自所述第一乘法器的所述輸出接收的積與
自所述第二乘法器的所述輸出接收的積。
7. 如條款6所述的處理器,更包括第二加法器,所述第二加法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
8. 如條款7所述的處理器,更包括:
第一累加器,連接至所述第一加法器,以及
第二累加器,連接至所述第二加法器,
所述第一累加器包括暫存器且被配置成在所述第一狀態中:
將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值,以及
將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
9. 如條款8所述的處理器,其中所述第二累加器包括暫存器且被配置成在所述第二狀態中,
將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值,以及
將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
10. 如條款8所述的處理器,更包括激活零跳過控制電路,所述激活零跳過控制電路被配置成:
判斷所述第一隊列的所述輸出暫存器是否含有零,以及
因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
11. 一種利用處理電路進行計算的方法,所述處理電路包括:
第一塊元,
第二塊元,
記憶體,以及
匯流排,
所述匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述方法包括實行激活陣列與權重的第一內核的第一卷積,所述實行所述第一卷積包括:
將所述激活陣列的第一子陣列廣播至:
所述第一塊元,以及
所述第二塊元;
形成第一張量積,所述第一張量積是所述權重的第一內核的第一子陣列與所述激活陣列的所述第一子陣列的張量積;
將所述第一張量積儲存於所述記憶體中;
將所述激活陣列的第二子陣列廣播至:
所述第一塊元,以及
所述第二塊元;
形成第二張量積,所述第二張量積是所述權重的第一內核的第二子陣列與所述激活陣列的所述第二子陣列的張量積;以及
將所述第一張量積與所述第二張量積相加。
12. 如條款11所述的方法,其中所述第一塊元更包括權重解壓縮單元,且所述方法更包括:
由所述權重解壓縮單元將以壓縮形式對多個權重進行編碼的資料字元解壓縮,以抽取第一權重及第二權重;
將所述第一權重饋送至所述第一權重暫存器;以及
將所述第二權重饋送至所述第二權重暫存器。
13. 如條款11所述的方法,其中所述方法更包括實行激活陣列與權重的第二內核的第二卷積,
所述實行所述第二卷積依次包括:
形成所述第二內核的第一部分與所述激活陣列的第一子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的權重;
形成所述第二內核的第二部分與所述激活陣列的所述第一子陣列的張量積,所述第二內核的所述第二部分包括儲存於所述第二權重暫存器中的權重;以及
形成所述第二內核的所述第一部分與所述激活陣列的第二子陣列的張量積,所述第二內核的所述第一部分包括儲存於所述第一權重暫存器中的所述權重。
14. 如條款11所述的方法,其中:
所述激活緩衝器被配置成包括:
第一隊列,連接至所述第一乘法器,以及
第二隊列,連接至所述第二乘法器,
所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,
所述第一塊元更被配置成:
在第一狀態中:
在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及
在第二狀態中:
在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
15. 如條款14所述的方法,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
16. 如條款14所述的方法,其中所述處理電路更包括第一加法器,
所述方法更包括在所述第一狀態中:
將所述第一加法器連接至:
所述第一乘法器的輸出,以及
所述第二乘法器的輸出,以及
由所述第一加法器將以下相加:
自所述第一乘法器的所述輸出接收的積與
自所述第二乘法器的所述輸出接收的積。
17. 如條款16所述的方法,其中所述處理電路更包括第二加法器,
所述方法更包括在所述第二狀態中將所述第二加法器連接至所述第一乘法器的所述輸出。
18. 如條款17所述的方法,其中所述處理電路更包括:
第一累加器,連接至所述第一加法器,以及
第二累加器,連接至所述第二加法器,
所述第一累加器包括暫存器,
所述方法更包括在所述第一狀態中:
由所述第一累加器將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值,以及
由所述第一累加器將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
19. 如條款18所述的方法,其中所述第二累加器包括暫存器,且所述方法更包括在所述第二狀態中,
由所述第二累加器將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值,以及
由所述第二累加器將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
20. 一種利用處理工具進行計算的方法,所述處理工具包括:
第一塊元,
第二塊元,
記憶體,以及
匯流排,
所述匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述方法包括實行激活陣列與權重的第一內核的第一卷積,所述實行所述第一卷積包括:
將所述激活陣列的第一子陣列廣播至:
所述第一塊元,以及
所述第二塊元;
形成第一張量積,所述第一張量積是所述權重的第一內核的第一子陣列與所述激活陣列的所述第一子陣列的張量積;
將所述第一張量積儲存於所述記憶體中;
將所述激活陣列的第二子陣列廣播至:
所述第一塊元,以及
所述第二塊元;
形成第二張量積,所述第二張量積是所述權重的第一內核的第二子陣列與所述激活陣列的所述第二子陣列的張量積;以及
將所述第一張量積與所述第二張量積相加。
一些實施例具有以下第三組編號條款的特徵。
1. 一種處理器,包括:
第一塊元,
第二塊元,
記憶體,
輸入匯流排,以及
輸出匯流排,
所述輸入匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述第一塊元被配置用以實行激活陣列與權重的內核的第一卷積;
所述記憶體包括:
第一記憶庫組,以及
第二記憶庫組;
所述輸入匯流排包括:
第一分段匯流排,用於在第一方向上傳播資料,以及
第二分段匯流排,用於在與所述第一方向相反的第二方向上傳播資料;
所述第一分段匯流排包括:
第一切換區塊,以及
第二切換區塊;
所述第一切換區塊連接至:
所述第一塊元,以及
所述第一記憶庫組;
所述第二切換區塊連接至:
所述第二塊元,以及
所述第二記憶庫組;
所述第二分段匯流排包括:
第三切換區塊,以及
第四切換區塊;
所述第三切換區塊連接至:
所述第一塊元,以及
所述第一記憶庫組;
所述第四切換區塊連接至:
所述第二塊元,以及
所述第二記憶庫組;
所述第一切換區塊的輸入連接至所述第二切換區塊的輸出;並且
所述第三切換區塊的輸出連接至所述第四切換區塊的輸入。
2. 如條款1所述的處理器,其中所述第一分段匯流排被配置成在第一匯流排狀態中,
藉由所述第一切換區塊將所述第一記憶庫組連接至所述第一塊元,以及
藉由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
3. 如條款2所述的處理器,其中
所述第一分段匯流排更被配置成在第二匯流排狀態中,
藉由所述第一切換區塊且藉由所述第二切換區塊將所述第二記憶庫組連接至所述第一塊元,以及
藉由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
4. 如條款1所述的處理器,其中:
所述激活緩衝器被配置成包括:
第一隊列,連接至所述第一乘法器,以及
第二隊列,連接至所述第二乘法器,
所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,
所述第一塊元更被配置成:
在第一狀態中:
在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及
在第二狀態中:
在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
5. 如條款4所述的處理器,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
6. 如條款4所述的處理器,更包括第一加法器,所述第一加法器被配置成在所述第一狀態中:
連接至:
所述第一乘法器的輸出,以及
所述第二乘法器的輸出,以及
將以下相加:
自所述第一乘法器的所述輸出接收的積與
自所述第二乘法器的所述輸出接收的積。
7. 如條款6所述的處理器,更包括第二加法器,所述第二加法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
8. 如條款7所述的處理器,更包括:
第一累加器,連接至所述第一加法器,以及
第二累加器,連接至所述第二加法器,
所述第一累加器包括暫存器且被配置成在所述第一狀態中:
將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值,以及
將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
9. 如條款8所述的處理器,其中所述第二累加器包括暫存器且被配置成在所述第二狀態中,
將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值,以及
將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
10. 如條款8所述的處理器,更包括激活零跳過控制電路,所述激活零跳過控制電路被配置成:
判斷所述第一隊列的所述輸出暫存器是否含有零,以及
因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
11. 如條款10所述的處理器,更包括多工器,所述多工器具有:
輸入,在所述多工器的單埠側處連接至所述第一乘法器,
第一輸出,在所述多工器的多埠側處連接至所述第一加法器,以及
第二輸出,在所述多工器的所述多埠側處連接至所述第二加法器。
12. 一種利用處理電路進行計算的方法,所述處理電路包括:
第一塊元,
第二塊元,
記憶體,
輸入匯流排,以及
輸出匯流排,
所述輸入匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述第一塊元被配置用以實行激活陣列與權重的內核的第一卷積;
所述記憶體包括:
第一記憶庫組,以及
第二記憶庫組;
所述輸入匯流排包括:
第一分段匯流排,用於在第一方向上傳播資料,以及
第二分段匯流排,用於在與所述第一方向相反的第二方向上傳播資料;
所述第一分段匯流排包括:
第一切換區塊,以及
第二切換區塊;
所述第一切換區塊連接至:
所述第一塊元,以及
所述第一記憶庫組;
所述第二切換區塊連接至:
所述第二塊元,以及
所述第二記憶庫組;
所述第二分段匯流排包括:
第三切換區塊,以及
第四切換區塊;
所述第三切換區塊連接至:
所述第一塊元,以及
所述第一記憶庫組;
所述第四切換區塊連接至:
所述第二塊元,以及
所述第二記憶庫組;
所述第一切換區塊的輸入連接至所述第二切換區塊的輸出;以及
所述第三切換區塊的輸出連接至所述第四切換區塊的輸入,
所述方法包括:
在第一匯流排狀態中,
由所述第一切換區塊將所述第一記憶庫組連接至所述第一塊元,以及
由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
13. 如條款12所述的方法,其中所述方法更包括:
在第二匯流排狀態中,
由所述第一切換區塊及所述第二切換區塊將所述第二記憶庫組連接至所述第一塊元,以及
由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
14. 如條款12所述的方法,其中:
所述激活緩衝器被配置成包括:
第一隊列,連接至所述第一乘法器,以及
第二隊列,連接至所述第二乘法器,
所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器,
所述第一塊元更被配置成:
在第一狀態中:
在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及
在第二狀態中:
在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
15. 如條款14所述的方法,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
16. 如條款14所述的方法,其中所述處理電路更包括第一加法器,
所述方法更包括在所述第一狀態中:
將所述第一加法器連接至:
所述第一乘法器的輸出,以及
所述第二乘法器的輸出,以及
由所述第一加法器將以下相加:
自所述第一乘法器的所述輸出接收的積與
自所述第二乘法器的所述輸出接收的積。
17. 如條款16所述的方法,其中所述處理電路更包括第二加法器,
所述方法更包括在所述第二狀態中將所述第二加法器連接至所述第一乘法器的所述輸出。
18. 如條款17所述的方法,其中所述處理電路更包括:
第一累加器,連接至所述第一加法器,以及
第二累加器,連接至所述第二加法器,
所述第一累加器包括暫存器,
所述方法更包括在所述第一狀態中:
由所述第一累加器將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值,以及
由所述第一累加器將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
19. 如條款18所述的方法,其中所述第二累加器包括暫存器,且所述方法更包括在所述第二狀態中,
由所述第二累加器將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值,以及
由所述第二累加器將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
20. 一種利用處理工具進行計算的方法,所述處理工具包括:
第一塊元,
第二塊元,
記憶體,
輸入匯流排,以及
輸出匯流排,
所述輸入匯流排連接至:
所述記憶體,
所述第一塊元,以及
所述第二塊元,
所述第一塊元包括:
第一權重暫存器,
第二權重暫存器,
激活緩衝器,
第一乘法器,以及
第二乘法器,
所述第一塊元被配置用以實行激活陣列與權重的內核的第一卷積;
所述記憶體包括:
第一記憶庫組,以及
第二記憶庫組;
所述輸入匯流排包括:
第一分段匯流排,用於在第一方向上傳播資料,以及
第二分段匯流排,用於在與所述第一方向相反的第二方向上傳播資料;
所述第一分段匯流排包括:
第一切換區塊,以及
第二切換區塊;
所述第一切換區塊連接至
所述第一塊元,以及
所述第一記憶庫組;
所述第二切換區塊連接至
所述第二塊元,以及
所述第二記憶庫組;
所述第二分段匯流排包括:
第三切換區塊,以及
第四切換區塊;
所述第三切換區塊連接至
所述第一塊元,以及
所述第一記憶庫組;
所述第四切換區塊連接至
所述第二塊元,以及
所述第二記憶庫組;
所述第一切換區塊的輸入連接至所述第二切換區塊的輸出;並且
所述第三切換區塊的輸出連接至所述第四切換區塊的輸入,
所述方法包括:
在第一匯流排狀態中,
由所述第一切換區塊將所述第一記憶庫組連接至所述第一塊元,以及
由所述第二切換區塊將所述第二記憶庫組連接至所述第二塊元。
儘管已在本文中具體闡述及說明神經處理器的示例性實施例,然而對於熟習此項技術者將顯而易見,存在諸多潤飾及變型。因此,要理解,根據本揭露的原理構造的神經處理器可被實施成不同於本文中所具體闡述者。本發明亦界定於以下申請專利範圍及其等效範圍中。
101、swt_in[C], wt_abs_ld_in[7:0][C]:垂直權重加載匯流排/附加權重加載匯流排
102:塊元/乘法與縮減(MR)塊元/系統塊元/IFM塊元/硬體塊元/本地塊元控制有限狀態機(FSM)
103:乘法器單元(MU)
104:輸入特徵映射(IFM)遞送組構
106:輸出特徵映射(OFM)遞送組構/本地短連接
108:靜態隨機存取記憶體(SRAM)記憶庫
109:SRAM記憶庫組/SRAM/SRAM單元/SRAM記憶庫組單元
110:中央控制器
111:縮減組構(RF)
112:公用匯流排
114:先進可擴展介面(AXI)互連
116:微控制器(MCU)
118:直接記憶體存取(DMA)控制器
120:外部記憶體
122:乘法與縮減(MR)陣列/MR行/塊元
124:IFM激活緩衝器/IFM緩衝器/激活緩衝器
126:乘法器/乘法器單元/無符號8位元×無符號8位元乘法器/8位元無符號乘法器
127:暫存器檔案/權重暫存器檔案/MU權重暫存器檔案
128A:加法器樹/第一加法器/第一邏輯加法器/本地加法器樹/塊元內加法器樹
128B:加法器樹/第二加法器/第二邏輯加法器/本地加法器樹/塊元內加法器樹
130:累加器/累加器暫存器
130A:累加器/第一累加器/累加器暫存器
130B:累加器/第二累加器
132、177、183、199、403、405、516:多工器
133:MR行
135:類型轉換器/數值類型轉換器/激活數值類型轉換器
136:邏輯/暫存器
137:激活通路
138:權重解壓縮單元
139:快取/IFM快取/塊元快取/本地塊元
140:全域控制(GC)FSM/全域控制邏輯/全域控制邏輯單元/全域控制/控制邏輯
141:激活廣播單元(ABU)
142:本地控制狀態機/SRAM控制(SC)FSM/SRAM控制邏輯/SRAM控制/SRAM控制邏輯單元/本地控制單元/控制邏輯
143:多工器/邏輯
144:塊元控制邏輯/本地控制狀態機/本地塊元控制邏輯/塊元控制(TC)FSM/本地控制單元/控制邏輯
145、155、159:邏輯/邏輯閘
146:快取通路/通路控制邏輯模組/通路控制邏輯/控制邏輯/通路控制邏輯單元
147:多工器/暫存器檔案提取多工器
148:激活通路數值類型轉換電路
149、151:多工器/暫存器檔案提取多工器/邏輯
153:邏輯
157:權重加載邏輯/正反器閘
161:暫存器/激活分級FIFO暫存器
163:多工器/激活多工器/IFM多工器/通路多工器/通路激活多工器
165:激活分級先進先出(FIFO)/IFM分級FIFO/激活FIFO/ABU IFM分級FIFO
166:激活多工器
167:累積與返回單元(ARU)/塊元ARU/塊元行ARU/ARU模組
169:暫存器檔案/快取通路暫存器檔案/本地暫存器檔案
170:通路
171:通路/ABU通路
173:FIFO/通路分級FIFO/IFM通路分級FIFO/通路IFM分級FIFO/分級緩衝器/分級FIFO
174:多工器/ARU多工器
175:符號擴展移位/符號向上擴展移位器
179:FIFO/小輸出FIFO/輸出FIFO
181、193、512、514:加法器
187:單元/位元範圍選擇單元
189:乘法器
191:因數/定標暫存器
195:OFM偏差項/ARU偏差暫存器
196:池化邏輯/即時池化邏輯/ARU池化邏輯
197:激活函數/激活函數模組
198:FIFO/小輸出FIFO/輸出FIFO/塊元輸出FIFO
302:權重內核
304:IFM張量
306:虛擬圖/邏輯圖
401:塊元與SRAM記憶庫組單元
407:縮減群組/區段
411:暫存器
502:節點/RAA節點/第一層階RAA節點
504:節點/RAA節點/RAA第二層階節點
506:節點/RAA節點/樹根RAA節點
508:RAA節點/樹根RAA節點
518:累加器
520:縮減與累加(RAA)節點
A0、A7、B7、C0、C7、D0、D7、E0、E7、F0、F7、G0、G7、H0、H7、I0、I7:平面位置
a...z:位置
a0、a2、a3、b0、b1、b2、b3:元素/IFM值/激活
a1:元素/值/IFM值/激活
a4、a5、a6、a7、a15、b4、b5、b6、b7、b15、c4、c5、c6、c7、c15、d4、d5、d6、d7、d15、e4、e5、e6、e7、e15、f4、f5、f6、f7、f15、g4、g5、g6、g7、g15、h4、h5、h6、h7、h15、i4、i5、i6、i7、i15、j4、j5、j6、j7:IFM值
a[0...15]:IFM向量/IFM
b[0...15]、c[0...15]、g[0...15]、h[0...15]、o[0...15]:IFM
act_zero:訊號/輔助訊號
B0、B1、B2、B3:記憶庫/SRAM記憶庫
b:非IFM向量/畫素
c:IFM向量/畫素/值
c0、c2、c3、d0、d1、d2、d3、e0、e1、e2、e3、f0、f1、f2、f3、g0、g1、g2、g3、h0、h1、h2、h3、i0、i1、i2、i3、j0、j1、j2、j3:元素/IFM值
c1:元素/IFM值/輸出
A0[0...15]...A7[0...15]、B0[0...15]...B7[0...15]、C0[0...15]...C7[0..15]、D0[0...15]..D7[0...15]、E0[0...15]...E7[0...15]、F0[0...15]...F7[0...15]、G0[0...15]...G7[0...15]、H0[0...15]...H7[0...15]、I0[0...15]...I7[0...15]:權重
en_mult、mult_in_ce、mult_out[15:0]、mult_out_zero、sel_mult_wt[1:0]、sel_wt_dn1[4:0]、sel_wt_up1[4:0]、sel_wt_self[4:0]、wt_zero、{swt_dn1_in, wt_abs_dn1_in[7:0]}、{swt_dn1_out, wt_abs_dn1_out[7:0]}、{swt_up1_in, wt_abs_up1_in[7:0]}、{swt_up1_out, wt_abs_up1_out[7:0]}、{swt_self, wt_abs_self[7:0]}、wt_by_zero、wt_ld_0~wt_ld_17、{sw0, w_abs17[7:0]}、{sw17, w_abs17[7:0]}:訊號
IFM[0..15]、IFM[16..31]、IFM[32..47]、IFM[48..63]、IFM[64..79]、IFM[80..95]、IFM[96..111]、IFM[112..127]、IFM[120..127]、IFM[128..135]、IFM[136..143]、IFM[240..255]、IFM[248..255]、IFM[256..271]、IFM[256..263]、IFM[264..271]、IFM[272..287]、IFM[280..287]、IFM[368..383]、IFM[384..399]、IFM[400..415]、IFM[496..511]、IFM[504..511]、IFM[960..975]、IFM[976..991]、IFM[992..1007]、IFM[1008..1023]、IFM[4060..4075]、IFM[4076..4089]、IFM[4080..4095]:
M:快取未中
m:快取未中/值
mult_result[15:0]:乘法器輸出
OFM[0..7]、OFM[8..15]、OFM[16..23]、OFM[24..31]、OFM[32..39]、OFM[40..47]、OFM[48..55]、OFM[56..63]、OFM[112..119]、OFM[120..127]、OFM[1016..1023]:輸出
S0、S1、S2、S3、S4、S5、S6、S7、S8、S9、S10、S11、S12、S13、S14、S15:SRAM記憶庫組
sel_adder_tree[0…15]:多工器控制訊號
T0、T3、T4、T7、T9、T10、T14、T13:塊元/上部塊元
T1、T2、T5、T6、T8、T11、T12、T15:塊元/下部塊元
W[0..1, 0..7, 0..15, 0..7]、W[2..3, 0..7, 0..15, 0..7]、W[4..5, 0..7, 0..15, 0..7]、W[6..7, 0..7, 0..15, 0..7]、W[0,*,*,*]、W[1,*,*,*]、W[2,*,*,*]、W[3,*,*,*]、W[4,*,*,*]、W[5,*,*,*]、W[6,*,*,*]、W[7,*,*,*]:權重內核
wt_ld_en_lane[L]:通路權重加載賦能訊號
wt_ld_idx[4:0]:權重暫存器索引匯流排
Z:零點常數值/零點常數/Z字形掃描參數/快取
{mult_out_s, mult_out_abs[15:0]}:16位元量值輸出
{mult_swt, mult_wt_abs[7:0]}:權重
{s_in_a, mult_in_a[7:0]}、{s_in_b, mult_in_b[7:0]}:輸入訊號
{sact, act_abs[7:0]}:激活
參照說明書、申請專利範圍及附圖將領會及理解本揭露的該些及其他特徵及優點,在附圖中:
圖1A是根據本揭露實施例的神經處理器的方塊圖。
圖1B是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1C是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1D是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1E是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1F是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1G是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1H是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1I是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1J是根據本揭露實施例的神經處理器的一部分在三種情形中的方塊圖。
圖1K是根據本揭露實施例的神經處理器的一部分的示意圖。
圖1L是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1MA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1MB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1N是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1O是根據本揭露實施例的神經處理器的方塊圖。
圖1P是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1Q是根據本揭露實施例的大小表。
圖1R是根據本揭露實施例的張量圖。
圖1S是根據本揭露實施例的張量圖。
圖1T是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1U是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1V是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1WA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖1WB是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1WC是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1WD是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1WE是根據本揭露實施例的神經處理器的一部分中的資料流圖。
圖1X是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖2AA是根據本揭露實施例的卷積圖。
圖2AB是根據本揭露實施例的卷積圖。
圖2AC是根據本揭露實施例的卷積圖。
圖2AD是根據本揭露實施例的卷積圖。
圖2BA是根據本揭露實施例的卷積圖。
圖2BB是根據本揭露實施例的卷積圖。
圖2BC是根據本揭露實施例的卷積圖。
圖2BD是根據本揭露實施例的卷積圖。
圖2BE是根據本揭露實施例的卷積圖。
圖2BF是根據本揭露實施例的卷積圖。
圖2BG是根據本揭露實施例的卷積圖。
圖2BH是根據本揭露實施例的卷積圖。
圖2BI是根據本揭露實施例的卷積圖。
圖2BJ是根據本揭露實施例的卷積圖。
圖2BK是根據本揭露實施例的卷積圖。
圖2BL是根據本揭露實施例的卷積圖。
圖2BM是根據本揭露實施例的卷積圖。
圖2C是根據本揭露實施例的卷積圖。
圖2DA是根據本揭露實施例的卷積圖。
圖2DB是根據本揭露實施例的卷積圖。
圖2DC是根據本揭露實施例的卷積圖。
圖2DD是根據本揭露實施例的卷積圖。
圖2DE是根據本揭露實施例的卷積圖。
圖2DF是根據本揭露實施例的卷積圖。
圖2DG是根據本揭露實施例的卷積圖。
圖2DH是根據本揭露實施例的卷積圖。
圖2DI是根據本揭露實施例的卷積圖。
圖2DJ是根據本揭露實施例的卷積圖。
圖2DK是根據本揭露實施例的卷積圖。
圖2DL是根據本揭露實施例的卷積圖。
圖2DM是根據本揭露實施例的卷積圖。
圖2DN是根據本揭露實施例的卷積圖。
圖2DO是根據本揭露實施例的卷積圖。
圖2DP是根據本揭露實施例的卷積圖。
圖2DQ是根據本揭露實施例的卷積圖。
圖2DR是根據本揭露實施例的卷積圖。
圖2DS是根據本揭露實施例的卷積圖。
圖2DT是根據本揭露實施例的卷積圖。
圖2DV是根據本揭露實施例的卷積圖。
圖2DW是根據本揭露實施例的卷積圖。
圖2DX是根據本揭露實施例的卷積圖。
圖2E是根據本揭露實施例的讀取表。
圖2F是根據本揭露實施例的讀取表。
圖2GA是根據本揭露實施例的卷積圖。
圖2GB是根據本揭露實施例的卷積圖。
圖2HA是根據本揭露實施例的卷積圖。
圖2HB是根據本揭露實施例的卷積圖。
圖2HC是根據本揭露實施例的卷積圖。
圖2HD是根據本揭露實施例的卷積圖。
圖3AA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3AB是根據本揭露實施例的資料流圖。
圖3AC是根據本揭露實施例的資料流圖。
圖3AD是根據本揭露實施例的資料流圖。
圖3AE是根據本揭露實施例的資料流圖。
圖3AF是根據本揭露實施例的資料流圖。
圖3AG是根據本揭露實施例的資料流圖。
圖3AH是根據本揭露實施例的資料流圖。
圖3AI是根據本揭露實施例的資料流圖。
圖3AJ是根據本揭露實施例的資料流圖。
圖3AK是根據本揭露實施例的資料流圖。
圖3BA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3BB是根據本揭露實施例的資料圖。
圖3BC是根據本揭露實施例的資料圖。
圖3CA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3CB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3DA是根據本揭露實施例的資料圖。
圖3EA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3EB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3FA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3FB是根據本揭露實施例的資料圖。
圖3FC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3GA是根據本揭露實施例的資料圖。
圖3GB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3GC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3GD是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3HA是根據本揭露實施例的資料圖。
圖3HB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3HC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3HD是根據本揭露實施例的資料圖。
圖3IA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3IB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3IC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3ID是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3IE是根據本揭露實施例的資料圖。
圖3IF是根據本揭露實施例的資料圖。
圖3JA是根據本揭露實施例的資料流圖。
圖3JB是根據本揭露實施例的資料流圖。
圖3JC是根據本揭露實施例的資料流圖。
圖3JD是根據本揭露實施例的資料流圖。
圖3KA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3KB是根據本揭露實施例的資料圖。
圖3LA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3LB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3LC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3LD是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3MA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3MB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3NA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3OA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3OB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3OC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3PA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3PB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖3PC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AA7是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AD是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AE是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AF是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AG是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AH是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AJ是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AK是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AL是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AM是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4AN是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4BA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4BB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4BC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4BD是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4CA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4CB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4CC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4DA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4DB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4DC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4EA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4EB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4EC是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4FA是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4FB是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4G是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖4H是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖5A是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖5B是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖5C是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖5D是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖5E是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖5F是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖5G是根據本揭露實施例的神經處理器的一部分的方塊圖。
圖6是根據本揭露實施例的神經處理器的一部分的方塊圖。
102:塊元/乘法與縮減(MR)塊元/系統塊元/IFM塊元/硬體塊元/本地塊元控制有限狀態機(FSM)
103:乘法器單元(MU)
104:輸入特徵映射(IFM)遞送組構
106:輸出特徵映射(OFM)遞送組構/本地短連接
109:SRAM記憶庫組/SRAM/SRAM單元/SRAM記憶庫組單元
110:中央控制器
111:縮減組構(RF)
112:公用匯流排
114:先進可擴展介面(AXI)互連
116:微控制器(MCU)
118:直接記憶體存取(DMA)控制器
120:外部記憶體
139:快取/IFM快取/塊元快取/本地塊元
141:激活廣播單元(ABU)
Claims (20)
- 一種處理器,包括: 第一塊元, 第二塊元, 記憶體,以及 匯流排, 所述匯流排連接至: 所述記憶體, 所述第一塊元,以及 所述第二塊元, 所述第一塊元包括: 第一權重暫存器, 第二權重暫存器, 激活緩衝器, 第一乘法器,以及 第二乘法器, 所述激活緩衝器被配置成包括: 第一隊列,連接至所述第一乘法器,以及 第二隊列,連接至所述第二乘法器, 所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器, 所述第一塊元被配置成: 在第一狀態中: 在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及 在第二狀態中: 在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
- 如申請專利範圍第1項所述的處理器,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
- 如申請專利範圍第1項所述的處理器,更包括: 第一加法器,被配置成在所述第一狀態中: 連接至 所述第一乘法器的輸出,以及 所述第二乘法器的輸出,以及 將以下相加: 自所述第一乘法器的所述輸出接收的積與 自所述第二乘法器的所述輸出接收的積。
- 如申請專利範圍第3項所述的處理器,更包括第二加法器,所述第二加法器被配置成在所述第二狀態中連接至所述第一乘法器的所述輸出。
- 如申請專利範圍第4項所述的處理器,更包括: 第一累加器,連接至所述第一加法器,以及 第二累加器,連接至所述第二加法器, 所述第一累加器包括暫存器且被配置成在所述第一狀態中: 將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值,以及 將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
- 如申請專利範圍第5項所述的處理器,其中所述第二累加器包括暫存器且被配置成在所述第二狀態中, 將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值,以及 將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
- 如申請專利範圍第5項所述的處理器,更包括激活零跳過控制電路,所述激活零跳過控制電路被配置成: 判斷所述第一隊列的所述輸出暫存器是否含有零,以及 因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
- 如申請專利範圍第7項所述的處理器,更包括多工器,所述多工器具有: 輸入,在所述多工器的單埠側處連接至所述第一乘法器, 第一輸出,在所述多工器的多埠側處連接至所述第一加法器,以及 第二輸出,在所述多工器的所述多埠側處連接至所述第二加法器。
- 如申請專利範圍第8項所述的處理器,其中所述激活零跳過控制電路被配置成控制所述多工器, 在所述第一狀態中將所述輸入連接至所述第一輸出,以及 在所述第二狀態中將所述輸入連接至所述第二輸出。
- 如申請專利範圍第1項所述的處理器,其中: 所述第二隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第二隊列的輸出暫存器;以及 所述第一塊元更被配置成在第三狀態中在所述第一乘法器中將所述第一權重乘以來自所述第二隊列的所述第二暫存器的激活。
- 一種利用處理電路進行計算的方法,所述處理電路包括: 第一塊元, 第二塊元, 記憶體,以及 匯流排, 所述匯流排連接至: 所述記憶體, 所述第一塊元,以及 所述第二塊元, 所述第一塊元包括: 第一權重暫存器, 第二權重暫存器, 激活緩衝器, 第一乘法器,以及 第二乘法器, 所述激活緩衝器被配置成包括: 第一隊列,連接至所述第一乘法器,以及 第二隊列,連接至所述第二乘法器, 所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器, 所述方法包括: 在第一狀態中: 由所述第一乘法器將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及 在第二狀態中: 由所述第一乘法器將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
- 如申請專利範圍第11項所述的方法,其中,在所述第二狀態中,所述第一隊列的所述輸出暫存器含有零。
- 如申請專利範圍第11項所述的方法,其中所述處理電路更包括第一加法器, 所述方法更包括在所述第一狀態中: 將所述第一加法器連接至: 所述第一乘法器的輸出,以及 所述第二乘法器的輸出,以及 由所述第一加法器將以下相加: 自所述第一乘法器的所述輸出接收的積與 自所述第二乘法器的所述輸出接收的積。
- 如申請專利範圍第13項所述的方法,其中所述處理電路更包括第二加法器, 所述方法更包括在所述第二狀態中將所述第二加法器連接至所述第一乘法器的所述輸出。
- 如申請專利範圍第14項所述的方法,其中所述處理電路更包括: 第一累加器,連接至所述第一加法器,以及 第二累加器,連接至所述第二加法器, 所述第一累加器包括暫存器, 所述方法更包括在所述第一狀態中: 由所述第一累加器將自所述第一加法器接收的和加到所述第一累加器的所述暫存器中的值中,以形成所述第一累加器的累加值,以及 由所述第一累加器將所述第一累加器的所述累加值儲存於所述第一累加器的所述暫存器中。
- 如申請專利範圍第15項所述的方法,其中所述第二累加器包括暫存器,且所述方法更包括在所述第二狀態中, 由所述第二累加器將自所述第二加法器接收的和加到所述第二累加器的所述暫存器中的值中,以形成所述第二累加器的累加值,以及 由所述第二累加器將所述第二累加器的所述累加值儲存於所述第二累加器的所述暫存器中。
- 如申請專利範圍第15項所述的方法,其中所述處理電路更包括激活零跳過控制電路,且所述方法更包括: 由所述激活零跳過控制電路判斷所述第一隊列的所述輸出暫存器是否含有零,以及 因應於確定出所述第一隊列的所述輸出暫存器含有零,使所述第一塊元以所述第二狀態操作。
- 如申請專利範圍第17項所述的方法,其中所述處理電路更包括多工器,所述多工器具有: 輸入,在所述多工器的單埠側處連接至所述第一乘法器, 第一輸出,在所述多工器的多埠側處連接至所述第一加法器,以及 第二輸出,在所述多工器的所述多埠側處連接至所述第二加法器。
- 如申請專利範圍第18項所述的方法,更包括由所述激活零跳過控制電路控制所述多工器: 在所述第一狀態中將所述輸入連接至所述第一輸出,以及 在所述第二狀態中將所述輸入連接至所述第二輸出。
- 一種利用處理工具進行計算的方法,所述處理工具包括: 第一塊元, 第二塊元, 記憶體,以及 匯流排, 所述匯流排連接至: 所述記憶體, 所述第一塊元,以及 所述第二塊元, 所述第一塊元包括: 第一權重暫存器, 第二權重暫存器, 激活緩衝器, 第一乘法器,以及 第二乘法器, 所述激活緩衝器被配置成包括: 第一隊列,連接至所述第一乘法器,以及 第二隊列,連接至所述第二乘法器, 所述第一隊列包括第一暫存器與和所述第一暫存器相鄰的第二暫存器,所述第一暫存器是所述第一隊列的輸出暫存器, 所述方法包括: 在第一狀態中: 在所述第一乘法器中,將第一權重乘以來自所述第一隊列的所述輸出暫存器的激活,以及 在第二狀態中: 在所述第一乘法器中,將所述第一權重乘以來自所述第一隊列的所述第二暫存器的激活。
Applications Claiming Priority (10)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862689008P | 2018-06-22 | 2018-06-22 | |
US62/689,008 | 2018-06-22 | ||
US201962798297P | 2019-01-29 | 2019-01-29 | |
US62/798,297 | 2019-01-29 | ||
US201962841606P | 2019-05-01 | 2019-05-01 | |
US201962841590P | 2019-05-01 | 2019-05-01 | |
US62/841,590 | 2019-05-01 | ||
US62/841,606 | 2019-05-01 | ||
US16/446,610 US12099912B2 (en) | 2019-06-19 | Neural processor | |
US16/446,610 | 2019-06-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202014935A true TW202014935A (zh) | 2020-04-16 |
TWI813708B TWI813708B (zh) | 2023-09-01 |
Family
ID=68981979
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW108121809A TWI813708B (zh) | 2018-06-22 | 2019-06-21 | 處理器、利用處理電路進行計算的方法及利用處理工具進行計算的方法 |
Country Status (6)
Country | Link |
---|---|
US (6) | US11775802B2 (zh) |
JP (1) | JP7337103B2 (zh) |
KR (1) | KR20210013764A (zh) |
CN (1) | CN112513885B (zh) |
TW (1) | TWI813708B (zh) |
WO (1) | WO2019245348A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020000197A (ja) * | 2018-06-29 | 2020-01-09 | キヤノン株式会社 | 計数方法、濃度測定装置及び濃度測定システム |
JP7227769B2 (ja) * | 2019-01-10 | 2023-02-22 | キヤノン株式会社 | 情報処理装置及びメモリ制御方法 |
US10963746B1 (en) * | 2019-01-14 | 2021-03-30 | Xilinx, Inc. | Average pooling in a neural network |
US20210110243A1 (en) * | 2019-10-10 | 2021-04-15 | Hewlett Packard Enterprise Development Lp | Deep learning accelerator system interface |
US11513799B2 (en) * | 2019-11-04 | 2022-11-29 | Apple Inc. | Chained buffers in neural network processor |
RU2732201C1 (ru) * | 2020-02-17 | 2020-09-14 | Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ | Метод построения процессоров для вывода в сверточных нейронных сетях, основанный на потоковых вычислениях |
US11188778B1 (en) | 2020-05-05 | 2021-11-30 | Illumina, Inc. | Equalization-based image processing and spatial crosstalk attenuator |
US11972348B2 (en) | 2020-10-30 | 2024-04-30 | Apple Inc. | Texture unit circuit in neural network processor |
US11665363B2 (en) * | 2020-11-26 | 2023-05-30 | Electronics And Telecommunications Research Institute | Method, apparatus, system and computer-readable recording medium for feature map information |
KR102627800B1 (ko) * | 2021-05-11 | 2024-01-23 | 포항공과대학교 산학협력단 | 바이너리 뉴럴 네트워크 제어 방법 및 바이너리 뉴럴 네트워크 장치 |
US11455487B1 (en) * | 2021-10-26 | 2022-09-27 | Illumina Software, Inc. | Intensity extraction and crosstalk attenuation using interpolation and adaptation for base calling |
EP4377841A1 (en) * | 2021-07-27 | 2024-06-05 | Qualcomm Incorporated | Activation buffer architecture for data-reuse in a neural network accelerator |
US20220012012A1 (en) * | 2021-09-24 | 2022-01-13 | Martin Langhammer | Systems and Methods for Sparsity Operations in a Specialized Processing Block |
KR20230063519A (ko) | 2021-11-02 | 2023-05-09 | 삼성전자주식회사 | 뉴럴 네트워크 연산 장치 및 방법 |
US12079158B2 (en) * | 2022-07-25 | 2024-09-03 | Xilinx, Inc. | Reconfigurable neural engine with extensible instruction set architecture |
CN115878334B (zh) * | 2023-03-08 | 2023-05-12 | 深圳云豹智能有限公司 | 一种数据缓存处理方法及其系统、存储介质、电子设备 |
Family Cites Families (103)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5285403A (en) | 1989-12-29 | 1994-02-08 | U.S. Philips Corporation | Arithmetic processing module to be associated with a microprocessor central processing unit |
US5446916A (en) | 1993-03-26 | 1995-08-29 | Gi Corporation | Variable length codeword packer |
US5829007A (en) | 1993-06-24 | 1998-10-27 | Discovision Associates | Technique for implementing a swing buffer in a memory array |
US5499382A (en) | 1993-09-20 | 1996-03-12 | Nusinov; Eugene B. | Circuit and method of bit-packing and bit-unpacking using a barrel shifter |
US5509129A (en) | 1993-11-30 | 1996-04-16 | Guttag; Karl M. | Long instruction word controlling plural independent processor operations |
US6058473A (en) | 1993-11-30 | 2000-05-02 | Texas Instruments Incorporated | Memory store from a register pair conditional upon a selected status bit |
US6016538A (en) | 1993-11-30 | 2000-01-18 | Texas Instruments Incorporated | Method, apparatus and system forming the sum of data in plural equal sections of a single data word |
US5805913A (en) | 1993-11-30 | 1998-09-08 | Texas Instruments Incorporated | Arithmetic logic unit with conditional register source selection |
US6055204A (en) | 1997-04-29 | 2000-04-25 | Texas Instruments Incorporated | Circuits, systems, and methods for re-mapping memory column redundancy |
US6259456B1 (en) * | 1997-04-30 | 2001-07-10 | Canon Kabushiki Kaisha | Data normalization techniques |
US5857035A (en) | 1997-05-19 | 1999-01-05 | Hewlett-Packard Company | Arithmetic coding compressor for encoding multiple bit values |
US6490357B1 (en) | 1998-08-28 | 2002-12-03 | Qualcomm Incorporated | Method and apparatus for generating encryption stream ciphers |
US6195026B1 (en) | 1998-09-14 | 2001-02-27 | Intel Corporation | MMX optimized data packing methodology for zero run length and variable length entropy encoding |
ATE329423T1 (de) | 1999-07-08 | 2006-06-15 | Samsung Electronics Co Ltd | Vorrichtung und verfahren zur steuerung einem demultiplexeur und demultiplexeur für ratenanpassung in einem mobilen übertragungssystem |
US7174047B2 (en) | 2002-03-29 | 2007-02-06 | Matsushita Electric Industrial Co., Ltd. | Single-instruction multiple-data (SIMD)-based algorithms for processing video data |
US7202872B2 (en) | 2003-10-29 | 2007-04-10 | Via Technologies, Inc. | Apparatus for compressing data in a bit stream or bit pattern |
US8223966B2 (en) | 2006-05-10 | 2012-07-17 | Mediatek Inc. | Multiple stream decrypting and decoding systems and related methods thereof |
US7898550B2 (en) | 2006-06-09 | 2011-03-01 | Via Technologies, Inc. | System and method for memory bandwidth compressor |
US8069377B2 (en) | 2006-06-26 | 2011-11-29 | Micron Technology, Inc. | Integrated circuit having memory array including ECC and column redundancy and method of operating the same |
US8285766B2 (en) | 2007-05-23 | 2012-10-09 | The Trustees Of Princeton University | Microprocessor shifter circuits utilizing butterfly and inverse butterfly routing circuits, and control circuits therefor |
US8638850B2 (en) | 2009-05-06 | 2014-01-28 | Advanced Micro Devices, Inc. | Execution units for context adaptive binary arithmetic coding (CABAC) |
KR102242390B1 (ko) | 2013-04-08 | 2021-04-20 | 삼성전자주식회사 | 송신 장치, 그의 인터리빙 방법, 수신 장치 및 그의 디인터리빙 방법 |
CN104252331B (zh) * | 2013-06-29 | 2018-03-06 | 华为技术有限公司 | 乘累加器 |
CN104426630B (zh) | 2013-08-30 | 2018-04-03 | 中国科学院上海高等研究院 | 一种比特交织编码调制方法及系统 |
US20150161927A1 (en) | 2013-12-05 | 2015-06-11 | Innolux Corporation | Driving apparatus with 1:2 mux for 2-column inversion scheme |
US9978014B2 (en) * | 2013-12-18 | 2018-05-22 | Intel Corporation | Reconfigurable processing unit |
US9785565B2 (en) | 2014-06-30 | 2017-10-10 | Microunity Systems Engineering, Inc. | System and methods for expandably wide processor instructions |
US11100420B2 (en) | 2014-06-30 | 2021-08-24 | Amazon Technologies, Inc. | Input processing for machine learning |
US10216520B2 (en) | 2014-10-06 | 2019-02-26 | Via Technologies, Inc. | Compressing instruction queue for a microprocessor |
KR102276339B1 (ko) * | 2014-12-09 | 2021-07-12 | 삼성전자주식회사 | Cnn의 근사화를 위한 학습 장치 및 방법 |
US9418458B2 (en) | 2015-01-05 | 2016-08-16 | Superfish Ltd. | Graph image representation from convolutional neural networks |
US9747546B2 (en) * | 2015-05-21 | 2017-08-29 | Google Inc. | Neural network processor |
US10438117B1 (en) * | 2015-05-21 | 2019-10-08 | Google Llc | Computing convolutions using a neural network processor |
US9805303B2 (en) | 2015-05-21 | 2017-10-31 | Google Inc. | Rotating data for neural network computations |
US10049322B2 (en) * | 2015-05-21 | 2018-08-14 | Google Llc | Prefetching weights for use in a neural network processor |
US20160358069A1 (en) | 2015-06-03 | 2016-12-08 | Samsung Electronics Co., Ltd. | Neural network suppression |
US10460230B2 (en) * | 2015-06-04 | 2019-10-29 | Samsung Electronics Co., Ltd. | Reducing computations in a neural network |
EP3104309B1 (en) | 2015-06-10 | 2020-04-01 | Samsung Electronics Co., Ltd. | Spiking neural network with reduced memory access and reduced in-network bandwidth consumption |
US11244225B2 (en) | 2015-07-10 | 2022-02-08 | Samsung Electronics Co., Ltd. | Neural network processor configurable using macro instructions |
US10346350B2 (en) * | 2015-10-08 | 2019-07-09 | Via Alliance Semiconductor Co., Ltd. | Direct execution by an execution unit of a micro-operation loaded into an architectural register file by an architectural instruction of a processor |
US10664751B2 (en) * | 2016-12-01 | 2020-05-26 | Via Alliance Semiconductor Co., Ltd. | Processor with memory array operable as either cache memory or neural network unit memory |
EP3705994B1 (en) * | 2015-10-28 | 2023-10-04 | Google LLC | Processing computational graphs |
US9904874B2 (en) | 2015-11-05 | 2018-02-27 | Microsoft Technology Licensing, Llc | Hardware-efficient deep convolutional neural networks |
WO2017129325A1 (en) | 2016-01-29 | 2017-08-03 | Fotonation Limited | A convolutional neural network |
NL2016285B1 (en) | 2016-02-19 | 2017-09-20 | Scyfer B V | Device and method for generating a group equivariant convolutional neural network. |
FR3050846B1 (fr) | 2016-04-27 | 2019-05-03 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Dispositif et procede de distribution de donnees de convolution d'un reseau de neurones convolutionnel |
US11055063B2 (en) | 2016-05-02 | 2021-07-06 | Marvell Asia Pte, Ltd. | Systems and methods for deep learning processor |
CN109478057B (zh) | 2016-05-09 | 2022-02-25 | 强力物联网投资组合2016有限公司 | 用于工业物联网的方法和系统 |
JP6890615B2 (ja) * | 2016-05-26 | 2021-06-18 | タータン エーアイ リミテッド | ディープニューラルネットワークについての加速器 |
CN105913823A (zh) | 2016-06-23 | 2016-08-31 | 武汉华星光电技术有限公司 | 高解析度解复用器驱动电路 |
KR20180012439A (ko) | 2016-07-27 | 2018-02-06 | 삼성전자주식회사 | 회선 신경망에서 가속기 및 이의 동작 방법 |
US10528864B2 (en) | 2016-08-11 | 2020-01-07 | Nvidia Corporation | Sparse convolutional neural network accelerator |
US10621486B2 (en) | 2016-08-12 | 2020-04-14 | Beijing Deephi Intelligent Technology Co., Ltd. | Method for optimizing an artificial neural network (ANN) |
US10802992B2 (en) | 2016-08-12 | 2020-10-13 | Xilinx Technology Beijing Limited | Combining CPU and special accelerator for implementing an artificial neural network |
CN106650922B (zh) | 2016-09-29 | 2019-05-03 | 清华大学 | 硬件神经网络转换方法、计算装置、软硬件协作系统 |
CN110073359B (zh) * | 2016-10-04 | 2023-04-04 | 奇跃公司 | 用于卷积神经网络的有效数据布局 |
US9940534B1 (en) | 2016-10-10 | 2018-04-10 | Gyrfalcon Technology, Inc. | Digital integrated circuit for extracting features out of an input image based on cellular neural networks |
US10175980B2 (en) * | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
US9959498B1 (en) * | 2016-10-27 | 2018-05-01 | Google Llc | Neural network instruction set architecture |
US11003985B2 (en) | 2016-11-07 | 2021-05-11 | Electronics And Telecommunications Research Institute | Convolutional neural network system and operation method thereof |
US10915812B2 (en) | 2016-11-09 | 2021-02-09 | Samsung Electronics Co., Ltd. | Method and system of managing computing paths in an artificial neural network |
US10733505B2 (en) | 2016-11-10 | 2020-08-04 | Google Llc | Performing kernel striding in hardware |
US20180150256A1 (en) | 2016-11-29 | 2018-05-31 | Intel Corporation | Technologies for data deduplication in disaggregated architectures |
US10417560B2 (en) * | 2016-12-01 | 2019-09-17 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs efficient 3-dimensional convolutions |
US10423876B2 (en) * | 2016-12-01 | 2019-09-24 | Via Alliance Semiconductor Co., Ltd. | Processor with memory array operable as either victim cache or neural network unit memory |
KR20180073118A (ko) | 2016-12-22 | 2018-07-02 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
US20180181864A1 (en) | 2016-12-27 | 2018-06-28 | Texas Instruments Incorporated | Sparsified Training of Convolutional Neural Networks |
CN106844294B (zh) | 2016-12-29 | 2019-05-03 | 华为机器有限公司 | 卷积运算芯片和通信设备 |
US10521488B1 (en) * | 2016-12-30 | 2019-12-31 | X Development Llc | Dynamic partitioning |
US12073308B2 (en) | 2017-01-04 | 2024-08-27 | Stmicroelectronics International N.V. | Hardware accelerator engine |
US10096134B2 (en) | 2017-02-01 | 2018-10-09 | Nvidia Corporation | Data compaction and memory bandwidth reduction for sparse neural networks |
JP6794854B2 (ja) | 2017-02-02 | 2020-12-02 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US20180253636A1 (en) * | 2017-03-06 | 2018-09-06 | Samsung Electronics Co., Ltd. | Neural network apparatus, neural network processor, and method of operating neural network processor |
US10067509B1 (en) | 2017-03-10 | 2018-09-04 | TuSimple | System and method for occluding contour detection |
US10387298B2 (en) | 2017-04-04 | 2019-08-20 | Hailo Technologies Ltd | Artificial neural network incorporating emphasis and focus techniques |
US10860760B2 (en) * | 2017-04-21 | 2020-12-08 | Intel Corporation | Systems and methods for implementing learned parameter systems on a programmable integrated circuit |
US10409614B2 (en) | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
US10410098B2 (en) | 2017-04-24 | 2019-09-10 | Intel Corporation | Compute optimizations for neural networks |
US10706147B1 (en) | 2017-05-19 | 2020-07-07 | Amazon Technologies, Inc. | Mitigating side-channel attacks via shared cache |
US10990648B2 (en) | 2017-08-07 | 2021-04-27 | Intel Corporation | System and method for an optimized winograd convolution accelerator |
US10600147B2 (en) | 2017-08-22 | 2020-03-24 | Intel Corporation | Efficient memory layout for enabling smart data compression in machine learning environments |
US10699160B2 (en) | 2017-08-23 | 2020-06-30 | Samsung Electronics Co., Ltd. | Neural network method and apparatus |
US11803377B2 (en) | 2017-09-08 | 2023-10-31 | Oracle International Corporation | Efficient direct convolution using SIMD instructions |
US20190087713A1 (en) | 2017-09-21 | 2019-03-21 | Qualcomm Incorporated | Compression of sparse deep convolutional network weights |
US10558386B2 (en) | 2017-09-22 | 2020-02-11 | Kabushiki Kaisha Toshiba | Operation device and operation system |
US10366322B2 (en) | 2017-10-06 | 2019-07-30 | DeepCube LTD. | System and method for compact and efficient sparse neural networks |
EP3622520A1 (en) | 2017-10-16 | 2020-03-18 | Illumina, Inc. | Deep learning-based techniques for training deep convolutional neural networks |
KR102452953B1 (ko) | 2017-10-30 | 2022-10-11 | 삼성전자주식회사 | 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치 |
CN110020716A (zh) | 2017-11-06 | 2019-07-16 | 畅想科技有限公司 | 神经网络硬件 |
GB2560600B (en) | 2017-11-06 | 2020-03-04 | Imagination Tech Ltd | Nueral Network Hardware |
KR20190051697A (ko) | 2017-11-07 | 2019-05-15 | 삼성전자주식회사 | 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법 |
US10721114B2 (en) * | 2017-11-23 | 2020-07-21 | Huawei Technologies Co., Ltd. | Method and system for symbol sequence generation and transmission for non-orthogonal multiple access transmission |
US11010658B2 (en) * | 2017-12-22 | 2021-05-18 | Intel Corporation | System and method for learning the structure of deep convolutional neural networks |
EP3506084B1 (en) | 2017-12-28 | 2020-09-23 | IMEC vzw | System and method for tunable precision of dot-product engine |
CN108133270B (zh) * | 2018-01-12 | 2020-08-04 | 清华大学 | 卷积神经网络加速方法及装置 |
US10459876B2 (en) | 2018-01-31 | 2019-10-29 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
US11170289B1 (en) | 2018-04-20 | 2021-11-09 | Perceive Corporation | Computation of neural network node by neural network inference circuit |
US20210125046A1 (en) | 2018-05-08 | 2021-04-29 | The Governing Council Of The University Of Toronto | Neural network processing element |
CN108615036B (zh) | 2018-05-09 | 2021-10-01 | 中国科学技术大学 | 一种基于卷积注意力网络的自然场景文本识别方法 |
US20200210517A1 (en) | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
US11671111B2 (en) | 2019-04-17 | 2023-06-06 | Samsung Electronics Co., Ltd. | Hardware channel-parallel data compression/decompression |
CN110110707A (zh) | 2019-05-24 | 2019-08-09 | 苏州闪驰数控系统集成有限公司 | 人工智能cnn、lstm神经网络动态识别系统 |
US20210011732A1 (en) | 2019-07-09 | 2021-01-14 | MemryX Inc. | Matrix Data Reuse Techniques in Processing Systems |
-
2019
- 2019-06-21 CN CN201980036663.XA patent/CN112513885B/zh active Active
- 2019-06-21 JP JP2020571552A patent/JP7337103B2/ja active Active
- 2019-06-21 KR KR1020217002292A patent/KR20210013764A/ko not_active Application Discontinuation
- 2019-06-21 WO PCT/KR2019/007557 patent/WO2019245348A1/en active Application Filing
- 2019-06-21 TW TW108121809A patent/TWI813708B/zh active
- 2019-08-27 US US16/552,945 patent/US11775802B2/en active Active
- 2019-08-27 US US16/552,619 patent/US12086700B2/en active Active
- 2019-08-27 US US16/552,850 patent/US11775801B2/en active Active
-
2020
- 2020-04-07 US US16/842,700 patent/US11620491B2/en active Active
-
2023
- 2023-07-10 US US18/219,904 patent/US12073302B2/en active Active
-
2024
- 2024-03-11 US US18/601,739 patent/US20240256828A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
JP7337103B2 (ja) | 2023-09-01 |
US20200026978A1 (en) | 2020-01-23 |
CN112513885A (zh) | 2021-03-16 |
US20200234099A1 (en) | 2020-07-23 |
KR20210013764A (ko) | 2021-02-05 |
US11775801B2 (en) | 2023-10-03 |
US20230351151A1 (en) | 2023-11-02 |
US20200026979A1 (en) | 2020-01-23 |
US12086700B2 (en) | 2024-09-10 |
CN112513885B (zh) | 2024-02-27 |
US20200026980A1 (en) | 2020-01-23 |
US11775802B2 (en) | 2023-10-03 |
US12073302B2 (en) | 2024-08-27 |
US20190392287A1 (en) | 2019-12-26 |
JP2021528764A (ja) | 2021-10-21 |
US11620491B2 (en) | 2023-04-04 |
TWI813708B (zh) | 2023-09-01 |
US20240256828A1 (en) | 2024-08-01 |
WO2019245348A1 (en) | 2019-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI813708B (zh) | 處理器、利用處理電路進行計算的方法及利用處理工具進行計算的方法 | |
KR102511911B1 (ko) | Gemm 데이터플로우 가속기 반도체 회로 | |
CN108805266B (zh) | 一种可重构cnn高并发卷积加速器 | |
Song et al. | C-Brain: A deep learning accelerator that tames the diversity of CNNs through adaptive data-level parallelization | |
EP3526665B1 (en) | Sorting for data-parallel computing devices | |
WO2023045445A1 (zh) | 数据处理装置、数据处理方法及相关产品 | |
GB2298111A (en) | Improvements relating to computer 3d rendering systems | |
CN104731729A (zh) | 一种基于异构系统的表连接优化方法、cpu和加速器 | |
Li et al. | Fsa: A fine-grained systolic accelerator for sparse cnns | |
Wang et al. | FP-AMR: A Reconfigurable Fabric Framework for Adaptive Mesh Refinement Applications | |
CN111832716A (zh) | 处理器 | |
US12099912B2 (en) | Neural processor | |
CN116774968A (zh) | 具有一组线程束的高效矩阵乘法和加法 | |
Gondimalla et al. | Barrier-free large-scale sparse tensor accelerator (BARISTA) for convolutional neural networks | |
Wang et al. | Design exploration of multi-fpgas for accelerating deep learning | |
Kang | AI Drives Domain Specific Processors | |
Wu et al. | Efficient inference of large-scale and lightweight convolutional neural networks on FPGA | |
WO2022257980A1 (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
Pan et al. | A General-Purpose and Configurable Planar Data Processor for Energy-Efficient Pooling Computation | |
TWI848207B (zh) | 記憶體內運算架構及將應用程式映射至記憶體內運算架構的電腦實施方法 | |
US20240201990A1 (en) | Fused Data Generation and Associated Communication | |
Meng et al. | ALSCA: A Large-Scale Sparse CNN Accelerator Using Position-First Dataflow and Input Channel Merging Approach | |
Rixner et al. | Media processing using streams | |
Sherer | A Comparison of Two Architectures for Breadth-First Search on FPGA SoC Platforms | |
Chen et al. | MI2D: Accelerating Matrix Inversion with 2-Dimensional Tile Manipulations |