TW202113630A - 用於矩陣運算加速器的指令之設備、方法及系統 - Google Patents

用於矩陣運算加速器的指令之設備、方法及系統 Download PDF

Info

Publication number
TW202113630A
TW202113630A TW109120806A TW109120806A TW202113630A TW 202113630 A TW202113630 A TW 202113630A TW 109120806 A TW109120806 A TW 109120806A TW 109120806 A TW109120806 A TW 109120806A TW 202113630 A TW202113630 A TW 202113630A
Authority
TW
Taiwan
Prior art keywords
output value
matrix
input
circuit
value
Prior art date
Application number
TW109120806A
Other languages
English (en)
Inventor
卡列許 皮拉
克里斯多夫 休斯
亞列山大 海涅克
Original Assignee
美商英特爾股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 美商英特爾股份有限公司 filed Critical 美商英特爾股份有限公司
Publication of TW202113630A publication Critical patent/TW202113630A/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

本案揭露有關於矩陣運算加速器的系統、方法與設備。在一實施例中,處理器包含矩陣運算加速器電路,其包含二維柵格熔合乘法累加電路,其能由第一模式切換至第二模式,在該第一模式中,該二維柵格的第一適當次組的熔合乘法累加電路的各個的個別輸出係被向下游傳送至該二維柵格的第二適當次組的熔合乘法累加電路的各個的個別輸入,以形成來自該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的輸出值,及儲存該輸出值於所得儲存器中,該第二模式中,該二維柵格的該第一適當次組的熔合乘法累加電路的各個的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第一次組形成第一輸出值,並儲存所述第一輸出值於該所得儲存器中,及該二維柵格的第二適當次組的熔合乘法累加電路的各個的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第二次組形成第二輸出值,及將所述第二輸出值儲存於該所得儲存器。

Description

用於矩陣運算加速器的指令之設備、方法及系統
本案大致關係於電腦處理器架構,更明確地說,關係於用以執行指令的設備、系統及方法,指令用以使用矩陣運算加速器電路執行矩陣運算。
處理器或處理器組執行來自例如指令集架構(ISA)的指令集的指令。指令集為電腦架構中有關於程式化的部份,並且,大致包含原生資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷及異常處置、及外部輸入及輸出(I/O)。應注意在此之指令用語可能表示例如提供給處理器執行的指令之巨指令,或者,例如由處理器的解碼器解碼巨指令造成的指令之微指令。
在以下說明中,描述了各種特定細節。然而,應了解的是,實施例也可以在沒有這些特定細節下實現。在其他實例中,已知電路、結構及技術可能未被詳細顯示,以避免模糊對本說明的了解。
在說明中之描述“一實施例”、“實施例”、“例示實施例”等表示所述實施例可能包含一特定特性、結構或特徵,但不必然每個實施例均包含該特定特性、結構或特徵。然而,此等用語並不必然表示同一實施例。再者,當特定特性、結構或特徵係被配合實施例描述時,應補充的是將這些特性、結構或特徵配合不管被明確描述否的其他實施例仍在熟習於此技藝者的認知內。
例如,在機器學習與其他大量資料處理的很多計算工作中,矩陣是愈發重要。深度學習為機器學習演算法之一類別。例如,深度類神經網路之深度學習架構可以應用至包含電腦視覺、語音識別、自然語言處理、音訊識別、社交網路過濾、機器翻譯、生物資訊及藥物設計的領域中。
用於深度學習的推理與訓練兩工具可以利用低精度算術。深度學習演算法與計算的最大化產出可以協助符合例如在資料中心執行深度學習的深度學習處理器的需求。
矩陣-矩陣乘法(亦稱GEMM或通用矩陣乘法)對於某些處理器係為重計算的運算。用於矩陣乘法(例如,GEMM)的特殊硬體係為改良某些應用,例如深度學習的峰計算(與能量效率)的良好選擇。這些應用的部份包含深度學習可以以相對少位元對輸入資料元件進行運算,而不損失準確度,只要輸出元件具有足夠位元(例如,比輸出多)即可。
在某些處理器中,處置矩陣為一困難及/或密集指令的工作。例如,矩陣的列可以放入多數緊縮資料(例如,SIMD或向量)暫存器然後個別地運算。例如,加入兩個8×2(例如,列×行)矩陣取決於資料大小可能需要一載入或者集合四個緊縮資料暫存器。然後,第一個加入緊縮資料暫存器執行對應於各個矩陣的第一列及第二個加入緊縮資料暫存器被執行對應於各個矩陣的第二列。然後,所得緊縮資料暫存器被散回到記憶體。雖然,對於小矩陣而言,此手法可能可接受,但對於較大矩陣,則是經常無法接受的。 [討論]
於此所述為在例如中央處理元件(CPU)、圖形處理元件(GPU)及加速器的電腦硬體中,支援矩陣運算的機制。矩陣運算利用代表記憶體的一或更多緊縮區域,例如暫存器的二維(2-D)資料結構。在整個說明中,這些2-D資料結構為被稱為磚片(tile)。注意,矩陣可能小於一磚片(使用較磚片的全部為少)或者利用多數磚片(矩陣係大於任一磚片的尺寸)。整個說明中,矩陣(磚片)用語被表示使用影響矩陣的磚片執行的運算,無論該矩陣是大於任一磚片典型都無關。
可以對各個磚片進行不同運算,例如在此所詳述的且包含但不限於:矩陣(磚片)乘法、磚片加法、磚片減法、磚片對角線、磚片零、磚片轉換、磚片點積、磚片廣播、磚片列廣播、磚片行廣播、磚片乘法、磚片乘法及累加、磚片移動等。另外,運算子的支援,例如使用標度及/或偏差以與這些運算一起使用或者支援在未來例如OpenCL“本地記憶體”資料壓縮/解壓縮等的非數值應用。同時,於此所述的是用以執行矩陣運算(例如, TILEPARTIALDOTPRODUCT)指令的指令。
儲存器(例如記憶體(非揮發及揮發)、暫存器、快取等)的部份係被安排呈不同水平及垂直維度的磚片。例如,一磚片以具有4的水平維度(例如,矩陣的四列)及8的垂直維度(例如,矩陣的8行)。典型地,水平維度係有關於元件尺寸(例如,2-、4-、8-、16-、32-、64-、128-位元等)。可以支援多數資料類型(單精度浮點、雙精度浮點、整數等)。 [組態磚片的例示用法]
在一些實施例中,磚片參數可以被組態。例如,給定磚片可以被組態為提供磚片選項。例示磚片選項包含但並不限於:磚片的列數、磚片的行數、是否磚片為有效、及是否磚片由一對相等大小磚片構成。
圖1A例示組態磚片的實施例。如所示,4kB的應用記憶體102已經在其上儲存4個1kB磚片,即磚片t0 104、磚片t1 106、磚片t2 108、及磚片t3 110。在此例子中,4個磚片並未成對組成,並且,各具有配置呈列與行的元件。磚片t0 104及磚片t1 106具有K列與N行之4位元組元件(例如,單精度資料),其中K等於8及N=32。磚片t2 108及磚片t3 110具有K列與N/2行之8位元組元件(例如,雙精度資料)。因為雙精度運算元為單精度寬度的兩倍,所以,此組態符合用以提供磚片選項的色盤,供給至少四個名稱以至少4kB的總儲存。在運算中,磚片可以使用下載及儲存運算,以由記憶體下載並儲存至記憶體。可用應用記憶體的數量及可用磚片的尺寸、數量及組態可取決於所用的指令編碼方案加以改變。
圖1B例示組態磚片的實施例。如所示,應用記憶體122的4kB已經儲存在2對的1kB磚片上,前一對為磚片t4L 124及磚片t4R 126,而第二對為磚片t5L 128及磚片t5R 130。如所示,呈對的磚片被細分為左磚片與右磚片。在其他實施例中,呈對的磚片被細分為偶磚片與奇磚片。在此例子中,4個磚片,各個具有排列呈列與行之元件。磚片t4L 124及磚片t4R 126具有K列與N行的4位元組元件(例如,單精度浮點資料),其中K等於8及N等於32。磚片t5 128及磚片t5R 130具有K列與N/2行之8位元組元件(例如,雙精度浮點資料)。因為雙精度運算元為單精度的寬度兩倍,所以,此用以提供磚片選項的組態與色盤相符,供給至少2個名稱以至少4kB的總儲存。圖1A的四個磚片使用4個名稱,各個命名1kB磚片,而圖1B中之2對磚片可以使用2個名稱,以指明所述成對磚片。在一些實施例中,磚片指令接受成對磚片的名稱為一運算元。在運算中,磚片可以使用下載及儲存運算,由記憶體下載或儲存至記憶體。可用的應用記憶體數量及可用磚片的尺寸、數量及組態可取決於所用的指令編碼方案加以改變。
在一些實施例中,磚片參數為可定義的。例如,“色盤”被使用以提供磚片選項。例示選項包含但並不限於:磚片名稱的數量、在一列儲存中之位元組數量、在一磚片中之列與行數量等。例如,一磚片的最大“高度”(列數量)可以被定義為:
磚片最大列=所架構儲存/(色盤名稱的數量*每列的位元組數)。
因此,一應用可以被寫入,使得名稱的固定用法將能利用不同儲存尺寸,作出各實施法。
磚片的組態係使用磚片組態(“TILECONFIG ”)指令完成,其中特定磚片用法係被定義在一選定色盤中。此宣告包含予以使用的磚片數量、每名稱(磚片)的列與行的請求數,以及,在一些實施例中,各個磚片的請求資料類型。在一些實施例中,在執行TILECONFIG指令期間,執行一致性檢查,以決定其匹配色盤登錄項的限制。 [例示磚片儲存類型]
圖2例示矩陣儲存的幾個例子。在(A)中,磚片係被儲存在記憶體中。如所示,各個“列”係由四個緊縮資料元件組成。為了取得下一“列”,使用了跨步值。注意,列可以被連續儲存在記憶體中。當磚片儲存並不映射下層記憶體陣列列寬度時,跨步記憶體存取允許一列至下一列的存取。
磚片由記憶體載入並儲存至記憶體典型係由應用記憶體跨步存取資料的緊縮列。在一些實施例中,例示TILELOAD與TILESTORE指令,或參考應用記憶體為載入操作指令中的TILE運算元的其他指令可以重新開始處置(多達)2*列的尋頁錯失、未遮罩浮點異常、及/或每指令的中斷。
在(B)中,矩陣被儲存一磚片中,其係包含多數例如緊縮資料暫存器(單指令多資料(SIMD)或向量暫存器)的暫存器。在此例子中,磚片係疊於三個實體暫存器上。典型地,使用連續暫存器,但這並不必然是如此。
在(C)中,矩陣被以非暫存器儲存可存取的方式儲存於磚片中,可以在磚片運算所用的熔合乘法累加(FMA)電路存取。此儲存可以在FMA內側,或與之相鄰。另外,如以下所討論,在一些實施例中,該儲存可以用於資料元件並且不是整個列或磚片。
用於TMMA架構的支援參數係經由CPUID報告。在一些實施例中,資訊的列表包含最大高度與最大SIMD維度。組態TMMA架構需要指明用於各個磚片的維度、用於各磚片的元件尺寸及色盤識別碼。此組態係藉由執行該TILECONFIG指令完成。
TILECONFIG指令的成功執行致能後續TILE運算子。TILERELEASEALL指令清除該磚片組態並去能TILE運算(直到下一TILECONFIG指令執行為止)。在一些實施例中,XSAVE、XSTORE等係被用於使用磚片的上下文切換。在一些實施例中,2個XCR0位元係被用於XSAVE,一個用於TILECONFIG元資料及一位元對應於實際磚片酬載資料。
TILECONFIG不只組態磚片使用,同時,也設定一狀態變數,其表示該程式係於碼的具有組態磚片的區域。一實施法可以列舉可以與磚片區域一起使用的其他指令上的限制,例如,沒有現存暫存器組的用法。
離開一磚片區域典型以TILERELEASEALL指令加以完成。其並不用任何參數並且快速地使所有磚片失效(表示資料不再需要儲存或重儲)並且,清除對應在磚片區域中的內部狀態。
在一些實施例中,磚片運算將超出該磚片組態所指明的維度外的列與行歸零。例如,當每一列被寫入時,磚片運算將超出所組態行的數量外的資料歸零(分解元件的尺寸)。例如,當具有64位元組列與組態有10列與12行之磚片時,寫入FP32元件的運算將以12*4位元組的輸出/結果資料寫入每前10列中並且將每列中之剩餘4*4位元組歸零。磚片運算也將在前10組態列後的所有列完成歸零。使用具有64位元組列的1K磚片時,將會有16列,因此,在此例子中,最後6列將會被歸零。
在一些實施例中,當載入資料時,上下文復原指令(例如,XRSTOR)執行使得超出一磚片的組態列的資料將被保持為零。如果沒有有效組態,則所有列都被歸零。磚片資料的XRSTOR可以將超出所組態者的行中載入廢料。對於XRSTOR而言應不可能清除超出所組態的行數,因為其中並沒有有關於該磚片組態的元件寬度。
當上下文寫入至記憶體時,上下文儲存(例如,XSAVE)曝露出整個TILE儲存區。如果XRSTOR將廢料資料載入至磚片的最右部份,則該資料將會為XSAVE所儲存。XSAVE將會對指定給每一磚片的數量外的列寫零。
在一些實施例中,磚片指令為可重新開始的。存取記憶體的運算允許在尋頁錯失後重新開始。有關於浮點運算的計算指令也針對無遮罩浮點異常,允許遮蔽為控制及/或狀態暫存器所控制的異常。
為了在這些事件後支援重新開始指令,這些指令如下所詳述地儲存資訊於開始暫存器中。 [矩陣(磚片)運算系統] [例示硬體支援]
圖3例示利用矩陣(磚片)運算加速器的系統實施例。在此例示中,主處理器/處理系統301傳遞命令311(例如,如算術或矩陣調處作業的矩陣調處作業,或載入與儲存作業)給矩陣運算加速器307。然而,這是只為了討論目的而以此方式顯示。如以下所詳述,此加速器307可以為處理核心的一部份。典型地,為磚片調處運算子指令的命令311將被稱為暫存器-暫存器(“reg-reg”)或暫存器-記憶體(“reg-mem”)格式。例如,TILESTORE、TILELOAD、TILECONFIG等的其他命令並不在磚片上執行資料運算。命令可以是供加速器307所處置的解碼指令(例如,微運算)或巨指令。
在此例子中,同調記憶體介面303被耦接至主處理器/處理系統301及矩陣運算加速器307,使得它們可以共享記憶體。圖4及5顯示記憶體如何使用矩陣運算加速器共享的不同實施例。如圖4所示,主處理器401與矩陣運算加速器電路405共享同一記憶體403。圖5例示一實施例,其中主處理器501與矩陣運算加速器505並未共享記憶體,而是可以存取彼此的記憶體。例如,處理器501可以存取磚片記憶體507並如常地利用其主記憶體503。同樣地,矩陣運算加速器505可以存取主記憶體503,但更典型地利用其本身記憶體507。注意,這些記憶體可以是不同類型。
在一些實施例中,磚片使用在實體暫存器上的重疊層加以支援。例如,取決於實施法,磚片可以利用16個1024位元暫存器、32個512位元暫存器等。在一些實施例中,矩陣運算利用代表記憶體的一或更多緊縮區域,例如暫存器的2維(2-D)資料結構。整個說明中,這些2-D資料結構被稱為磚片或磚片暫存器。
在一些實施例中,矩陣運算加速器307包含耦接至資料緩衝器305的多數FMA 309(在一些實施法中,這些緩衝器305之一或多者係如所示被儲存於柵格的FMA中)。資料緩衝器305緩衝由記憶體所載入的磚片及/或予以儲存至記憶體(例如,使用tileload或tilestore指令)的磚片。資料緩衝器可以例如為多數暫存器。典型地,這些FMA被安排成能讀取與寫入磚片的一柵格的鏈結FMA 309。在此例子中,矩陣運算加速器307係用以使用磚片T0、T1及T2執行矩陣乘法運算。磚片之至少一者係被包圍在FMA柵格309中。在一些實施例中,在一運算中的所有磚片係被儲存在FMA柵格309中。在其他實施例中,則只有一次組被儲存在FMA柵格309中。如所示,T1係被包圍,而T0及T2則否。注意,A、B及C表示這些磚片的可以可不佔用磚片的整個空間的矩陣。
圖6例示使用磚片的矩陣乘法累加運算(TMMA)實施例。
在某些實施例中,矩陣(磚片A 601)中的列數匹配包含計算潛候的串列(鏈結)FMA的數量。一實施法可自由地較小高度的柵格上再循環,但計算仍維持相同。
源/目的向量來自於N列的磚片(磚片C 605)並且FMA柵格611執行N向量矩陣運算,造成執行磚片的矩陣乘法的完整指令。磚片B 603為另一向量源並且供給“廣播”項給在每一級中的FMA。
在一些實施例中,在運算中,矩陣B(儲存在磚片B 603)的元件被散佈於FMA的矩形柵格中。(儲存在磚片A 601的)矩陣B令其在一列中之元件被轉換,以匹配FMA的矩形柵格的行維度。在柵格的各個FMA中,A與B的元件相乘並加至進入的被加數(由圖中之上方)並且產生的和被傳送給FMA的下一列(或最終輸出)。
單一步進的潛候是成比例於K(矩陣B的列高度)及相依TMMA典型具有足夠的源-目的列(在單一磚片或整個磚片)以隱藏該潛候。一實施法也可以將SIMD(緊縮資料元件)維度M(矩陣A的列高度)以時間步進分割,但此簡單地改變為K所乘的常數。當一程式指明較TMMA所列舉的最大值為小的K時,一實施法為自由地以“遮蔽”或“早出”執行該法。
整個TMMA的潛候係成比例於N*K。重覆率係成比例於N。每TMMA指令的MAC數量為N*K*M。
圖7例示鏈結熔合乘法累加指令的迭代執行次組的實施例。更明確地說,此例示出目的之一緊縮資料元件位置的迭代的執行電路。在此實施例中,鏈結熔合乘法累加正運算帶正負號(signed)來源,其中累加器為2倍輸入資料大小。
第一帶正負號來源(來源1 701)與第二帶正負號來源(來源2 703)各個具有四個緊縮資料元件。各個這些緊縮資料元件儲存例如浮點資料的帶正負號資料。第三帶正負號來源(來源3 709)具有兩個緊縮資料元件,其各個元件儲存帶正負號資料。第一與第二帶正負號來源701與703的尺寸為該第三帶正負號來源(初始值或前一結果)709的一半。例如,第一與第二帶正負號來源701與703可以具有32位元緊縮資料元件(例如,單精度浮點),而第三帶正負號來源709可以具有64位元緊縮資料元件(例如雙精度浮點)。
在此例示中,只有顯示出該第一與第二帶正負號來源701與703的兩個最高效緊縮資料元件位置與該第三帶正負號來源709的最高效緊縮資料元件位置。當然,也將會處理其他緊縮資料元件位置。
如所例示,緊縮資元件被成對處理。例如,第一與第二帶正負號來源701及703的最高效緊縮資料元件位置的資料係被使用乘法器電路705相乘,並且,來自該第一與第二帶正負號來源701與703的第二最高效緊縮資料元件位置的資料使用乘法器707相乘。在一些實施例中,這些乘法器電路705及707係被再使用於其他緊縮資料元件位置。在其他實施例中,其他乘法器電路也被使用,以使得緊縮資料元件被並聯處理。在一些上下文中,並聯執行係使用為帶正負號第三來源709的尺寸的巷道完成。各個乘法的結果係使用加法電路711加以相加。
乘法的結果的相加所得係(使用不同加法器713或相同加法器711)被加至帶正負號來源3 709的最高效緊縮資料元件位置的資料。
最後,第二加法的結果係儲存入對應於由帶正負號第三來源709所使用的緊縮資料元件位置的緊縮資料元件位置中的帶正負號目的715內或者如果有一,則傳遞至下一迭代。在一些實施例中,寫入遮罩係被應用至此儲存器,使得如果對應寫入遮罩(位元)被設定,則發生儲存,並且,如果未設定,則未發生儲存。
圖8例示鏈結熔合乘法累加指令的遞迴執行的次組實施例。更明確地說,此例示該目的的一緊縮資料元件位置的迭代的執行電路。在此實施例中,鏈結熔合乘法累加係運算於帶正負號來源上,其中累加器為2倍輸入資料大小。
第一帶正負號來源(來源1 801)與第二帶正負號來源(來源2 803)各個具有四個緊縮資料元件。各個這些緊縮資料元件儲存例如整數資料的帶正負號資料。第三帶正負號來源(來源3 809)具有兩個緊縮資料元件,其各個儲存帶正負號資料。第一與第二帶正負號來源801與803的尺寸為第三帶正負號來源809的一半。例如,第一與第二帶正負號來源801與803可以具有32位元緊縮資料元件(例如,單精度浮點),而第三帶正負號來源809可以具有64位元緊縮資料元件(例如,雙精度浮點)。
在此例示中,只顯示第一與第二帶正負號來源801與803的兩個最高效緊縮資料元件位置及第三帶正負號來源809的最高效緊縮資料元件位置。當然,也可以處理其他緊縮資料元件位置。
如所示,緊縮資料元件被成對處理。例如,第一與第二帶正負號來源801與803的最高效緊縮資料元件位置的資料使用乘法器電路805相乘,及來自第一與第二帶正負號來源801及803的第二最高效緊縮資料元件位置的資料係使用乘法器電路807加以相乘。在一些實施例中,這些乘法器電路805與807係被再使用於其他緊縮資料元件位置。在其他實施例中,其他乘法器電路被使用,使得緊縮資料元件被並聯處理。在一些上下文中,並聯執行係使用為帶正負號第三來源(初始值或前一迭代結果)809的尺寸的巷道加以完成。各個乘法的結果藉由使用加法/飽和電路813而被加入至帶正負號第三來源809。
當相加結果為太大的值時,加法/飽和(累加器)電路813保留運算元的正負號。更明確地說,飽和評估發生於多向相加與寫入至目的或下一迭代間之無限精度結果。當累加器813為浮點並且輸入項為整數時,則積的總和與浮點累加器輸入值被轉向為無限精度值(數百位元的固定點數),乘法結果與第三輸入的相加被執行,及對實際累加器類型的單一捨入被執行。
無正負號(unsigned)飽和表示輸出值係被限定為該元件寬度(所有為1)的最大無正負號數。帶正負號飽和表示被限定為該元件寬度(例如,對於位元組,範圍由-128(=-2^7)至127(=2^7-1))的最小負值與最大正值間之範圍內的一值。
相加與飽和檢查的結果係被儲存入對應於來自帶正負號第三來源809所用的緊縮資料元件位置的緊縮資料元件位置中的帶正負號結果815,或如果有一,則被傳送至下一迭代。在一些實施例中,寫入遮罩被應用至此儲存,使得對應寫入遮罩(位元)被設定,則儲存發生,並且,如果未設定,則未發生儲存。
圖9例示鏈結熔合乘法累加指令的迭代執行的次集實施例。更明確地說,此例示目的的一緊縮資料元件位置的迭代之執行電路。在此實施例中,鏈結熔合乘法累加係被運算於帶正負號來源及無正負號來源上,其中累加器係為4倍輸入資料尺寸。
第一帶正負號來源(來源1 901)與第二無正負號來源(來源2 903)各個具有四緊縮資料元件。各個這些緊縮資料元件具有例如浮點或整數資料的資料。第三帶正負號來源(初始值或結果915)具有緊縮資料元件,其儲存帶正負號資料。第一與第二來源901與903的尺寸為第三帶正負號來源915的四分之一。例如,第一與第二來源901與903可以具有16位元緊縮資料元件(例如,字元)及第三來源帶正負號來源915可以具有64位元緊縮資料元件(例如,雙精度浮點或64位元整數)。
在此例示中,顯示出第一與第二來源901與903的四個最高效緊縮資料元件位置及第三來源帶正負號來源915的最高效緊縮資料元件位置。當然,如果有的話,其他緊縮資料元件位置也可以被處理。
如所示,緊縮資料元件被以四組進行處理。例如,使用乘法器電路905將第一與第二來源901與903的最高效緊縮資料元件位置之資料相乘,及使用乘法器電路907將來自第一與第二來源901與903的第二高效緊縮資料元件位置的資料相乘,及使用乘法器電路909將來自第一與第二來源901與903的第三高效緊縮資料元件位置的資料相乘,及使用乘法器電路911將來自第一與第二來源901及903的最低效緊縮資料元件位置的資料相乘。在一些實施例中,第一來源901的帶正負號緊縮資料元件為正負號延伸及第二來源903的無正負號緊縮資料元件為在相乘前作零延伸。
在一些實施例,這些乘法器電路905-911被再使用於其他緊縮資料元件位置。在其他實施例中,其他乘法器電路也可以使用,使得緊縮資料元件被並聯處理。在一些上下文中,並聯執行使用為帶正負號第三來源915的尺寸的巷道加以完成。各個乘法的結果使用相加電路913加以相加。
乘法的結果再相加的結果被(使用不同加法器917或相同加法器913)加入來自帶正負號來源3 915的最高效緊縮資料元件位置的資料。
最後,第二加法的結果919被儲存至對應於由帶正負號第三來源915所用的緊縮資料元件位置的緊縮資料元件位置之帶正負號目的中或者傳送至下一迭代中。在一些實施例中,寫入遮罩係被應用至此儲存中,使得如果對應寫入遮罩(位元)被設定,則發生儲存,若未設定,則並未發生儲存。
圖10例示鏈結熔合乘法累加指令的迭代的執行次集實施例。更明確地說,此例示出目的的一緊縮資料元件位置的迭代的執行電路。在此實施例中,鏈結熔合乘法累加為運算於帶正負號來源與無正負號來源,其中累加器為4倍輸入資料大小。
第一帶正負號來源1001及第二無正負號來源1003,其各個具有四個緊縮資料元件。各個這些緊縮資料元件儲存例如浮點或整數資料的資料。第三帶正負號來源1015(初始或前一結果)具有緊縮資料元件,其儲存帶正負號資料。第一與第二來源的大小係為第三帶正負號來源1015(初始或前一結果)的四分之一。例如,第一與第二來源可以具有16位元緊縮資料元件(例如,字元)及第三帶正負號來源1015(初始或前一結果)可以具有64位元緊縮資料元件(例如,雙精度浮點或64位元整數)。
在此實施例中,顯示第一帶正負號來源1001與第二無正負號來源1003的四個最高效緊縮資料元件位置以及第三帶正負號來源1015的最高效緊縮資料元件位置。當然,如果有的話,其他緊縮資料元件位置也將被處理。
如所示,緊縮資料元件被以四組進行處理。例如,使用乘法器電路1005將第一帶正負號來源1001與第二無正負號來源1003的最高效緊縮資料元件位置之資料相乘,及使用乘法器電路1007將來自第一帶正負號來源1001與第二無正負號來源1003的第二高效緊縮資料元件位置的資料相乘,及使用乘法器電路1009將來自第一帶正負號來源1001與第二無正負號來源1003的第三高效緊縮資料元件位置的資料相乘,及使用乘法器電路1011將來自第一帶正負號來源1001與第二無正負來源1003的最低效緊縮資料元件位置的資料相乘。在一些實施例中,第一帶正負號來源1001的帶正負號緊縮資料元件為正負號延伸及第二無正負號來源1003的無正負號緊縮資料元件為在相乘前作零延伸。
在一些實施例,這些乘法器電路1005-1011被再使用於其他緊縮資料元件位置。在其他實施例中,其他乘法器電路也可以使用,使得緊縮資料元件被並聯處理。在一些上下文中,並聯執行使用為帶正負號第三來源1015(初始或前一結果)的大小的巷道加以完成。乘法的結果的相加後的結果使用加法器/飽和電路1013加上來自第三帶正負號來源1015(初始或前一結果)的最高效緊縮資料元件位置的資料。
當相加結果的值對於帶正負號飽和太大或者太小,則加法/飽和(累加器)電路1013保留運算元的正負號。更明確地說,飽和評估發生在多向相加與寫至目的間之無限精度結果上。當累加器1013為浮點及輸入項為整數時,積與浮點累積器輸入值之和被轉向為無限精度值(固定點數目的百計位元),乘法結果與第三輸入的加法被執行,及對實際累加器類型執行單一捨入。
加法與飽和檢查的結果1019被儲存入緊縮資料元件位置中的帶正負號目的,該位置對應於由第三帶正負號來源1015(初始或前一結果)所用的緊縮資料元件位置,或者被傳遞至下一迭代。在一些實施例中,寫入遮罩被應用至此儲存,使得如果對應寫入遮罩(位元)被設定,則發生儲存,及,如果未設定,則並未發生儲存。
圖11例示2的冪次為大小的SIMD實施法,依據一實施例,其中累加器使用較輸入至乘法器為大的輸入大小。注意來源(至乘法器)與累加器值可以為帶正負號或無正負號值。對於具有2倍輸入大小的累加器(換句話說,累加器值係為來源的緊縮資料元件大小的尺寸),表1101例示出不同組態。對於位元組大小來源,累加器使用字元或大小為16位元的半精度浮點(HPFP)值。對於字元大小來源,累加器使用32位元整數或大小為32位元的單精度浮點(SPFP)值。對於SPFP或32位元整數大小來源,累加器使用64位元整數或大小為64位元的雙精度浮點(DPFP)值。
對於有4倍輸入大小的累加器(換句話說,累加器輸入值為來源的緊縮資料元件大小的4倍尺寸),表1103例示不同架構。對於位元組大小來源,累加器使用32位元整數或大小為32位元的單精度浮點值(SPFP)值。對於字元大小來源,累加器使用64位元整數或在一些實施例中大小為64位元的雙精度浮點(DPFP)值。
對於具有8倍輸入大小的累加器(換句話說,累加器輸入值為來源的緊縮資料元件大小的8倍大小),表1105例示一架構。對於位元組大小來源,累加器使用64位元整數。
如同早先所暗示,矩陣運算電路可以包含在核心中,或者,作為外部加速器。圖12例示一系統實施例,其利用矩陣運算電路。在此例示中,多重實體被以環內連線1245加以耦接。
多數核心,即核心0 1201、核心1 1203、核心2 1205、及核心N 1207提供非磚片為主的指令支援。在一些實施例中,矩陣運算電路1251被設在核心1203中,及在其他實施例中,矩陣運算電路1211及1213係可由環內連線1245上取用。
另外,一或更多記憶體控制器1223-1225係被設置以代表核心及/或矩陣運算電路與記憶體1233及1231通訊。
圖13例示使用磚片支援矩陣運算的處理器核心管線實施例。分支預測及解碼電路1303執行指令的分支預測、指令的解碼及/或對來自儲存在指令儲存1301的指令進行上述兩者。例如,在此所詳述之指令可以被儲存在指令儲存器中。在一些實施法中,分開電路被使用作分支預測及在一些實施例中,至少部分指令被解碼為一或更多微運算、微碼輸入點、微指令、其他指令、或使用微碼1305的其他控制信號。分支預測與解碼電路1303可以使用各種不同機制加以實施。適當機制的例子包含但並不限於查看表、硬體實施法、可程式邏輯陣列(PLA)、微碼唯記憶體(ROM)等等。
分支預測及解碼電路1303係耦接至配置/重命名電路1307,其在一些實施例中被耦接至排序器電路1309。在一些實施例中,這些電路藉由執行以下之一或多者:1)重命名邏輯運算元值至實體運算元值(例如,在一些實施例中,暫存器假名表),2)配置狀態位元及旗標至已解碼指令,及3)排序已解碼指令,以在指令池外在執行電路上執行(例如,在一些實施例中,使用保留站),來提供暫存器重命名、暫存器配置,及/或排序功能。
排序器電路1309代表任意數量的不同排序器,包含保留站、中央指令窗等。排序器電路1309係被耦接至或包含實體暫存器檔案1315。各個實體暫存器檔案1315代表一或更多實體暫存器檔案,不同的實體暫存器檔案儲存一或更多不同資料類型,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標器,其為下一予以執行之指令的位址)、磚片等等。在一實施例中,實體暫存器檔案1315包含向量暫存器電路、寫入遮罩暫存器電路、及純量暫存器電路。這些暫存器電路可以提供架構向量暫存器、向量遮罩暫存器及通用暫存器。實體暫存器檔案1315為一引退電路1317所重疊,以例示暫存器重命名與失序執行可以實施(例如,使用重排序緩衝器及引退暫存器;使用未來檔案、歷史緩衝器及引退暫存器檔案;使用暫存器圖及一池暫存器等)的各種方式。引退電路1317及實體暫存器檔案1315被耦接至執行電路1311。
雖然暫存器重命名係以失序執行為背景加以描述,但應了解的是,暫存器重命名也可以在循序架構中加以使用。雖然所例示實施例的處理器也可以包含分開指令及資料快取單元及共享的L2快取單元,但其他實施例也可以具有用於兩指令與資料的單一內部快取,例如,一階(L1)內部快取,或者多階內部快取。在一些實施例中,系統可以包含內部快取與在核心及/或處理器外部的外部快取的組合。或者,所有這些快取可以在核心及/或處理器外。
執行電路1311為一組的一或更多執行電路,包純量電路1321、向量/SIMD電路1323、及矩陣運算電路1327及記憶體存取電路1325,以存取快取1313。執行電路執行各種運算(例如,移位、加法、減法、乘法)並針對各種類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然一些實施例可以包含專用於特定函數或多組函數的若干執行單元,但其他實施例也可以包含單一執行單元或多數執行單元,其執行所有函數。純量電路1321執行純量運算、執行向量/SIMD運算的向量/SIMD電路1323、及執行於此所詳述之矩陣(磚片)運算的矩陣運算電路1327。
例如,例示暫存器重命名、失序發出/執行核心架構可以如下實行一管線:1)指令擷取電路,執行擷取及長度解碼級;2)分支及解碼電路1303,執行解碼級;3)配置/重命名電路1307,執行配置級與重命名級;4)排序器電路1309,執行排序級;5)實體暫存器檔案(耦接至或包含於排序器電路1309及配置/重命名電路1307與記憶體單元中)執行暫存器讀取/記憶體讀取級;執行電路1311執行執行級;6)記憶體單元及實體暫存器檔案單元執行回寫/記憶體寫入級;7)各種單元可以涉及在例外處置級中;及8)引退單元及實體暫存器檔案單元執行提交級。
核心可以支援一或更多指令集(例如,x86指令集(一些擴充已經被加入較新版本);美國加州Sunnyvale的MIPS科技的MIPS指令集;美國加州Sunnyvale的ARM控股的ARM指令集(具有例如NEON的選用其他擴充),包含了於此所述之指令。在一實施例中,核心1390包含邏輯以支援緊縮資料指令集擴充(例如,AVX1、AVX2),藉以允許為很多多媒體應用所用的運算被使用緊縮資料加以執行。
應了解核心可以支援多線(multithreading)( 執行兩或更多並列組的運算或線程),並可以以各種方式加以執行,包含時間切割多線、同時多線(其中單一實體核心提供一個用於各個線的邏輯核心,該實體核心為同時多線)、或其組合(例如,時間切割擷取及解碼並隨後同時多線,例如Intel® Hyperthreading技術)。
圖14例示使用磚片支援矩陣運算的處理器核心管線的實施例。分支預測及解碼電路1430執行指令的分支預測、指令的解碼及/或對來自儲存在指令儲存1401的指令進行上述兩者。例如,在此所詳述之指令可以被儲存在指令儲存器中。在一些實施法中,分開電路被使用作分支預測及在一些實施例中,至少部分指令被解碼為一或更多微運算、微碼輸入點、微指令、其他指令、或使用微碼1405的其他控制信號。分支預測與解碼電路1403可以使用各種不同機制加以實施。適當機制的例子包含但並不限於查看表、硬體實施法、可程式邏輯陣列(PLA)、微碼唯記憶體(ROM)等等。
分支預測及解碼電路1403係耦接至配置/重命名電路1407,其在一些實施例中被耦接至排序器電路1409。在一些實施例中,這些電路藉由執行以下之一或多者:1)重命名邏輯運算元值至實體運算元值(例如,在一些實施例中,暫存器假名表),2)配置狀態位元及旗標至已解碼指令,及3)排序已解碼指令,以在指令池外在執行電路上執行(例如,在一些實施例中,使用保留站),來提供暫存器重命名、暫存器配置,及/或排序功能。
排序器電路1409代表任意數量的不同排序器,包含保留站、中央指令窗等。排序器電路1409係被耦接至或包含實體暫存器檔案1415。各個實體暫存器檔案1415代表一或更多實體暫存器檔案,不同的實體暫存器檔案儲存一或更多不同資料類型,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標器,其為下一予以執行之指令的位址)、磚片等等。在一實施例中,實體暫存器檔案1415包含向量暫存器電路、寫入遮罩暫存器電路、及純量暫存器電路。這些暫存器電路可以提供架構向量暫存器、向量遮罩暫存器及通用暫存器。實體暫存器檔案1415為一引退電路1417所重疊,以例示暫存器重命名與失序執行可以實施(例如,使用重排序緩衝器及引退暫存器;使用未來檔案、歷史緩衝器及引退暫存器檔案;使用暫存器圖及一池暫存器等)的各種方式。引退電路1417及實體暫存器檔案1415被耦接至執行電路1411。
雖然暫存器重命名係以失序執行為背景加以描述,但應了解的是,暫存器重命名也可以在循序架構中加以使用。雖然所例示實施例的處理器也可以包含分開的指令及資料快取單元及共享的L2快取單元,但其他實施例也可以具有用於兩指令與資料的單一內部快取,例如,一階(L1)內部快取,或者多階內部快取。在一些實施例中,系統可以包含內部快取與在核心及/或處理器外部的外部快取的組合。或者,所有這些快取可以在核心及/或處理器外。
執行電路1411為一組的一或更多執行電路1427及一組的一或更多記憶體存取電路1425以存取快取1413。執行電路1427執行於此所詳述之矩陣(磚片)運算。
例如,例示暫存器重命名、失序發出/執行核心架構可以如下實行一管線:1)指令擷取電路,執行擷取及長度解碼級;2)分支及解碼電路1403,執行解碼級;3)配置/重命名電路1407,執行配置級與重命名級;4)排序器電路1409,執行排序級;5)實體暫存器檔案(耦接至或包含於排序器電路1409及配置/重命名電路1407與記憶體單元中)執行暫存器讀取/記憶體讀取級;執行電路1411執行一執行級;6)記憶體單元及實體暫存器檔案單元執行回寫/記憶體寫入級;7)各種單元可以涉及在例外處置級中;及8)引退單元及實體暫存器檔案單元執行提交級。
核心可以支援一或更多指令集(例如,x86指令集(一些擴充已經被加入較新版本);美國加州Sunnyvale的MIPS科技的MIPS指令集;美國加州Sunnyvale的ARM控股的ARM指令集(具有例如NEON的選用其他擴充),包含了於此所述之指令。在一實施例中,核心1490包含邏輯以支援緊縮資料指令集擴充(例如,AVX1、AVX2),藉以允許為很多多媒體應用所用的運算被使用緊縮資料加以執行。
應了解核心可以支援多線(執行兩或更多並列組的運算或線程),並可以以各種方式加以執行,包含時間切割多線、同時多線(其中單一實體核心提供一個用於各個線的邏輯核心,該實體核心為同時多線)、或其組合(例如,時間切割擷取及解碼並隨後同時多線,例如Intel® Hyperthreading技術)。 佈局
整個說明中,資料係使用列為主(row major)資料佈局加以表示。行為主使用者應依據其取向轉譯該等項。圖15例示以列為主格式及行為主格式表示之矩陣的例子。如所示,矩陣A為2×3矩陣。當此矩陣以列為主格式加以儲存時,則列的資料元件為連續的。當此矩陣以行為主格式加以儲存時,則行的資料元件為連續的。矩陣的已知特性為AT *BT =(BA)T ,其中上標T表示轉置。讀取行為主資料成為列為主資料造成該矩陣看來像轉置矩陣。
在一些實施例中,列為主語意被利用於硬體中,及行為主資料係被以矩陣的轉置的結果來替換運算元次序,但對於後續自記憶體讀取的行為主,則為正確未轉置矩陣。
例如,如果有兩行為主矩陣相乘:
Figure 02_image001
輸入矩陣將被儲存在線性記憶體(行為主)成為: acebdf及ghijkl。
以維度2×3及3×2將這些矩陣讀取為列為主,則它們將成為:
Figure 02_image003
交換次序及矩陣相乘:
Figure 02_image005
轉置矩陣被執行並可以以列為主順序加以儲存:
Figure 02_image007
並被用於後續行為主計算中,其為正確未轉置矩陣:
Figure 02_image009
例示用法
圖16例示矩陣(磚片)的用法例子。在此例子中,矩陣C 1601包含兩磚片,矩陣A 1603包含一磚片,及矩陣B 1605包含兩磚片。此圖顯示一計算矩陣乘法的演算法的內環路例。在此例子中,來自矩陣C 1601的兩結果磚片tmm0及tmm1係被用以累加中間結果。來自矩陣A 1603的一磚片(tmm2)被重複使用兩次,因為它被以來自矩陣B 1605的兩磚片相乘。指標以箭頭所指之方向載入新A矩陣(磚片)及兩新B矩陣(磚片)。外環路(未示出)調整用於C磚片的指標。
如所示例示碼包含磚片架構指令的用法並被執行以組態磚片用法、加載磚片、處理該等磚片的環路、將磚片儲存至記憶體及釋放磚片用法。
圖17例示矩陣(磚片)的用法實施例。在1701,磚片用法被組態。例如,TILECONFIG指令被執行以組態包含設定每磚片列與行的數量的磚片用法。典型地,在1703,至少一矩陣(磚片)由記憶體載入。在1705使用矩陣(磚片)執行至少一矩陣(磚片)運算。在1707,至少一矩陣(磚片)被儲存入記憶體及在1709可以發生上下文交換。 例示組態 磚片組態硬體支援
如上所討論,磚片用法典型需要在使用前被組態。例如,所有列與行的完整用法可能不需要。在一些實施例中,不但不組態這些列與行以節省功率,而是該組態可以被使用以決定是否一運算將產生錯誤。例如,形式(N×M)*(L×N)的矩陣乘法,如果M及L不相同,則將典型不行運算。
在一些實施例中,在使用具有磚片的矩陣之前,磚片支援將被組態。例如,每磚片有多少列及行,將被使用的磚片等等被組態。TILECONFIG指令為對電腦本身的改良,當其提供支援以組態該電腦,以使用矩陣加速器(成為處理器核心的一部份,或成為外部裝置)。尤其,TILECONFIG指令的執行使得一組態予以由記憶體取回並被應用至矩陣加速器內的矩陣(磚片)設定。 磚片用法組態
圖18例示依據實施例之磚片的用法組態的支援。記憶體1801包含予以支援的矩陣(磚片)的磚片說明1803。
處理器/核心1805的指令執行資源1811將磚片說明1833的態樣儲存入磚片組態1817中。磚片組態1817包含色盤表1813,以詳述針對一色盤組態了什麼磚片(每一磚片中之列與行數目)及正使用矩陣支援的標示。更明確地說,指令執行資源1811被組態以使用為磚片組態1817所指明的磚片。指令執行資源1811也可以包含一特定機器暫存器或組態暫存器以表示磚片用法。例如,使用中的額外值與開始值也被設定。磚片組態1817利用暫存器1819以儲存磚片用法與組態資訊。
圖19例示予以支援的矩陣(磚片)的說明的實施例。這是於執行STTILECFG指令時予以儲存的說明。在此例子中,各個欄位為一位元組。在位元組[0]中,色盤ID被儲存。色盤ID被用以索引色盤表1813,其每一色盤ID儲存在磚片中之位元組數、及為此組態所定義的有關於此ID的磚片之每一列的位元組。
位元組1儲存予以儲存在“開始列”暫存器1903中之值及位元組2儲存予以儲存在暫存器,startP1905中的值。為了在這些事件後支援重開始指令,指令儲存這些暫存器的資訊。為了支援在例如上述的中斷事件後的重開始指令,指令儲存資訊在這些暫存器中。startRow值表示應被用於重開始的列。startP值表示當被成對使用時,用於儲存運算的列內的位置,及在一些實施例中,表示該列的下半部(一對的下磚片)或該列的上半部(一對的上磚片)。通常,不需要在列(行)中之位置。
當有TITLECONFIG與STTIECFG的異常時,成功執行矩陣(磚片)指令將設定startRow與startP兩者為零。
只要被中斷的矩陣(磚片)指令未被重開始,則軟體就有責任將startRow與startP值設定為零。例如,未遮罩浮點異常處置器可以決定結束軟體的運算並改變程式計數器值至另一指令,通常是下一個指令。在此時,在回復程式之前,軟體異常處置器必須將由作業系統所呈現給它的異常中的startRow與startP值歸零。作業系統將隨後使用復原指令重載這些值。
位元組3儲存磚片1907的配對(每一磚片1b)的指示。
位元組16-17儲存用於磚片0的列1913與行1915的數目,位元組18-19儲存用於磚片1的列與行數目等等。換句話說,每2位元組群組指明一磚片的列與行數。如果一群組的2位元組並未被使用以指明磚片參數,則它們應令值為零。指明較實施法限制或色盤限制為多的磚片的磚片參數會造成故障。未組態磚片被以0列,0行設定至初始狀態。
最後,記憶體中之組態典型將例如幾個連續位元組都是零的結束描繪法加以結束。 例示磚片與磚片組態儲存
圖20(A)-(D)例示暫存器1819的例子。圖20(A)例示多數暫存器1819。如所示,各個磚片(TMM0 2001…TMMN 2003)具有分開的暫存器,各個暫存器儲存有用於該特定磚片的列與行大小。StartP 2011與StartRow2013被儲存在分開暫存器中。一或更多狀態暫存器2015被設定(例如,TILE_CONFIGURED=1),以表示磚片被組態供使用。
圖20(B)例示多數暫存器1819。如所示,各個磚片具有分開的暫存器,用於其列與行。例如,TMM0列組態2021、TMM0行組態2023、StartP 2011及StartRow 2013被儲存在分開的暫存器。一或更多狀態暫存器2015被設定(例如,TILES_CONFIGURED=1),以表示磚片被組態供使用。
圖20(C)例示單一暫存器1819。如所示,此暫存器儲存磚片組態(每磚片的列與行)2031,StartP 2011、及StartRow 2013係被儲存在單一暫存器作為緊縮資料暫存器。一或更多狀態暫存器2015係被設定(例如,TILES_CONFIGURED=1),以表示磚片被組態供使用。
圖20(D)例示多數暫存器1819。如所示,單一暫存器儲存磚片組態(每磚片的列與行)2031。StartP與StartRow被儲存於分開的暫存器2011及2013。一或更多狀態暫存器2015係被設定(例如,TILE_CONFIGURED=1),以表示磚片被組態供使用。
其他組合也被想出,例如,將開始暫存器組合成單一暫存器,它們被分開顯示等等。 可組態脈動陣列
如上所述,用於通用矩陣乘法(即,GEMM)的硬體是為改良某些應用,例如深度學習的高峰計算(與能量效率)的良好選擇。根據深度類神經網路(DNN)的大量計算需求可能造成利用各種如熔合乘法加法(FMA)電路的(例如,幾百)處理元件的硬體(例如,加速器)的使用。然而,(例如,DNN)加速器可以針對很規則資料流態樣的密集矩陣乘法加以最佳化。在某些實施例中,加速器使用脈動陣列實施法,以最大化效能及區域/功率效率。脈動陣列可以包含被最佳用於很規則資料流的密集二維陣列。
然而,未完美映射至這些資料流的運算(例如,問題),以及,最佳化用於這些資料流的硬體可能造成在脈動陣列中之這些處理元件(例如,算術邏輯單元(ALU)電路)的相當欠利用,例如,因為一部分的執行並未完美地映射至規則資料流。在一實施例中,某些矩陣乘法欠利用該硬體陣列,例如,由於小問題尺寸或矩陣的週邊邊界不是陣列尺寸的乘數所造成的乘法。
在某些實施例中,最佳化用於固定矩陣大小的加速器有著欠利用的問題。例如,考量具有36的矩陣寬度及32的脈動陣列(例如,矩陣運算加速器電路)寬度的工作負載。如果陣列被填充以零(或者整個磚片被重組態),則硬體將在第一通過時會處理32元件寬度的全寬度磚片,然後,在下一通過中,磚片只有4元件寬。因此,整體效率為56.25%(平均32/32=100%及4/32=12.5%)。在某些實施例中,數值的移動至向量加速器(例如,與矩陣運算加速器電路分開的向量堆疊)是昂貴的及高峰計算率係遠低於脈動陣列(例如,矩陣運算加速器電路)。
在此之某些實施例係為可組態脈動陣列(例如,矩陣運算加速器電路),其支援多數同時較小矩陣乘法及新指令,以驅動該硬體。在某些硬體中,指令的解碼與執行造成可組態脈動陣列硬體(例如,矩陣運算加速器電路)計算C=A*B+C,其中,A、B及C各個為二維矩陣,及對於C的各個元件,硬體計算輸入矩陣A的一列與矩陣B的一行之點積。在此的某些實施例為新指令(及脈動陣列的硬體支援),其採各個由多數矩陣“膠合”在一起構成的A與B(例如與C)輸入並產生多數輸出矩陣。
此解決法的優點為其允許硬體更富彈性,因此,具有較其他解決法更多條件下,具有最大利用率。例如,如果在一陣列中之處理元件(例如,ALU電路)的數量大小為32×32,及A矩陣為16寬×32高,則硬體允許一使用者有效“膠合”兩個此A矩陣一起,以取得A’,其為32×32,因此,全利用該陣列。
為了深度學習,及其他應用,在此之實施例允許單一指令執行,以同時,在一脈動陣列中,運算多數小矩陣,使得處理元件(例如,ALU電路)的利用率高。再者,在此之實施例提供此能力,而在大的矩陣運算上,不必付出高效/區域/功率負擔。
在某些實施例中,針對各個不同大小的矩陣設計加速器並不實際。脈動陣列實施法可以針對固定大小輸入及/或輸出矩陣,利用密集二維柵格的處理元件(例如,FMA電路)。因此,不同於以重組態暫存器(例如,只某數量改良一維效率)或者以補零該矩陣以使之配合該陣列的大小,來用於較固定大小為小的矩陣大小,在此的實施例利用硬體(及指令或多數指令),在同時運算多數小矩陣(例如,被一起處理)。在此某些實施例提供矩陣運算加速器電路,其並不利用移動進出向量堆疊(例如,透過資料快取單元(DCU)的英特爾®AVX堆疊)及/或對資料值(例如,輸入)補零的資料值(例如,輸入)。
在某些實施例中,矩陣運算加速器電路採用多數(例如,兩或三)(例如,各個為二維)矩陣A(維度為M×K,其中M與K為整數),B(維度為K×N,其中K與N為整數)、及C(維度為M×N,其中,M與N為整數)為輸入,並且,然後,對個別元件執行運算(例如,熔合乘法加),以產生被儲存於矩陣(例如回到維度M×N的矩陣C,其中M與N為整數)的結果。在一實施例中,M、K及N為小於或等於16。在某些實施例中,矩陣運算加速器電路執行以下運算:
Figure 02_image011
圖21例示矩陣運算加速器電路2100的實施例,其包含二維柵格的處理元件電路2106-1至2106-4。在某些實施例中,資料儲存器2102(例如,暫存器檔案)包含多數暫存器,例如,具有個別組的暫存器,其代表第一輸入二維矩陣(A)、第二輸入二維矩陣(B)、及第三輸入二維矩陣(C)(例如,與所得儲存器)。在一實施例中,輸出二維矩陣結果是被儲存在形成第三輸入二維矩陣(C)的暫存器中,例如,在用於輸入二維矩陣(C)的值被矩陣運算加速器電路2100所利用後,覆寫這些值。所繪矩陣運算加速器電路2100包含多數配送電路2104-1至2104-4,以依據予以執行之運算將輸入值(例如,來自矩陣A與矩陣B)配送至處理元件。
注意,在此之圖可能未描繪所有資料通訊耦接(例如,連接)。本技藝中之熟習者將了解,此為不模糊在圖中之某些細節。注意,在圖中之雙箭頭可能不需要雙向通訊,例如,其可能表示單向通訊(例如,進或出該元件或裝置)。任一或所有通訊路徑的組合可以被利用於此之某些實施例中。單一線在其中可以包含多數路徑,例如,多個通道。例如,線2110可以包含多數路徑(例如,“X”,其中X為任意正整數),例如,一個路徑用於來自矩陣A的值及一個路徑用於來自矩陣B的值。
於要求執行運算時(例如,藉由解碼與執行造成該運算的指令)時,在某些實施例中,矩陣運算加速器電路2100將來自矩陣A與矩陣B的值送至個別配送電路。例如,運算可以將矩陣A乘以矩陣B,然後,將個別所得加至來自矩陣C的對應值。在一實施例中,第一配送電路2104-1接收來自矩陣A[列][行]的第一值A[0][0](該值列索引0及行索引0)並將該值廣播至該列中的各個處理元件2106-1至各個處理元件2106-1的第一輸入及來自該矩陣B的第一列的一組值並將這些值送至各個處理元件2106-1的個別第二輸入(例如,使得該處理元件2112接收來自B[0][0]的值,處理元件2114接收來自B[0][1]的值等等)。在一實施例中,處理元件2112在其輸出2116提供 A[0][0]*B[0][0]的乘法結果,及處理元件2114在其輸出2118提供A[0][0]*B[0][1]的乘法結果。輸出(例如,輸出2116及2118)被送給配送電路2 2104-2。
在一實施例中,第二配送電路2104-2要接收來自矩陣A[列][行]的第二值A[0][1](該值來自列索引0及行索引1)並將該值廣播至在該列中之各個處理元件2106-2至各個處理元件2106-2的第一輸入,接收來自該矩陣B的第二列的一組值並將這些值送至在各個處理元件2106-1的個別第二輸入(例如,使得處理元件2122接收來自B[1][0]的值,處理元件2124接收來自B[1][1]之值等等),及接收來自處理元件2106-1的上列的輸出的個別輸出。在一實施例中,處理元件2122在其輸出2126提供A[0][1]*B[1][0]乘法加至輸出2116(A[0][0]*B[0][0])的結果,及處理元件2124在其輸出2128提供乘法A[0][1]*B[1][1]被加至輸出2118 (A[0][0]*B[0][1])的結果。在某些實施例中,此熔合乘法加法運算係為處理元件2106-3及2106-4的各個列所繼續,以由處理元件2106-4產生輸出2130及輸出2132。注意,4為處理元件的列之例示數目(例如,及各個矩陣A、B、及C的列與行),但它可以為任何多數列。因為已經到達矩陣運算加速器電路2100的處理元件的列的末端,所以,偏置相加電路2108係相加來自矩陣C與輸入2134的個別元件(例如,一組並列輸入埠)(例如,來自矩陣C的第一列的個別元件)並將所得經由輸出2136(例如,一組並列輸出埠)儲存在矩陣C的各別元件中(例如,在矩陣C的第一列的個別元件)。例如,來自矩陣C的第一列的第一元件被加至來自輸出2130的所得,並且該結果被儲存回到矩陣C的第一列的第一元件位置,及來自矩陣C的第一列的第二元件被相加至來自輸出2132的所得並且該結果被儲存回到矩陣C的第一列的第二元件位置。這可以針對矩陣A的各個列重覆,以產生矩陣A*矩陣B的整個乘法(例如,並將來自矩陣C的偏置相加入至個別所得)。
因此,電路的某些實施例使用二維(2D)陣列的處理元件(PE)(例如,FMA單元),如具有一些輸入及輸出緩衝器及本地控制邏輯電路。在一實施例中,各個PE由例如暫存器檔案的資料儲存中取得其部份輸入,由其他PE取得其他輸入、及最後列的PE,將其輸出送回到資料儲存。因此,在這些實施例中,PE形成管線。使用者通常可以想要對大組資料元件(例如,較PE為多的資料元件)執行一連串的運算。因此,元件可以被放置於陣列的頂部,以開始該管線,並且讓資料向下滴漏通過管線(於適當時,在該管線的各種階段提供額外輸入)。
在一實施例中,處理元件的各個實例為一熔合乘法累加(FMA)電路,其包含乘法電路(例如,取第一輸入a,第二輸入b,並產生所得輸出),及一加法電路(例如,將作為第一輸入的來自乘法電路的所得輸出與第三輸入c相加,以產生所得)。
在此之某些實施例為新指令(及在脈動陣列中的硬體支援),取A及B(例如,與C)輸入,其各個由多數矩陣"膠合"在一起構成並產生多數輸出矩陣,而不是只對單一矩陣A、單一矩陣B及單一矩陣C運算。為了簡化用於二維FMA電路內的資料流的控制,在此之某些實施例提供對多數矩陣的點積運算的控制,而不必修改對熔合乘法累加運算的控制。
圖22為用於TILEPARTIALDOTPRODUCT指令2201的用法的方塊圖,以依據部份實施例加速矩陣運算。指令2201用以使得(矩陣A*矩陣B)+矩陣C的運算為矩陣運算加速器電路2220所執行。矩陣運算加速器電路2220可以為在圖24中之矩陣運算加速器電路2400或在圖26中的矩陣運算加速器電路2600的一實例。
不同於只對單一矩陣A、單一矩陣B及單一矩陣C運算,指令2201(及圖24的矩陣運算加速器電路2400及圖26中之矩陣運算加速器電路2600)允許同時對多數輸入矩陣進行運算。例如,在此實施例可以(例如,藉由重新佈局資料)擷取具有多數相鄰A矩陣的A磚片(例如,其中矩陣A 2222包含來自相同A矩陣的第一列A1資料與第二列A2資料,其中A1’與A2’分別為來自另一“A”矩陣的第一列資料與第二列資料)。取決於該應用,在此之實施例可以藉由複製相同B矩陣或拼接多數B矩陣(例如,於圖22所示,以來自不同B矩陣的第一列B1的資料及第一列B1’的資料)形成B磚片。在另一實施例中,B矩可以被複製,例如,使得B1’=B1。在某些實施例中,硬體支援存取多數C矩陣(例如,如圖22所示)。在一實施例中,另一指令(例如,在軟體中所指)係用以由不同矩陣形成A磚片、由不同B矩陣或複製B矩陣形成B磚片、及由不同C矩陣或複製C矩陣形成C磚片(例如,C1’=C1及C2’=C2及/或C1=C2)。
因此,某些實施例中,當指令2201被解碼與執行時,正確地運算各個由多數矩陣“膠合”在一起的A&B輸入並在加入個別C值後,產生多數輸出矩陣。
因此,在一模式運算中,矩陣運算加速器電路產生更新的C1=(A1*B1+A1’*B1’+…)+C1。然而,當A與A’為不同矩陣並被一起輸入時,在某些實施例中,這不是想要的運算。相反地,在另一模式的運算中,矩陣運算加速器電路用以每一輸出元件執行較少的運算,例如,更新C1=A1*B1+C1。這表示,在第二模式中,有較第一模式多的輸出元件。所得更新C矩陣可以被緊縮成多數膠合在一起的輸出矩陣(例如,在圖22中的更新矩陣C 2226所示),或者,可以具有多數獨立目的。
指令的例示格式具有TILEPARTIALDOT PRODUCT的助憶符(或用於“磚片部份‘N’點積”的TPNDP),其中N為邏輯膠合在一起的不同矩陣的數目。例如,如果兩個A矩陣被輸入至一個A磚片輸入(例如,及類似地,兩個B矩陣進入一個B磚片),指令可以被稱為TP2DP。指令也可以具有格式為:TPNDP tsrcdest,tsrc1,tsrc2,其中第一欄位“tsrcdest”表示磚片來源/目的(例如,磚片2226)、第二欄位“tsrc1”表示第二磚片來源(例如,磚片2222)、及第三欄位“tsrc2”表示第三磚片來源(例如,磚片2224)。在一實施例中(例如,具有大輸出磚片),輸出磚片的大小為隱含的。在具有多數輸出磚片的實施例中,輸出磚片的數目為N(其中N為任意正整數)。特定磚片暫存器可以是連續的,由tsrcdest(例如,tmm0及tmm1,如果tmm0為特定及N=2)開始,或者,可以使用任何慣例,以選擇一群多個暫存器。某些實施例利用新指令用於處置給定之不同大小膠合在一起的矩陣。例如,如果矩陣運算加速器電路能處置四個膠合在一起的矩陣,但如果只提供兩膠合在一起的矩陣的輸入(其一為另一個的三倍大),則四分之一的所述元件係來自一矩陣,及四分之三則來自另一矩陣,並且,這被指明於運算碼(例如,T1AND3DP)或者經由被傳送至指令的立即值(例如,TPDP tsrcdest,tsrc1,tsrc2,imm8)。立即值的可能編碼係被討論如下。
圖22為依據一些實施例之例示使用 TILEPARTIALDOTPRODUCT指令2201以加速矩陣點積運算的方塊圖。如所示,指令2201包含運算碼2202(例如,TILETRANSFORM),其指示該處理器將要依據本案執行矩陣的點積。更明確地說,在某些實施例中,回應於該運算碼,處理器將對儲存在單一輸入磚片中之各個多數矩陣執行個別運算。例如,當源位置1 2206儲存一或更多A矩陣、源位置2 2208儲存一或更多B矩陣、及源位置3 2204儲存一或更多C矩陣。選用地,指令可以包一欄位(例如,運算元或運算碼),其指明一或更多所述輸入或輸出矩陣的M 2210(例如,列數)及K 2212(例如,行數)。“膠合”在一起的矩陣的大小及/或數目可以以幾個方式中之一或更多加以指明:作為TILEPARTIALDOTPRODUCT指令的運算元、作為至指定運算碼的字尾或字首、作為設有該指令的立即值2214的一部份、作為發出指令(例如,TILECONFIG )前為軟體所規劃的控制暫存器的一部份、或者甚至作為架構預設值。M及K可以各個由在某些實施例中之整數值的無限範圍中選出。
指令2201更指明目的矩陣(例如磚片)位置2204。各個指明矩陣位置可以在記憶體位置、向量暫存器之集合及磚片暫存器的集合。在此,指明來源2206、2208及2210及目的矩陣2216各個包含多數元件。在一實施例中,元件為64位元或32位元。
如所示為用以執行 TILEPARTIALDOTPRODUCT指令2201的系統2200。系統包含儲存一或更多A矩陣的源位置1 2222、儲存一或更多B矩陣的源位置2224、及儲存一或更多C矩陣的源位置3 2226、矩陣運算加速器電路2220及指定目的矩陣(磚片)2226。
或者,也可能存在有較差方法以執行這些矩陣運算,但並未完成執行該TILEPARTIALDOTPRODUCT指令的本案實施例的所述功率與效能增益。在一些其他方法中,軟體可以將資料載入向量/SIMD暫存器、用向量指令執行轉換、將重新格式資料寫入記憶體中、然後,將重新格式資料載入2D/向量/磚片暫存器中。但在向量指令中作出格式轉移可能緩慢,所以,複雜軟體調整,並可能在快取中需要更多空間。
圖23例示依據本案實施例處理 TILEPARTIALDOTPRODUCT指令的方法2300。方法2300包含使用擷取電路擷取具有一格式的指令,該格式具有欄位以指明一運算碼及源磚片與目的磚片的位置,其中該運算元指明該處理器將對在單一源磚片中之多數矩陣的各個矩陣的適當次組資料執行點積運算;使用解碼電路解碼所擷取指令2303;排序解碼矩陣指令的執行2305;藉由對所述適當次組資料執行點積運算並將所得儲存至目的磚片,而使用執行電路而對該所解碼指令作出回應2307;及提交執行指令的所得2309。在一實施例中,一指令將矩陣運算加速器電路在第一模式(例如,在各個輸入磚片/個別組暫存器中只有單一矩陣)與第二模式(例如,在輸入磚片/個別組暫存器的至少之一中有多數矩陣)間作切換。
在某些實施例中,運算以在圖21中之矩陣運算加速器電路2100開始,其中,資料值被輸入至陣列的開始處,以開始管線,以連續結果滴漏通過管線(例如,適當地,在管線的各階段提供額外輸入)。例如,以資料由一PE向下流通過配送通道至下一PE。為了對矩陣運算加速器電路提供可組態性,在此之某些實施例以規則的間隔將組態開關加入矩陣運算加速器電路(例如,在圖24中之第四列PE後的組態開關2438)。在某些實施例中,組態開關為一對解多工器與多工器。在一實施例中,當組態開關被導通時,解多工器將初始C值加入來自前一PE的所得輸出後寫出至C緩衝器以及多工器將下一PE送出一零值,而不是前一PE的輸出。因此,在此的某些實施例中斷了點積的鏈並開始新的鏈。在一實施例中,如果組態開關被關斷,則完成矩陣運算加速器電路作動為向具有一輸出級至C的單一管線,例如,使得當輸入資料值被插入於管線的開始處時(例如,插入處理元件2406-1),所得向前流動(例如,以描述方向向下),直到其到達組態開始導通為止。在某些實施例中,此級中,管線中斷及在將之加至對應C元件後,寫出該值至該緩衝器,例如,及在管線中之下一級被加載,如同前一PE的輸出值為零般。因此,這可以被認定為新管線的開始。
在某些實施例中,組態開關被一或更多指令所控制。例如,第一(如,在各個磚片乘法中之單一矩陣)指令被關斷所有組態開關,及第二(例如,在各個磚片中的多數矩陣)指令導通一或更多列的組態開關。例如,用以處置邏輯膠合在一起(例如,上述之TP2DP)的兩均勻大小矩陣(例如,在各個磚片A、B及C中的兩大小均勻矩陣)的指令將導通在該陣列PE中間的一列組態開關,以對儲存在磚片A、B及C中的第一組矩陣進行A*B+C,並對也儲存在磚片A、B及C中的第二組矩陣執行A’*B’+C’。
圖24例示包含二維柵格處理元件電路2406-1至2406-5的矩陣運算加速器電路2400的實施例,其包含一列組態開關(例如,具有組態開關的配送電路),以在第一模式與第二模式間作切換。在一實施例中,指令的解碼與執行將矩陣運算加速器電路2400由第一模式(例如,在各個輸入磚片/個別組暫存器中只具有單一矩陣)切換至第二模式(例如,在輸入磚片/個別組暫存器的至少之一中具有多數矩陣),或者,由第二模式切換至第一模式。
在某些實施例中,資料儲存器2402(例如,暫存器檔案)包含多數暫存器,例如,具有一個別組的暫存器,其代表至少一(例如多數)第一輸入二維矩陣(A)、至少一(例如多數)第二輸入二維矩陣(B)、及至少一(例如多數)第三輸入二維矩陣(C)(例如所得儲存器)。在一實施例中,輸出二維矩陣所得是被儲存在形成至少一第三輸入二維矩陣(C)的暫存器中,例如,在輸入二維矩陣(C)的值已經為矩陣運算加速器電路2400所利用後,覆寫它們。
在一實施例中,當在第一模式中,儲存在第一多數暫存器中之值代表單一輸入二維矩陣A及儲存在第二多數暫存器之值代表單一輸入二維矩陣B(例如,儲存在第三多數暫存器中之值代表單一輸入二維矩陣C),及當在第二模式中,儲存在第一多數暫存器中之值代表多數輸入二維矩陣A及A’,及儲存在第二多數暫存器之值代表多數輸入二維矩陣B及B’(例如,儲存在第三多數暫存器中之值代表多數輸入二維矩陣C及C’)。
所繪矩陣運算加速器電路2400包含多數配送電路2402-1至2402-4,以依據予以執行之運算,將輸入值(例如,來自矩陣A及A’及矩陣B及B’)配送至處理元件。
注意,在此的圖式可能不會描繪所有資料通訊耦合(例如,連接)。熟習於本技藝者將了解到,這是為了不模糊圖式中之某些細節。注意,在圖中之雙向箭頭可能不必雙向通訊,例如,它可能表示單向通訊(例如,進出該元件或裝置)。在此的某些實施例中,可以利用通訊路徑的任一或所有組合。單一線路可以包含於此之多數路徑,例如,多數通道。例如,線路2410可以包含多數路徑(例如,“X”,其中X為任意正整數),例如,一路徑用於來自矩陣A的值,及一路徑用於來自矩陣B的值。
在某些實施例中,於要求執行一運算(例如,藉由解碼與執行一指令,以促成該運算),矩陣運算加速器電路2400將來自磚片A與磚片B的值送至個別配送電路。例如,第一模式中,運算可以將來自磚片A的矩陣A乘以來自磚片B的矩陣B,然後,將個別所得加至來自磚片C的矩陣C中的對應值,當在第二模式中,則將來自磚片A的矩陣A乘以來自磚片B的矩陣B,然後,將個別所得加至來自磚片C的矩陣C的對應值,以及,將來自磚片A的矩陣A’與來自磚片B的矩陣B’相乘,並且,然後,將個別所得加至來自磚片C的矩陣C’中的對應值。
在一實施例中,第一配送電路2404-1係接收來自矩陣A[列][行]的第一值A[0][0](來自列索引零與行索引零的值)並將該值廣播至在該列中的各個處理元件2406-1至各個處理元件2406-1的第一輸入及來自矩陣B的第一列的一組值並將這些值送至各個處理元件2406-1的個別第二輸入(例如,使得處理元件2412接收來自B[0][0]的值,處理元件2414接收來自B[0][1]的值等等)。在一實施例中,處理元件2412在其輸出2416提供乘法A[0][0]*B[0][0]的所得,及處理元件2414在其輸出2418提供乘法 A[0][0]*B[0][1]的所得。輸出(例如,輸出2416及2418)被送至配送電路2 2404-2。
在一實施例中,第二配送電路2404-2係用以接收:來自矩陣A[列][行]的第二值A[0][1](來自列索引零與行索引1的值)並將該值廣播至該列的各個處理元件2406-2至各個處理元件2406-2的第一輸入;來自矩陣B的第二列的一組值並將這些值送至各個處理元件2406-1的個別第二輸入(例如,使得處理元件2422接收來自B[1][0]的值,處理元件2424接收來自B[1][1]的值等等);及來自處理元件2406-1的上列的輸出的個別輸出。在一實施例中,處理元件2422在其輸出2426提供乘法A[0][1]*B[1][0]加至輸出2416(A[0][0]*B[0][0])的所得,及處理元件2424在其輸出2428提供乘法A[0][1]*B[1][1]加至輸出2418 (A[0][0]*B[0][1])的所得。在某些實施例中,此熔合相加運算為處理元件2406-3至2406-4的各個列所持續,以由處理元件2406-4產生輸出2430及輸出2432。相較於圖21的矩陣運算加速器電路2100,在圖24中之矩陣運算加速器電路2400包含具有組態開關2438的配送電路。組態開關2438可以為來自圖25的組態開關2500多數(例如,並聯)實例。
在某些實施例中,在第一模式中,組態開關2438將來自處理元件2406-4的第四列的所得(例如,輸出2430及輸出2432)傳送至處理元件2406-5的下一列(例如,輸出2430作為至PE 2454的輸入及輸出2432作為至PE 2456的輸入)予以被加入至處理元件2406-5的列5的所得。為了處理元件2406-5的繪出列5,在第一模式中的具有組態開關2438的配送電路在輸入2442接收:來自矩陣A[列][行]的值A[0][4](該值來自列索引零及行索引4)並將該值廣播至該列的各個處理元件2406-5至各個處理元件2406-5的第一輸入;及來自矩陣B的第四列的在輸入2444上的一組值,並將這些值送至各個處理元件2406-5的個別第二輸入(例如,使得處理元件2454的輸入2450接收來自B[4][0]的值、處理元件2456的輸入2452自B[4][1]接收值,等等)。在第一模式的一實施例中,處理元件2454在其輸出2458提供乘法 A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0]+ A[0][3]*B[3][0]+A[0][4]*[4][0]的所得;及處理元件2456在其輸出2460提供乘法A[0][0]*B[0][1]+A[0][1]*B[1][1]+ A[0][2]*B[2][1]+A[0][3]*B[3][1]+A[0][4]*B[4][1]的所得。由於已經到達用於矩陣運算加速器電路2400的處理元件列的末端,所以偏置相加電路2462係被相加來自矩陣C的個別元件與輸入2434(例如,一組並聯輸入埠)(例如,來自矩陣C的第一列的個別元件)並經由輸出2436(例如,一組並聯輸出埠)將所得儲存在矩陣C的個別元件中(例如,矩陣C的第一列的個別元件位置)。例如,來自矩陣C的第一列的第一元件被加至來自輸出2458的所得及該結果被回存至矩陣C的第一列的第一元件位置,及來自矩陣C的第一列的第二元件被加至來自輸出2460的所得及結果被回存至矩陣C的第一列的第二元件位置。這可以對矩陣A的各個列重複,以產生矩陣A*矩陣B的整個乘法(例如,將來自矩陣C的偏置加入個別所得中)。在第一模式的某些實施例中,當運算於在各個磚片中的單一矩陣(例如,一磚片為矩陣運算加速器電路的適當次組)時,偏置相加電路2440因此並未被使用。
在某些實施例中,在第二模式中(例如,磚片A包含矩陣A及矩陣A’;磚片B包含矩陣B及矩陣B’,及磚片C包含矩陣C及矩陣C’),組態開關2438並未將來自處理元件2406-4的第四列(例如,輸出2430及輸出2432)的所得傳送至處理元件2406-5的下一列(例如,輸出2430並未輸入至PE3454及輸出2432並未輸入至PE2456),被加至處理元件2406-5的列5的結果。在第二模式中(例如,在矩陣A為四行寬的例子中),具有組態開關2438的配送電路係將所得值由處理元件2406-4的第四列(例如,輸出2430及輸出2432)送至偏置相加電路2440。
在第二模式的某些實施例中,來自第四列2406-4的第一處理元件在其輸出2430提供乘法 A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0]+ A[0][3]*B[3][0]的所得,以及,來自第四列2406-4的第二處理元件2456在其輸出2432上提供乘法A[0][0]*B[0][1]+ A[0][1]*B[1][1]+A[0][2]*B[2][1]+A[0][3]B[3][1]的所得。作為矩陣(例如矩陣A、B及C)的第一次組的列的末端,偏置相加電路2440係將來自矩陣C的第一列的個別元件相加至輸入2446(例如,一組並聯輸入埠)(例如,來自矩陣C的第一列的個別元件)並將所得經由輸出2448(例如,一組並聯輸出埠)儲存至矩陣C的個別元件(例如,在矩陣C的第一列的相對元件位置中)。例如,來自矩陣C的第一列的第一元件被加至來自輸出2430的所得及該結果被回存入矩陣C的第一列的第一元件位置,及來自矩陣C的第一列的第二元件被加至來自輸出2432的所得及該結果被回存入矩陣C的第一列的第二元件位置。
在第二模式的某些實施例中,第二模式中之具有組態開關2438的配送電路接收來自矩陣A’的值A’[0][0](並且不是來自矩陣A的A[0][4]),在來自矩陣A’[列][行]的輸入2442(來自第二矩陣A’的列索引零及行索引零的值)並將該值廣播至該列中之各個處理元件2406-5,至各個處理元件2406-5的第一輸入;來自矩陣B’的第一列的輸入2444上的一組值(並且不是矩陣B的第四列)並這些值送至各個處理元件2406-5的個別第二輸入(例如,使得處理元件2454的輸入2450接收來自B’[0][0]的值,處理元件2456的輸入2452接收來自B’[0][1]的值,等等),但輸出2430不會被輸入至PE 2454及輸出2432不必被輸入至PE 2456。
在第二模式的一些實施例中,處理元件2454在其輸出2458提供乘法A’[0][0]*B’[0][0]的所得及處理元件2456在其輸出2460提供乘法A’[0][0]*B’[0][1]的所得。由於已經到達矩陣運算加速器電路2400的處理元件列的末端,所以,偏置相加電路2462係用以將來自矩陣C’(及非矩陣C)的個別元件與輸入2434(例如,一組並聯輸入埠)(例如,來自矩陣C的第一列的個別元件)相加並將所得經由輸出2436(例如,一組並列輸出埠)儲存至矩陣C’的個別元件中(例如,在矩陣C’的第一列的個別元件位置中)。例如,來自矩陣C’的第一列的第一元件被加至來自輸出2458的所得並且該結果被回存至矩陣C’的第一列的第一元件位置中,及來自矩陣C’的第一列的第二元件被加至來自輸出2460的所得,並且,該結果被回存至矩陣C的第一列的第二元件位置。這可以針對以下重覆:(i)矩陣A的各個列,以產生矩陣A*矩陣B的整個乘法(例如,並將來自矩陣C的偏置加入個別所得)及(ii)矩陣A’的各個列,以產生矩陣A’*矩陣B’的整個乘法(例如,並將來自矩陣C’的偏置加入個別所得)。在第二模式的某些實施例中,當運算於各個磚片的多數矩陣(例如,當磚片為矩陣運算加速器電路的適當次組暫存器時),偏置相加電路2440被使用。注意5為處理元件的例示列數(例如,予以處理的各個矩陣A、B及C的最大列與行數),但其可以是任意多數列。
圖25例示組態開關2500的實施例。所繪電路2502包含組態開關2500及偏置相加電路2504。所繪組態開關2500係被耦接於第一(例如,上游)處理元件2506與第二(例如,下游)處理元件2508之間。例如,第一處理元件2506可以為在圖24中之處理元件2430及第二處理元件可以為在圖24中之處理元件2454。
在所繪實施例中,第一處理元件2506包含:從前一PE(例如,在前一列的PE)源取資料(例如,所得)的第一輸入2516,從磚片A(例如,矩陣A及/或儲存於其中之矩陣A’)源取資料的第二輸出2510,及從磚片B(例如,矩陣B及/或儲存於其中之矩陣B’)源取資料的第三輸入2512。在一實施例中,第一處理元件2506將源取自第二輸入2510的磚片A的元件乘以源取自第三輸入2512的磚片B的元件,以產生中間所得,然後將該中間所得加至來自第一輸入2516的資料元件,以產生一所得。在一實施例中,該所得然後被傳送至組態開關2500,例如,進入解多工器2520的輸入埠。
在某些實施例中,第一控制值(例如,零)係被送至組態開關輸入2526,以使得(i)來自第一處理元件2506的所得被由解多工器2520的輸入埠送至耦接至路徑2528的輸出埠並進入多工器2522的第一輸入埠,及(ii)所得被送出多工器2522的輸出埠外並送入第二處理元件2508的第一輸入埠2532。在所繪實施例中,第二處理元件包含:第一輸入2532,(例如,在第一模式中)源取自前一PE 2506的資料(例如,所得)或者(例如,在第二模式中)源取自源2524的零;第二輸入2510,源取自磚片A(例如,矩陣A及/或儲存於其中之矩陣A’)的資料;及第三輸入2512,源取自於磚片B(例如,矩陣B及/或儲存於其中之矩陣B’)。在一實施例中,第二處理元件2508將源取自第二輸入2510的磚片A的元件乘以源取自於第三輸入2512的磚片B的元件,以產生中間所得,然後,將該中間所得加至源取自於第一輸入2532的PE 2506的所得,以產生所得。在一實施例中,該所得然後被經由輸出2518向下游傳送,例如,進入另一處理元件的輸入埠。
在某些實施例中,第二控制值(例如,1)被送至組態開關輸入2526,以使得(i)來自第一處理元件2506的所得被由解多工器2520的輸入埠傳送至耦接至路徑2530的輸出埠,並進入偏置相加電路2504,及(ii)使得來自源2524的零被送出多工器2522的輸出埠外並進入第二處理元件2508的第一輸入埠2532。在所繪實施例中,第二處理元件包含:(例如,在第一模式中)源取自前一PE 2506的資料(例如,所得)的第一輸入2532或者(例如,在第二模式中)源取自源2524的零;源取自磚片A(例如,矩陣A及/或儲存於其中之矩陣A’)的資料的第二輸入2510;及源取自於磚片B(例如,矩陣B及/或儲存於其中之矩陣B’)的資料的第三輸入2512。在一實施例中,第二處理元件2508將源取自第二輸入2510的磚片A的元件乘以源取自第三輸入2512的磚片B的元件,以產生中間所得,然後,將該中間所得加至源取自第一輸入2532的源2524的零,以產生所得(例如,以點積鏈,破斷新矩陣A’而不是矩陣A)。在一實施例中,該所得然後被由輸出2518向下游傳送至例如另一處理元件的輸入埠。在一實施例中,偏置相加電路2504用以由埠2514源取個別元件至磚片C,將該個別元件加至路徑2530的所得,並經由埠2514儲存更新所得回到磚片C的個別元件位置。在某些實施例中,電路2502的個別實例係設在每一對上游與下游PE之間,以支援如於此所討論的多數模式。
圖26例示矩陣運算加速器電路2602的實施例,其包含二維柵格處理元件電路,其包含多數列的組態開關2606-1至2606-7,以切換於多數模式之間。在某些實施例中,各個電路方塊2604-1至2604-8為來自圖25的電路2470的實例。在所繪實施例中,電路方塊2604-1至2604-7係被耦接至具有組態開關2606-1至2606-7的配送電路的個別實例(例如,如參考圖24所討論者),其隨後耦接至偏置相加電路的個別實例(例如,如參考圖24所討論者),及電路方塊2604-8被耦接至偏置相加電路2608-8。圖26例示可以包含多數適當次組(例如,多列)組態開關,以在第一模式中,控制所得資料以透過矩陣運算加速器電路2602持續作管線,或者,在不同模式中,控制所得資料被傳送出處理元件外,以停止資料的管線化,例如,將所得資料送至偏置相加電路的個別實例,以該所得資料更新在磚片C內的個別值。
選擇模式之控制值可以為指令(例如,在此所討論的部份點積指令)的解碼與執行所提供。在一實施例中,指令包含立即值,以明確地編碼組態開關控制。立即值(例如,組態參數)係為一編碼值及下表顯示其如何被解碼與規劃,以導通或關斷個別組(例如,列)的組態開關,例如,針對只有7列組態開關的陣列。如果應用想要多數組態開關在同一陣列被導通,則可以使用不同編碼。指令可以承載輸出磚片的數目或者輸出磚片的大小,或者,硬體可以由被導通的組態開關的數目推論出此。
Figure 02_image013
以上之例示架構、系統等等可以被如以下所詳述而使用。
所揭露技術的至少一些實施例可以針對以下例子加以描述: 例子1.一種設備,包含: 矩陣運算加速器電路,包含二維柵格熔合乘法累加電路; 第一多數暫存器,表示耦接至該矩陣運算加速器電路的至少一第一輸入二維矩陣; 第二多數暫存器,表示耦接至該矩陣運算加速器電路的至少一第二輸入二維矩陣; 耦接至該矩陣運算加速器電路的核心的解碼器,用以將單一指令解碼為經解碼單一指令,該單一指令包含一欄位,以指明所得儲存器;及 該核心的執行電路,用以執行該經解碼單一指令以: 將該矩陣運算加速器電路由第一模式切換至第二模式,該第一模式中,各個該二維柵格的第一適當次組熔合乘法累加電路的個別輸出係被向下游傳送至各個該二維柵格的第二適當次組熔合乘法累加電路的個別輸入,以由該至少一第一輸入二維矩陣與至少一第二輸入二維矩陣形成輸出值,並儲存所述輸出值於該所得儲存器中,該第二模式中,各個該二維柵格的該第一適當次組熔合乘法累加電路的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第一次組形成第一輸出值,並將所述第一輸出值儲存於該所得儲存器中,及各個該二維柵格的該第二適當次組熔合乘法累加電路的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第二次組形成第二輸出值,並將所述第二輸出值儲存於該所得儲存器中。 2.例子1的設備,其中該單一指令包含第二欄位,以表示當該第二欄位為第一值時,該矩陣運算加速器電路將執行該第一模式,及當該第二欄位為第二值時,該矩陣運算加速器電路將執行該第二模式。 3.例子2的設備,其中該第二欄位為該單一指令的立即值。 4.例子1的設備,其中該所得儲存器係為第三多數暫存器,其表示由執行該經解碼單一指令所形成的至少一輸出二維矩陣。 5.例子4的設備,其中執行該經解碼單一指令為用以: 在該第一模式中,將來自代表初始儲存在該第三多數暫存器中之至少一第三輸入二維矩陣的第三多數暫存器的值加至所述輸出值以形成更新輸出值,並將所述更新輸出值(而不是所述輸出值)儲存入該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器中的所述至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新的第一輸出值與更新的第二輸出值,並將該更新第一輸出值與更新第二輸出值(而不是所述第一輸出值與所述第二輸出值)儲存至該所得儲存器。 6.例子1的設備,其中執行該經解碼單一指令為用以: 在該第一模式中,將來自初始儲存在第三多數暫存器的至少一第三輸入二維矩陣的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是輸出值)至所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器的至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值以形成更新的第一輸出值與更新的第二輸出值,並將所述更新的第一輸出值與更新的第二輸出值(而不是所述第一輸出值與所述第二輸出值)儲存入該所得儲存器中。 7.例子1的設備,其中該所得儲存器為第三多數暫存器,其代表由執行該經解碼單一指令所形成的多數輸出二維矩陣。 8.例子1的設備,其中該第一適當次組熔合乘法累加電路為所述二維柵格熔合乘法累加電路的一列或一行之一及該第二適當次組熔合乘法累加電路為所述二維柵格熔合乘法累加電路的該列或該行之另一。 9.一種方法,包含: 以處理器核心的解碼器,解碼單一指令為經解碼單一指令,其中該處理器核心被耦接至矩陣運算加速器電路,其包含二維柵格熔合乘法累加電路,該矩陣運算加速器電路被耦接至代表至少一第一輸入二維矩陣的第一多數暫存器及代表至少一第二輸入二維矩陣的第二多數暫存器,及該單一指令包含一欄位,其指明所得儲存器;及 以該處理器核心的執行電路,執行該經解碼單一指令,用以: 將該矩陣運算加速器電路由第一模式切換至第二模式,該第一模式中,各個該二維柵格的第一適當次組熔合乘法累加電路的個別輸出係被向下游傳送至各個該二維柵格的第二適當次組熔合乘法累加電路的個別輸入,以由該至少一第一輸入二維矩陣與至少一第二輸入二維矩陣形成輸出值,並儲存所述輸出值於該所得儲存器中,該第二模式中,各個該二維柵格的該第一適當次組熔合乘法累加電路的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第一次組形成第一輸出值,並將所述第一輸出值儲存於該所得儲存器中,及各個該二維柵格的該第二適當次組熔合乘法累加電路的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第二次組形成第二輸出值,並將所述第二輸出值儲存於該所得儲存器中。 10.例子9的方法,其中該單一指令包含第二欄位,指示當該第二欄位為第一值時,該矩陣運算加速器電路將以第一模式執行,及當該第二欄位為第二值時,該矩陣運算加速器電路將以第二模式執行。 11.例子10的方法,其中該第二欄位為該單一指令的立即值。 12.例子9的方法,其中該所得儲存器為第三多數暫存器,其代表由執行該經解碼單一指令所形成的至少一輸出二維矩陣。 13.例子12的方法,其中執行該經解碼單一指令為用以: 在該第一模式中,將來自代表初始儲存在該第三多數暫存器中之至少一第三輸入二維矩陣的第三多數暫存器的值加至所述輸出值以形成更新輸出值,並將所述更新輸出值(而不是所述輸出值)儲存入該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器中的所述至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新的第一輸出值與更新的第二輸出值,並將該更新第一輸出值與更新第二輸出值,(而不是所述第一輸出值與所述第二輸出值)儲存至該所得儲存器。 14.例子9的方法,其中執行該經解碼單一指令為用以: 在該第一模式中,將來自初始儲存在第三多數暫存器的至少一第三輸入二維矩陣的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是輸出值)至所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器的至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值以形成更新的第一輸出值與更新的第二輸出值,並將所述更新的第一輸出值與更新的第二輸出值(而不是所述第一輸出值與所述第二輸出值)儲存入該所得儲存器中。 15.例子9的方法,其中該所得儲存器為第三多數暫存器,其代表由執行該經解碼單一指令所形成的多數輸出二維矩陣。 16.例子9的方法,其中該第一適當次組熔合乘法累加電路為所述二維柵格熔合乘法累加電路的一列或一行之一,及該第二適當次組熔合乘法累加電路為所述二維柵格熔合乘法累加電路的該列或該行之另一。 17.一種非暫態機器可讀媒體,其儲存有碼,當碼為機器所執行時,使得該機器執行包含以下步驟的方法: 以處理器核心的解碼器,將單一指令解碼為經解碼單一指令,其中該處理器核心係耦接至一矩陣運算加速器電路,其包含二維柵格熔合乘法累加電路,該矩陣運算加速器電路耦接至:表示至少一第一輸入二維矩陣的第一多數暫存器及代表至少一第二輸入二維矩陣的第二多數暫存器,及該單一指令包含一欄位,其指明所得儲存器;及 以該處理器核心的執行電路執行該經解碼單一指令,用以: 將該矩陣運算加速器電路由第一模式切換至第二模式,該第一模式中,各個該二維柵格的第一適當次組熔合乘法累加電路的個別輸出係被向下游傳送至各個該二維柵格的第二適當次組熔合乘法累加電路的個別輸入,以由該至少一第一輸入二維矩陣與至少一第二輸入二維矩陣形成輸出值,並儲存所述輸出值於該所得儲存器中,該第二模式中,各個該二維柵格的該第一適當次組熔合乘法累加電路的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第一次組形成第一輸出值,並將所述第一輸出值儲存於該所得儲存器中,及各個該二維柵格的該第二適當次組熔合乘法累加電路的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第二次組形成第二輸出值,並將所述第二輸出值儲存於該所得儲存器中。 18.例子17的非暫態機器可讀取媒體,其中該單一指令包含第二欄位,以表示當該第二欄位為第一值時,該矩陣運算加速器電路將執行該第一模式,及當該第二欄位為第二值時,該矩陣運算加速器電路將執行該第二模式。 19.例子18的非暫態機器可讀取媒體,其中該第二欄位為該單一指令的立即值。 20.例子17的非暫態機器可讀取媒體,其中該所得儲存器係為第三多數暫存器,其表示由執行該經解碼單一指令所形成的至少一輸出二維矩陣。 21.例子20的非暫態機器可讀取媒體,其中執行該經解碼單一指令為用以: 在該第一模式中,將來自代表初始儲存在該第三多數暫存器中之至少一第三輸入二維矩陣的第三多數暫存器的值加至所述輸出值,以形成更新輸出值,並將所述更新輸出值,而不是所述輸出值儲存入該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器中的所述至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新的第一輸出值與更新的第二輸出值,並將該更新第一輸出值與更新第二輸出值,而不是所述第一輸出值與所述第二輸出值儲存至該所得儲存器。 22.例子17的非暫態機器可讀媒體,其中執行該經解碼單一指令為用以: 在該第一模式中,將來自初始儲存在第三多數暫存器的至少一第三輸入二維矩陣的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是輸出值)至所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器的至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值以形成更新的第一輸出值與更新的第二輸出值,並將所述更新的第一輸出值與更新的第二輸出值(而不是所述第一輸出值與所述第二輸出值)儲存入該所得儲存器中。 23.例子17的非暫態機器可讀媒體,其中該所得儲存器為第三多數暫存器,其代表由執行該經解碼單一指令所形成的多數輸出二維矩陣。 24.例子17的非暫態機器可讀媒體,其中該第一適當次組熔合乘法累加電路為所述二維柵格熔合乘法累加電路的一列或一行之一及該第二適當次組熔合乘法累加電路為所述二維柵格熔合乘法累加電路的該列或該行之另一個。
在另一實施例中,設備包含資料儲存器裝置,其儲存有碼,當為硬體處理器所執行時,使得該硬體處理器執行於此所述的任何方法。一設備可以如同在詳細說明所述者。一方法可以如同詳細說明中所述者。 詳細例示系統、處理器與仿真
在此所詳述為執行上述指令的硬體、軟體等的例子。例如,以下所詳述為指令執行的態樣,包含例如擷取、解碼、排序、執行、引退等之各種管線級。 指令集
指令集可以包含一或更多指令格式。給定指令格式可以界定各種欄位(例如,位元數、位元位置),以指明予以執行之運算(如,運算碼)及所予以執行的運算的運算元及/或其他資料欄位(例如,遮罩)。一些指令格式更進一步透過指令模板的定義(或次格式)加以細分。例如,對於給定指令格式的指令模板可以被定義為具有不同次組的指令格式欄位(所包含欄位典型為相同順序,但至少一部份具有不同位元位置,因為包含有較少的欄位)及/或被定義以不同解譯的給定欄位。因此,ISA的各個指令使用給定指令格式(及,如果被定義,在該指令格式的一給定指令模板中)所表達並包含用以指明運算與運算元的欄位。例如,例示ADD指令具有一特定運算碼及包含有運算碼欄的指令格式,以指明該運算碼及運算元欄,以選擇運算元(源1/目的及源2);及在指令流中之此ADD指令的發生將在選擇特定運算元的運算元欄位中有定內容。稱為先進向量擴充(AVX)(AVX1及AVX2)並使用向量擴充編碼方案的一組SIMD擴充已經被釋放及/或公開(例如,見英特爾®64及IA-32架構軟體開發者手冊,2018年十一月;及見英特爾®架構指令集擴充規劃參考,2018年十月)。 例示指令格式
於此所述之指令實施例可以實施為不同格式。另外,例示系統、架構及管線被詳述如下。指令的實施例可以執行於此等系統、架構及管線中,但並不限於所詳述者。 同屬向量友善指令格式
一向量友善指令格式為一種指令格式,其係適用於向量指令(例如,有某些欄位特定用於向量運算)。雖然以透過向量友善指令格式來支援向量與純量運算兩者的實施例加以描述,但其他實施例中也可以透過向量友善指令格式來支援向量運算。
圖27A-27B為依據本案實施之例示同屬向量友善指令格式與其指令模板的方塊圖。圖27A為方塊圖,例示依據本案實施例之同屬向量友善指令格式與其類別A指令模板;而圖27B為方塊圖,例示依據本案實施例之同屬向量友善指令格式與其類別B指令模板。明確地說,同屬向量友善指令格式2700,其中定義類別A及類別B指令模板,兩者包含無記憶體存取2705指令模板與記憶體存取2720指令模板。在向量友善指令格式中之上下文中之同屬用語表示未被綁至任何特定指令集的指令格式。
儘管將敘述本案的實施例中的向量友善指令格式支援如下:具有32位元(4位元組)或64位元(8位元組)資料元件寬度(或大小)的64位元組向量運算元長度(或大小)(因此,64位元組向量係由16個雙字組大小元件或替代地由8個四字組大小元件組成);具有16位元(2位元組)或8位元(1位元組)資料元件寬度(或大小)的64位元組向量運算元長度(或大小);具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或大小)的32位元組向量運算元長度(或大小);以及具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或大小)的16位元組向量運算元長度(或大小);但其他實施例可支援具有更多、更少、或不同向量資料元件寬度(例如,128位元(16位元組)資料元件寬度)的更多、更少及/或不同的向量運算元大小(例如,256位元組的向量運算元)。
圖27A中的類別A指令模板包括:1)在無記憶體存取2705指令模板中顯示一無記憶體存取,全捨入控制類型運算2710指令模板及一無記憶體存取,資料轉換類型運算2715指令模板;及2)在記憶體存取2720指令模板中顯示一記憶體存取,時間2725指令模板及一記憶體存取,非時間2730指令模板。圖27B中的類別B指令模板包括:1)在無記憶體存取2705指令模板中顯示一無記憶體存取,寫入遮罩控制,部份捨入控制類型運算2712指令模板及一無記憶體存取,寫入遮罩控制,VSIZE類型運算2717指令模板;及2)在記憶體存取2720指令模板中顯示一記憶體存取,寫入遮罩控制2727指令模板。
同屬向量友善指令格式2700包括如下在圖27A-27B中所示之依照順序列於下方的欄位。
格式欄位2740─在此欄位中的一特定值(指令格式識別子值)能唯一識別向量友善指令格式,如此能在指令流中出現為向量友善指令格式的指令。因此,此欄位係可選的,其對於僅具有同屬向量友善指令格式的指令是非必要的。
基本運算欄位2742 - 其內容區別不同的基本運算。
暫存器索引欄位2744 - 其內容係直接地或透過位址產生來指定來源和目的運算元的位置係在暫存器中或在記憶體中。這些包括足夠多位元以從一PxQ(例如,32×512、16×128、32×1024、64×1024)暫存器檔案中選擇N個暫存器。儘管在一實施例中,N可能高達三個來源與一個目的暫存器,但其他實施例可支援更多或更少的來源與目的暫存器(例如,可支援高達兩個來源,其中一個也充當目的、可支援高達三個來源,這些來源的其中一個也充當目的、可支援高達兩個來源與一個目的)。
修改欄位2746 - 其內容區別出現指定記憶體存取之為同屬向量指令格式的指令與出現未指定記憶體存取之指令;意即,在無記憶體存取2705指令模板與記憶體存取2720指令模板之間。記憶體存取操作讀及/或寫入記憶體階層(在一些例子中係使用暫存器中的值來指定來源及/或目的位址),而無記憶體存取操作並非如此(例如,來源及目的都是暫存器)。儘管在一實施例中,此欄位也從三個不同的方式之間選擇來進行記憶體位址計算,但其他實施例可支援更多、更少、或不同的方式來進行記憶體位址計算。
擴充運算欄位2750 - 其內容區別除了基本運算之外,可進行各種不同運算中的哪一個。此欄位是特定內容。在本案之一實施例中,此欄位分成一類別欄位2768、一α(alpha)欄位2752、及一β(beta)欄位2754。擴充運算欄位2750使一般運算群組能在一單一指令中執行,而不是2、3或4個指令中執行。
縮放(scale)欄位2760 - 其內容允許縮放用於記憶體位址產生的索引欄位的內容(例如,用於使用2scale *索引+基底的位址產生)。
位移(displacement)欄位2762A - 其內容係用於記憶體位址產生的一部份(例如,用於使用2scale *索引+基底+位移的位址產生)。
位移因數欄位2762B(注意位移欄位2762A直接並列於位移因數欄位2762B上就表示使用一個或另一個) - 其內容係用來作為位址產生的一部份;它指明予以為記憶體存取的大小所縮放的位移因數(N)-其中N是記憶體存取中的位元組數量(例如,用於使用2scale *索引+基底+已縮放位移的位址產生)。忽略多餘的低階位元,因此,位移因數欄位的內容乘以記憶體運算元總量(N),以便產生用來計算一有效位址的最終位移。N的值係由處理器硬體基於全運算碼欄位2774(如後說明)及資料處理欄位2754C在運轉期間所決定。位移欄位2762A與位移因數欄位2762B就某種意義而言係可選的,其不用於無記憶體存取2705指令模板及/或可執行只有一個或兩者皆無之不同的實施例。
資料元件寬度欄位2764 - 其內容區別出使用哪一個資料元件寬度中(在一些實施例中對所有指令;在其他實施例中只對一些指令)。此欄位就某種意義而言係可選的,若僅支援一種資料元件寬度及/或使用一些方面的運算碼來支援資料元件寬度,則不需要此欄位。
寫入遮罩欄位2770 - 其內容在每資料元位置基礎上控制在目的向量運算元中的資料元件位置是否反映出基本運算與擴充運算的結果。類別A指令模板支援合併寫入遮罩,而類別B指令模板則支援合併與歸零寫入遮罩。當合併時,向量遮罩使任何在目的中的元件組在任何運算(由基本運算與擴充運算所指定)執行期間受保護而不被更新;在其他的一實施例中,保留目的中的每個元件之舊值,其中,對應的遮罩位元具有一個0。反之,當歸零時,向量遮罩允許在目的中的任何組元件在(由基本運算與擴充運算所指定的)任何運算執行期間被歸零;在一實施例中,當對應遮罩位元具有一0值,則目的之元件就被設為0。此功能性的次組為具有控制執行運算的向量長度的能力(意即,元件的第一到最後一個的間隔被修改);然而,當元件要被修改為連續時,則為不必要的。因此,寫入遮罩欄位2770允許部份的向量運算,包括載入、儲存、算術、邏輯等等。雖然,本案實施例被描述為寫入遮罩欄位2770內容選擇包含有將被使用的寫入遮罩的多數寫入遮罩暫存器之一者(即,因此,寫入遮罩欄位2770的內容間接指明將執行的遮罩),但替代或其額外的替代實施例允許遮罩寫入欄位2770的內容直接指明予以執行之遮罩。
立即值欄位2772 - 其內容允許指明一立即值。此欄位就某種意義而言是可選的,在不支援立即值之同屬向量友善格式的實作上不會出現,且在不使用立即值的指令中不會出現。
類別欄位2768 - 其內容區別不同類別的指令。關於第27A-B圖,此欄位的內容在類別A與類別B指令之間作選擇。在第27A-B圖中,使用圓角方形來表示出現在一欄位中的特定值(例如,分別在第27A-B圖中的類別欄位2768之類別A 2768A與類別B 2768B)。 類別A的指令模板
在類別A的無記憶體存取2705指令模板例子中,α欄位2752被解釋為一RS欄位2752A,其內容區別出哪一種不同的擴充運算類型將被進行(例如,對無記憶體存取,全捨入類型運算2710與無記憶體存取,資料轉換類型操作2715指令模板分別指明捨入2752A.1與資料轉換952A.2),而β欄位2754區別哪一種運算的指定類型將被進行。在無記憶體存取2705指令模板中,不會出現縮放欄位2760、位移欄位2762A,及位移縮放欄位2762B。 無記憶體存取指令模板-全捨入控制類型運算
在無記憶體存取,全捨入控制類型運算2710指令模板中,β欄位2754係被解釋為一捨入控制欄位2754A,其內容提供靜態捨入。儘管在本案所述之實施例中,捨入控制欄位2754A包括一抑制所有浮點異常(SAE)欄位2756與一捨入運算控制欄位2758,但其他實施例可支援將這兩個概念或這些概念/欄位中之一個或另一個編碼入同一欄位(例如,可僅有捨入運算控制欄位2758)。
SAE欄位2756 - 其內容區別是否去能異常事件報告;當SAE欄位2756的內容指示致能抑制時,一給定指令不會報告任何種類的浮點異常旗標且不啟動任何浮點異常的處置器。
捨入運算控制欄位2758 - 其內容區別一群捨入運算中的哪一個會被進行(例如,無條件進入、無條件捨去、化整為零、最近捨入)。因此,捨入運算控制欄位2758允許以每指令為基礎改變捨入模式。在本案之一實施例中,處理器包括一用來指定捨入模式的控制暫存器,捨入運算控制欄位2750的內容會置換暫存器值。 無記憶體存取指令模板-資料轉換類型運算
在無記憶體存取資料轉換類型運算2715指令模板中,β欄位2754係被解釋為一資料轉換欄位2754B,其內容區別若干資料轉換中之哪一個會被進行(例如,無資料轉換、拌和、廣播)。
在類別A的記憶體存取2720指令模板例子中,α欄位2752被解釋為逐出提示欄位2752B,其內容區別逐出提示中之哪一個會被使用(在圖27A中,針對記憶體存取,時間2725指令模板與記憶體存取,非時間2730指令模板分別指定時間2752B.1與非時間2752B.2),而β欄位2754被解釋為一資料調處欄位2754C,其內容區別資料調處運算之哪一個(也稱作基元)會被進行(例如,無調處、廣播、來源之上轉換、及目的之下轉換)。記憶體存取2720指令模板包括縮放欄位2760,及選用包括位移欄位2762A或位移縮放欄位2762B。
向量記憶體指令利用轉換支援來進行從記憶體載入向量及將向量存入記憶體。如同正常的向量指令,向量記憶體指令以逐資料元件的方式將資料傳送進/出記憶體,以為向量遮罩的內容所管理的實際被傳送給元件係被選擇作為寫入遮罩。 記憶體存取指令模板-時間
時間資料為很可能快被再使用的資料,以從快取中得利。然而,這只是一個暗示,且不同的處理器可以以不同方式來實施,包括完全地忽略這個暗示。 記憶體存取指令模板-非時間
非時間資料是不太可能快再被使用的資料,以從第一階快取得到利益並應該優先逐出。然而,這只是一個暗示,且不同的處理器可以以不同方式來實施,包括完全地忽略這個暗示。 類別B的指令模板
在類別B的指令模板例子中,α欄位2752被解釋為一寫入遮罩控制(Z)欄位2752C,其內容區別由寫入遮罩欄位2770控制的寫入遮罩是否應該被合併或歸零。
在類別B的無記憶體存取2705指令模板例子中,部份的β欄位2754被解釋為一RL欄位2757A,其內容區別哪一種擴充運算類型會被進行(例如,對無記憶體存取,寫入遮罩控制,部份捨入控制類型運算2712指令模板與無記憶體存取,寫入遮罩控制,VSIZE類型運算2717指令模板分別指定於捨入2757A.1與向量長度(VSIZE) 2757A.2),而β欄位2754的其他則區別哪一種指定類型的運算會被進行。在無記憶體存取2705指令模板中,不會出現縮放欄位2760、位移欄位2762A、及位移縮放欄位2762B。
在無記憶體存取,寫入遮罩控制,部份捨入控制類型運算2710指令模板中,β欄位2754的其餘被解釋為一捨入運算欄位2759A且異常事件報告被去能(給定指令不會報告任何種類的浮點異常旗標且不啟動任何浮點異常的處置器)。
捨入運算控制欄位2759A - 正如捨入運算控制欄位2758,其內容區別一組捨入運算中的哪一個會被進行(例如,無條件進入,無條件捨去,化整為零,最近捨入)。因此,捨入運算控制欄位2759A允許以每指令為基礎地改變捨入模式。在本案之一實施例中,處理器包括一用來指明捨入模式的控制暫存器,捨入運算控制欄位2750的內容置換該暫存器值。
在無記憶體存取,寫入遮罩控制,VSIZE類型運算2717指令模板中,β欄位2754的其餘被解釋為一向量長度欄位2759B,其內容區別哪一個資料向量長度會被執行(例如,128、256、或512位元組)。
在類別B的記憶體存取2720指令模板例子中,β欄位2754的部份被解釋為一廣播欄位2757B,其內容區別廣播類型的資料調處運算是否會被進行,而β欄位2754的其餘被解釋為向量長度欄位2759B。記憶體存取2720指令模板包括縮放欄位2760,及選用地包括位移欄位2762A或位移縮放欄位2762B。
關於同屬向量友善指令格式2700,顯示一包括格式欄位2740、基本運算欄位2742、及資料元件寬度欄位2764的全運算碼欄位2774。儘管顯示之實施例中的全運算碼欄位2774包括所有這些欄位,但在不支援所有欄位的實施例中,全運算碼欄位2774包括比所有這些欄位還少的欄位。全運算碼欄位2774提供運算碼(opcode)。
擴充運算欄位2750、資料元件寬度欄位2764、及寫入遮罩欄位2770允許這些特性在同屬向量友善指令格式中,以每個指令為基礎地指定。
結合寫入欄位與資料元件寬度欄位便產生類型化指令,其允許遮罩能基於不同的資料元件寬度來應用。
在類別A與類別B中發現的各種指令模板會在不同情況下有助益。在本案的一些實施例中,不同處理器或處理器內的不同核心可以只支援類別A、只支援類別B、或兩類別。例如,想要用於通用計算的高效通用失序核心可以只支援類別B、主要用於圖及/或科學(通量)計算的核心可以只支援類別A,及想用於兩者的核心可以支援兩者(當然,核心具有來自兩類別的模板與指令的一些混合,但不是所有模板與指令都來自兩類別也是在本案的範圍內)。同時,單一處理器可以包含多數核心,其所有均支援相同類別,或者,不同核心支援不同類別。例如,在具有分開圖形與通用核心的處理器中,主要用於圖形及/或科學計算的圖形核心之一可以只支援類別A,而一或更多通用核心可以是具有失序執行與暫存器重命名的高效通用核心,其想要用於只支援類別B的通用計算。並沒有分開圖形核心的另一處理器可以包含一或更多通用循序或失序核心,其支援類別A與類別B兩者。當然,在本案的不同實施例中,來自一類別的特性也可以以其他類別加以實施。以高階語言撰寫的程式將被放置成為各種不同可執行形式(例如,及時編譯或靜態編譯),包含:1)一形式,其具有為目標處理器所支援用於執行的類別的指令,或2)一形式,其具有使用不同組合的所有類別的指令所寫的其他常式,及,具有控制流程碼,其根據為正執行該碼的處理器所支援的指令,選擇要執行的常式。 例示特定向量友善指令格式
圖28為例示根據本案之實施例之一例示特定向量友善指令格式之方塊圖。圖28顯示一特定向量友善指令格式2800,就某種意義而言其係為特定的,其指明位置、大小、解釋、及欄位順序,以及一些欄位的值。特定向量友善指令格式2800可以被用來擴展x86指令集,因此有些欄位會類似或等同於在現存之x86指令集及其擴展(例如,AVX)中使用的欄位。這個格式保留與現存的x86指令集與擴充之前置編碼欄位、實際運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位、及立即欄位一致。來自圖27並進入圖28的欄位的欄位也被例示。
應了解,雖然為例示目的,本案的實施例係參考以同屬向量友善指令格式2700為上下文參考特定向量友善指令格式2800加以描述,但除非特別主張,否則本案並不限於該特定向量友善指令格式2800。例如,同屬向量友善指令格式2700考量各種可能大小的各種欄位,而特定向量友善指令格式2800係顯示為具有特定大小的欄位。藉由特定例子,儘管顯示資料元件寬度欄位2764是在特定向量友善指令格式2800中的一個1位元欄位,但本案並不以此為限(意即,同屬向量友善指令格式2700考量其他大小的資料元寬度欄位2764)。
同屬向量友善指令格式2700包含下列之以圖28A中之順序列出之欄位。
EVEX前置(位元組0-3)2802-被編碼為4位元組形式。
格式欄位2740(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)是格式欄位2740且其包含0x62(用來區別本案之一實施例中的向量友善指令格式之獨特值)。
第二到第四個位元組(EVEX位元組1-3)包括一些提供特定能力的位元欄位。
REX欄位2805(EVEX 位元組1,位元[7-5])-由一EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及2757BEX位元組1,位元[5]-B)所組成。EVEX.R、EVEX.X、及EVEX.B位元欄位提供與對應之VEX位元欄位相同的功能性,且使用1補數形式來編碼,意即,將ZMM0編碼成1111B、將ZMM15編碼成0000B。如本領域所熟知,指令的其他欄位會編碼暫存器索引的最低三位元(rrr、xxx、及bbb),如此增加EVEX.R、EVEX.X、及EVEX.B可形成Rrrr、Xxxx、及Bbbb。
REX’的欄位2710 - 這是REX’的欄位2710之第一部份且是用來編碼已擴展32暫存器集之上16或下16位元之EVEX.R’的位元欄位(EVEX位元組1,位元[4]-R’)。在本案之一實施例中,此位元與如下面指出的其他位元係儲存成位元反轉的格式,以區別出(在熟知的x86 32位元模式中)BOUND指令,其實數運算碼位元組是62,但在MOD R/M欄位中(下面所述)不接受在MOD欄位中的11值;本案之其他實施例不會以反轉格式儲存此位元與下面指出的其他位元。值1係用來編碼較低的16個暫存器。換言之,R’Rrrr係藉由結合來自其他欄位的EVEX.R’、EVEX.R、及其他RRR來形成。
運算碼映射欄位2815(EVEX位元組1,位元[3:0]-mmmm) - 其內容編碼一隱含的引導運算碼位元組(OF、OF 38、或OF 3)。
資料元件寬度欄位2764(EVEX 位元組2,位元[7]-W) - 係以記號EVEX.W來表示。EVEX.W係用來定義資料型態的粒度(大小)(不是32位元的資料元件就是64位元的資料元件)。 EVEX.vvvv 2820(EVEX 位元組2,位元[6:3]-vvvv)- EVEX.vvvv的作用可包括如下:1)EVEX.vvvv以反轉(1補數)形式來編碼所指定的第一來源暫存器運算元,且對具有2或更多來源運算元的指令皆有效;2)對某個向量移動以1補數形式來編碼所指定的目的暫存器運算元;或3)EVEX.vvvv不編碼任何運算元,此欄位被保留且應包含1111b。因此,EVEX.vvvv欄位2820編碼以反轉(1的補數)形式儲存的第一來源暫存器指示子之4個低序位元。取決於該指令,一個額外不同的EVEX位元欄位被用來擴展指示子的大小成為32暫存器。
EVEX.U類別欄位2768(EVEX位元組2,位元[2]-U)-若EVEX.U=0,表示類別A或EVEX.U0;若EVEX.U=1,表示類別B或EVEX.U1。
前置編碼欄位2825(EVEX 位元組2,位元[1:0]-pp)-提供用於基本運算欄位之額外位元。除了提供支援EVEX前置格式的既有SSE指令外,也具有緊密SIMD前置的優點(而不需要一位元組來表示SIMD前置,EVEX前置僅需要2位元)。在一實施例中,為了支援使用為既有格式與EVEX前置格式兩者的一SIMD前置(66H、F2H、F3H)之既有SSE指令,這些既有SIMD前置會被編碼入SIMD前置編碼欄位中;且在被提供到解碼電路的PLA之前,在運轉時間被展開到既有SIMD前置(因此PLA可執行這些既有指令之既有與EVEX格式而不需修改)。雖然較新的指令可直接使用EVEX前置編碼欄位的內容作為運算碼擴展,但考量到由這些既有SIMD前置所指定不同的意義,故某些實施例為了一致性以類似方式擴充。另一實施例可重設計PLA來支援2位元SIMD前置編碼,因而不需要擴展。
α欄位2752(EVEX 位元組3,位元[7]-EH;也稱作EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;也以α來例示)-如先前所述,此欄位是特定的上下文。
β欄位2754(EVEX 位元組3,位元[6:4]-SSS;也稱作EVEX.s2-0 、EVEX.r2-0 、EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ來例示)-如先前所述,此欄位是特定的上下文。
REX’的欄位2710 - 這是REX’的欄位之餘數且是EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’),其可用來編碼已擴展32暫存器集之上16或下16個。此位元係儲存成位元反轉的格式。值1係用來編碼下16個暫存器。換言之,V’VVVV係藉由結合EVEX.V’、EVEX.vvvv來形成。
寫入遮罩欄位2770(EVEX位元組3,位元[2:0]-kkk)-其內容如先前所述指定在寫入遮罩暫存器中的一暫存器的索引。在本案之一實施例中,特定值EVEX.kkk=000具有意謂著沒有為該特定指令使用的寫入遮罩的特別行為(這可以以各種方式來實作,包括使用一硬體接線連至所有1的寫入遮罩或者繞過遮罩硬體的硬體)。
實數運算碼欄位2830(位元組4)也稱為運算碼位元組。運算碼的部份被指明於這個欄位中。
MOD R/M欄位2840(位元組5)包含MOD欄位2842、Reg欄位2844、及R/M欄位2846。如先前所述,MOD欄位2842的內容區別記憶體存取與非記憶體存取操作。Reg欄位2844的角色可以總結為兩狀況:編碼目的暫存器運算元或者源暫存器運算元或視為運算碼擴展且不用於編碼任何指令運算元。R/M欄位2846的角色可以包含如下:參考記體位址,來編碼指令運算元,或編碼目的暫存器運算元或者源暫存器運算元。
縮放、索引、基底(SIB)位元組(位元組6)-如先前所述,縮放欄位的2750內容係用來產生記憶體位址。SIB.xxx 2854與SIB.bbb 2856-這些欄位的內容已經先前參考暫存器索引Xxxx與Bbbb。
位移位元組2762A(位元組7-10)-當MOD欄位2842內含10時,位元組7-10是位移欄位2762A,且其作用如同既有32位元位移(位移32)且以位元組粒度來運作。
位移因數欄位2762B(位元組7)-當MOD欄位2842內含01時,位元組7是位移因數欄位2762B。此欄位的位置係與既有x86指令集8位元位移(disp8)的位置相同,其以位元組粒度來運作。由於位移8(disp8)是帶正負號延伸,因此它只可以在-128與127位元組偏移量之間定址;就64位元組快取線而言,位移8使用8位元,其只會設成四個實際有用的值-128、-64、0、及64;由於通常需要較大的範圍,故使用位移32;然而,位移32需要4位元組。相對於位移8與位移32,位移因數欄位2762B為dis8的重新解釋;當使用位移因數欄位2762B時,實際位移係由已乘以記憶體運算元存取(N)的大小之位移因數欄位之內容所決定。這類型的位移係稱作位移8*N。這減少了平均指令長度(單一位元組用於位移,但具有較大範圍)。這樣的壓縮位移係基於假設有效的位移是記憶體存取粒度的倍數,因此,位址偏移量之多餘低序位元並不需要被編碼。換言之,位移因數欄位2762B取代了既有x86指令集8位元位移。因此,位移因數欄位2762B會以與x86指令集8位元位移的相同方式來編碼(故不改變ModRM/SIB編碼規則),僅有唯一異常係將位移8超載至位移8*N。換言之,不改變編碼規則或編碼長度,除了為硬體所作之位移值的解譯(其需要根據記憶體運算元的大小來縮放位移,以獲得一逐位元組位址偏移量。立即值欄位2772係如先前所述來運作。 全運算碼欄位
圖28B為方塊圖,例示依據本案實施例以作出全運算碼欄位2774的特定向量友善指令格式2800的欄位。明確地說,全運算碼欄位2774包含格式欄位2740、基底運算欄位2742、及資料元件寬度(W)欄位2764。基底運算欄位2742包含前置編碼欄位2825、運算碼圖欄位2815及實數運算碼欄位2830。 暫存器索引欄位
圖28C為方塊圖,例示依據本案實施例之作成暫存器索引欄位2744的特定向量友善指令格式2800的欄位。明確地說,暫存器索引欄位2744包含REX欄位2805、REX’欄位2810、MODR/M.reg欄位2844,MODR/M.r/m欄位2846、VVVV欄位2820、xxx欄位2854、及bbb欄位2856。 擴充運算欄位
圖28D為方塊圖,例示依據本案實施例之作成擴充運算欄位2750的特定向量友善指令格式2800的欄位。當類別(U)欄位2768包含0,其表示EVEX.U0(類別A 2768A);當其包含1時,其表示EVEX.U1(類別B 2768B)。當U=0與MOD欄位2842包含11(表示無記憶體存取操作)時,α欄位2752(EVEX位元組3,位元[7]-EH)被解譯為rs欄位2752A。當rs欄位2752A包含1(捨入2752A.1)時,β欄位2754(EVEX位元組3,位元[6:4]-SSS)被解譯為捨入控制欄位2754A。捨入控制欄位2754A包含一位元SAE欄位2756與兩位元捨入運算欄位2758。當rs欄位2752A包含0(資料轉換2752A.2)、β欄位2754(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料轉換欄位2754B。當U=0與MOD欄位2842包含00、01或10(表示記憶體存取操作)時,α欄位2752(EVEX位元組3,位元[7]-EH)被解譯為驅逐暗示(EH)欄位2752B與β欄位2754(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元調處欄位2754C。
當U=1時,α欄位2752(EVEX位元組3,位元[7]-EH)被解譯為寫入遮罩控制(Z)欄位2752C。當U=1和MOD欄位2842包含11(表示無記憶體存取操作)時,β欄位2754的部份(EVEX位元組3,位元[4]-S0 )被解譯為RL欄位2757A;當其包含1(捨入2752A.1)時,β欄位2754(EVEX位元組3,位元[6-5]-S2-1 )的剩餘被解譯為捨入運算欄位2759A,雖然,當RL欄位2757A包含0(VSIZE 2757.A2)時,β欄位2754(EVEX位元組3,位元[6-5]-S2-1 )的剩餘被解譯為向量長度欄位2759B(EVEX位元組3,位元 [6-5]-L1-0 )。當U=1與MOD欄位2842包含00、01、或10(表示記憶體存取操作),β欄位2754(EVEX位元組3,位元[6:4]-SSS)被解譯為向量長度欄位2759B(EVEX位元組3,位元[6-5]-L1-0 )與廣播欄位2757B(EVEX位元組3,位元[4]-B)。 例示暫存器架構
圖29係根據本案實施例之一暫存器架構2900的之方塊圖。所例示實施例中,有32個向量暫存器2910,其為512位元寬;這些暫存器被稱為zmm0至zmm31。下16zmm暫存器的低序256位元被重疊於暫存器ymm0-16上。下16zmm暫存器低序128位元(ymm暫存器的低序128位元)被重疊於暫存器xmm0-15上。特定向量友善指令格式2800如下表所示運算這些重疊暫存器檔案。
可調整向量長度 類別 操作 暫存器
不包括向量長度欄位2759B的指令模板 A(圖27A;U=0) 2710、2715、2725、2730 zmm暫存器(向量長度是64位元組)
B(圖27B;U=1) 2712 zmm暫存器(向量長度是64位元組)
包括向量長度欄位2759B的指令模板 B(圖27B;U=1) 2717、2727 zmm、ymm、或xmm暫存器(向量長度是64位元組、32位元組、或16位元組),取決於向量長度欄位2759B
換言之,向量長度欄位2759B在一最大長度與一或更多其他較短長度之間作選擇,其中每個較短長度係為之前長度的一半;且沒有向量長度欄位2759B的指令模板係以最大向量長度來運算。又,在一實施例中,特定向量友善指令格式2800的類別B指令模板係運算於緊縮或純量的單/雙精度浮點資料與緊縮或純量的整數資料上。純量運算係對一zmm/ymm/xmm暫存器中的最低序資料元件位置進行運算;最高序資料元件位置不是在左邊,就像在指令前面一樣,就是依據實施例被歸零。
寫入遮罩暫存器2915-在所例示之實施例中,有8個寫入遮罩暫存器(k0到k7),每個大小為64位元。在替代實施例中,寫入遮罩暫存器2915的大小為16位元。如先前所述,在本案之一實施例中,向量遮罩暫存器k0不能用來作為寫入遮罩;當編碼時,通常表示k0被使用作為寫入遮罩,其選擇0xFFFF之硬體接線寫入遮罩,以有效地對去能用於該指令的寫入遮罩。
通用暫存器2925-在所例示之實施例中,有16個64位元通用暫存器與現存的x86定址模式一起使用,來定址記憶體運算元。這些暫存器係以名為RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8到R15來表示。
其上混淆有MMX緊縮整數平面暫存器檔案2950的純量浮點堆疊暫存器檔案(x87堆疊)2945-在所例示之實施例中,x87堆疊係為一8元件堆疊,用來以32/64/80位元浮點資料上使用x87指令集擴展來進行純量浮點運算;而MMX暫存器係用來對64位元緊縮整數資料進行運算,並用以將用於一些所執行的運算的運算元保持在MMX與XMM暫存器之間。
本案之其他實施例可使用較寬或較窄的暫存器。此外,本案之其他實施例可使用較多、較少或不同的暫存器檔案與暫存器。 例示核心架構、處理器及電腦架構
處理器核心為了不同目的可以以不同方式並被實施在不同處理器內。例如,此等核心的實施法可以包含:1)想用於通用計算的通用循序核心;2)用於通用計算的高效通用失序核心;3)主要用以圖形及/或科學(通量)計算的特殊目的核心。不同處理器的實施法可以包含:1)CPU包含用於通用計算的一或更多通用循序核心及/或用於通用計算的一或更多通用失序核心;及2)包含有主要用於圖形及/或科學(通量)的一或更多特殊目的核心的共處理器。不同處理器造成不同電腦系統架構,其可以包含:1)與CPU分開的晶片上的共處理器;2)共處理器在與CPU相同封裝中的分開晶粒上;3)共處理器在與CPU相同的晶粒上(其中,此共處理器有時稱為特殊目的邏輯,例如積體圖形及/或科學(通量)邏輯,或特殊目的核心);及4)系統晶片,其可以在相同晶粒上包含所述CPU(有時稱應用核心或應用處理器)、上述共處理器及其他功能。例示核心架構被接著描述,其後有例示處理器與電腦架構的說明。 例示核心架構 循序與失序核心方塊圖
圖30A為方塊圖,例示依據本案實施例之例示循序管線以及例示暫存器重命名失序發出/執行管線兩者。圖30B為方塊圖,例示依據本案實施例之予以包含在處理器的循序架構核心的例示實施例與例示暫存器重命名失序發出/執行架構核心。在圖30A-B中之實線方塊例示循序管線與循序核心,而選用增加之虛線方塊則例示暫存器重命名失序發出/執行管線與核心。假定循序態樣為失序態樣的一次組,將描述失序態樣。
在圖30A中,處理器管線3000包含擷取級3002、長度解碼級3004、解碼級3006、配置級3008、重命名級3010、排序(也稱為分派或發出)級3012、暫存器讀取/憶體讀取級3014、執行級3016、寫回/記憶體寫入級3018、異常處置級3022、及提交級3024。
圖30B顯示處理器核心3090,包含耦接至執行引擎單元3050的前端單元3030,兩者係耦接至記憶體單元3070。核心3090可以為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、很長指令字元(VLIW)核心或者混合或其他核心類型。另一選項中,核心3090可以為特殊目的核心,例如,網路或通訊核心、壓縮引擎,共處理器核心、通用計算圖形處理元件(GPGPU)核心、圖形核心等等。
前端單元3030包含耦接至指令快取單元3034的分支預測單元3032,指令快取單元3034係耦接至指令轉譯旁看緩衝器(TLB)3036、緩衝器3036耦接至指令擷取單元3038、其耦接至解碼單元3040。解碼單元3040(例如,解碼電路)可以解碼指令(例如,巨指令),並在一輸出產生一或更多微運算、微碼輸入點、微指令、其他指令、或其他控制信號,這些係由原始指令解碼出或者由原始指令反映或由原始指令導出。解碼單元3040可以使用各種不同機制加以實施。適當機制的例子包含但並不限於查看表、硬體實施法、可程式邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等。在一實施例中,核心3090包含微碼ROM或其他媒體,其儲存用於某些巨指令(例如,在解碼單元3040中或在前端單元3030中)的微碼。解碼單元3040耦接至執行引擎單元3050中之重命名/配置器單元3052。
執行引擎單元3050包括重命名/配置器單元3052,其係耦接至一引退單元3054及一組一或更多排序器單元3056。排序器單元3056代表若干不同排序器,包含保留站、中央指令窗等等。排序器元3056係耦接至實體暫存器檔案單元3058。各個實體暫存器檔案單元3058代表一或更多實體暫存器檔案,其不同者係儲存一或更多不同資料類型,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標,其係為下一予以執行的指令的位址)等。在一實施例中,實體暫存器檔案單元3058包含向量暫存器單元、寫入遮罩暫存器單元與純量暫存器單元。這些暫存器單元可以提供架構向量暫存器、向量遮罩暫存器及通用暫存器。實體暫存器檔案單元3058為引退單元3054所重疊,以例示暫存器重命名與失序執行可以被實施的各種方式(例如,使用重排緩衝器)及引退暫存器檔案;使用未來檔案、歷史緩衝器及引退暫存器檔案;使用暫存器圖及一池暫存器等等。引退單元3054與實體暫存器檔案單元3058被耦接至執行叢集3060。執行叢集3060包含一組一或更多執行單元3062(例如,執行電路)及一組一或更多記憶體存取單元3064。執行單元3062可以對各種類型資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)執行各種運算(例如,移位、相加、相減、相乘)。雖然一些實施例可以包含若干專用於特定函數或多組函數的執行單元,但其他實施例也可以包含只有單一執行單元或多數執行單元,其全部執行所有函數。排序器單元3056、實體暫存器檔案單元3058、及執行叢集3060係被顯示可能為多數,因為某些實施例為了某些類型資料/運算而建立了分開管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各個具有其本身的排器單元、實體暫存器檔案單元、及/或執行叢集-及當在分開記憶體存取管線時,某些實施例係被實施,其中只有此管線的執行叢集具有記憶體存取單元3064。也應了解的是,當使用分開管線時,這些管線之一或多者可能為失序發出/執行而其他則為循序。
該組記憶體存取單元3064被耦接至記憶體單元3070,其包含資料TLB單元3072,耦接至資料快取單元3074,資料快取單元3074耦接至第二階(L2)快取單元3076。在一例示實施例中,記憶體存取單元3064可以包含負載單元、儲存位址單元、及儲存資料單元,其各個被耦接至記憶體單元3070中之資料TLB單元3072。指令快取元3034進一步耦接至在記憶體單元3070中之第二階(L2)快取單元3076。L2快取單元3076係耦接至快取之一或更多其他階並最後連接至主記憶體。
例如,例示暫存器重命名失序發出/執行核心架構可以實施管線3000如下:1)指令擷取3038,執行擷取與長度編碼級3002及3004;2)解碼單元3040執行解碼級3006;3)重命名/配置器單元3052,執行配置級3008及重命名級3010;4)排序器單元3056執行排序級3012;5)實體暫存器檔案單元3058及記憶體單元3070執行暫存器讀取/記憶體讀取級3014;執行叢集3060實施執行級3016;6)記憶體單元3070及實體暫存器檔案單元3058執行回寫/記憶體寫入級3018;7)在異常處置級3022中可能涉及的各種單元;及8)引退單元3054與實體暫存器檔案3058執行提交級3024。
核心3090可以支援包含於此所述之指令的一或更多指令集(例如,x86指令集(具有已經被加入新版的一些擴充版);美國加州sunnyvale的MIPS科技的MIPS指令集;美國加州Sunnyvale的ARM控股的ARM指令集(具有例如NEON的選用擴充版本)。在一實施例中,核心3090包含邏輯以支援一緊縮資料指令集擴充(例如,AVX1、AVX2),藉以允許為很多多媒體應用可以使用的運算可以使用緊縮資料執行。
應了解的是,該核心可以支援多線(執行兩或更多並列組的運算或線),並可以以各種方式完成,包含時間切割多線、同時多線(其中單一實體核心提供一邏輯核心給各個線,該實體核心為同時多線),或其組合(例如,時間切割擷取與解碼及隨後同時多線,例如,在英特爾®的Hyper-Threading技術)。
雖然暫存器重命名被以失序執行的上下文加以描述,但應了解的是,暫存器重命名也可以用於循序架構中。雖然所例示的處理器的實施例也包含分開指令及資料快取單元3034/3074與共享L2快取單元3076,但其他實施例也可以具有單一內部快取,以供指令與資料使用,例如,第一階(L1)內部快取,或多階的內部快取。在一些實施例中,系統可以包含內部快取與在核心及/或處理器的外部的外部快取的組合。或者,所有這些快取可以在核心及/或處理器的外部。 特定例示循序核心架構
圖31A-B例示一更特定例示循序核心架構的方塊圖,其中核心將會是在一晶片中之幾個邏輯方塊(包含相同類型及/或不同類型的其他核心)之一。取決於應用而定,邏輯方塊透過高頻寬內連線網路(例如,環狀網路)與一些固定函數邏輯、記憶體I/O介面及其他必需I/O邏輯相通訊。
圖31A為依據本案實施例之單一處理器核心與其連接至晶粒上內連線網路3102及其本地次組第二階(L2)快取3104的方塊圖。在一實施例中,指令解碼單元3100支援具有緊縮資料指令集擴充的x86指令集。L1快取3106允許對快取記憶體的低潛候存取入純量與向量單元。雖然在一實施例(為簡化該設計)中,純量單元3108與向量單元3110使用分開的暫存器集(分別為純量暫存器3112與向量暫存器3114)及轉換於其間之資料被寫入記憶體然後由第一階(L1)快取3106讀回,但本案的其他實施例也可以使用不同方式(例如,使用單一暫存器集或包含一通訊路徑,其允許資料被傳送於兩暫存器檔案之間而不必寫回與讀回)。
L2快取3104的本地次組為全域L2快取的一部份,全域L2快取被分割成分開的本地次組,各個處理器核心有一本地次組。各個處理器核心具有至其L2快取3104的本身本地次組的直接存取路徑。為處理器核心所讀取的資料被儲存於其L2快取次組3104中並可以快速地被存取,並行於存取其本身本地L2快取次組的其他處理器核心。為處理器核心所寫入的資料被儲存於其本身L2快取次組3104並如果有必要被自其他次組清除。環狀網路確保所共享資料的一致性。環狀網路為雙向,允許例如處理器核心、L2快取及其他邏輯方塊的代理在該晶片內彼此通訊。各個環狀資料路徑為每一方向1012位元寬。
圖31B為依據本案實施例之圖31A中之處理器核心的一部份的放大圖。圖31B包含L1快取3104的L1資料快取3106A部份,及有關向量單元3110與向量暫存器3114的更多細節。明確地說,向量單元3110為16寬向量處理元件(VPU)(見16寬ALU 3128),其執行整數、單精度浮點及精精度浮點指令之一或多者。VPU支援以拌和單元3120之拌和暫存器輸入、以數值轉換單元3122A-B的數值轉換、及以在記憶體輸入上的複製單元3124的複製。寫入遮罩暫存器3126允許預測所得向量寫入。
圖32為處理器3200的方塊圖,其依據本案實施例可以具有一個以上之核心,可以具有整合記憶體控制器,並可以具有整合圖形件。在圖32中之實線方塊例示一處理器3200具有單一核心3202A、系統代理3210、一組一或更多匯流排控制器單元3216,而選用增加之虛線方塊例示替代處理器3200,具有多數核心3202A-N、一組一或更多整合記憶體控制器單元3214在系統代理單元3210中、及特殊目的邏輯3208。
因此,不同實施法的處理器3200可以包含:1)CPU,具有特殊目的邏輯3208,其為整合圖形及/或科學(通量)邏輯(其可以包含一或更多核心),及核心3202A-N為一或更多通用核心(例如,通用循序核心、通用失序核心、兩者之組合);2)共處理器,具有核心3202A-N,係為大量特殊目的核心,主要用於圖形及/或科學(通量);及3)共處理器,具有核心3202A-N,為大量的通用循序核心。因此,處理器3200可以為通用處理器、共處理器或特殊目的處理器,例如,網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理元件)、高通量很多整合核心(MIC)共處理器(包含30或更多核心)、內嵌處理器等等。處理器可以實行於一或更多晶片上。處理器3200可以為一或更多基板的一部份及/或可以實施於為使用若干處理技術的一或更多基板上,例如,BiCMOS、CMOS或NMOS。
記憶體階層包含在該等核心內的一或更多階快取、一組或一或更多共享快取單元3206、及耦接至該組整合記憶體控制器單元3214的外部記憶體(未示出)。該組共享快取單元3206可以包含一或更多中階快取,例如第二階(L2)、第三階(L3)、第四階(L4)或其他階快取、最後階快取(LLC)及/或其組合。雖然在一實施例中,環為主內連線單元3212連接整合圖形邏輯3208、該組共享快取單元3206及系統代理單元3210/整合記憶體控制器單元3214,但其他實施例也可以使用任何數量的已知技術,用以內連接此等單元。在一實施例中,一致性係被維持在一或更多快取單元3206與核心3202A-N之間。
在一些實施例中,一或更多核心3202A-N能夠多線。系統代理3210包含這些與核心3202A-N協調與操作的元件。系統代理單元3210可以包含例如電力控制單元(PCU)及顯示單元。PCU可以是或包含用以調節核心3202A-N與整合圖形邏輯3208的電力狀態的邏輯與元件。顯示單元係用以驅動一或更多外部連接的顯示器。
核心3202A-N以架構指令集而言,可以為均質或異質;即,兩或更多核心3202A-N可以能執行相同指令集,而其他則可以只執行該指令集的一次組或者不同的指令集。 例示電腦架構
圖33至36為例示電腦架構的方塊圖。也可以適用於膝上型、桌上型、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、開關、內嵌處理器、數位信號處理器(DSP)、圖形裝置,視訊遊戲裝置、機頂盒、微控制器、手機、攜帶式媒體播放器、手持裝置及各種其他電子裝置的技藝中已知的其他系統設計與架構。通常,各種大量可以加入於此所述之處理器及/或其他執行邏輯的系統或電子裝置也通常適用。
現參考圖33,所示為依據本案一實施例之系3300的方塊圖。系統3300可以包含一或更多處理器3310、3315,其係耦接至控制器集線器3320。在一實施例中,控制器集線器3320包含一圖形記憶體控制器集線器(GMCH)3390與一輸入/輸出集線器(IOH)3350(其可以在不同的晶片上);GMCH3390包含記憶體與圖形控制器,有記憶體3340與共處理器3345係耦接至其上;IOH 3350係將輸入/輸出(I/O)裝置3360耦接至GMCH 3390。或者,記憶體與圖形控制器之一或兩者被整合於處理器內(如此所述),記憶體3340與共處理器3345係直接耦接至處理器3310,以及,耦接至單晶片中之具有IOH 3350的控制器集線器3320。記憶體3340可以包含矩陣加速碼3340A,例如,當被使用時,儲存碼,使得處理器執行本案的任何方法。
其他處理器3315的選用本質係被以虛線表示於圖33中。各個處理器3310、3315可以包含一或更多如此所述之處理核心並可以為處理器3200的一些版本。
記憶體3340可以例如是動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或其兩者之組合。在至少一實施例中,控制器集線器3320透過多投匯流排,例如前側匯流排(FSB)、點對點介面,例如Quickpath互連(QPI)或類似連接3395與處理器3310、3315通訊。
在一實施例中,共處理器3345為特殊目的處理器,例如,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、內嵌處理器或類似物。在一實施例中,控制器集線器3320可以包含整合圖形加速器。
以包含架構、微架構、熱、功率消耗特性等等的績效指標頻譜看來,在實體資源3310、3315間有各種差異。
在一實施例中,處理器3310執行控制一般類型的資料處理運算的指令。內嵌於指令內的可以是共處理器指令。處理器3310將這些共處理器指令識別為應為附著之共處理器3345所執行之一類型。因此,處理器3310將這些共處理器指令(或控制代表共處理器指令的信號)發出在共處理器匯流排或其他內連線上給共處理器3345。共處理器3345接受與執行所接收的共處理器指令。
現參考圖34,顯示依據本案實施例之第一更特定例示系統3400的方塊圖。如在圖34所示,多處理器系3400為點對點內連線系統,並包含第一處理器3470及第二處理器3480,經由點對點內連線3450耦接在一起。各個處理器3470與3480可以為處理器3200的一些版本。在本案的一實施例中,處理器3470與3480分別為處理器3310及3315,而共處理器3438為共處理器3345。在另一實施例中,處理器3470與3480分別為處理器3310與共處理器3345。
處理器3470與3480被顯示為分別包括整合記憶體控制器(IMC)單元3472與3482。處理器3470也分別包含點對點(P-P)介面3476與3478作為其匯流排控制器單元的一部份;類似地,第二處理器3480也包括P-P介面3486與3488。處理器3470、3480可使用P-P介面電路3478、3488經由點對點(P-P)介面3450來交換資訊。如圖34所示,IMC 3472和3482將處理器耦接至個別的記憶體,即記憶體3432和記憶體3434,其可為本地附著至個別處理器的主記憶體的部份。
處理器3470、3480可以使用點對點介面電路3476、3494、3486、3498經由個別的P-P介面3452、3454來與晶片組3490交換資訊。晶片組3490也可經由一高效能圖形介面3439來與一共處理器3438交換資訊。在一實施例中,共處理器3438為特殊目的處理器,例如,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、內嵌處理器或類似物。
一共享快取(未顯示)可包括在任一處理器中或者兩處理器之外,但會經由P-P內連線來與處理器連接,如此若有一處理器處於低功率模式時,則任一處理器或兩處理器的本地快取資訊便可儲存在共享快取中。
晶片組3490可經由介面3496耦接至第一匯流排3416。在一實施例中,第一匯流排3416可以是週邊元件內連線(PCI)匯流排,或是如PCI-Express匯流排或另一個第三代I/O內連線連匯流排的匯流排,但不以此限制本發明之範圍。
如圖34所示,各種I/O裝置3414可與將第一匯流排3416,其具有耦接第一匯流排3416至第二匯流排3420的匯流排橋接器3418。在一實施例中,例如,共處理器、高通量MIC處理器、GPGPU、加速器(例如,圖形加速器或數位信號處理器(DSP)單元)、場可程式閘陣列或任何其他處理器的一或更多額外處理3415被耦接至第一匯流排3416。在一實施例中,第二匯流排3420可以是一低針腳數(LPC)匯流排。一實施例中,各種裝置可耦接至第二匯流排3420,例如包括鍵盤及/或滑鼠3422、通訊裝置3427及如磁碟機或其他大量儲存裝置的儲存單元3428,其可以包含指令/碼與資料3430。再者,音頻I/O裝置3424可耦接至第二匯流排3420。注意其他架構也有可能。例如,系統可實作一多投匯流排或其他類似架構,而不是圖34之點對點架構。
現在參考第35圖,其顯示依照本案實施例之一第二更特性例示系統3500之方塊圖。在圖34與35中的相似元件具有相似的參考編號,且圖34中之某些態樣已經在圖35中省略,以避免混淆圖35的其他態樣。
圖35例示處理器3470、3480分別可包括整合記憶體和I/O控制邏輯(「CL」)3472和3482。因此,CL 3472、3482包括整合記憶體控制器單元並包括I/O控制邏輯。圖35例示不只記憶體3432、3434耦接至CL 3472、3482,I/O裝置3514也耦接至控制邏輯3472、3482。既有I/O裝置3515也耦接至晶片組3490。
現在參考圖36,其顯示依照本案實施例之SoC 3600之方塊圖。在圖32中之類似元件具有類似元件符號。又,虛線框為在更進階的SoC上的選用特性。在圖36中,一內連線單元3602係耦接至:包括一組一或更多核心202A-N及共享快取單元3206的應用處理器3610;系統代理單元3210、匯流排控制器單元3216;整合記憶體控制器單元3214、可包括整合圖形邏輯、影像處理器、音訊處理器及視訊處理器的一組或一或更多共理器3620;靜態隨機存取記憶體(SRAM)單元3630;直接記憶體存取(DMA)單元3632、及耦接至一或更多外部顯示器的顯示單元3640。在一實施例中,共處理器3620包含特殊目的處理器,例如,網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、內嵌處理器等等。
本文揭露的(例如機制)實施例可由硬體、軟體、韌體、或此等實施方式的組合來實作。本案實施例可實作成執行在可程式系統上作為電腦程式或程式碼,此等可程式系統包括至少一處理器、儲存系統(包括揮發和非揮發記憶體及/或儲存元件)、至少一輸入裝置、以及至少一輸出裝置。
例如,圖34所示之碼3430的程式碼可被應用至輸入指令,以執行於此所描述的函數並產生輸出資訊。輸出資訊可以以已知的方式被應用到一或多個輸出裝置。為了本案的目的,處理系統包括任何具有一處理器之系統,例如,數位信號處理器(DSP)、微控制器、專用積體電路(ASIC)、或微處理器。
程式碼可以以高階程序或物件導向程式語言來實作,以與處理系統通訊。若需要的話,程式碼也可以以組合或機器語言來實作。事實上,本文敘述的機制不會受限於此領域的任何特定程式語言。任何情況下,語言可以是一已編譯或已解譯之語言。
至少一實施例的一或多個態樣可藉由儲存在機器可讀媒體中的代表指令來實作,其代表在處理器內的各種邏輯,當被機器讀取時,會使機器製造邏輯來執行於此所描述的技術。這樣的表現稱為“IP核心”並可儲存在有形的機器可讀媒體中並提供給各種顧客或製造廠來下載至實際製作此邏輯或處理器的製造機器中。
這類的機器可讀儲存媒體可包括但不限於機器或裝置製造或形成的物件之非暫時性且有形的排列,包括如硬碟和任何其他型態之磁碟的儲存媒體,所述之磁碟包括軟碟、光碟、唯讀光碟機(CD-ROM)、可抹寫光碟(CD-RW)、及磁光碟機、半導體裝置,如唯讀記憶體(ROM)、如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)的隨機存取記憶體(RAM)、可抹除可程式唯讀記憶體(EPROM)、快閃記憶體、電子可抹除可程式唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光學卡、或可適用於儲存電子指令的任何其他類型之媒體。
因此,本案實施例也包括非暫態、有形的機器可讀媒體,其包含有指令或包含有設計資料,如硬體描述語言(HDL),其定義於此描述的結構、電路、設備、處理器及/或系統特性。這樣的實施例也可稱為程式產品。 仿真(包含二進制譯碼、碼漸變等)
在一些情況中,可使用一指令轉換器來將一指令由來源指令集轉換為目標指令集。例如,指令轉換器可轉譯(例如,使用靜態二進制譯碼、包括動態編譯的動態二進制譯碼)、漸變、仿真或轉換一指令成為予以為該核心所處理的一或更多其他指令。指令轉換器可由軟體、硬體、韌體、或其組合來實作。指令轉換器可在處理器上、在處理器之外、或部份在上且部份在處理器外。
圖37為根據本案實施例之使用軟體指令轉換器來轉換來源指令集中的二進制指令為目標指令集中的二進制指令之方塊圖。在所例示實施例中,雖然指令轉換器為軟體指令轉換器,但,可替代地,該指令轉換器也可以實施為軟體、硬體、韌體、或其組合。圖37顯示用高階語言3702表示的程式,其可使用x86編譯器3704來編譯以產生x86二進制碼3706,其可由具有至少一x86指令集核心3716的處理器來本機執行。具有至少一x86指令集核心3716的處理器表示任何可進行實質上與具有至少一x86指令集核心的英特爾®處理器有相同功能的處理器,藉由相容地執行或處理(1)英爾® x86指令集核心的大部份之指令集或(2)目標碼型式的應用程式或其他在具有至少一x86指令集核心的英特爾®處理器上執行的軟體,以達到大致上與具有至少一x86指令集核心的英特爾®處理器有相同的結果。x86編譯器3704表示一可操作來產生x86二進制碼3706(例如,目標碼)的編譯器,其可連同或無須額外的連鎖處理,在具有至少一x86指令集核心3716的處理器上執行。類似地,圖37顯示用高階語言3702表示的程式,其可使用其他指令集編譯器3708來編譯,以產生其他指令集二進制碼3710,其可由不具有至少一x86指令集核心3714的處理器來本機執行(例如,具有執行美國加州Sunnyvale 的MIPS科技之MIPS指令集及/或執行美國加州Sunnyvale 的ARM科技之ARM指令集之核心的處理器)。指令轉換器3712係用來將x86二進制碼3706轉成可由不具有x86指令集核心3714的處理器所本機執行的碼。由於能如上轉換的指令轉換器難以製造,因此已轉換的碼不太可能與其他指令集二進制碼3710相同;然而,已轉換的碼將完成一般運算且作成來自其他指令集的指令。因此,指令轉換器3712代表軟體、硬體、韌體、或其組合,然而透過仿真、模擬或任何其他程序,允許處理器或其他不具有x86指令集處理器或核心的電子裝置能執行x86二進制碼3706。
102:應用記憶體 104:磚片t0 106:磚片t1 108:磚片t2 110:磚片t3 122:應用記憶體 124:磚片t4L 126:磚片t4R 128:磚片T5L 130:磚片t5R 301:主處理器/處理系統 303:同調記憶體介面 305:資料緩衝器 307:矩陣運算加速器 309:FMA柵格 311:命令 401:處理器 403:記憶體 405:矩陣運算電路 501:處理器 503:主記憶體 505:矩陣運算電路 507:磚片記憶體 601:磚片A 603:磚片B 605:磚片C 611:FMA柵格 701:帶正負號來源 703:帶正負號來源 705:乘法器 707:乘法器 709:帶正負號來源 711:加法器 713:加法器 715:帶正負號目的 801:帶正負號來源 803:帶正負號來源 805:乘法器 807:乘法器 809:帶正負號來源 813:加法/飽和電路 815:帶正負號結果 901:帶正負號來源 903:無正負號來源 905:乘法器 907:乘法器 909:乘法器 911:乘法器 913:加法器 915:帶正負號來源 917:加法器 919:結果 1001:帶正負號來源 1003:無正負號來源 1005:乘法器 1007:乘法器 1009:乘法器 1011:乘法器 1013:加法器/飽和電路 1015:帶正負號來源 1019:結果 1101:有2倍輸入大小的累加器 1103:有4倍輸入大小的累加器 1105:有8倍輸入大小的累加器 1201:核心0 1203:核心1 1205:核心2 1207:核心N 1211:矩陣運算電路 1213:矩陣運算電路 1223:記憶體控制器1 1225:記憶體控制器N 1231:記憶體 1233:記憶體 1245:環內連線 1251:矩陣運算電路 1301:指令儲存器 1303:分支/解碼電路 1305:微碼 1307:配置/重命名電路 1309:排序器電路 1311:執行電路 1313:快取 1315:實體存器檔案 1317:引退電路 1321:純量電路 1323:向量/SIMD電路 1325:記憶體存取電路 1327:矩陣運算電路 1390:核心 1401:指令儲存器 1403:分支/解碼電路 1405:微碼 1407:配置/重命名電路 1409:排序器電路 1411:執行電路 1413:快取 1415:實體暫存器檔案 1417:引退電路 1425:記憶體存取電路 1427:矩陣運算電路 1601:矩陣A 1603:矩陣B 1605:矩陣C 1701:步驟 1703:步驟 1705:步驟 1707:步驟 1709:步驟 1801:記憶體 1803:磚片說明 1805:處理器/核心 1811:指令執行資源 1813:色盤表 1817:磚片組態 1819:暫存器 1901:色盤ID 1903:startRow暫存器 1905:startP 1907:對指示器 1913:列 1915:行 2001:TMM0組態 2003:TMM1組態 2011:StartP 2013:StartRow 2015:狀態 2021:TMM0列組態 2023:TMM1行組態 2031:磚片組態 2102:資料儲存器 2104-1-4:配送電路 2106-1-4:處理元件電路 2108:偏置相加電路 2110:線 2112:處理元件 2114:處理元件 2122:處理元件 2124:處理元件 2130:輸出 2132:輸出 2134:輸入 2136:輸出 2100:矩陣運算加速器電路 2200:系統 2201:指令 2202:運算碼 2204:源位置 2206:源位置 2208:源位置 2210:M 2212:K 2214:立即 2220:矩陣運算加速器電路 2222:源位置 2224:源位置 2226:源位置 2301:擷取步驟 2303:解碼步驟 2305:排序步驟 2307:執行步驟 2309:提交步驟 2400:矩陣運算加速器電路 2402:資料儲存器 2404-1-4:配送電路 2406-1-5:處理元件 2410:線 2412:處理元件 2414:處理元件 2416:輸出 2418:輸出 2422:處理元件 2424:處理元件 2426:輸出 2428:輸出 2430:輸出 2432:輸出 2434:輸入 2436:輸出 2438:組態開關 2440:偏置相加電路 2442:輸入 2444:輸入 2446:輸入 2448:輸出 2450:輸入 2452:輸入 2454:處理元件 2456:處理元件 2458:輸出 2460:輸出 2462:偏置相加電路 2500:組態開關 2502:電路 2504:偏置相加電路 2506:處理元件 2508:處理元件 2510:輸入 2512:輸入 2514:埠 2516:輸入 2518:輸出 2520:解多工器 2522:多工器 2524:源 2526:輸入 2528:路徑 2530:路徑 2532:輸入 2600:矩陣運算加速器電路 2602:矩陣運算加速器電路 2604-1-8:電路方塊 2606-1-7:組態開關 2608-1-8:偏置相加電路 2700:向量友善指令格式 2705:無記憶體存取 2710:全捨入控制類型運算 2712:部份捨入控制類型運算 2715:資料轉換類型運算 2720:記憶體存取 2725:記憶體存取時間 2727:寫入遮罩控制 2730:記憶體存取非時間 2740:格式欄位 2742:基本運算欄位 2744:暫存器索引欄位 2746:修改欄位 2746A:無記憶體存取 2746B:記憶體存取 2750:擴充運算欄位 2752:α欄位 2752A.1:捨入欄位 2752A.2:Vsize欄位 2752B:驅逐暗示欄位 2752B.1:時間 2752B.2:非時間 2752C:寫入遮罩控制欄位 2754:β欄位 2754A:捨入控制欄位 2754B:資料轉換欄位 2754C:資料調處欄位 2756:SAE欄位 2757A:RL欄位 2757A.1:捨入欄位 2757A.2:Vsize欄位 2757B:廣播欄位 2758:捨入運算欄位 2759A:捨入運算欄位 2759B:向量長度欄位 2760:縮放欄位 2762A:位移欄位 2762B:位移因素欄位 2764:資料元件寬度欄位 2768:類別欄位 2752A:RS欄位 2770:寫入遮罩欄位 2772:立即值欄位 2774:全運算碼欄位 2800:向量友善指令格式 2805:REX欄位 2815:運算碼圖欄位 2820:EVEX.vvvv 2825:前置編碼欄位 2830:實數運算碼欄位 2840:MOD R/M欄位 2842:MOD欄位 2844:Reg欄位 2846:R/M欄位 2854:xxx欄位 2856:bbb欄位 2810:REX’欄位 2900:暫存器架構 2910:向量暫存器 2915:寫入遮罩暫存器 2925:通用暫存器 2945:純量浮點堆疊暫存器 2950:緊縮整數平面暫存器檔案 3000:處理器管線 3002:擷取級 3004:長度解碼級 3006:解碼級 3008:配置級 3010:重命名級 3012:排序級 3014:暫存器讀取/記憶體讀取級 3016:執行級 3018:寫回/記憶體寫入級 3022:異常處置級 3024:提交級 3030:前端單元 3032:分支預測單元 3034:指令快取單元 3036:指令轉譯旁看緩衝器 3038:指令快取單元 3040:解碼單元 3050:執行引擎單元 3052:重命名/配置器單元 3054:引退單元 3056:排序器單元 3058:實體暫存器檔案 3060:執行叢集 3062:執行單元 3064:記憶體存取單元 3070:記憶體單元 3072:資料TLB單元 3074:資料快取單元 3076:第二階快取單元 3090:核心 3100:指令解碼單元 3102:晶粒上內連線網路 3104:第二階快取 3106:第一階快取 3106A:第一階資料快取 3108:純量單元 3110:向量單元 3112:純量暫存器 3114:向量暫存器 3120:拌和單元 3122A-B:數值轉換單元 3124:複製單元 3126:寫入遮罩暫存器 3128:ALU 3200:處理器 3202A-N:核心 3210:系統代理 3214:整合記憶體控制器單元 3216:匯流排控制器單元 3208:特殊目的邏輯 3206:共享快取單元 3213:環為主內連線單元 3300:系統 3310:處理器 3315:處理器 3320:控制器集線器 3340:記憶體 3340A:矩陣加速碼 3345:共處理器 3350:輸入/輸出集線器 3360:I/O裝置 3390:圖形記憶體控制器集線器 3395:連接 3400:微處理器 3414:I/O裝置 3415:處理器 3416:匯流排 3418:匯流排橋接器 3420:匯流排 3422:鍵盤/滑鼠 3427:通訊裝置 3428:儲存單元 3430:碼及資料 3432:記憶體 3434:記憶體 3438:共處理器 3439:高效介面 3450:點對點內連線 3452:P-P介面 3454:P-P介面 3470:處理器 3472:整合記憶體控制器單元 3476:P-P介面 3478:P-P介面 3480:處理器 3482:整合記憶體控制器單元 3486:P-P介面 3488:P-P介面 3490:晶片組 3494:P-P介面 3496:介面 3498:P-P介面 3500:系統 3514:I/O裝置 3515:既有I/O裝罝 3600:系統晶片 3602:內連線單元 3610:應用處理器 3620:共處理器 3630:SRAM單元 3632:DMA單元 3640:顯示單元 3702:高階語言 3704:X86編譯器 3706:X86二進制碼 3708:其他指令集編譯器 3710:其他指令集二進制碼 3712:指令轉換器 3714:沒有X86指令集核心的處理器 3716:有X86指令集核心的處理器
本案係以實例方式加以例示並且不限於附圖中之內容,圖式中相同元件符號表示類似元件,其中:
[圖1A] 例示依據本案實施例之組態磚片實施例。
[圖1B] 例示依據本案實施例之組態磚片實施例。
[圖2] 例示依據本案實施例之矩陣儲存的幾個例子。
[圖3] 例示利用依據本案實施例之矩陣(磚片)運算加速器的系統的實施例。
[圖4及5] 顯示如何使用矩陣運算加速器共享記憶體的不同實施例。
[圖6] 例示使用磚片(TMMA)的矩陣乘法累加運算實施例。
[圖7] 例示鏈結熔合乘法累加指令的迭代執行次組的實施例。
[圖8] 例示鏈結熔合乘法累加指令的迭代執行次組的實施例。
[圖9] 例示鏈結熔合乘法累加指令的迭代執行次組的實施例。
[圖10] 例示鏈結熔合乘法累加指令的迭代執行次組的實施例。
[圖11] 例示以2的乘冪為大小的SIMD實施法,其中,累積器依據實施例使用的輸入尺寸大於至乘法器的輸入。
[圖12] 例示利用矩陣運算電路的系統實施例。
[圖13] 例示支援使用磚片的矩陣運算的處理器核心管線的實施例。
[圖14] 例示支援使用磚片的矩陣運算的處理器核心管線的實施例。
[圖15] 例示以列主格式與行主格式表示的矩陣的例子。
[圖16] 例示使用矩陣(磚片)的例子。
[圖17] 例示使用矩陣(磚片)的方法的實施例。
[圖18] 例示依據實施例之磚片的使用架構的支援。
[圖19] 例示予以支援的矩陣(磚片)的說明實施例。
[圖20] (A)-(D)例示暫存器的例子。
[圖21] 例示包含二維柵格處理元件電路的矩陣運算加速器電路的實施例。
[圖22] 為依據一些實施例之使用 TILEPARTIALDOTPRODUCT指令以加速矩陣運算的方塊圖。
[圖23] 例示用以依據本案實施例以處理 TILEPARTIALDOTPRODUCT指令的方法2300。
[圖24] 例示矩陣運算加速器電路的實施例,其包含二維柵格處理元件電路,其包含一列組態開關,以切換於第一模式與第二模式之間。
[圖25] 例示組態開始的實施例。
[圖26] 例示矩陣運算加速器電路的實施例,其包含二維柵格處理元件電路,其包含多列組態開關,以切換於多數模式之間。
[圖27A] 為方塊圖,例示依據本案實施例之同屬向量友善指令格式及其類別A指令模板。
[圖27B] 為方塊圖,例示依據本案實施例之同屬向量友善指令格式及其類別B指令模板。
[圖28A] 為方塊圖,例示依據本案實施例之用於圖27A及27B中之同屬向量友善指令格式的欄位。
[圖28B] 為方塊圖,例示依據本案一實施例之作成全運算碼欄位的圖28A中的特定善指令格式的欄位。
[圖28C] 為方塊圖,例示依據本案一實施例之作成暫存器索引欄位的圖28A中特定向量友善指令的欄位。
[圖28D] 為方塊圖,例示依據本案一實施例之作成擴充運算欄位2750的圖28A中的特定向量友善指令格式的欄位。
[圖29] 為依據本案一實施例之暫存器架構的方塊圖。
[圖30A] 為方塊圖,例示依據本案實施例之例示循序管線與例示暫存器重命名失序發出/執行管線兩者。
[圖30B] 為方塊圖,例示依據本案實施例之予以包含在處理器中之循序架構核心的例示實施例與例示暫存器重命名失序發出/執行架構核心兩者。
[圖31A] 為依據本案實施例之單一處理器核心與至晶粒上互連網路的連接以及第二階(L2)快取的本地次組之方塊圖。
[圖31B] 為依據本案實施例之圖31A中之處理器核心的部份之放大圖。
[圖32] 為一處理器的方塊圖,其依據本案實施例可以具有一個以上核心,可以具有一整合記憶體控制器,也可以具有整合圖形。
[圖33] 為依據本案一實施例之系統的方塊圖。
[圖34] 為依據本案實施例之更特定例示系統的方塊圖。
[圖35] 顯示依據本案實施例之第二更特定例示系統的方塊圖。
[圖36] 顯示依據本案實施例之系統晶片(SoC)的方塊圖。
[圖37] 為方塊圖,對照依據本案實施例之使用軟體指令轉換器以將原始指令集中之二進制指令轉換為目標指令集中之二進制指令。
301:主處理器/處理系統
303:同調記憶體介面
305:資料緩衝器
307:矩陣運算加速器
309:FMA柵格
311:命令

Claims (24)

  1. 一種設備,包含: 矩陣運算加速器電路,包含二維柵格的熔合乘法累加電路; 第一多數暫存器,其代表耦接至該矩陣運算加速器電路的至少一第一輸入二維矩陣; 第二多數暫存器,其代表耦接至該矩陣運算加速器電路的至少一第二輸入二維矩陣; 耦接至該矩陣運算加速器電路的核心的解碼器,用以解碼單一指令成為解碼單一指令,該單一指令包含一欄位,其指明一所得儲存器;及 該核心的執行電路,用以執行該解碼單一指令,用以: 將該矩陣運算加速器電路由第一模式切換至第二模式,該第一模式中,該二維柵格的第一適當次組的熔合乘法累加電路的各個的個別輸出係被向下游傳送至該二維柵格的第二適當次組的熔合乘法累加電路的各個的個別輸入,以形成來自該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的輸出值,及儲存該輸出值於該所得儲存器中,該第二模式中,該二維柵格的該第一適當次組的熔合乘法累加電路的各個的個別輸出由第一次組的該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣形成第一輸出值,並儲存所述第一輸出值於該所得儲存器中,及該二維柵格的該第二適當次組的熔合乘法累加電路的各個的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第二次組形成第二輸出值,及將所述第二輸出值儲存於該所得儲存器。
  2. 如請求項1之設備,其中該單一指令包含第二欄位,以指示當該第二欄位為第一值時,該矩陣運算加速器電路將要執行於該第一模式,及當該第二欄位為第二值時,該矩陣運算加速器電路將要執行於該第二模式。
  3. 如請求項2之設備,其中該第二欄位為該單一指令的立即值。
  4. 如請求項1之設備,其中該所得儲存器為第三多數暫存器,其代表為執行該解碼單一指令所形成的至少一輸出二維矩陣。
  5. 如請求項4之設備,其中執行該解碼單一指令為用以: 在該第一模式中,將來自代表初始儲存於該第三多數暫存器中的至少一第三輸入二維矩陣的該第三多數暫存器的值加至所述輸出值,以形成更新輸出值,並儲存該更新輸出值(而不是輸出值)至該所得儲存器,及 在該第二模式中,將來自初始儲存於該第三多數暫存器的該至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新第一輸出值與更新第二輸出值,並且儲存該更新第一輸出值與更新第二輸出值(而不是該第一輸出值與該第二輸出值)至該所得儲存器。
  6. 如請求項1之設備,其中執行該解碼單一指令為用以: 在該第一模式中,將來自初始儲存在第三多數暫存器中的至少一第三輸入二維矩陣的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是該輸出值)至該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器中的至少一第三輸入二維矩陣的值加至該第一輸出值與該第二輸出值,以形成更新第一輸出值與更新第二輸出值,並儲存該更新第一輸出值與該更新第二輸出值(而不是該第一輸出值與該第二輸出值)至該所得儲存器。
  7. 如請求項1之設備,其中該所得儲存器為第三多數暫存器,其代表執行該解碼單一指令所形成的多數輸出二維矩陣。
  8. 如請求項1至7中任一項之設備,其中該第一適當次組熔合乘法累加電路為該二維柵格熔合乘法累加電路的列或行之一,以及,該第二適當次組熔合乘法累加電路為該二維柵格熔合乘法累加電路的該列或該行之一的另一個。
  9. 一種方法,包含: 以處理器核心的解碼器,解碼單一指令為解碼單一指令,其中,該處理器核心被耦接至矩陣運算加速器電路,其包含二維柵格熔合乘法累加電路,該矩陣運算加速器電路被耦接至代表至少一第一輸入二維矩陣的第一多數暫存器與耦接至代表至少一第二輸入二維矩陣的第二多數暫存器,及該單一指令包含指明所得儲存器的欄位;及 以該處理器核心的執行電路,執行該解碼單一指令,用以: 將該矩陣運算加速器電路由第一模式切換至第二模式,該第一模式中,該二維柵格的第一適當次組的熔合乘法累加電路的各個的個別輸出係被向下游傳送至該二維柵格的第二適當次組的熔合乘法累加電路的各個的個別輸入,以由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣形成輸出值,並儲存所述輸出值於該所得儲存器中,該第二模式中,該二維柵格的該第一適當次組的熔合乘法累加電路的各個的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第一次組形成第一輸出值並儲存所述第一輸出值於該所得儲存器中,及該二維柵格的該第二適當次組熔合乘法累加電路的各個的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第二次組形成第二輸出值,並儲存所述第二輸出值於該所得儲存器中。
  10. 如請求項9之方法,其中該單一指令包含第二欄位,指示該矩陣運算加速器電路當該第二欄位為第一值時,將要執行於該第一模式,及當該第二欄位為第二值時,則將要執行於該第二模式。
  11. 如請求項10之方法,其中該第二欄位為該單一指令的立即值。
  12. 如請求項9之方法,其中該所得儲存器為第三多數暫存器,其代表執行該解碼單一指令所形成的至少一輸出二維矩陣。
  13. 如請求項12之方法,其中執行該解碼單一指令為用以: 在該第一模式中,將來自代表初始儲存於該第三多數暫存器的至少一第三輸入二維矩陣的該第三多數暫存器的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是所述輸出值至)該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器的該至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新第一輸出值與更新第二輸出值,並儲存該更新第一輸出值與更新第二輸出值(而不是所述第一輸出值與所述第二輸出值)至該所得儲存器。
  14. 如請求項9之方法,其中所述執行所述解碼單一指令為用以: 在該第一模式中,將來自初始儲存在第三多數暫存器的至少一第三輸入二維矩陣的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是所述輸出值)至該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器的至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新第一輸出值與更新第二輸出值,並儲存所述更新第一輸出值與更新第二輸出值(而不是所述第一輸出值與所述第二輸出值)至該所得儲存器。
  15. 如請求項9之方法,其中該所得儲存器為第三多數暫存器,其代表執行該解碼單一指令所形成的多數輸出二維矩陣。
  16. 如請求項9至15中任一項之方法,其中該第一適當次組熔合乘法累加電路為該二維柵格熔合乘法累加電路的列或行之一及該第二適當次組熔合乘法累加電路為該二維柵格熔合乘法累加電路的所述列或行之一的另一個。
  17. 一種非暫態機器可讀媒體,其儲存碼,當所述碼為機器所執行時,使得該機器用以執行一方法,包含: 以處理器核心之解碼器,解碼單一指令為解碼單一指令,其中該處理器核心被耦接至包含二維柵格熔合乘法累加電路的矩陣運算加速器電路,該矩陣運算加速器電路被耦接至代表至少一第一輸入二維矩陣的第一多數暫存器及代表至少一第二輸入二維矩陣的第二多數暫存器,及該單一指令包含指明所得儲存器的欄位;及 以該處理器核心的執行電路,執行該解碼單一指令,用以: 將該矩陣運算加速器電路由第一模式切換至第二模式,在該第一模式中,該二維柵格的第一適當次組熔合乘法累加電路的各個之個別輸出被向下游傳送至該二維柵格的第二適當次組熔合乘法累加電路的各個的個別輸入,以由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣形成輸出值,並將所述輸出值儲存於該所得儲存器中,在該第二模式中,該二維柵格的該第一適當次組熔合乘法累加電路的各個的所述個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第一次組形成第一輸出值,及將所述第一輸出值儲存於該所得儲存器,及該二維柵格的該第二適當次組熔合乘法累加電路的各個的個別輸出由該至少一第一輸入二維矩陣與該至少一第二輸入二維矩陣的第二次組形成第二輸出值,及 儲存所述第二輸出值於該所得儲存器中。
  18. 如請求項17的非暫態機器可讀媒體,其中該單一指令包含第二欄位,指明當該第二欄位為第一值時,該矩陣運算加速器電路將要執行於該第一模式,及當該第二欄位為第二值時,該矩陣運算加速器電路將要執行於該第二模式。
  19. 如請求項18的非暫態機器可讀媒體,其中該第二欄位為該單一指令的立即值。
  20. 如請求項17的非暫態機器可讀媒體,其中該所得儲存器為代表執行該解碼單一指令所形成之至少一輸出二維矩陣的第三多數暫存器。
  21. 如請求項20的非暫態機器可讀媒體,其中所述執行解碼單一指令為用以: 在該第一模式中,將來自代表初始儲存於該第三多數暫存器的至少一第三輸入二維矩陣的該第三多數暫存器的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是所述輸出值)至該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器中的該至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新第一輸出值與更新第二輸出值,並儲存所述更新第一輸出值與更新第二輸出值(而不是所述第一輸出值與所述第二輸出值)至該所得儲存器。
  22. 如請求項17的非暫態機器可讀媒體,其中所述執行解碼單一指令為用以: 在該第一模式中,將來自初始儲存在第三多數暫存器中的至少一第三輸入二維矩陣的值加至所述輸出值,以形成更新輸出值,並儲存所述更新輸出值(而不是所述輸出值)至該所得儲存器,及 在該第二模式中,將來自初始儲存在該第三多數暫存器中的所述至少一第三輸入二維矩陣的值加至所述第一輸出值與所述第二輸出值,以形成更新第一輸出值與更新第二輸出值,並儲存所述更新第一輸出值與更新第二輸出值(而不是所述第一輸出值與所述第二輸出值)至該所得儲存器。
  23. 如請求項17的非暫態機器可讀媒體,其中該所得儲存器為代表執行該解碼單一指令所形成的多數輸出二維矩陣的第三多數暫存器。
  24. 如請求項17至23中任一項的非暫態機器可讀媒體,其中該第一適當次組熔合乘法累加電路為該二維柵格熔合乘法累加電路的列或行之一及該第二適當次組熔合乘法累加電路為該二維柵格熔合乘法累加電路的該列或行之一的另一個。
TW109120806A 2019-09-27 2020-06-19 用於矩陣運算加速器的指令之設備、方法及系統 TW202113630A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/586,114 2019-09-27
US16/586,114 US20200026745A1 (en) 2019-09-27 2019-09-27 Apparatuses, methods, and systems for instructions of a matrix operations accelerator

Publications (1)

Publication Number Publication Date
TW202113630A true TW202113630A (zh) 2021-04-01

Family

ID=69161295

Family Applications (1)

Application Number Title Priority Date Filing Date
TW109120806A TW202113630A (zh) 2019-09-27 2020-06-19 用於矩陣運算加速器的指令之設備、方法及系統

Country Status (5)

Country Link
US (1) US20200026745A1 (zh)
EP (1) EP3798823A1 (zh)
JP (1) JP2021057004A (zh)
CN (1) CN112579159A (zh)
TW (1) TW202113630A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11334358B2 (en) 2019-12-09 2022-05-17 Amazon Technologies, Inc. Hardware accelerator having reconfigurable instruction set and reconfigurable decoder
US11841792B1 (en) * 2019-12-09 2023-12-12 Amazon Technologies, Inc. Instructions with multiple memory access modes

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11288068B2 (en) 2017-03-20 2022-03-29 Intel Corporation Systems, methods, and apparatus for matrix move
US20220100513A1 (en) * 2020-09-26 2022-03-31 Intel Corporation Apparatuses, methods, and systems for instructions for loading data and padding into a tile of a matrix operations accelerator
US12020028B2 (en) 2020-12-26 2024-06-25 Intel Corporation Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
US20220413803A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Systolic array having support for output sparsity
US20230094414A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Matrix operation with multiple tiles per matrix dimension
WO2024065859A1 (en) * 2022-10-01 2024-04-04 Intel Corporation Block normalized adder with four-deep systolic parameter support
US12007937B1 (en) 2023-11-29 2024-06-11 Recogni Inc. Multi-mode architecture for unifying matrix multiplication, 1×1 convolution and 3×3 convolution
US12008069B1 (en) * 2023-11-29 2024-06-11 Recogni Inc. Multi-mode architecture for unifying matrix multiplication, 1×1 convolution and 3×3 convolution
US12045309B1 (en) 2023-11-29 2024-07-23 Recogni Inc. Systems and methods for performing matrix multiplication with a plurality of processing elements

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
EP2996035A1 (en) * 2008-10-15 2016-03-16 Hyperion Core, Inc. Data processing device

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11334358B2 (en) 2019-12-09 2022-05-17 Amazon Technologies, Inc. Hardware accelerator having reconfigurable instruction set and reconfigurable decoder
US11841792B1 (en) * 2019-12-09 2023-12-12 Amazon Technologies, Inc. Instructions with multiple memory access modes

Also Published As

Publication number Publication date
JP2021057004A (ja) 2021-04-08
CN112579159A (zh) 2021-03-30
US20200026745A1 (en) 2020-01-23
EP3798823A1 (en) 2021-03-31

Similar Documents

Publication Publication Date Title
TW202113630A (zh) 用於矩陣運算加速器的指令之設備、方法及系統
US11614936B2 (en) Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11507376B2 (en) Systems for performing instructions for fast element unpacking into 2-dimensional registers
TWI818885B (zh) 執行複數的熔合乘-加指令的系統與方法
US11675590B2 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
US20190042237A1 (en) Matrix multiplication acceleration of sparse matrices using column folding and squeezing
TWI841041B (zh) 用於融合乘加運算的系統、裝置及方法
CN110955453A (zh) 用于执行矩阵压缩和解压缩指令的系统和方法
TW202418114A (zh) 用於矩陣運算加速器之指令的裝置,方法和系統
US10922077B2 (en) Apparatuses, methods, and systems for stencil configuration and computation instructions
US11900114B2 (en) Systems and methods to skip inconsequential matrix operations
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
US11269630B2 (en) Interleaved pipeline of floating-point adders
US20200210188A1 (en) Systems and methods for performing matrix row- and column-wise permute instructions
US20230315450A1 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
US20220100508A1 (en) Large-scale matrix restructuring and matrix-scalar operations
US11972230B2 (en) Matrix transpose and multiply
US11941395B2 (en) Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
CN112149050A (zh) 用于增强的矩阵乘法器架构的装置、方法和系统
CN118605946A (zh) 用于8位浮点矩阵点积指令的装置、方法和系统