TW202143029A - 用於將零值相乘之指令的設備、方法和系統 - Google Patents

用於將零值相乘之指令的設備、方法和系統 Download PDF

Info

Publication number
TW202143029A
TW202143029A TW109131698A TW109131698A TW202143029A TW 202143029 A TW202143029 A TW 202143029A TW 109131698 A TW109131698 A TW 109131698A TW 109131698 A TW109131698 A TW 109131698A TW 202143029 A TW202143029 A TW 202143029A
Authority
TW
Taiwan
Prior art keywords
zero value
format
zero
vector
field
Prior art date
Application number
TW109131698A
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 TW202143029A publication Critical patent/TW202143029A/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/40Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using contact-making devices, e.g. electromagnetic relay
    • G06F7/44Multiplying; Dividing
    • 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
    • G06F9/30014Arithmetic instructions with variable precision
    • 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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/491Computations with decimal numbers radix 12 or 20.
    • G06F7/492Computations with decimal numbers radix 12 or 20. using a binary weighted representation within each denomination
    • G06F7/493Computations with decimal numbers radix 12 or 20. using a binary weighted representation within each denomination the representation being the natural binary coded representation, i.e. 8421-code
    • G06F7/496Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • 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/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/30181Instruction operation extension or modification

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Nonlinear Science (AREA)
  • Electromagnetism (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

描述了與乘以零值的指令相關的系統、方法和設備。在一個實施例中,一種硬體處理器包含解碼器,用以將單一指令解碼為經解碼的單一指令,所述單一指令具有識別第一數字的第一欄位、識別第二數字的第二欄位和指示所述第一數字和所述第二數字的數字格式的第三欄位;以及執行電路,用以執行所述經解碼的單一指令以:使所述第一數字與所述第一數字的所述數字格式的零值進行第一比較,使所述第二數字與所述第二數字的所述數字格式的零值進行第二比較,當所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,提供零的值作為所述單一指令的結果,當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值時,提供所述零的值作為所述單一指令的結果,以及當所述第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值,並且所述第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,提供所述第一數字與所述第二數字的乘積作為所述單一指令的結果。

Description

用於將零值相乘之指令的設備、方法和系統
本發明一般涉及電子裝置,並且更具體地,本發明的實施例涉及用以實現乘以零值的指令的電路。
處理器或一組處理器執行來自指令集(例如,指令集架構(ISA))的指令。所述指令集是與程式化相關的電腦架構的一部分,並且通常包含本機資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷和異常處理以及外部輸入和輸出(I/O)。應當注意,本文中的用語指令可以是指巨集指令,例如,提供給處理器以供執行的指令,或者是指微指令,例如,由處理器的解碼器對巨集指令進行解碼而得到的指令。
在以下描述中,闡述了許多具體細節。然而,應當理解,可以在沒有這些具體細節的情況下實踐本發明的實施例。在其它情況下,未詳細顯示眾所皆知的電路、結構和技術,以免混淆對本說明書的理解。
在說明書中對「一個實施例」、「實施例」、「範例實施例」等的參照指示所描述的實施例可以包含特定的特徵、結構或特性,但是每個實施例可以不必包含特定的特徵、結構或特性。再者,這種短語不一定指相同的實施例。此外,當結合實施例描述特定的特徵、結構或特性時,可以認為結合無論是否明確描述的其它實施例來影響這種特徵、結構或特性是在本領域技術人員的知識範圍內。
一種(例如,具有一或多個核心的)(例如,硬體)處理器可以執行指令(例如,指令執行緒)以對資料進行操作,例如,以執行算術、邏輯或其它功能。例如,軟體可以請求操作,並且硬體處理器(例如,其一或多個核心)可以響應於所述請求來執行所述操作。操作的一個非限制性範例是乘法運算。例如,形成神經網路的計算系統可以包含多個乘法運算元,其中乘數值為零和/或被乘數值為零。本文的某些實施例允許跳過零值的某些乘法運算。因此,這些實施例允許跳過那些乘法運算來進行硬體效能和功率最佳化。
可以在計算系統(例如,加速器和/或處理器)中對具有不同格式(例如,表示形式)的數值資料執行操作。在某些實施例中,數字是定點格式或浮點格式。整數可用二進制格式表示。有符號整數可用二的(2’s)補數格式表示(例如,其中前導為零表示正整數,而前導為1表示負整數)。(例如,實數)數字可以用浮點格式表示,例如,以固定數量的數字表示不同數量級的數字。
數字格式的一個範例是其中數字通常近似於固定數量的有效數字(有效數字)並使用某個固定基數(例如,二、十或十六的基數)中的指數進行縮放。數字格式的範例,其中S表示符號位元、M表示尾數,而E表示指數,如下所示:
Figure 02_image001
浮點格式的範例如下:
Figure 02_image003
根據用於二進制FP算術的IEEE 754標準,尾數是無符號數(例如,二進制分數),並且規範化的浮點數在最高有效位元(MSB)位置具有單一個一。在某些實施例中,此位元(例如,小數點左邊)是隱含的,因此尾數不需要儲存。在某些實施例中,指數在這裡表示為非負整數,從中減去恆定偏差。浮點格式的範例是浮點16(例如,binary16)、浮點32(例如,binary32)、浮點64(例如,binary64)、浮點128(例如,binary128)和浮點256(例如,binary256),儘管在某些實施例中可以使用任何數量的符號、有效位數(例如,其尾數)或指數位元。在一個實施例中,binary16格式具有用於符號位元的一個位元、用於指數的5個位元,以及隱含用於有效位數的11個位元(顯式儲存的10個位元)。在一個實施例中,binary32格式具有用於符號位元的一個位元、用於指數的8個位元,以及隱含用於有效位數的24個位元(顯式儲存的23個位元)。在一個實施例中,binary64格式具有用於符號位元的一個位元、用於指數的11個位元,以及隱含用於有效位數的53個位元(顯式儲存的52個位元)。在一個實施例中,binary128格式具有用於符號位元的一個位元、用於指數的15個位元,以及隱含用於有效位數的113個位元(顯式儲存的112個位元)。在一個實施例中,binary256格式具有用於符號位的一個位元、用於指數的19個位元,以及隱含用於有效位數的237個位元(顯式儲存的236個位元)。
神經網路的某些實施例(例如,整數網路或浮點網路)具有許多操作,其包含至少一個零的輸入值。因此,對於這些神經網路(例如,實現神經網路的電路)、硬體效能(例如,和功率)最佳化是透過有效地跳過乘以「零」的乘法來實現。
指令格式可以包含運算碼(例如,運算碼的適當子集)或其它欄位(例如,運算元或立即數)來指示包含一或多個「零」的值的乘法將不被進行。指令格式可以包含運算碼(例如,運算碼的適當子集)或其它欄位(例如,運算元或立即數)來指示任一者為零的複數個輸入值的所求乘法的結果為零(例如,或者均為零的複數個輸入值的所求乘積的結果輸出為正好為零)。在某些實施例中,指令的數字格式指示為「零」的值何時被包含在指令中(例如,作為運算碼或其它欄位)。在某些實施例中,將用於乘法運算的乘數被代替地關閉(例如,被關閉或不開啟),因此節省了電力。因為乘法的數目可能很大(例如,10個、100個、1000個等),此電力節省與包含用以提供任一者為零的一對輸入值的乘法的結果之電路的複數個乘法器相應地縮放。指令可包含本文討論的欄位中的一或多個(例如,任何的)。
本文揭露的指令是對(例如,電腦的)處理器本身的功能的改進。不具有作為其指令集的一部分的這種指令的指令解碼電路(例如,解碼器)將不會如本文所討論的那樣進行解碼。不具有作為其指令集的一部分的這種指令的執行電路將不會如本文所討論的那樣執行。例如,當處理器將單一指令解碼為經解碼指令並由處理器執行所述經解碼指令時,致使第一數字與第一數字的數字格式中的零值進行第一比較,致使第二數字與第二數字的數字格式中的零值進行第二比較,當第二比較指出第二數字等於第二數字的數字格式中的零值時,提供零的值作為單一指令的結果,當第一比較指出第一數字等於第一數字的數字格式中的零值時,提供零的值作為單一指令的結果,並且當第一比較指出第一數字不等於第一數字的數字格式中的零值且第二比較指出第二數字不等於第二數字的數字格式中的零值時,提供第一數字和第二數字的乘積作為單一指令的結果之所述單一指令是對(例如,電腦的)處理器本身的功能的改進。
圖1顯示根據本發明實施例的耦接到記憶體110的硬體處理器100。所描繪的硬體處理器100包含硬體解碼器102(例如,解碼單元或解碼電路)和硬體執行電路104(例如,執行單元)。所描繪的硬體處理器100包含暫存器106。暫存器可以包含一或多個暫存器以存取(例如,載入和/或儲存)記憶體110中的資料,例如,額外地或可替代地用以存取(例如,載入或儲存)資料。所描述的硬體處理器100包含快取記憶體108。快取記憶體可以包含一或多個快取記憶體庫以存取(例如,載入和/或儲存)在記憶體110和/或暫存器106中的資料,例如,額外地或可替代地用以存取(例如,載入或儲存)資料。
描繪的執行電路104包含矩陣運算電路112、純量電路114和/或向量/單一指令多重資料(SIMD)電路116。在某些實施例中,可以存在(例如,利用)矩陣運算電路112、純量電路114和/或向量/單一指令多重資料(SIMD)電路116中的僅一個或任意組合。在某些實施例中,矩陣運算電路112對於一或多個矩陣進行操作。在一個實施例中,矩陣運算電路112是圖3中描繪的矩陣運算電路的範例。矩陣運算電路112可以被包含在核心中或作為(例如,外部)加速器。在某些實施例中,純量電路114對於純量值(例如,單一數字)進行操作。在某些實施例中,向量/SIMD電路116對向量或緊縮資料值進行操作。
注意,本文中的附圖可能未描繪所有資料通訊連接。本領域普通技術人員將意識到,這不會使附圖中的某些細節模糊。注意,附圖中的雙向箭頭可能不需要雙向通訊,例如,它可能指示單向通訊(例如,去或來自所述元件或裝置)。在本文的某些實施例中,可以利用通訊路徑的任何或全部組合。
硬體解碼器102可以接收(例如,單一)指令(例如,巨集指令)並且將所述指令解碼為例如微指令和/或微運算。硬體執行電路104可以執行經解碼指令(例如,巨集指令)以執行一或多個操作。例如,將由解碼器102解碼的指令和用於將由執行電路104執行的經解碼指令可以是本文(例如,在圖6-8中)所討論的任何指令。
(一或多個)乘法器電路可以是圖2-7中的任何乘法器電路。本文的某些實施例涉及包含在其指令集中的指令的處理器,其響應於乘法請求而執行操作。例如,當處理器將單一指令解碼為經解碼指令並由處理器執行所述經解碼指令時,致使第一數字與第一數字的數字格式中的零值進行第一比較,致使第二數字與第二數字的數字格式中的零值進行第二比較,當第二比較指出第二數字等於第二數字的數字格式中的零值時,提供零的值作為單一指令的結果,當第一比較指出第一數字等於第一數字的數字格式中的零值時,提供零的值作為單一指令的結果,並且當第一比較指出第一數字不等於第一數字的數字格式中的零值且第二比較指出第二數字不等於第二數字的數字格式中的零值時,提供第一數字和第二數字的乘積作為單一指令的結果之單一指令。
解碼器102、執行電路104、暫存器106和/或快取記憶體108可以是處理器的單一核心的,例如,以及可以包含各自具有所述電路的實例的多個核心。處理器(例如,及其核心)可以是根據本文中的任何揭露內容的處理器和/或核心。
圖2A顯示根據本發明的實施例的電路200,其包含耦接到「零」乘法器電路228的「零」檢測器電路201。在圖2A中,數字格式儲存指示第一輸入數字202和/或第二輸入數字204的數字格式的值。在一個實施例中,數字格式向比較電路220、222指示在特定數字格式218中如何(例如,準確地)表示零。
所描繪的電路200包含用於第一浮點數202和第二浮點數204的儲存(例如,觸發器)。用於第一浮點數202的所描繪的格式是單一位元符號欄位206、用於指數欄位208的複數個位元(例如,八個位元或十一個位元)和用於分數欄位210的複數個位元(例如,二十三個位元或五十二個位元)。用於第二浮點數204的所描繪的格式是單一位元符號欄位212、用於指數欄位214的複數個位元(例如,八個位元或十一個位元)和用於分數欄位216的複數個位元(例如,二十三個位元或五十二個位元)。在一個實施例中,當以浮點格式表示的數字為零或正時,符號位元為零;而當以浮點格式表示的數字為負時,符號位元為一。
在某些實施例中,數字格式218向比較電路220指示零的浮點值包含第一數字202的符號位元欄位206中的零值、第一數字202的指數欄位208中的零值(例如,指數欄位的全位元寬度的每個位元位置中的複數個零),和第一數字202的分數欄位210中的零值(例如,例如,分數欄位的全位元寬度的每個位元位置中的複數個零)和/或向比較電路222指示零的浮點值包含第二數字204的符號位元欄位212中的零值、第二數字204的指數欄位214中的零值(例如,指數欄位的全位元寬度的每個位元位置中的複數個零),和第二數字204的分數欄位216中的零值(例如,例如,分數欄位的全位元寬度的每個位元位置中的複數個零)。在某些實施例中,數字格式控制電路200(例如,比較電路220、224)以在不同的數字格式(例如,模式)之間進行切換,例如,對於圖2A所示的浮點數和對於如圖2B所示的整數。
在某些實施例中,響應於經解碼指令所致使的請求,(i)比較電路220係用以比較由第一數字202的數字格式218指定為零的值,並且,在一個實施例中,透過比較電路220的複數個比較,其包含零值與第一數字202的符號位元206的比較、零值與第一數字202的指數欄位208的比較,零值與第一數字202的分數欄位210的比較,例如,並且當第一數字202是零值時(例如,當透過比較電路220的零值與第一數字202的符號位元206的比較、零值與第一數字202的指數欄位208的比較,零值與第一數字202的分數欄位210的比較的所有比較皆為真(非偽)時),輸出第一值(例如,零),並且當第一數字202並非零值時(例如,當透過比較電路220的零值與第一數字202的符號位元206的比較、零值與第一數字202的指數欄位208的比較,或零值與第一數字202的分數欄位210的比較中的任一比較為偽(非真)時),輸出不同的第二值(例如,一),和(ii)比較電路222係用以比較由第二數字204的數字格式218指定為零的值,並且,在一個實施例中,透過比較電路222的複數個比較,其包含零值與第二數字204的符號位元212的比較、零值與第二數字204的指數欄位214的比較,零值與第二數字204的分數欄位216的比較,例如,並且當第二數字204是零值時(例如,當透過比較電路222的零值與第二數字204的符號位元212的比較、零值與第二數字204的指數欄位214的比較,零值與第二數字204的分數欄位216的比較的所有比較皆為真(非偽)時),輸出第一值(例如,零),並且當第二數字204並非零值時(例如,當透過比較電路222的零值與第二數字204的符號位元212的比較、零值與第二數字204的指數欄位214的比較,或零值與第二數字204的分數欄位216的比較中的任一比較為偽(非真)時),輸出不同的第二值(例如,一)。在圖2A中,來自比較電路220和比較電路220中之各者的輸出被輸入到邏輯閘224(例如,如此,AND邏輯閘224斷言在當兩個輸入都是一時,其輸出端226僅為一)。例如,當第一數字202並非零值,同時第二數字204並非零值時,具有斷言值(例如,一)的AND邏輯閘224。
在這種實施例之一中,從AND邏輯閘224至「零」檢測器電路201的輸出226被輸入到「零」乘法器電路228,使得(i)當第一數字202不是零值,同時第二數字204不是零值時,來自零輸出儲存234的零(例如常數,依指定數字格式的零的常數)被提供作為輸出236,並且(ii)否則從以乘法器230將第一數字202和第二數字204相乘輸出的乘積。在某些實施例中,向每個比較電路提供不同的數字格式。
在一個實施例中,當第一數字202是零值或第二數字204是零值時,乘法器230被關閉(例如,透過電源控制開關232),例如,以節省不對第一浮點數202和第二浮點數204執行乘法的電力。
圖2B顯示根據本發明的實施例的處於整數模式並且包含耦接到「零」乘法器電路228的「零」檢測器電路201的電路200。在圖2B中,數字格式儲存指示第一輸入數字252和/或第二輸入數字254的數字格式(例如,數字252和254與數字202和204在圖2A中所使用的相同儲存中)的值。在一個實施例中,數字格式向比較電路220、222指示在特定數字格式218中如何(例如,準確地)表示零。
描繪的電路200包含用於第一整數252和第二整數254的儲存(例如,觸發器)。用於第一整數252的所描繪的格式是單一位元欄位(例如,三十二位元或六十四位元或更多)。用於第二整數254的所描繪的格式是單一位元欄位(例如,三十二位元或六十四位元或更多)。
在某些實施例中,數字格式218對比較電路220指示零的整數值為在第一數字252的所有位元位置中的零(例如,相對地,一的整數值包含前面是零值的最低有效位元中的一值(例如,八位整數寬度的00000001))的和/或對比較電路222指示零的整數值為在第二數字254的所有位元位置中的零(例如,相對地,一的整數值包含前面是零值的最低有效位元中的一值(例如,八位整數寬度的00000001))。在某些實施例中,數字格式控制了電路200(例如,比較電路220、224)以在不同的數字格式之間進行切換,例如,對於如圖2A所示的浮點數和對於如圖2B所示的整數。
在某些實施例中,響應於經解碼指令所致使的請求,(i)比較電路220係用以比較由第一數字252的數字格式218指定為零的值,例如,並且當第一數字252是零值時,輸出第一值(例如,零),和(ii)比較電路222係用以比較由第二數字254的數字格式218指定為零的值,例如,並且當第二數字254是零值時,輸出第一值(例如,零),並且當第二數字254並非零值時,輸出不同的第二值(例如,一)。在圖2B中,來自比較電路220和比較電路220中之各者的輸出被輸入到邏輯閘224(例如,如此,AND邏輯閘224斷言在當兩個輸入都是一時,其輸出226僅為一)。例如,當第一數字252並非零值,同時第二數字254並非零值時,具有斷言值(例如,一)的AND邏輯閘224。
在這種實施例之一中,從AND邏輯閘224到「零」檢測器電路201的輸出226被輸入到「零」乘法器電路228,使得(i)當第一數字252是零值或第二數字254是零值時,來自零輸出儲存234的零(例如,指定數字格式的常數零)被提供作為輸出236,和(ii)來自透過乘法器230的第一數字252和第二數字254的乘法乘積輸出,否則。在某些實施例中,向每個比較電路提供不同的數字格式。
在一個實施例中,當第一數字252是零值或第二數字254是零值時,乘法器230被關閉(例如,透過電源控制開關232),例如,以節省不對第一整數252和第二整數254執行乘法的電力。
在圖1中,矩陣運算電路112包含一或多個乘法器電路112A、純量電路114包含一或多個乘法器電路114A,並且向量/SIMD電路116包含一或多個乘法器電路116A。在某些實施例中,一或多個的任何乘法器電路112A、乘法器電路114A,或乘法器電路116A是來自圖2A-2B的乘法器電路228的一個範例,例如,具有包含來自圖2A-2B的「零」檢測器電路201的實例的各自的矩陣運算電路112、純量電路114,和向量/SIMD電路116。
圖3顯示根據本發明的實施例的包含「零」模式350的矩陣運算電路300。所描繪的矩陣運算電路300包含耦接在一起的複數個融合乘積累加電路(FMA)302,使得在某些實施例中,來自某些FMA的輸出作為輸入傳遞給其它FMA。
舉例而言,在某些實施例中,矩陣(圖塊A 304)中的列數與包含計算的等待時間的串列(鍊式)融合乘積累加電路(FMA)的數目匹配。在某些實施例中,每個乘法器電路來自圖2A-2B的「零」乘法器電路228的實例,例如,也包含「零」檢測器電路201。選擇性地,模式選擇350可以包含用於「零」數字格式的儲存。
一種實現可以在較小高度的網格上自由地再循環,但是計算保持不變。在一個實施例中,來源/目的地向量來自N列的圖塊(圖塊C 306),並且FMA 302的網格執行N個向量矩陣運算,從而致使執行圖塊(與圖塊B 308)的矩陣乘法的完整指令是另一個向量源,在每個階段向FMA提供「廣播」項目。
在操作中,在一些實施例中,矩陣B的元件(儲存在圖塊B 603中)分佈在FMA的矩形網格上。矩陣B(儲存在圖塊A 601中)對其列元件進行了轉換,以與FMA矩形網格的柱狀尺寸匹配。在網格中的每個FMA處,將A和B的元件相乘並添加到傳入的求和項(例如,從上面的FMA),接著將傳出的總和傳遞到FMA的下一列(或最終輸出)。
透過包含「零」模式350,矩陣運算電路300是可控制的,以允許或不允許使用「零」模式。在某些實施例中,數字格式352定義值何時是「零」。在一個實施例中,當矩陣運算電路300處於「零」模式時,任一者為零的複數個輸入值的所求乘法的結果輸出為正好為一,否則結果是乘法的實際結果(例如,所述結果將適合於針對所述結果所提供的儲存)。在某些實施例中,對於包含至少一個零的一組輸入值,將被用於對應的乘法運算的特定乘法器被代替地關閉(例如,被關閉或不開啟),從而節省了電力。在某些實施例中,當矩陣運算電路300不處於「零」模式時,複數個輸入值的所求相乘的結果僅僅是相乘的實際結果(例如,所述結果將適合於針對所述結果所提供的儲存)。
圖4顯示根據本發明的實施例的電路400,其包含耦接到加法器電路414的複數個並行的「零」乘法器電路406、408、410、412。如圖所示,第一緊縮資料(例如,向量)源402 A3-A0和第二緊縮資料(例如,向量)源404 B3-B0各自具有四個緊縮資料元件。應當理解,單一元件或任何複數個元件可存在於電路400。在一個實施例中,這些元件的每一個是浮點數。緊縮資料元件可被並行處理。
每一個乘法器電路406、408、410、412可以是圖2A-2B中的「零」乘法器電路228的實例。每個乘法器電路可以包含在圖2A-2B中的「零」檢測器電路201。在某些實施例中,數字格式452定義值何時是「零」,例如,其中數字格式452由如本文所揭露的指令的執行設置。
如圖所示,第一「零」乘法器電路406將(i)來自第一緊縮資料源402的元件A3和(ii)來自第二緊縮資料源404的元件B3作為輸入。如圖所示,第二「零」乘法器電路408(i)來自第一緊縮資料源402的元件A2和(ii)來自第二緊縮資料源404的元件B2作為輸入。如圖所示,第三「零」乘法器電路408將(i)來自第一緊縮資料源402的元件A1和(ii)來自第二緊縮資料源404的元件B1作為輸入。如圖所示,第四「零」乘法器電路412將(i)來自第一緊縮資料源402的元件A0和(ii)來自第二緊縮資料源404的元件B0作為輸入。
當電路400處於「零」模式時(例如,如透過本文揭露的指令的執行在儲存450中設置的),對於皆不是零的一對輸入值所求乘法的結果是所述乘法的實際結果(例如,所述結果將適合於針對所述結果所提供的儲存),當所述對的第二輸入值是零時,所述結果是零值,並且當所述對的第一輸入值是零時,所述結果是零值。
在某些實施例中,對於任一個為零的一組輸入值,將被用於各自的乘法運算的特定乘法器被代替地關閉(例如,被關閉或不開啟),從而節省電力。在某些實施例中,當電路400不處於「零」模式時,一對輸入值的所求乘法的結果僅是乘法的實際結果(例如,所述結果將適合針對所述結果的所提供儲存)。
在一個實施例中,在儲存450中設置「零」模式致使所有(例如,或所有中的適當子集)乘法器電路406、408、410、412處於「零」模式。如本文中所討論的,乘法器電路406、408、410、412可以(例如,每個)包含圖2A-2B中的「零」檢測器電路201的實例。
舉例而言,當每個乘法器電路406、408、410、412是在「零」模式:當A3或B3任一者是零時(例如,如由耦接在乘法器電路406與來自第一緊縮資料源402和第二緊縮資料源404的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路406是輸出零,並且當A3和B3皆不是「零」時,輸出A3和B3的乘法的實際結果;當A2或B2任一者是零時(例如,如由耦接在乘法器電路408與來自第一緊縮資料源402和第二緊縮資料源404的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路408是輸出零,並且當A2和B2皆不是「零」時,輸出A2和B2的乘法的實際結果,當A1或B1任一者是零時(例如,如由耦接在乘法器電路410與來自第一緊縮資料源402和第二緊縮資料源404的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路410是輸出零,並且當A1和B1皆不是「零」時,輸出A1和B1的乘法的實際結果,並且當A0或B0任一者是零時(例如,如由耦接在乘法器電路412與來自第一緊縮資料源402和第二緊縮資料源404的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路412是輸出零,並且當A0和B0皆不是「零」時,輸出A0和B0的乘法的實際結果。
在所描述的實施例中,乘法器電路406、408、410、412的輸出透過加法器電路414被相加在一起成單一的(例如,浮點)數,並且所述單一數透過加法器電路418被相加到初始值(或中間結果)416以產生結果420。在一個實施例中,乘法器電路406、408、410、412執行乘法的多次迭代,其中來自加法器電路414的中間結果被儲存(例如,累加)到中間結果416儲存,並相加到加法器電路414的下一個結果。
圖5顯示根據本發明的實施例的包含複數個並行的「零」乘法器電路506、508、510、512的電路500。如圖所示,第一緊縮資料(例如,向量)源502 A3-A0和第二緊縮資料(例如,向量)源504 B3-B0各自具有四個緊縮資料元件。應當理解,單一元件或任何複數個元件可存在於電路500中。在一個實施例中,這些元件中的每一個是浮點數。緊縮資料元件可以被並行處理。
每一個乘法器電路506、508、510、512可以是圖2A-2B中的「零」乘法器電路228的實例。每個乘法器電路可以包含在圖2A-2B中的「零」檢測器電路201。在某些實施例中,數字格式552定義值何時是「零」,例如,其中數字格式452由如本文所揭露的指令的執行設置。
如圖所示,第一「零」乘法器電路506將(i)來自第一緊縮資料源502的元件A3和(ii)來自第二緊縮資料源504的元件B3作為輸入。如圖所示,第二「零」乘法器電路508(i)來自第一緊縮資料源502的元件A2和(ii)來自第二緊縮資料源504的元件B2作為輸入。如圖所示,第三「零」乘法器電路508將(i)來自第一緊縮資料源502的元件A1和(ii)來自第二緊縮資料源504的元件B1作為輸入。如圖所示,第四「零」乘法器電路512將(i)來自第一緊縮資料源502的元件A0和(ii)來自第二緊縮資料源504的元件B0作為輸入。
當電路500處於「零」模式時(例如,如透過本文揭露的指令的執行在儲存550中設置的),對於皆不是零的一對輸入值所求乘法的結果是所述乘法的實際結果(例如,所述結果將適合於針對所述結果所提供的儲存),當所述對的第二輸入值是零時,所述結果是所述對的第一輸入值,並且當所述對的第一輸入值是零時,所述結果是所述對的第二輸入值。
在某些實施例中,對於任一個為零的一組輸入值,將被用於各自的乘法運算的特定乘法器被代替地關閉(例如,被關閉或不開啟),從而節省電力。在某些實施例中,當電路500不處於「零」模式時,一對輸入值的所求乘法的結果僅是乘法的實際結果(例如,所述結果將適合針對所述結果的所提供儲存)。
在一個實施例中,在儲存550中設置「零」模式致使所有(例如,或所有中的適當子集)乘法器電路506、508、510、512處於「零」模式。如本文中所討論的,乘法器電路506、508、510、512可以(例如,每個)包含圖2A-2B中的「零」檢測器電路201的實例。舉例而言,當每個乘法器電路506、508、510、512是在「零」模式:當A3或B3任一者是零時(例如,如由耦接在乘法器電路506與來自第一緊縮資料源502和第二緊縮資料源504的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路506是輸出零,並且當A3和B3皆不是「零」時,輸出A3和B3的乘法的實際結果;當A2或B2任一者是零時(例如,如由耦接在乘法器電路508與來自第一緊縮資料源502和第二緊縮資料源504的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路508是輸出零,並且當A2和B2皆不是「零」時,輸出A2和B2的乘法的實際結果,當A1或B1任一者是零時(例如,如由耦接在乘法器電路510與來自第一緊縮資料源502和第二緊縮資料源504的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路510是輸出零,並且當A1和B1皆不是「零」時,輸出A1和B1的乘法的實際結果,並且當A0或B0任一者是零時(例如,如由耦接在乘法器電路512與來自第一緊縮資料源502和第二緊縮資料源504的輸入之間的圖2A-2B中的「零」檢測器電路201的實例確定的),乘法器電路512是輸出零,並且當A0和B0皆不是「零」時,輸出A0和B0的乘法的實際結果。
圖6顯示根據本發明的實施例的耦接到包含一或多個「零」乘法指令604的儲存602的硬體處理器600,所述硬體處理器600具有耦接到執行電路616的「零」檢測器電路614。在某些實施例中,「零」乘法指令是根據任何本文揭露的內容的。在一個實施例中,「零」乘法指令604包含數字格式欄位606以指示如本文所討論的數字格式。
在一個實施例中,例如,響應於執行操作的請求,指令(例如,巨集指令)係從儲存602中被提取並被發送到解碼器608。在所描繪的實施例中,解碼器608(例如,解碼器電路)將指令解碼為經解碼指令(例如,一或多個微指令或微運算)。接著經解碼指令被發送以供執行,例如透過排程器電路610來排程經解碼指令以供執行。
在某些實施例中,(例如,在處理器/核心支援亂序(OoO)執行的情況下),處理器包含耦接到暫存器檔案/記憶體電路612(例如,單元)的暫存器重命名/分配器電路610,以分配資源並對於暫存器(例如,與指令的初始源和最終目的地相關的暫存器)執行暫存器重命名。在某些實施例中,(例如,用於亂序執行),處理器包含耦接到解碼器608的一或多個排程器電路610。排程器電路可以排程與經解碼指令相關的一或多個操作,包含從「零」乘法指令604解碼的一或多個操作,例如用於在執行電路616上執行。在所描繪的實施例中,「零」檢測器電路614係與執行電路分開,例如,其中「零」檢測器電路係在核心的前端(例如,圖12B中的前端單元1230)或是在暫存器讀取/記憶體讀取階段(例如,圖12A中的階段1214)和執行階段(例如,圖12A中的階段1216)之間,例如,在檢索運算元之後但在對運算元執行之前。在某些實施例中,「零」檢測器電路614是圖2A-2B中的「零」檢測器電路201的實例。
舉例而言,經解碼的「零」乘法指令604係用以使第一輸入運算元和第二輸入運算元(例如,來自緊縮資料源的輸入運算元的對應一對)透過「零」檢測器電路614各自與零的值比較(例如,由數字格式606所指示的),並且係用以使(i)當所述對的輸入值中的任一或兩者不是零時,對於一對輸入值所求乘法的結果是作為零值的輸出(例如,透過旁路622透過發送零值),和(ii)否則所得結果是透過乘法器電路618的乘法的實際結果(例如,所述結果將適合針對所述結果的所提供儲存)。在某些實施例中,對於包含至少一個為「零」(例如,僅為零)值的一組輸入值,將用於乘法運算的特定乘法器電路618被關閉(例如,被關閉或不被打開),從而節省電力。在另一實施例中,代替關閉被確定不用於包含一或多個「零」輸入值的乘法的執行電路616(例如,乘法器電路618),而是將其用於不同運算的計算。
作為另一範例,經解碼的「零」乘法指令604將使第一輸入運算元和第二輸入運算元(例如,來自緊縮資料源的對應的一對輸入運算元)透過「零」檢測器電路614分別與零值(例如,如透過數字格式606所指示的)進行比較,以及使(i)對於皆是零的一對輸入值的所求乘法的結果的輸出為零(例如,(例如,透過旁路622透過發送零的值),以及(ii)否則,結果是透過乘法器電路618的乘法的實際結果(例如,所述結果將適合針對所述結果的所提供儲存)。在某些實施例中,對於包含皆為「零」的一組輸入值,將用於乘法運算的特定乘法器電路618被關閉(例如,被關閉或不被打開),從而節省電力。在另一實施例中,代替關閉被確定不用於「零」輸入值的執行電路616(例如,乘法器電路618),而是將其用於不同運算的計算。
每個乘法器電路618可以是圖2A-2B中的「零」乘法器電路228的實例。在某些實施例中,數字格式606定義值何時是零,例如,其中數字格式606是由指令604設定的。
在某些實施例中,包含回寫電路620以將指令的結果寫回目的地(例如,將它們寫到暫存器和/或記憶體),例如,使得那些結果在處理器內是可見的(例如,在產生那些結果的執行電路外部可見)。在一個實施例中,在指令604的執行期間確定實際結果(例如,透過執行單元616),但是在執行之後(例如,在執行階段之後),例如,在回寫電路620中(例如,在回寫階段中)將所述結果替換為零的值(例如,針對結果的寬度)。
這些元件中的一或多個(例如,解碼器608、暫存器重命名/暫存器分配器/排程器610、執行電路616、暫存器(例如,暫存器檔案)/記憶體612或回寫電路620)可能位於硬體處理器的單一核心中(例如,並且多個核心每個都有這些元件的實例)。
圖7顯示根據本發明的實施例的耦接到包含一或多個「零」乘法指令704的儲存的硬體處理器700,所述硬體處理器具有執行電路714的「零」檢測器電路716。在某些實施例中,「零」乘法指令係根據任何本文揭露的。在一個實施例中,「零」乘法指令704包含數字格式欄位706以指示如本文所討論的數字格式。
在一個實施例中,例如,響應於執行操作的請求,從儲存702中擷取指令(例如,巨集指令)並將其發送到解碼器708。在所描繪的實施例中,解碼器708(例如,解碼器電路)將所述指令解碼為經解碼指令(例如,一或多個微指令或微運算)。接著發送經解碼指令以供執行,例如,透過排程器電路710以排程經解碼指令以供執行。
在某些實施例中,(例如,在處理器/核心支援亂序(OoO)執行的情況下),處理器包含耦接到暫存器檔案/記憶體電路712(例如,單元)的暫存器重命名/分配器電路710,以分配資源並對於暫存器(例如,與指令的初始源和最終目的地相關的暫存器)執行暫存器重命名。在某些實施例中,(例如,對於亂序執行),處理器包含耦接到解碼器708的一或多個排程器電路710。排程器電路可以排程與經解碼指令相關的一或多個操作,包含從「零」乘法指令704解碼的一或多個操作,例如,以在執行電路714上執行。在所描繪的實施例中,「零」檢測器電路716係在所述執行電路714內,例如,在圖12B中的執行集群1260中。在某些實施例中,「零」檢測器電路716係在圖2A-2B中的「零」檢測器電路201的實例。
舉例而言,經解碼的「零」乘法指令704係用以使第一輸入運算元和第二輸入運算元(例如,來自緊縮資料源的輸入運算元的對應一對)透過執行電路714的「零」檢測器電路716分別與「零」值進行比較(例如,由數字格式706所指示的),並且係用以使(i)對於一對輸入值所求乘法的結果是作為零值的輸出(例如,透過發送單一零值作為輸出而未輸入到乘法器電路718),和(ii)否則所得結果是透過乘法器電路718的乘法的實際結果(例如,所述結果將適合針對所述結果的所提供儲存)。在某些實施例中,對於包含至少一個為「零」值的一組輸入值,將用於乘法運算的特定乘法器電路718被關閉(例如,被關閉或不被打開),從而節省電力。在另一實施例中,代替關閉被確定不用於包含至少一個「零」輸入值的乘法的執行電路乘法器電路718,而是將其用於不同運算的計算。
作為另一範例,經解碼的「零」乘法指令704將使第一輸入運算元和第二輸入運算元(例如,來自緊縮資料源的對應的一對輸入運算元)透過「零」檢測器電路716分別與零值(例如,如透過數字格式706所指示的)進行比較,以及使(i)對於皆是零的一對輸入值的所求乘法的結果的輸出為零(例如,(例如,透過旁路722透過發送零的值),以及(ii)否則,結果是透過乘法器電路718的乘法的實際結果(例如,所述結果將適合針對所述結果的所提供儲存)。在某些實施例中,對於包含皆為零的一組輸入值,將用於乘法運算的特定乘法器電路718被關閉(例如,被關閉或不被打開),從而節省電力。在另一實施例中,代替關閉被確定不用於「零」輸入值的乘法器電路718,而是將其用於不同運算的計算。
每個乘法器電路718可以是圖2A-2B中的「零」乘法器電路228的實例。在某些實施例中,數字格式706定義了值何時是零,例如,其中數字格式706由指令704設定。
在某些實施例中,例如,包含回寫電路720以將指令的結果寫回到目的地(例如,將其寫到暫存器和/或記憶體),例如,使得那些結果在處理器可見(例如,在產生這些結果的執行電路外部可見)。在一個實施例中,在指令704的執行期間確定(例如,透過乘法器電路718)實際的結果,但是在執行之後(例如,在執行階段之後)將所述結果替換為零值(例如,對於結果的寬度),例如在回寫電路720中(例如,在回寫階段中)。
這些元件中的一或多個(例如,解碼器708、暫存器重命名/暫存器分配器/排程器710、執行電路714、暫存器(例如,暫存器檔案)/記憶體712或回寫電路720)可以處於硬體處理器的單一核心中(例如,並且多個核心,每個核心都有這些元件的實例)。
在某些實施例中,「零」乘法指令不具有其任何輸入值是一的先前知識或指示。
圖8顯示根據本發明的實施例的處理「零」乘法指令的方法。處理器(例如,或處理器核心)可以例如響應於從軟體接收到執行指令的請求而執行方法800。所描述的方法800包含透過以下方式處理「零」乘法指令:獲取具有識別第一數字的第一欄位、識別第二數字的第二欄位以及指示第一數字和第二數字的數字格式的第三欄位的指令802,將所述指令解碼為經解碼指令804,檢索與第一欄位、第二欄位和第三欄位相關的資料806,(可選地)將經解碼指令排程以供執行808,執行經解碼指令以致使第一數字與第一數字的數字格式中的零值進行第一比較,致使第二數字與第二數字的數字格式中的零值進行第二比較,當第二比較指出第二數字等於第二數字的數字格式中的零值時,提供零的值作為單一指令的結果,當第一比較指出第一數字等於第一數字的數字格式中的零值時,提供零的值作為單一指令的結果,並且當第一比較指出第一數字不等於第一數字的數字格式中的零值且第二比較指出第二數字不等於第二數字的數字格式中的零值時,提供第一數字和第二數字的乘積作為單一指令的結果810,並提交經執行指令的結果812。
在一個實施例中,所述指令是緊縮資料(例如,向量)指令,其中第一欄位識別數字的第一向量、第二欄位識別數字的第二向量,並且執行電路執行經解碼的單一指令以:使所述數字的第一向量中的每個數字與所述數字的第一向量的所述數字格式中的零值進行複數個第一比較、使所述數字的第二向量中的每個數字與所述數字的第二向量的所述數字格式中的零值進行複數個第二比較、作為所述單一指令的結果,為所述複數個第二比較中之各者提供零值,所述零值指示所述數字的第二向量的對應第二數字等於所述數字的第二向量的所述數字格式中的所述零值、作為所述單一指令的所述結果,為所述複數個第一比較中之各者提供所述零值,所述零值指示所述數字的第一向量的對應第一數字等於所述數字的第一向量的所述數字格式中的所述零值,以及當第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值並且對應的第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,作為所述單一指令的所述結果,提供所述數字的第一向量的第一數字和所述數字的第二向量的對應第二數字的乘積。
在本文的附圖中(例如,圖2至8),可以將資料從暫存器/記憶體載入和或儲存在暫存器或記憶體中(例如,僅在指令的執行的結束時)。在某些實施例中,資料源(輸入)和資料目的地(輸出)各自具有相同數目的位元(例如,和/或用於緊縮資料源/目的地的元件)。在某些實施例中,可以在(例如,系統)記憶體中存取一些或全部資料。本文中的輸入和輸出向量值和大小也是範例,並且可以利用其它值和大小。資料可以按照高位元組在前(big-endian)或低位元組在前(little-endian)排列。
可以在上述內容中使用的範例性架構、系統等在下面詳細描述。
可以鑑於以下範例來描述所揭露技術的至少一些實施例: 範例1. 一種硬體處理器,包含: 解碼器,用以將單一指令解碼為經解碼的單一指令,所述單一指令具有識別第一數字的第一欄位、識別第二數字的第二欄位和指示所述第一數字和所述第二數字的數字格式的第三欄位;以及 執行電路,用以執行所述經解碼的單一指令以: 使所述第一數字與所述第一數字的所述數字格式的零值進行第一比較, 使所述第二數字與所述第二數字的所述數字格式的零值進行第二比較, 當所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,提供零的值作為所述單一指令的結果, 當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值時,提供所述零的值作為所述單一指令的結果,以及 當所述第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值,並且所述第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,提供所述第一數字與所述第二數字的乘積作為所述單一指令的結果。 範例2. 如範例1的硬體處理器,其中當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,所述執行電路不執行所述第一數字和所述第二數字的乘法。 範例3. 如範例2的硬體處理器,其中用以執行所述乘法的乘法器係響應於所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值而斷電。 範例4. 如範例1的硬體處理器,其中所述數字格式被提供為所述單一指令的立即數。 範例5. 如範例1的硬體處理器,其中所述數字格式由所述單一指令的運算碼指示。 範例6. 如範例1的硬體處理器,其中所述第一欄位識別數字的第一向量、所述第二欄位識別數字的第二向量,並且所述執行電路執行所述經解碼的單一指令以: 使所述數字的第一向量中的每個數字與所述數字的第一向量的所述數字格式中的零值進行複數個第一比較, 使所述數字的第二向量中的每個數字與所述數字的第二向量的所述數字格式中的零值進行複數個第二比較, 作為所述單一指令的結果,為所述複數個第二比較中之各者提供零值,所述零值指示所述數字的第二向量的對應第二數字等於所述數字的第二向量的所述數字格式中的所述零值, 作為所述單一指令的所述結果,為所述複數個第一比較中之各者提供所述零值,所述零值指示所述數字的第一向量的對應第一數字等於所述數字的第一向量的所述數字格式中的所述零值,以及 當第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值並且對應的第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,作為所述單一指令的所述結果,提供所述數字的第一向量的第一數字和所述數字的第二向量的對應第二數字的乘積。 範例7. 範例1的硬體處理器,其中當所述數字格式係用於所述第一值和所述第二值的浮點數格式時,所述第一比較將零值與所述第一數字的符號位元進行比較、將零值與所述第一數字的指數欄位進行比較,並且將零值與所述第一數字的分數欄位進行比較,而所述第二比較將所述零值與所述第二數字的符號位元進行比較、將所述零值與所述第二數字的指數欄位進行比較,並且將所述零值與所述第二數字的分數欄位進行比較。 範例8. 如範例1的硬體處理器,其中所述第一比較和所述第二比較與所述執行電路分開地執行。 範例9. 一種方法,包含: 利用硬體處理器的解碼器將單一指令解碼為經解碼的單一指令,所述單一指令具有識別第一數字的第一欄位、識別第二數字的第二欄位和指示所述第一數字和所述第二數字的數字格式的第三欄位;以及 利用硬體處理器的執行電路執行所述經解碼的單一指令以: 使所述第一數字與所述第一數字的所述數字格式的零值進行第一比較, 使所述第二數字與所述第二數字的所述數字格式的零值進行第二比較, 當所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,提供零的值作為所述單一指令的結果, 當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值時,提供所述零的值作為所述單一指令的結果,以及 當所述第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值,並且所述第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,提供所述第一數字與所述第二數字的乘積作為所述單一指令的結果。 範例10. 如範例9的方法,其中當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,所述執行電路不執行所述第一數字和所述第二數字的乘法。 範例11. 如範例10的方法,其中用以執行所述乘法的乘法器係響應於所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值而斷電。 範例12. 如範例9的方法,還包含從所述單一指令的立即數讀取所述數字格式。 範例13. 如範例9的方法,還包含從所述單一指令的運算碼確定所述數字格式。 範例14. 如範例9的方法,其中所述第一欄位識別數字的第一向量、所述第二欄位識別數字的第二向量,並且所述執行電路執行所述經解碼的單一指令以: 使所述數字的第一向量中的每個數字與所述數字的第一向量的所述數字格式中的零值進行複數個第一比較, 使所述數字的第二向量中的每個數字與所述數字的第二向量的所述數字格式中的零值進行複數個第二比較, 作為所述單一指令的結果,為所述複數個第二比較中之各者提供零值,所述零值指示所述數字的第二向量的對應第二數字等於所述數字的第二向量的所述數字格式中的所述零值, 作為所述單一指令的所述結果,為所述複數個第一比較中之各者提供所述零值,所述零值指示所述數字的第一向量的對應第一數字等於所述數字的第一向量的所述數字格式中的所述零值,以及 當第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值並且對應的第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,作為所述單一指令的所述結果,提供所述數字的第一向量的第一數字和所述數字的第二向量的對應第二數字的乘積。 範例15. 如範例9的方法,其中當所述數字格式係用於所述第一值和所述第二值的浮點數格式時,所述第一比較將零值與所述第一數字的符號位元進行比較、將零值與所述第一數字的指數欄位進行比較,並且將零值與所述第一數字的分數欄位進行比較,而所述第二比較將所述零值與所述第二數字的符號位元進行比較、將所述零值與所述第二數字的指數欄位進行比較,並且將所述零值與所述第二數字的分數欄位進行比較。 範例16. 如範例9的方法,其中所述第一比較和所述第二比較與所述執行電路分開地執行。 範例17. 一種非暫態機器可讀媒體,其儲存碼,所述碼在由機器執行時使所述機器執行一種方法,包含: 利用硬體處理器的解碼器將單一指令解碼為經解碼的單一指令,所述單一指令具有識別第一數字的第一欄位、識別第二數字的第二欄位和指示所述第一數字和所述第二數字的數字格式的第三欄位;以及 利用硬體處理器的執行電路執行所述經解碼的單一指令以: 使所述第一數字與所述第一數字的所述數字格式的零值進行第一比較, 使所述第二數字與所述第二數字的所述數字格式的零值進行第二比較, 當所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,提供零的值作為所述單一指令的結果, 當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值時,提供所述零的值作為所述單一指令的結果,以及 當所述第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值,並且所述第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,提供所述第一數字與所述第二數字的乘積作為所述單一指令的結果。 範例18. 如範例17的非暫態機器可讀媒體,其中當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,所述執行電路不執行所述第一數字和所述第二數字的乘法。 範例19. 如範例18的非暫態機器可讀媒體,其中用以執行所述乘法的乘法器係響應於所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值而斷電。 範例20. 如範例17的非暫態機器可讀媒體,還包含從所述單一指令的立即數讀取所述數字格式。 範例21. 如範例17的非暫態機器可讀媒體,還包含從所述單一指令的運算碼確定所述數字格式。 範例22. 如範例17的非暫態機器可讀媒體,其中所述第一欄位識別數字的第一向量、所述第二欄位識別數字的第二向量,並且所述執行電路執行所述經解碼的單一指令以: 使所述數字的第一向量中的每個數字與所述數字的第一向量的所述數字格式中的零值進行複數個第一比較, 使所述數字的第二向量中的每個數字與所述數字的第二向量的所述數字格式中的零值進行複數個第二比較, 作為所述單一指令的結果,為所述複數個第二比較中之各者提供零值,所述零值指示所述數字的第二向量的對應第二數字等於所述數字的第二向量的所述數字格式中的所述零值, 作為所述單一指令的所述結果,為所述複數個第一比較中之各者提供所述數字的第二向量的第二數字,其指示所述數字的第一向量的對應第一數字等於所述數字的第一向量的所述數字格式中的所述零值,以及 當第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值並且對應的第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,作為所述單一指令的所述結果,提供所述數字的第一向量的第一數字和所述數字的第二向量的對應第二數字的乘積。 範例23. 如範例22的非暫態機器可讀媒體,其中當所述數字格式係用於所述第一值和所述第二值的浮點數格式時,所述第一比較將零值與所述第一數字的符號位元進行比較、將零值與所述第一數字的指數欄位進行比較,並且將零值與所述第一數字的分數欄位進行比較,而所述第二比較將所述零值與所述第二數字的符號位元進行比較、將所述零值與所述第二數字的指數欄位進行比較,並且將所述零值與所述第二數字的分數欄位進行比較。 範例24. 如範例17的非暫態機器可讀媒體,其中所述第一比較和所述第二比較與所述執行電路分開地執行。
在又一個實施例中,一種設備包含一種資料儲存裝置,所述資料儲存裝置儲存碼,所述碼在由硬體處理器執行時使所述硬體處理器執行本文揭露的任何方法。一種設備可以如詳細描述中所描述。一種方法可以如詳細描述中所描述。
指令集可包括一或多個指令格式。給定的指令格式可定義各種欄位(例如,位元數、位元位置)以指定除其它事項外,要執行的運算(例如,運算碼)和所述運算將要執行的運算元和/或其它資料欄位(例如,遮罩)。有些指令格式透過指令樣板(或子格式)的定義進一步細分。例如,給定的指令格式的指令樣板可被定義為具有指令格式的欄位的不同子集(包括的欄位通常有相同的順序,但至少有一些因為包含較少欄位而具有不同的位元位置,)和/或定義為具有不同解釋的給定欄位。因此,ISA的每個指令用給定的指令格式來表示(並且,如果已定義在所述指令格式中給定的一個指令樣板),並且包括用於指定運算和運算元的欄位。例如,示例性的ADD指令具有特定的運算碼以及包括運算碼欄位,以指定運算碼和運算元欄位以選擇運算元(來源1/目的地和來源2)的指令格式;並在指令流中此ADD指令的出現將具有在選擇特定運算元的運算元欄位中的具體內容。稱為進階向量擴展(AVX)(AVX1和AVX2),並使用向量擴展(VEX)編碼方式的一組SIMD擴展已經發布和/或公開(例如,參見Intel®64和IA-32架構軟體開發者手冊,2018年11月,並參見Intel®架構指令集擴展程式參照資料,2018年10月)。示範性指令格式
本文所描述的指令的實施例可以用不同的格式體現。此外,示範性系統、架構和管線詳述如下。指令的實施例可以在這樣的系統、架構和管線執行,但並不限於這些詳細描述。通用向量親和指令格式
一種向量親和指令格式係適合向量指令的指令格式(例如,有特定於向量運算的某些欄位)。雖然實施例描述了向量和純量運算都透過向量親和指令格式支援,替代實施例中只透過向量親和指令格式使用向量運算。
圖9A-9B係顯示根據本發明實施例的通用向量親和指令格式和其指令樣板的方塊圖。圖9A係顯示根據本發明實施例的通用向量親和指令格式和其A類指令樣板的方塊圖;而圖9B係顯示根據本發明實施例的通用向量親和指令格式和其B類指令樣板的方塊圖。具體地,對於定義A類和B類指令樣板的通用向量親和指令格式900,這兩者都包括無記憶體存取905指令樣板和記憶體存取920指令樣板。用語「通用」在向量親和指令格式的上下文中係指與任何特定的指令集無關聯的指令格式。
雖然本發明的實施例將以支援以下功能的向量親和指令格式被描述:64位元組的向量運算元長度(或大小)具有32位元(4位元組)或64位元(8位元組)的資料元的寬度(或大小)(因此,64位元組的向量由16雙字組大小元件組成或可替代地,由8四字組大小元件組成);64位元組的向量運算元長度(或大小)具有16位元(2位元組)或8位元(1位元組)的資料元的寬度(或大小);32位元組的向量運算元長度(或大小)具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)或8位元(1位元組)的資料元的寬度(或大小);且16位元組的向量運算元長度(或大小)具有32位元(4位元組)、64位元(8位元組),16位元(2位元組)或8位元(1位元組)的資料元的寬度(或大小);但替代的實施例可以支援更多、更少和/或不同的向量運算元大小(例如,256位元組的向量運算元)與更多、更少或不同的資料元的寬度(例如,128位元(16位元組)的資料元的寬度)。
圖9A中的A類指令樣板包括:1)無記憶體存取905指令樣板之內,其中顯示無記憶體存取、全捨入控制式運算910指令樣板以及無記憶體存取、資料轉換式運算915指令樣板;和2)記憶體存取920指令樣板之內,其中顯示記憶體存取、暫時的925指令樣板和記憶體存取、非暫時的930指令樣板。在圖9B的B類指令樣板包括:1)無記憶體存取905指令樣板之內,其中顯示無記憶體存取、寫入遮罩控制、部分捨入控制式運算912指令樣板以及無記憶體存取、寫入遮罩控制、VSIZE式運算917指令樣板;和2)記憶體存取920指令樣板之內,其中顯示記憶體存取、寫入遮罩控制927指令樣板。
通用向量親和指令格式900包括在圖9A-9B顯示下面循序列出的以下欄位。
格式欄位940-在此欄位中的特定值(指令格式識別符值)唯一地識別所述向量親和指令格式,因而在指令流中的向量親和指令格式的指令出現。因此,所述欄位係可選的,因為它不需要僅具有通用向量親和指令格式的指令集。
基底運算欄位942-其內容區分不同的基底運算。
暫存器索引欄位944-其內容,直接或透過位址產生,指定來源和目的運算元位置,無論是在暫存器或記憶體中。這些包括足夠數目位元以從P×Q個(例如32x512、16x128、32x1024、64x1024)暫存器檔案選擇N個暫存器。雖然在一個實施例中,N可以是多達三個來源和一個目的地暫存器,替代的實施例可支援更多或更少的來源和目的暫存器(例如,可以支援多達兩個來源,其中這些來源之一也作為目的地;可以支援多達到三個來源,其中這些來源之一也作為目的地;可支援多達兩個來源和一個目的地)。
修飾符欄位946-其內容區分指明記憶體存取與那些不指定記憶體存取的在通用向量指令格式中的指令的出現;也就是說,介於無記憶體存取905指令樣板和記憶體存取920指令樣板之間。記憶體存取運算讀取和/或寫入到記憶體階層(在某些情況下,使用暫存器中的值來指定來源和/或目的地位址),而非記憶體存取運算則不是(例如,來源和目的地係暫存器)。雖然在實施例中此欄位還選擇三種不同的方式來執行記憶體位址計算,替代的實施例可以支援更多、更少或不同的方式來執行記憶體位址計算。
增強運算欄位950-其內容區分以執行除了基本運算之外的各種不同的運算。此欄位係上下文關聯。在本發明的實施例中,所述欄位被分割成類型欄位968、alpha欄位952和beta欄位954。增強運算欄位950允許共同組的運算在單一指令中被執行,而不是用2、3或4個指令來執行。
縮放欄位960-其內容允許用於記憶體位址產生的索引欄位內容縮放(例如,對於位址產生其使用2縮放 *指數+基底)。
位移欄位962A-其內容作為記憶體位址產生的一部分(例如,對於位址產生其使用2縮放 *指數+基底+位移)。
位移係數欄位962B(注意,位移欄位962A的併列直接超過位移係數欄位962B表示一個或其它被使用)-其內容作為位址產生的一部分;它指定位移係數其透過記憶體存取的大小(N)進行縮放-其中N係記憶體存取中位元組的數目(例如,對於位址產生其使用2縮放 *指數+基底+縮放的位移)。冗餘低階位元被忽略,因此,位移係數欄位的內容乘以記憶體運算元總大小(N)產生最終的位移,以使用於計算有效位址。N的值係基於完整運算碼欄位974(本文後述)和資料處理欄位954C,由運行時處理器硬體來判斷。位移欄位962A和位移係數欄位962B係可選的,它們不被用於無記憶體存取905指令樣板和/或不同的實施例可能僅實現一個或者兩者都不實現。
資料元寬度欄位964-其內容區分要使用的若干資料元的寬度(在一些實施例中對於所有的指令;在其它實施例中僅一些指令)。此欄位係可選的,並不是必須的,如果只有一個資料元寬度被支援和/或資料元的寬度使用某些態樣的運算碼被支援。
寫入遮罩欄位970-其內容在每個資料元位置基礎上控制,無論在目的地向量運算元中的資料元位置是否反映了基底運算和增強運算的結果。A類指令樣板支援合併遮蔽寫入,而B類指令樣板支援合併遮蔽寫入和歸零遮蔽寫入。當合併時,向量遮罩允許目的地中的任何一組元件在任何運算的執行過程中避免被更新(由基底運算和增強運算指定);在另一實施例中,當對應的遮罩位元為0時,保留在目的地中的每個元件的舊值。與此相反,歸零向量遮罩在任何運算的執行期間,允許目的地中的任何一組元件被歸零(由基底運算和增強運算指定);在一個實施例中,當對應的遮罩位元有一個0值時,目的地的元件被設為0。此功能的子集係控制運算的向量長度被執行的能力(即,元件的跨度被修改,從第一個到最後一個);然而,這不是必要的,被修改的元件係連續的。因此,寫入遮罩欄位970允許局部向量運算,包括載入、儲存、算術、邏輯等。雖然本發明的實施例被描述,其中,寫入遮罩欄位970的內容選擇包含將要使用的寫入遮罩的若干寫入遮罩暫存器其中之一(從而寫入遮罩欄位970的內容間接識別遮罩將被執行),替代實施例中代替或附加允許遮罩寫入欄位970的內容直接指定要執行的遮罩。
立即欄位972-其內容允許直接的規範。此欄位係可選的,它不存在於不支援直接的通用向量親和格式的實現及它不存在於不使用直接的指令。
類型欄位968-其內容區分不同類型的指令。參照圖9A-B,所述欄位的內容在A類和B類的指令之間進行選擇。在圖9A-B中,圓角正方形用於指示存在於欄位中的特定值(例如,類型欄位968在圖9A-B中,分別為A類968A和B類968B)。A 類的指令樣板
在A類的非記憶體存取905指令樣板的情況下,alpha欄位952被解釋為RS欄位952A,其內容區分將被執行的不同擴增運算類型之一(例如,捨入952A.1和資料轉換952A.2分別為無記憶體存取、捨入類型運算910和無記憶體存取、資料轉換運算類型915指令樣板),而beta欄位954區分將被執行的指定類型運算。在無記憶體存取905指令樣板中,縮放欄位960、位移欄位962A和位移縮放欄位962B不存在。無記憶體存取指令樣板 - 完全捨入控制類型運算
在無記憶體存取完全捨入控制類型運算910指令樣板,所述beta欄位954被解釋為捨入控制欄位954A,其內容提供靜態捨入。雖然在本發明實施例所述的捨入控制欄位954A包括抑制所有浮點異常(SAE)欄位956和捨入運算控制欄位958,替代的實施例可以支援編碼這兩個概念到相同欄位或只有這些概念/欄位的其中一個(例如,可以僅具有捨入運算控制欄位958)。
SAE欄位956-其內容區分是否禁用異常事件報告;當SAE欄位956的內容表明抑制為致能,給定的指令沒有報告任何種類的浮點異常旗標並沒有提出任何浮點異常處理程序。
捨入運算控制欄位958-其內容區分一組將要執行的捨入運算其中之一(如向上捨入、向下捨入、朝零捨入以及捨入至最接近的值)。因此,所述捨入運算控制欄位958允許在每個指令基礎上的捨入模式改變。在本發明的實施例中,其中處理器包括用於指定捨入模式的控制暫存器,所述捨入運算控制欄位950的內容覆寫所述暫存器的值。 無記憶體存取指令樣板-資料轉換類型運算
在無記憶體存取資料轉換類型運算915指令樣板、beta欄位954被解釋為資料轉換欄位954B,其內容區分若干將要執行的資料其中之一(例如,沒有資料轉換、混合、播送)。
在A類的記憶體存取920指令樣板的情況下,alpha欄位952被解釋為驅逐隱含欄位952B,其內容區分出將被使用的驅逐隱含其中之一(圖9A中,暫時952B.1和非暫時952B.2用於記憶體存取,分別指定為暫時925指令樣板和記憶體存取、非暫時930指令樣板),beta欄位954被解釋為資料處理欄位954C,其內容區分將被執行的若干資料處理運算(也稱為基元)其中之一(例如,無操縱;播送;來源的向上轉變;以及目的地的向下轉變)。記憶體存取920指令樣板包括縮放欄位960,和可選的位移欄位962A或位移縮放欄位962B。
向量記憶體指令具有轉換支援,執行從記憶體載入向量和儲存向量至記憶體。如同利用常規的向量指令,向量記憶體指令以資料元分段方式,傳輸資料從/到記憶體中,實際傳輸的元件係透過被選擇作為寫入遮罩的向量遮罩內容決定。記憶體存取指令樣板 暫時
暫時資料係可能很快要被再次使用的資料,且能從高速存取中受益。然而,提示以及不同的處理器可以用不同的方式,包括完全無視提示實現它。記憶體存取指令樣板 非暫時
非暫時資料係不可能很快要被再次使用的資料,且不能從第一階高速存取中受益,且應優先考慮驅逐。然而,提示以及不同的處理器可以用不同的方式,包括完全無視提示實現它。B 類的指令樣板
在B類的指令樣板的情況下,alpha欄位952被解釋為寫入遮罩控制(Z)欄位952C,其內容區分由寫入遮罩欄位970控制的寫入遮蔽是否應該為合併或歸零。
在B類中的非記憶體存取905指令樣板的情況下,beta欄位954的一部分被解釋為RL欄位957A,其內容區分將被執行的不同擴增運算類型之一(例如,捨入957A.1和向量長度(VSIZE)957A.2分別指定用於無記憶體存取、寫入遮罩控制、部分捨入控制類型運算912指令樣板以及無記憶體存取、寫入遮罩控制、VSIZE類型運算917指令樣板)而beta欄位954的其餘部分區分哪些指定類型的運算將被執行。在無記憶體存取905指令樣板中,縮放欄位960、位移欄位962A和位移縮放欄位962B不存在。
在無記憶體存取中,寫入遮罩控制、部分捨入控制類型運算910指令樣板、beta欄位954的其餘部分被解釋為捨入運算欄位959A且異常事件報告被禁用(給定的指令沒有報告任何形式的浮點異常旗標並且沒有提出任何浮點異常處理程序)。
捨入運算控制欄位959A–如同捨入運算控制欄位958,其內容區分一組用以執行捨入運算的其中之一(如向上捨入、向下捨入、朝零捨入以及捨入至最接近的值)。因此,所述捨入運算控制欄位959A允許在每個指令基礎上的捨入模式改變。在本發明的實施例中,其中處理器包括用於指定捨入模式的控制暫存器,所述捨入運算控制欄位950的內容覆寫所述暫存器的值。
在無記憶體存取、寫入遮罩控制、VSIZE式運算917指令樣板,beta欄位954的其餘部分被解釋為向量長度欄位959B,其內容區分將要在其上執行的若干資料向量長度其中之一(例如,128、256或512位元組)。
在B類的記憶體存取920指令樣板的情況下,所述beta欄位954的一部分被解釋為廣播欄位957B,其內容區分廣播類型資料操作運算是否將被執行,而在其餘beta欄位954被解釋為向量長度欄位959B。記憶體存取920指令樣板包括縮放欄位960,和可選的位移欄位962A或位移縮放欄位962B。
關於通用向量親和指令格式900,完整運算碼欄位974顯示包括格式欄位940、基底運算欄位942、資料元寬度欄位964。同時實施例顯示其中完整運算碼欄位974包括所有這些欄位,完整運算碼欄位974包括實施例中不支援所有這些欄位的少於所有這些欄位。完整運算碼欄位974提供了運算碼(opcode)。
所述擴增運算欄位950、所述資料元寬度欄位964,和寫入遮罩欄位970允許這些特性將在每個指令基礎上以通用向量親和指令格式指定。
寫入遮罩欄位和資料元寬度欄位的組合建立,允許基於不同資料元寬度施加遮罩的類型指令。
在A類和B類中發現的各種指令樣板有利於不同的情況。在本發明的一些實施例中,不同的處理器或處理器中的不同核心可能僅支援A類、僅B類或同時這兩個類型。例如,高效能的通用亂序核心用於通用計算可能僅支援B類、主要用於圖形和/或科學(生產量)計算的核心可能僅支援A類,以及用於兩者的核心可同時支援(當然,具有來自兩個類型的一些混合樣板及指令而不是來自兩個類型的所有樣板及指令的核心是在本發明的範圍之內)。此外,單一處理器可包括多個核心,所有這些核心都支援相同的類型或其中不同的核心支援不同的類型。例如,在具有獨立的圖形和通用核心的處理器中,主要用於圖形和/或科學計算的圖形核心之一可能僅支援A類,同時一或多個的通用核心可以是具有亂序執行的高效能通用和用於通用計算的暫存器更名,其僅支援B類的核心。不具有獨立的圖形核心的另一個處理器,可包括同時支援A類和B類的一或多個通用循序或亂序核心。當然,來自一個類型的功能,也可以在本發明的不同實施例以其它類型實現。以高階語言寫成的程式將被轉換成(例如,及時編譯或靜態編譯)各種不同的可執行形式,包括:1)具有由用於執行的目的地處理器所支援類型的唯一指令的格式;或2)具有使用所有類型指令的不同組合的替代常式寫入以及具有基於透過當前正在執行編碼的處理器所支援的指令,選擇所述常式來執行的控制流編碼的格式。示範性特定向量親和指令格式
圖10係顯示根據本發明實施例的示範性特定向量親和指令格式的方塊圖。圖10顯示特定向量親和指令格式1000,其特定於指定位置、大小、解釋和欄位的順序,以及用於那些欄位的值。特定向量親和指令格式1000可以被用於擴展x86指令集,並且因此某些欄位係相似或相同於那些在現有的x86指令集和其延伸部分(例如,AVX)使用的。此格式保持與前置編碼欄位、真實運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位以及現有具有擴展的x86指令集的直接欄位一致。從圖9的欄位映射到圖10的欄位係被顯示。
應當理解的是,儘管本發明的實施例用於說明目的,在通用向量親和指令格式900的上下文中以參照的方式描述特定向量親和指令格式1000,但除非聲稱,本發明並不限於特定向量親和指令格式1000。例如,通用向量親和指令格式900涵蓋了各種可能大小的各種欄位,而特定向量親和指令格式1000被顯示為具有特定大小的欄位。透過具體示例的方式,同時資料元寬度欄位964在特定向量親和指令格式1000中係被顯示為一位元欄位,本發明並不如此侷限(即,通用向量親和指令格式900設想資料元寬度欄位964的其它大小)。
通用向量親和指令格式900包括在圖10A所示的下面次序列出的以下欄位。
EVEX前置(位元組0-3)1002–以四位元組的形式被編碼。
格式欄位940(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)係格式欄位940,其包含0x62(在本發明的實施例中用於區分向量親和指令格式的獨特價值)。
第二至四位元組(EVEX位元組1-3)包括提供具體能力的若干位元欄位。
REX欄位1005(EVEX位元組1,位元[7-5])-由EVEX.R位元欄位組成(EVEX位元組1,位元[7]-R),EVEX.X位元欄位(EVEX位元組1,位元[6]-X),以及957BEX位元組1,位元[5]-B)。EVEX.R、EVEX.X和EVEX.B位元欄位提供相同的功能的相應VEX位元欄位,並使用1的補數形式編碼,即ZMM0編碼為1111B,ZMM15被編碼為0000B。指令的其它欄位編碼暫存器索引的較低三位元如所述領域已知的(rrr、xxx和bbb),以便Rrrr、Xxxx和Bbbb可透過加入EVEX.R、EVEX.X和EVEX.B形成。
REX’欄位910-這是REX’欄位910的第一部分,且是EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’),其用於編碼擴展32暫存器組的較高16或較低16。在本發明的實施例中,所述位元,連同如下面所示其它的,被儲存在位元反轉格式以與從BOUND指令區分(以眾所周知的x86 32位元模式),其實際運算碼位元組是62,但在MOD R/M欄位(在下面描述)中不接受MOD欄位中11的值;本發明的替代實施例不儲存此和其它以下所指示的反轉格式位元。值1用於編碼較低16暫存器。換句話說,R’Rrrr係透過結合EVEX.R’、EVEX.R和其它RRR形成其它欄位。
運算碼映射欄位1015(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼隱含主導運算碼位元組(0F、0F 38或0F 3)。
資料元寬度欄位964(EVEX位元組2,位元[7]-W)-由符號EVEX.W.代表。EVEX.W用於定義資料類型的粒度(大小)(32位元資料元或64位元資料元)。
EVEX.vvvv 1020(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的作用可包括以下內容:1)EVEX.vvvv編碼所述第一來源暫存器運算元,指定在反轉(1的補數)形式且對2個或多個來源運算元指令有效;2)EVEX.vvvv編碼所述目的地暫存器運算元,指定某些向量位移為1的補數形式;或3)EVEX.vvvv不編碼任何運算元,所述欄位係保留並且應包含1111b。因此,EVEX.vvvv欄位1020編碼以反轉(1的補數)形式儲存的第一來源暫存器說明符的4低序位元。根據指令,額外不同的EVEX位元欄位被用於擴展所述指定符大小至32個暫存器。
EVEX.U 968類型欄位(EVEX位元組2,位元[2]-U)-如果EVEX.U=0,則表明A類或EVEX.U0;如果EVEX.U=1時,則表示B類或EVEX.U1。
前置編碼欄位1025(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前置編碼,並且因此不需要擴展。
alpha欄位952(EVEX位元組3,位元[7]-EH;也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write遮罩控制以及EVEX.N;還顯示為α)-如先前所描述此欄位係上下文特定的。
beta欄位954(EVEX位元組3,位元[6:4]-SSS,也稱為EVEX.s2-0 、EVEX.r2-0 、EVEX.rr1、EVEX.LL0、EVEX.LLB;還顯示為βββ)-如先前所描述此欄位係上下文特定的。
REX’欄位910–其為REX’的餘數欄位且是EVEX.V’位元欄位(EVEX位元組,3位元[3]-V’)可用於編碼擴展32暫存器組的較高16或較低16。位元以位元反轉格式被儲存。為1的值被用於對較低16個暫存器進行編碼。換句話說,V'VVVV透過組合EVEX.V'、EVEX.vvvv形成。
寫入遮罩欄位970(EVEX位元組3,位元[2:0]-kkk)-其內容指定在如前述的寫入遮罩暫存器中的暫存器的索引。在本發明的實施例中,指定值EVEX.kkk=000具有隱含無寫入遮罩被用於特定指令的特殊行為(其可用各種方式,包括使用寫入遮罩硬連線至繞過所述遮蔽硬體的全部或其一硬體來實現)。
實際運算碼欄位1030(位元組4)也被稱為運算碼位元組。運算碼的一部分被指定在所述欄位中。
MOD R/M欄位1040(位元組5)包括MOD欄位1042、Reg欄位1044以及R/M欄位1046。如前述,MOD欄位1042的內容區分記憶體存取和非記憶體存取運算。Reg欄位1044的作用可以概括兩種情況:編碼目的暫存器運算元或來源暫存器運算元,或被視為運算碼的擴展而不是用來編碼任何指令運算元。R/M欄位1046的作用可包括以下內容:編碼參照記憶體位址或編碼目的暫存器運算元或來源暫存器運算元的指令運算元。
縮放、索引、基底(SIB)位元組(位元組6)-如先前所描述的,縮放欄位的950的內容被用於記憶體位址產生。SIB.xxx 1054和SIB.bbb 1056-這些欄位的內容已被預先提及關於暫存器索引Xxxx和Bbbb。
位移欄位962A(位元組7-10)-當MOD欄位1042包含10,位元組7-10係位移欄位962A,其運作如同舊有的32位元位移(disp32)且運作在位元組的粒度。
位移係數欄位962B(位元組7)-當MOD欄位1042包含01,位元組7係位移係數欄位962B。欄位的位置係與舊有x86指令集8位元位移(disp8)相同,其運作在位元組粒度。由於disp8被符號擴展,其只能在-128和127位元組之間的位移定址;在64位元組內部快取記憶體行上,disp8使用可以被設置為僅4個真正有用的值-128、-64、0和64的8位元;由於更大範圍通常需要disp32被使用;然而,disp32需要4個位元組。而相比之下,disp8和disp32,位移係數欄位962B係disp8的重新解釋;當使用位移係數欄位962B時,實際的位移由位移係數欄位的內容乘以的記憶體運算元存取(N)的大小來決定。這種類型的位移稱為disp8 * N。這減少平均指令長度(用於位移但具有更大範圍的單一位元組)。這樣緊縮的位移係基於有效位移係多個記憶體存取粒度的假設,因此,位址的冗餘低階位元位移不需要被編碼。換句話說,位移係數欄位962B替代了舊有的x86指令集的8位元位移。因此,位移係數欄位962B的編碼方式與x86指令集的8位元位移相同(於是ModRM/SIB編碼規則沒有變化)具有disp8過載到disp8 * N的唯一例外。換句話說,在編碼規則或編碼長度沒有變化,而只在由硬體解釋的位移值(這需要由記憶體運算元大小,獲得逐位元組位址位移,縮放所述位移)。立即欄位972如先前所描述進行運算。全部運算碼欄位
圖10B係顯示根據本發明的一個實施例之構成完整運算碼欄位974欄位的特定向量親和指令格式1000的方塊圖。具體地,完整運算碼欄位974包括格式欄位940、基底運算欄位942以及資料元寬度(W)欄位964。基底運算欄位942包括前置編碼欄位1025、運算碼映射欄位1015以及真實運算碼欄位1030。暫存器索引欄位
圖10C係根據本發明的一個實施例顯示構成暫存器索引欄位944的特定向量親和指令格式1000的欄位的方塊圖。具體來說,暫存器索引欄位944包括REX欄位1005、REX’欄位1010、MODR/M.reg欄位1044、MODR/M.r/m欄位1046、VVVV欄位1020、xxx欄位1054以及bbb欄位1056。增強運算欄位
圖10D係根據本發明的一個實施例顯示構成增強運算欄位950的特定向量親和指令格式1000的欄位的方塊圖。當類型(U)欄位968包含0,其表示EVEX.U0(A類968A);當它包含1時,其表示EVEX.U1(B類968B)。當U=0且MOD欄位1042包含11(表示無記憶體存取運算),所述alpha欄位952(EVEX位元組3,位元[7]-EH)被解釋為rs欄位952A。當所述rs欄位952A包含1(捨入952A.1),所述beta欄位954(EVEX位元組3,位元[6:4]-SSS)被解釋為捨入控制欄位954A。捨入控制欄位954A包括一位元SAE欄位956和兩位元捨入運算欄位958。當所述rs欄位952A包含0(資料轉換952A.2),所述beta欄位954(EVEX位元組3,位元[6:4]-SSS)被解釋為3位元的資料轉換欄位954B。當U=0且MOD欄位1042包含00、01或10(表示記憶體存取運算),alpha欄位952(EVEX位元組3,位元[7]-EH)被解釋為驅逐隱含(EH)欄位952B和beta欄位954(EVEX位元組3,位元[6:4]-SSS)被解釋為3位元的資料處理欄位954C。
當U=1,alpha欄位952(EVEX位元組3,位元[7]-EH)被解釋為寫入遮罩控制(Z)欄位952C。當U=1且MOD欄位1042包含11(表示無記憶體存取運算),beta欄位954的一部分(EVEX位元組3,位元[4]-S0 )被解釋為RL欄位957A;當它包含1(捨入957A.1),所述beta欄位954的其餘部分(EVEX位元組3,位元[6-5]-S2-1 )被解釋為捨入運算欄位959A,而當RL欄位957A包含0(VSIZE 957.A2)所述beta欄位954的其餘部分(EVEX位元組3,位元[6-5]-S2-1 )被解釋為向量長度欄位959B(EVEX位元組3,位元[6-5]-L1-0 )。當U=1且MOD欄位1042包含00、01或10(表示記憶體存取運算),beta欄位954(EVEX位元組3,位元[6:4]-SSS)被解釋為向量長度欄位959B(EVEX位元組3,位元[6-5]-L1-0 )和廣播欄位957B(EVEX位元組3,位元[4]-B)。示範性暫存器架構
圖11係根據本發明的一個實施例的暫存器架構1100的方塊圖。在所示實施例中,有32個512位元寬的向量暫存器1110;這些暫存器被參照為zmm0至zmm31。較低16zmm暫存器的低階256位元覆蓋在暫存器ymm0-16。較低16zmm暫存器的低階128位元(ymm暫存器的低階128位元)覆蓋在暫存器xmm0-15。特定向量親和指令格式1000對這些覆蓋的暫存器檔案進行如下表中顯示的運算。
可調的向量長度 類型 運算 暫存器
不包含向量長度欄位959B的指令樣板 A(圖 9A;U=0) 910,915,925,930 zmm暫存器(向量長度為64位元組)
B(圖 9B;U=1) 912 zmm暫存器(向量長度為64位元組)
包含向量長度欄位959B的指令樣板 B(圖 9B;U=1) 917,927 zmm,ymm,或xmm暫存器(向量長度為64位元組、32位元組或16位元組)依照向量長度欄位959B
換句話說,向量長度欄位959B選擇介於最大長度和一或多個其它較短長度,其中每個這樣的較短長度係前長度的一半長度;以及沒有向量長度欄位959B的指令樣板以最大向量長度運算。此外,在一個實施例中,特定向量親和指令格式1000的B類指令樣板運算於緊縮或純量單/雙精確度浮點資料和緊縮或純量整數資料。純量運算係在zmm/ymm/xmm暫存器中最低階的資料元位置進行運算;較高階資料元位置係與左邊的相同,因為他們是在之前的指令或取決於實施例歸零。
寫入遮罩暫存器1115-在所示實施例中,有8個寫入遮罩暫存器(k0至k7),各為64位元的大小。在替代實施例中,寫入遮罩暫存器1115係16位元的大小。如先前所描述的,在本發明的一個實施例中,向量遮罩暫存器k0不能用來作為寫入遮罩;當編碼時,通常會指示k0用於寫入遮罩,其選擇0xFFFF的硬連線寫入遮罩,有效地禁用寫入遮罩用於所述指令。
通用暫存器1125-在所示實施例中,有16個64位元通用暫存器,其被用來連同現有的x86定址模式來定址記憶體運算元。這些暫存器透過名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15被參照。
純量浮點堆疊暫存器檔案(x87堆疊)1145,在其上化名MMX緊縮整數平面暫存器檔案1150-在所示實施例中,所述x87堆疊係用於執行在使用x87指令集擴充的32/64/80位元浮點資料之上的純量浮點運算的八元件堆疊;而MMX暫存器被用來執行在64位元緊縮整數資料的運算,以及保持用於在MMX和XMM暫存器之間執行的若干運算的運算元。
本發明的替代實施例可使用更寬或更窄的暫存器。另外,本發明的替代實施例可使用更多、更少或不同的暫存器檔案和暫存器。示範性核心架構、處理器和電腦架構
處理器核心可以用不同的方式來實現,用於不同的目的,以及在不同的處理器。例如,這種核心的實現可以包括:1)用於一般用途計算的一般用途循序核心;2)用於一般用途計算的高效能的一般用途亂序核心;3)主要用於圖形和/或科學(生產量)計算的特殊用途核心。不同處理器的實現方式可以包括:1)中央處理器包括一或多個用於一般用途計算的一般用途循序核心和/或一或多個用於一般用途計算的一般用途亂序核心;和2)協同處理器包括一或多個主要用於圖形和/或科學(生產量)的特殊用途核心。這樣不同的處理器導致不同的電腦系統架構,其可包括:1)在從中央處理器獨立的晶片上的協同處理器;2)在與中央處理器相同封裝的獨立晶片上的協同處理器;3)在與中央處理器相同晶片上的協同處理器(在此情況下,這樣一個協同處理器時有時被稱為特殊用途邏輯,諸如積體圖形和/或科學(生產量)邏輯,或者作為特殊用途核心);及4)系統單晶片,其可以在同一晶片包括所述中央處理器(有時被稱為應用核心或應用處理器)、上述協同處理器以及額外的功能。示範性核心架構將接著描述,再接著示範性處理器和電腦架構的描述。示範性核心架構 循序和亂序核心方塊圖
圖12A是顯示根據本發明的實施例的示範性循序管線和示範性暫存器重命名、亂序發送/執行管線的方塊圖。圖12B是顯示根據本發明的實施例的循序架構核心和示範性暫存器重命名、被包括在處理器中的亂序發送/執行架構核心的方塊圖。在圖12A-B中的實線框顯示所述循序管線和循序核心,而可選的另外的虛線框顯示暫存器重命名、亂序發送/執行管線和核心。鑑於所述循序態樣是所述亂序態樣的一個子集,將進行說明所述亂序態樣。
在圖12A中,處理器管線1200包括提取階段1202、長度解碼階段1204、解碼階段1206、分配階段1208、重命名階段1210、排程(也稱為調度或發送)階段1212、暫存器讀取/記憶體讀取階段1214、執行階段1216、回寫/記憶體寫入階段1218、異常處理階段1222和提交階段1224。
圖12B顯示了包括耦接到執行引擎單元1250的前端單元1230和皆耦接到記憶體單元1270的處理器核心1290。核心1290可以是精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字組(VLIW)核心、或混合的或替代的核心類型。作為另一種選擇,核心1290可以是特殊用途的核心,例如,如網路或通訊核心、壓縮引擎、協同處理器核心、一般用途計算圖形處理單元(GPGPU)核心、圖形核心或類似物。
前端單元1230包括耦接到指令快取記憶體單元1234的分支預測單元1232,其耦接到指令轉譯後備緩衝區(TLB)1236,其耦接到指令提取單元1238,其耦接到解碼單元1240。解碼單元1240(或解碼器或解碼單元)可以解碼指令(例如,巨集指令),並產生作為輸出的一或多個微運算、微編碼登錄點、微指令、其它指令或其它控制信號,其從所述原始指令解碼,或反映所述原始指令或源自所述原始指令。解碼單元1240可使用各種不同的機制來實現。合適機制的例子包括但不限於查找表、硬體實現、可程式邏輯陣列(PLA)、微編碼唯讀記憶體(ROM)等。在一個實施例中,所述核心1290包括微編碼ROM或其它媒體,其儲存用於某些巨集指令的微編碼(例如,在解碼單元1240或在前端單元1230)。解碼單元1240被耦接到在執行引擎單元1250中的重命名/分配器單元1252。
執行引擎單元1250包括耦接到失效單元1254和一組一或多個排程器單元1256的重命名/分配器單元1252。排程器單元1256表示任何數目的不同排程器,包括保留站、中央指令窗口等。排程器單元1256係耦接到實體暫存器檔案單元1258。各實體暫存器檔案單元1258代表一或多個實體暫存器檔案,其中不同的實體暫存器檔案儲存一或多個不同的資料類型,如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標是下一個將被執行指令的位址)等。在一個實施例中,實體暫存器檔案單元1258包括向量暫存器單元、寫入遮罩暫存器單元和純量暫存器單元。這些暫存器單元可以提供架構向量暫存器、向量遮罩暫存器和一般用途暫存器。實體暫存器檔案單元1258被失效單元1254重疊以說明暫存器重命名和亂序執行可以被實現的各種方式(例如,利用重排序緩衝器和失效暫存器檔案;利用未來檔案、歷史緩衝器和失效暫存器檔案;利用暫存器映射和暫存器池;等)。失效單元1254和實體暫存器檔案單元1258耦接到執行群集1260。執行群集1260包括一組一或多個執行單元1262和一組一或多個記憶體存取單元1264。執行單元1262可以執行各種運算(例如,移位、加、減、乘)且對於不同類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。而一些實施例可以包括專用於特定功能或功能組的若干執行單元,其它實施例可僅包括一個執行單元或皆執行所有功能的複數執行單元。排程器單元1256、實體暫存器檔案單元1258及執行群集1260顯示可能為複數,因為某些實施例中對某些類型的資料/運算建立單獨的管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線和/或記憶體存取管線,其各自具有排程器單元、實體暫存器檔案單元和/或執行群集,並在一個單獨的記憶體存取管線的情況下,某些實施例中被實現,其中只有所述管線的執行群集具有記憶體存取單元1264)。還應該理解的是,其中單獨的管線被使用,一或多個這些管線可以是亂序發送/執行而其餘是循序的。
所述組記憶體存取單元1264耦接到記憶體單元1270,其包括耦接到資料快取記憶體單元1274的資料轉譯後備緩衝區單元1272,資料快取單元1274耦接到第2階(L2)快取記憶體單元1276。在一個示範性實施例中,記憶體存取單元1264可以包括載入單元、儲存位址單元和儲存資料單元,其中各耦接到在記憶體單元1270中的資料轉譯後備緩衝區單元1272。指令快取記憶體單元1234更耦接到在記憶體單元1270中的第2階(L2)快取記憶體單元1276。L2快取記憶體單元1276耦接到一或多個其它階層的快取記憶體且最後到主記憶體。
舉例而言,示範性暫存器重命名、亂序發送/執行核心架構可實現所述管線1200如下:1)所述指令提取單元1238執行提取與長度解碼階段1202和1204;2)所述解碼單元1240執行解碼階段1206;3)所述重命名/分配器單元1252執行所述分配階段1208和重命名階段1210;4)所述排程器單元1256執行所述排程階段1212;5)所述實體暫存器檔案單元1258和所述記憶體單元1270執行所述暫存器讀取/記憶體讀取階段1214;所述執行群集1260執行所述執行階段1216;6)所述記憶體單元1270和所述實體暫存器檔案單元1258執行回寫/記憶體寫入階段1218;7)各種單元可能參與所述異常處理階段1222;8)所述失效單元1254和所述實體暫存器檔案單元1258執行提交階段1224。
核心1290可以支持一或多個指令集(例如,x86指令集(具有新版本已經加入的一些擴充);加州桑尼維爾的MIPS科技的MIPS指令集;加州桑尼維爾的ARM控股的ARM指令集(具有可選的如NEON額外擴充),其包括本文所述的指令。在一個實施例中,核心1290包括支持緊縮資料指令集擴充(例如,AVX1、AVX2)的邏輯,由此容許被使用緊縮資料執行的多數多媒體應用程式使用的運算。
應當理解的是,所述核心可以支持多執行緒(執行兩個以上平行運算集或執行緒),並且可用多種方式這樣做,其包括分時多執行緒、同步多執行緒(其中單一實體核心為實體核心為同步多執行緒的各執行緒提供邏輯核心),或者其組合(例如,分時提取和解碼和此後的同步多執行緒,如Intel®超執行緒技術)。
而暫存器重命名是在亂序執行的內容中描述,應當理解的是,暫存器重命名可以被使用在循序架構中。儘管所示的處理器的實施例還包括分離指令和資料快取記憶體單元1234/1274和共享L2快取記憶體單元1276,可替換實施例可以具有用於指令和資料兩者的單一內部快取記憶體,例如,如第一階(L1)內部快取記憶體,或多階內部快取記憶體。在一些實施例中,所述系統可以包括內部快取記憶體和所述核心和/或所述處理器外部的外部快取記憶體的組合。可替代地,所有的快取記憶體可以是在核心和/或處理器之外部。具體示範性循序核心架構
圖13A-B顯示循序核心架構更具體示例的方塊圖,其核心將是在晶片中數個邏輯方塊之一(包括相同類型和/或不同類型的其它核心)。邏輯方塊透過高頻寬互連網路(例如,環形網路)與某些固定功能邏輯、記憶體I/O介面和其它取決於應用必要的I/O邏輯通訊。
圖13A是根據本發明的實施例的單一處理器核心,連同其連接到晶片上的互連網路1302與其第2階(L2)快取記憶體的區域子集1304的方塊圖。在一個實施例中,指令解碼單元1300支援具有緊縮資料指令集擴充的x86指令集。L1快取記憶體1306容許低延遲時間存取快取記憶體內純量和向量單元。雖然在一個實施例中(為了簡化設計),純量單元1308和向量單元1310使用單獨的暫存器組(分別為純量暫存器1312和向量暫存器1314)和在它們之間傳輸的資料被寫入到記憶體中,然後從第1階(L1)快取記憶體1306讀回,本發明的替代實施例可使用不同的方法(例如,使用單一暫存器組或包括容許資料在兩個暫存器檔案之間傳送而不會被寫入和讀回的通訊路徑)。
L2快取記憶體的區域子集1304是整體L2快取記憶體的一部分,其被分割成單獨的區域子集(各處理器核心一個)。各處理器核心具有至它自己的L2快取記憶體的區域子集1304的直接存取路徑。被處理器核心讀取的資料被儲存在其L2快取記憶體子集1304中,並且可以迅速地被存取,平行地與其它處理器核心存取他們自己的區域L2快取記憶體子集。被處理器核心寫入的資料被儲存在它自己的L2快取記憶體子集1304且如果需要的話將從其它子集被清除。環形網路確保共享資料的一致性。環形網路是雙向的以容許代理,如處理器核心、L2快取記憶體和其它邏輯方塊在所述晶片內彼此通訊。各環形資料路徑是每個方向1012位元寬。
圖13B是根據本發明實施例,圖13A中所述處理器核心的一部分的展開圖。圖13B包括所述L1快取記憶體1304的L1資料快取記憶體1306A部分,以及更詳細的有關所述向量單元1310和所述向量暫存器1314。具體地,所述向量單元1310是16位元寬向量處理單元(VPU)(見16寬ALU 1328),其執行一或多個整數、單精度浮點和雙精度浮點指令。VPU支援以混合單元1320混合暫存器輸入、以數值轉換單位1322A-B進行數值轉換,並且以複製單元1324對於記憶體輸入進行複製。寫入遮罩暫存器1326容許預測結果向量寫入。
圖14係根據本發明的實施例可具有一或多個核心、可具有積體記憶體控制器且可具有積體圖形的處理器1400的方塊圖。圖14中的實線框顯示了處理器1400具有單一核心1402A、系統代理1410、一組一或多個匯流排控制器單元1416,而可選的額外虛線框顯示了具有多個核心1402A-N的替代處理器1400、系統代理單元1410中的一組一或多個積體記憶體控制器單元1414以及特殊用途邏輯1408。
因此,所述處理器1400的不同實現可以包括:1)中央處理器,其具有特殊用途邏輯1408其為積體圖形和/或科學(生產量)邏輯(其可以包括一或多個核心)以及核心1402A-N是一或多個一般用途核心(例如,一般用途循序核心、一般用途亂序核心、這兩者的組合);2)協同處理器,其具有主要用於圖形和/或科學(生產量)的大量特殊用途核心的核心1402A-N;和3)協同處理器,其具有大量一般用途循序核心的核心1402A-N。因此,所述處理器1400可以是一般用途處理器、協同處理器或特殊用途處理器,例如,如網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(一般用途圖形處理單元)、高生產量多積體核心(MIC)協同處理器(包括30個或更多的核心)、嵌入式處理器或類似物。處理器可以在一或多個晶片上被實現。處理器1400可以為使用任意數量的製程技術(例如,如BiCMOS、CMOS或NMOS)的一或多個基板的一部分和/或可以在所述基板上實現。
所述記憶體階層包括在所述核心內的一或多個階層的快取記憶體、一組或一或多個共享快取記憶體單元1406和耦接到一組積體記憶體控制器單元1414的外部記憶體(未圖示)。所述組共享快取記憶體單元1406可以包括一或多個中間階層快取記憶體,諸如第2級(L2)、第3級(L3)、第4級(L4)或其它階層的快取記憶體、末階快取記憶體(LLC)和/或其組合。雖然在一個實施例中,環型互連單元1412將所述積體圖形邏輯1408、所述組共享快取記憶體單元1406以及所述系統代理單元1410/積體記憶體控制器單元1414互連,可選的實施例可使用任何數量的眾所皆知的技術來將這些單元互連。在一個實施例中,一致性在一個或一或多個快取記憶體單元1406和核心1402A-N之間被維持。
在一些實施例中,一或多個核心1402A-N能夠多緒執行。系統代理1410包括這些協調和運行核心1402A-N的元件。系統代理單元1410可以包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括需要調節核心1402A-N和所述積體圖形邏輯1408的功率狀態的邏輯和元件。所述顯示單元是用於驅動一或多個外部連接顯示器。
所述核心1402A-N可以是就架構指令集而言是同質或異質;即兩個以上的核心1402A-N可以能夠執行相同的指令集,而其它可能只能夠執行所述指令集的一個子集或不同的指令集。示範性電腦架構
圖15至18是示範性電腦架構的方塊圖。在本領域已知的其它系統設計和組態為筆記型電腦、桌上電腦、手持電腦、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換機、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、蜂巢式電話、可攜式媒體播放器、手持裝置以及各種其它電子裝置,也是適用的。在一般情況下,能夠結合如本文所揭露的處理器和/或其它執行邏輯的各種各樣的系統或電子裝置通常是適用的。
現在參照圖15,其顯示根據本發明一個實施例的系統1500的方塊圖。系統1500可以包括一或多個處理器1510、1515,其耦接到控制器集線器1520。在一個實施例中,所述控制器集線器1520包括圖形記憶體控制器集線器(GMCH)1590和輸入/輸出集線器(IOH)1550(其可能是在單獨的晶片上);所述GMCH 1590包括記憶體和耦接到記憶體1540和協同處理器1545的圖形控制器;所述IOH 1550係耦接輸入/輸出(I/O)裝置1560到所述GMCH 1590。可替換地,所述記憶體和圖形控制器之一或兩者都整合在處理器內(如本文所述),所述記憶體1540和所述協同處理器1545直接耦接到所述處理器1510以及所述控制器集線器1520在具有所述IOH 1550的單一晶片中。記憶體1540可以包含「零」乘法碼1540A,例如,用以儲存在被執行時使處理器執行本發明的任何方法的碼。
額外的處理器1515的可選性質在圖15中以虛線表示。各處理器1510、1515可以包括一或多個在此描述的處理核心且可以是所述處理器1400的一些版本。
所述記憶體1540可以例如是,動態隨機存取記憶體(DRAM)、相變記憶體(PCM),或者是兩者的組合。至少一個實施例中,所述控制器集線器1520與所述處理器1510、1515透過多點匯流排,諸如前端匯流排(FSB)、點對點介面,諸如快速路徑互連(QPI)或類似的連接1595通訊。
在一個實施例中,協同處理器1545是特殊用途處理器,例如,如高生產量的MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似物。在一個實施例中,控制器集線器1520可以包括積體圖形加速器。
就包括架構、微架構、熱力,功率消耗特性等指標度量的範圍而言,所述實體資源1510、1515之間可以有各種的差異。
在一個實施例中,所述處理器1510執行控制一般類型的資料處理運算的指令。嵌入所述指令的可能是協同處理器指令。處理器1510識別應該由附加的協同處理器1545執行的類型的這些協同處理器指令。於是所述處理器1510在協同處理器匯流排或其它互連上發出這些協同處理器指令(或表示協同處理器指令的控制信號)至協同處理器1545。協同處理器1545接受並執行接收到的所述協同處理器指令。
現在參照圖16,其顯示的是根據本發明的實施例的更具體的第一示範性系統1600的方塊圖。如圖16所示,多處理器系統1600是點對點互連系統,並且包括透過點對點互連1650耦接的第一處理器1670和第二處理器1680。處理器1670和1680各自可以是處理器1400的一些版本。在本發明的一個實施例中,處理器1670和1680分別為處理器1510和1515,而協同處理器1638為協同處理器1545。在另一實施例中,處理器1670和1680分別為處理器1510和協同處理器1545。
處理器1670和1680被顯示為分別包括積體記憶體控制器(IMC)單元1672和1682。處理器1670還包括作為其匯流排控制器單元點對點(P-P)介面1676和1678的一部分;類似地,第二處理器1680包括P-P介面1686和1688。處理器1670、1680可以利用點對點(P-P)介面電路1678、1688透過點對點(P-P)界面1650交換資訊。如圖16所示,IMC 1672和1682耦接所述處理器到各自的記憶體,即記憶體1632和記憶體1634,其可以是區域地附加到各自的處理器的主記憶體的一部分。
處理器1670、1680可以各自利用點對點介面電路1676、1694、1686、1698透過個別的點對點介面1652、1654與晶片組1690交換資訊。晶片組1690可以選擇性地透過高效能介面1639與所述協同處理器1638交換資訊。在一個實施例中,所述協同處理器1638是特殊用途處理器,例如,如高生產量的MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似物。
共享快取記憶體(未圖示)可以包括在任一個處理器內或兩個處理器的外部,但透過P-P互連與所述處理器連接,使得如果處理器被置入低功率模式時,任一個或兩個處理器的區域快取記憶體的資訊可被儲存在共享快取記憶體中。
晶片組1690可以透過介面1696耦接到第一匯流排1616。在一個實施例中,第一匯流排1616可以是周邊元件互連(PCI)匯流排,或諸如快速週邊組件互連(PCI Express)匯流排或另一種第三代I/O互連匯流排的匯流排,儘管本發明的範圍並不如此侷限。
如圖16所示,各種I/O裝置1614可以耦接到第一匯流排1616,連同將第一匯流排1616耦接到第二匯流排1620的匯流排橋1618。在一個實施例中,一或多個額外處理器1615,諸如協同處理器、高生產量的MIC處理器、GPGPU、加速器(例如,如圖形加速器或數位信號處理(DSP)單元)、可程式化邏輯陣列或任何其它的處理器,耦接到第一匯流排1616。在一個實施例中,第二匯流排1620可以是低接腳數(LPC)匯流排。在一個實施例中,各種裝置可以耦接到第二匯流排1620包括,例如鍵盤和/或滑鼠1622、通訊裝置1627和儲存單元1628,如磁碟機或其它大容量儲存裝置,其可以包括指令/編碼和資料1630。此外,音訊I/O 1624可耦接到所述第二匯流排1620。須注意的是,其它架構也是可能的。例如,代替圖16的點對點架構,系統可以實現多點匯流排或其它這種架構。
現在參照圖17,顯示根據本發明實施例的第二更具體的示範性系統1700的方塊圖。在圖16和圖17中相似的元件具有相似的參考符號,圖16的某些態樣已經從圖17中被刪去,以避免模糊圖17的其它態樣。
圖17顯示所述處理器1670、1680可以分別包括積體記憶體和I/O控制邏輯(「CL」)1672和1682。因此,所述CL 1672、1682包括積體記憶體控制器單元且包括I/O控制邏輯。圖17顯示,不僅是所述記憶體1632、1634耦接到所述CL 1672、1682,I/O裝置1714也耦接到控制邏輯1672、1682。舊有I/O裝置1715耦接到晶片組1690。
現在參照圖18,顯示根據本發明實施例的系統晶片1800的方塊圖。在圖14中相似的元件具有相似的參考符號。另外,虛線框是更進階的系統晶片上的可選特性。在圖18中,互連單元1802被耦接到:應用處理器1810,其包括一組一或多個核心202A-N和共享快取記憶體單元1406;系統代理單元1410;匯流排控制器單元1416;積體記憶體控制器單元1414;一組或一或多個協同處理器1820其可包括積體圖形邏輯、圖像處理器、音訊處理器和視訊處理器;靜態隨機存取記憶體(SRAM)單元1830;直接記憶體存取(DMA)單元1832;及用於耦接到一或多個外部顯示器的顯示單元1840。在一個實施例中,所述協同處理器1820包括特殊用途處理器,例如,如網路或通訊處理器、壓縮引擎、GPGPU、高生產量MIC處理器、嵌入式處理器或類似物。
本文揭露的(例如,機制的)實施例可以用硬體、軟體、韌體或這些實現方式的組合來實現。本發明的實施例可以被實現為電腦程式或在包括至少一個處理器、儲存系統(包括揮發性和非揮發性記憶體和/或儲存元件)、至少一個輸入裝置以及至少一個輸出裝置的可程式化系統上執行的程式碼。
程式碼,諸如在圖16所顯示的碼1630,可以應用到輸入指令,以執行本文所述的功能並產生輸出資訊。輸出資訊可以用已知的方式應用於一或多個輸出裝置。針對本申請的目的,處理系統包括具有處理器的任何系統,例如,如數位信號處理器(DSP)、微控制器、特殊用途積體電路(ASIC)或微處理器。
所述程式碼可以用高階程序或物件導向程式語言來實現,以與處理系統進行通訊。如果需要的話,所述程式碼還可以用組合或機器語言來實現。事實上,本文中描述的機制並不限於在任何特定的程式語言的範圍。在任何情況下,所述語言可以已編譯或已直譯的語言。
至少一個實施例中的一或多個態樣可以由儲存在代表處理器中各種邏輯的機器可讀媒體上的代表性指令被實現,其中,當由機器讀取,使所述機器製造邏輯以執行本文所描述的技術。這樣的表示,被稱為「IP核心」可以被儲存在實體的機器可讀媒體並且供給到各種客戶或生產設施以加載到實際上構成所述邏輯或處理器的製造機器。
這樣的機器可讀儲存媒體可以包括(但不限於)非暫態的、製品的實體安排或由機器或裝置形成,包括儲存媒體,諸如硬碟、任何其它類型的磁碟包括軟碟、光碟、唯讀光碟(CD-ROM)、可抹寫光碟(CD-RW)和光磁碟、半導體裝置,諸如唯讀記憶體(ROM)、隨機存取記憶體(RAM),如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式化唯讀記憶體(EPROM)、快閃記憶體、電子可抹除可程式化唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁卡或光卡,或者任何其它適於儲存電子指令的媒體類型。
因此,本發明的實施例還包括非暫態的、實體的機器可讀媒體,其包含指令或包含設計資料,如硬體描述語言(HDL),其定義本文中所述的架構、電路、裝置,處理器和/或系統特徵。此類實施例也可以關於程式產品。仿真 ( 包括二進制轉譯、編碼變形等 )
在某些情況下,指令轉換器可用於將指令從來源指令集轉換至目標指令集。例如,所述指令轉換器可以轉譯(例如,使用靜態二進制轉譯、包括動態編譯的動態二進制轉譯)、變形、模擬或轉換指令至一或多個由核心處理的其它指令。指令轉換器可以用軟體、硬體、韌體或其組合來實現。指令轉換器可以是在處理器上、不在處理器上或部分在處理器上和部分不在處理器上。
圖19是根據本發明實施例對比用以將來源指令集中的二進制指令轉換至目標指令集中的二進制指令的軟體指令轉換器的使用的方塊圖。在所示實施例中,所述指令轉換器是軟體指令轉換器,雖然可替代地,所述指令轉換器可以用軟體、韌體、硬體或其各種組合來實現。圖19顯示高階語言1902的程式可以使用x86編譯器1904被編譯,以產生x86二進制編碼1906,其可被具有至少一個x86指令集核心的處理器1916本機地執行。所述具有至少一個x86指令集核心的處理器1916代表任何處理器,其可透過相容地執行或處理(1)Intel®x86指令集核心的指令集的重要部分或(2)應用程式的目標編碼版本或目標為在具有至少一個x86指令集核心的Intel®處理器上運行的其它軟體,執行如具有至少一個x86指令集核心的Intel®處理器大致上相同的功能,以實現如具有至少一個x86指令集核心的Intel®處理器大致上相同的結果。x86編譯器1904代表可運算以產生x86二進制編碼1906(例如,目標碼)的編譯器,其可具有或不具有額外的關聯處理,在具有至少一個x86指令集核心的處理器1916上執行。類似地,圖19顯示高階語言1902中的程式可以使用替代指令集編譯器1908被編譯,以產生替代性的指令集二進制編碼1910,其可由不具有至少一個x86指令集核心的處理器1914本機地執行(例如,具有執行加州桑尼維爾的MIPS科技的MIPS指令集和/或執行加州桑尼維爾的ARM控股公司的ARM指令集的核心的處理器)。指令轉換器1912被用來將所述x86二進制編碼1906轉換至可由不具有x86指令集核心的處理器1914本機地執行的編碼。這種轉換後的編碼不太可能與所述替代指令集二進制編碼1910一樣,因為能夠這樣的指令轉換器很難製造;然而,所述轉換後的編碼將完成一般運算並組成來自替代指令集的指令。因此,所述指令轉換器1912代表軟體、韌體、硬體或其組合,透過仿真、模擬或任何其它程序,容許處理器或其它不具有x86指令集的處理器或核心的電子裝置來執行x86二進制編碼1906。
100:硬體處理器 102:硬體解碼器 104:硬體執行電路 106:暫存器 108:快取記憶體 110:記憶體 112:矩陣運算電路 114:純量電路 116:向量/單一指令多重資料(SIMD)電路 112A:乘法器電路 114A:乘法器電路 116A:乘法器電路 200:電路 201:「零」檢測器電路 202:第一輸入數字 204:第二輸入數字 206:單一位元符號欄位 208:指數欄位 210:分數欄位 212:單一位元符號欄位 214:指數欄位 216:分數欄位 218:數字格式 220:比較電路 222:比較電路 224:邏輯閘 226:輸出 228:「零」乘法器電路 230:乘法器 232:電源控制開關 234:零輸出儲存 236:輸出 252:第一輸入數字 254:第二輸入數字 300:矩陣運算電路 302:融合乘積累加電路(FMA) 304:圖塊A 306:圖塊C 308:圖塊B 350:「零」模式 352:數字格式 400:電路 402:第一緊縮資料源 404:第二緊縮資料源 406:乘法器電路 408:乘法器電路 410:乘法器電路 412:乘法器電路 414:加法器電路 416:中間結果 418:加法器電路 420:結果 450:儲存 452:數字格式 500:電路 502:第一緊縮資料源 504:第二緊縮資料源 506:乘法器電路 508:乘法器電路 510:乘法器電路 512:乘法器電路 550:儲存 552:數字格式 600:硬體處理器 602:儲存 604:「零」乘法指令 606:數字格式欄位 608:解碼器 610:排程器電路 612:暫存器檔案/記憶體電路 614:「零」檢測器電路 616:執行電路 618:乘法器電路 620:回寫電路 622:旁路 700:硬體處理器 702:儲存 704:「零」乘法指令 706:數字格式欄位 708:解碼器 710:排程器電路 712:暫存器檔案/記憶體電路 714:執行電路 716:「零」檢測器電路 718:乘法器電路 720:回寫電路 800:方法 802:步驟 804:步驟 806:步驟 808:步驟 810:步驟 812:步驟 900:通用向量親和指令格式 905:無記憶存取 910:無記憶體存取、全捨入控制式運算 912:無記憶體存取、寫入遮罩控制、部分捨入控制式運算 915:無記憶體存取、資料轉換式運算 917:無記憶體存取、寫入遮罩控制、VSIZE式運算 920:記憶體存取 925:記憶體存取、暫時的 927:記憶體存取、寫入遮罩控制 930:記憶體存取、非暫時的 940:格式欄位 942:基底運算欄位 944:暫存器索引欄位 946:修飾符欄位 946A:無記憶體存取 946B:記憶體存取 950:增強運算欄位 952:alpha欄位 952A:rs欄位 952A.1:捨入 952A.2:資料轉換 952B:驅逐隱含欄位 952B.1:暫時 952B.2:非暫時 952C:寫入遮罩控制(Z)欄位 954:beta欄位 954A:捨入控制欄位 954B:資料轉換欄位 954C:資料處理欄位 956:抑制所有浮點異常(SAE)欄位 957A:RL欄位 957A.1:捨入 957A.2:向量長度(VSIZE) 957B:廣播欄位 958:捨入運算控制欄位 959A:捨入運算欄位 959B:向量長度欄位 960:縮放欄位 962A:位移欄位 962B:位移係數欄位 964:資料元寬度欄位 968:類型欄位 968A:A類 968B:B類 970:寫入遮罩欄位 972:立即欄位 974:完整運算碼欄位 1000:特定向量親和指令格式 1002:EVEX前置 1005:REX欄位 1010:REX’欄位 1015:運算碼映射欄位 1020:VVVV欄位 1025:前置編碼欄位 1030:實際運算碼欄位 1040:MOD R/M欄位 1042:MOD欄位 1044:Reg欄位 1046:R/M欄位 1054:xxx欄位 1056:bbb欄位 1100:暫存器架構 1110:向量暫存器 1115:寫入遮罩暫存器 1125:通用暫存器 1145:純量浮點堆疊暫存器檔案 1150:MMX緊縮整數平面暫存器檔案 1200:管線 1202:提取階段 1204:長度解碼階段 1206:解碼階段 1208:分配階段 1210:重命名階段 1212:排程階段 1214:暫存器讀取/記憶體讀取階段 1216:執行階段 1218:回寫/記憶體寫入階段 1222:異常處理階段 1224:提交階段 1230:前端單元 1232:分支預測單元 1234:指令快取記憶體單元 1236:指令轉譯後備緩衝區 1238:指令提取單元 1240:解碼單元 1250:執行引擎單元 1252:重命名/分配器單元 1254:失效單元 1256:排程器單元 1258:實體暫存器檔案單元 1260:執行群集 1262:執行單元 1264:記憶體存取單元 1270:記憶體單元 1272:資料轉譯後備緩衝區單元 1274:資料快取記憶體單元 1276:L2快取記憶體單元 1290:核心 1300:指令解碼器 1302:互連網路 1304:L2快取記憶體的區域子集 1306:L1快取記憶體 1306A:L1資料快取記憶體 1308:純量單元 1310:向量單元 1312:純量暫存器 1314:向量暫存器 1320:混合單元 1322A:數值轉換單位 1322B:數值轉換單位 1324:複製單元 1326:寫入遮罩暫存器 1328:16位元寬算術邏輯單元 1400:處理器 1402A:核心 1402N:核心 1404A:快取記憶體單元 1404N:快取記憶體單元 1406:共享快取記憶體單元 1408:特殊用途邏輯 1410:系統代理單元 1412:環型互連單元 1414:積體記憶體控制器單元 1416:匯流排控制器單元 1500:系統 1510:處理器 1515:處理器 1520:控制器集線器 1540:記憶體 1545:協同處理器 1550:輸入/輸出集線器 1560:輸入/輸出(I/O)裝置 1590:圖形記憶體控制器集線器 1595:連接 1600:系統 1614:輸入/輸出裝置 1615:處理器 1616:第一匯流排 1618:匯流排橋 1620:第二匯流排 1622:鍵盤和/或滑鼠 1624:音訊I/O 1627:通訊裝置 1628:儲存單元 1630:指令/編碼和資料 1632:記憶體 1634:記憶體 1638:協同處理器 1639:高效能介面 1650:點對點介面 1652:個別的點對點介面 1654:個別的點對點介面 1670:處理器 1672:積體記憶體控制器(IMC)單元 1676:點對點介面電路 1678:點對點介面電路 1680:處理器 1682:積體記憶體控制器(IMC)單元 1686:點對點介面電路 1688:點對點介面電路 1690:晶片組 1692:介面 1694:點對點介面電路 1696:介面 1698:點對點介面電路 1700:系統 1714:I/O裝置 1715:舊有I/O裝置 1800:系統晶片 1802:互連單元 1810:應用處理器 1820:協同處理器 1830:靜態隨機存取記憶體(SRAM)單元 1832:直接記憶體存取(DMA)單元 1840:顯示單元 1902:高階語言 1904:x86編譯器 1906:x86二進制編碼 1908:替代指令集編譯器 1910:替代指令集二進制編碼 1912:指令轉換器 1914:不具有x86指令集核心的處理器 1916:具有至少一個x86指令集核心的處理器
在附圖的圖示中,透過舉例而非限制的方式顯示本發明,在附圖中,相似的元件符號指示相似的元件,以及其中:
[ 1] 顯示根據本發明實施例的耦接至記憶體的硬體處理器。
[ 2A] 顯示根據本發明實施例的處於浮點模式並且包含耦接到「零」乘法器電路的「零」檢測器電路的電路。
[ 2B] 顯示根據本發明實施例的處於整數模式並且包含耦接到「零」乘法器電路的「零」檢測器電路的電路。
[ 3] 顯示根據本發明實施例的包含「零」模式的矩陣運算電路。
[ 4] 顯示根據本發明實施例的包含耦接到加法器電路的複數個平行「零」乘法器電路的電路。
[ 5] 顯示根據本發明實施例的包含複數個平行「零」乘法器電路的電路。
[ 6] 顯示根據本發明實施例的耦接到包含一或多個「零」乘法指令的儲存的硬體處理器,所述硬體處理器具有耦接到執行電路的「零」檢測器電路。
[ 7] 顯示根據本發明實施例的耦接到包含一或多個「零」乘法指令的儲存的硬體處理器,所述硬體處理器具有執行電路的「零」檢測器電路。
[ 8] 顯示根據本發明的實施例的處理「零」乘法指令的方法。
[ 9A] 係顯示根據本發明實施例的通用向量親和指令格式和其A類指令樣板的方塊圖。
[ 9B] 係顯示根據本發明實施例的通用向量親和指令格式和其B類指令樣板的方塊圖。
[ 10A] 係顯示根據本發明實施例的用於圖9A和圖9B中的通用向量親和指令格式的欄位的方塊圖。
[ 10B] 係顯示根據本發明的一個實施例的組成完整運算碼欄位的圖10A中的特定向量親和指令格式的欄位的方塊圖。
[ 10C] 係顯示根據本發明的一個實施例的組成暫存器索引欄位的圖10A中的特定向量親和指令格式的欄位的方塊圖。
[ 10D] 係顯示根據本發明的一個實施例的組成增強運算欄位950的圖10A中的特定向量親和指令格式的欄位的方塊圖。
[ 11] 係根據本發明的一個實施例的暫存器架構的方塊圖。
[ 12A] 係顯示根據本發明實施例的示範性循序管線和示範性暫存器重命名、亂序問題/執行管線兩者的方塊圖。
[ 12B] 係顯示根據本發明實施例的將被包括在處理器中的循序架構核心和示範性暫存器重命名、亂序問題/執行架構核心的示範性實施例兩者的方塊圖。
[ 13A] 係根據本發明實施例的單一處理器核心以及其與晶粒上互連網絡的連接以及其二級(L2)快取記憶體的本地子集的方塊圖。
[ 13B] 係根據本發明實施例的圖13A中的處理器核心的部分的放大圖。
[ 14] 係根據本發明實施例可具有一個以上的核心、可具有積體記憶體控制器且可具有整合圖形的處理器的方塊圖。
[ 15] 係根據本發明實施例的系統的方塊圖。
[ 16] 係根據本發明實施例的更具體示範性系統的方塊圖。
[ 17] 所示係根據本發明實施例的第二更具體示範性系統的方塊圖。
[ 18] 所示係根據本發明實施例的系統單晶片(SoC)的方塊圖。
[ 19] 係對比根據本發明實施例利用軟體指令轉換器以轉換來源指令集中的二進制指令至目標指令集中的二進制指令的方塊圖。
100:硬體處理器
102:硬體解碼器
104:硬體執行電路
106:暫存器
108:快取記憶體
110:記憶體
112:矩陣運算電路
112A:乘法器電路
114:純量電路
114A:乘法器電路
116:向量/單一指令多重資料(SIMD)電路
116A:乘法器電路

Claims (24)

  1. 一種硬體處理器,包含: 解碼器,用以將單一指令解碼為經解碼的單一指令,所述單一指令具有識別第一數字的第一欄位、識別第二數字的第二欄位和指示所述第一數字和所述第二數字的數字格式的第三欄位;以及 執行電路,用以執行所述經解碼的單一指令以: 使所述第一數字與所述第一數字的所述數字格式的零值進行第一比較, 使所述第二數字與所述第二數字的所述數字格式的零值進行第二比較, 當所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,提供零的值作為所述單一指令的結果, 當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值時,提供所述零的值作為所述單一指令的結果,以及 當所述第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值,並且所述第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,提供所述第一數字與所述第二數字的乘積作為所述單一指令的結果。
  2. 如請求項1的硬體處理器,其中當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,所述執行電路不執行所述第一數字和所述第二數字的乘法。
  3. 如請求項2的硬體處理器,其中用以執行所述乘法的乘法器係響應於所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值而斷電。
  4. 如請求項1至3中任一項的硬體處理器,其中所述數字格式被提供為所述單一指令的立即數。
  5. 如請求項1至3中任一項的硬體處理器,其中所述數字格式由所述單一指令的運算碼指示。
  6. 如請求項1的硬體處理器,其中所述第一欄位識別數字的第一向量、所述第二欄位識別數字的第二向量,並且所述執行電路執行所述經解碼的單一指令以: 使所述數字的第一向量中的每個數字與所述數字的第一向量的所述數字格式中的零值進行複數個第一比較, 使所述數字的第二向量中的每個數字與所述數字的第二向量的所述數字格式中的零值進行複數個第二比較, 作為所述單一指令的結果,為所述複數個第二比較中之各者提供零值,所述零值指示所述數字的第二向量的對應第二數字等於所述數字的第二向量的所述數字格式中的所述零值, 作為所述單一指令的所述結果,為所述複數個第一比較中之各者提供所述零值,所述零值指示所述數字的第一向量的對應第一數字等於所述數字的第一向量的所述數字格式中的所述零值,以及 當第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值並且對應的第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,作為所述單一指令的所述結果,提供所述數字的第一向量的第一數字和所述數字的第二向量的對應第二數字的乘積。
  7. 如請求項1的硬體處理器,其中當所述數字格式係用於所述第一值和所述第二值的浮點數格式時,所述第一比較將零值與所述第一數字的符號位元進行比較、將零值與所述第一數字的指數欄位進行比較,並且將零值與所述第一數字的分數欄位進行比較,而所述第二比較將所述零值與所述第二數字的符號位元進行比較、將所述零值與所述第二數字的指數欄位進行比較,並且將所述零值與所述第二數字的分數欄位進行比較。
  8. 如請求項1的硬體處理器,其中所述第一比較和所述第二比較與所述執行電路分開地執行。
  9. 一種方法,包含: 利用硬體處理器的解碼器將單一指令解碼為經解碼的單一指令,所述單一指令具有識別第一數字的第一欄位、識別第二數字的第二欄位和指示所述第一數字和所述第二數字的數字格式的第三欄位;以及 利用硬體處理器的執行電路執行所述經解碼的單一指令以: 使所述第一數字與所述第一數字的所述數字格式的零值進行第一比較, 使所述第二數字與所述第二數字的所述數字格式的零值進行第二比較, 當所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,提供零的值作為所述單一指令的結果, 當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值時,提供所述零的值作為所述單一指令的結果,以及 當所述第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值,並且所述第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,提供所述第一數字與所述第二數字的乘積作為所述單一指令的結果。
  10. 如請求項9的方法,其中當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,所述執行電路不執行所述第一數字和所述第二數字的乘法。
  11. 如請求項10的方法,其中用以執行所述乘法的乘法器係響應於所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值而斷電。
  12. 如請求項9至11中任一項的方法,還包含從所述單一指令的立即數讀取所述數字格式。
  13. 如請求項9至11中任一項的方法,還包含從所述單一指令的運算碼確定所述數字格式。
  14. 如請求項9的方法,其中所述第一欄位識別數字的第一向量、所述第二欄位識別數字的第二向量,並且所述執行電路執行所述經解碼的單一指令以: 使所述數字的第一向量中的每個數字與所述數字的第一向量的所述數字格式中的零值進行複數個第一比較, 使所述數字的第二向量中的每個數字與所述數字的第二向量的所述數字格式中的零值進行複數個第二比較, 作為所述單一指令的結果,為所述複數個第二比較中之各者提供零值,所述零值指示所述數字的第二向量的對應第二數字等於所述數字的第二向量的所述數字格式中的所述零值, 作為所述單一指令的所述結果,為所述複數個第一比較中之各者提供所述零值,所述零值指示所述數字的第一向量的對應第一數字等於所述數字的第一向量的所述數字格式中的所述零值,以及 當第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值並且對應的第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,作為所述單一指令的所述結果,提供所述數字的第一向量的第一數字和所述數字的第二向量的對應第二數字的乘積。
  15. 如請求項9的方法,其中當所述數字格式係用於所述第一值和所述第二值的浮點數格式時,所述第一比較將零值與所述第一數字的符號位元進行比較、將零值與所述第一數字的指數欄位進行比較,並且將零值與所述第一數字的分數欄位進行比較,而所述第二比較將所述零值與所述第二數字的符號位元進行比較、將所述零值與所述第二數字的指數欄位進行比較,並且將所述零值與所述第二數字的分數欄位進行比較。
  16. 如請求項9的方法,其中所述第一比較和所述第二比較與所述執行電路分開地執行。
  17. 一種非暫態機器可讀媒體,其儲存碼,所述碼在由機器執行時使所述機器執行方法,包含: 利用硬體處理器的解碼器將單一指令解碼為經解碼的單一指令,所述單一指令具有識別第一數字的第一欄位、識別第二數字的第二欄位和指示所述第一數字和所述第二數字的數字格式的第三欄位;以及 利用硬體處理器的執行電路執行所述經解碼的單一指令以: 使所述第一數字與所述第一數字的所述數字格式的零值進行第一比較, 使所述第二數字與所述第二數字的所述數字格式的零值進行第二比較, 當所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,提供零的值作為所述單一指令的結果, 當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值時,提供所述零的值作為所述單一指令的結果,以及 當所述第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值,並且所述第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,提供所述第一數字與所述第二數字的乘積作為所述單一指令的結果。
  18. 如請求項17的非暫態機器可讀媒體,其中當所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值時,所述執行電路不執行所述第一數字和所述第二數字的乘法。
  19. 如請求項18的非暫態機器可讀媒體,其中用以執行所述乘法的乘法器係響應於所述第一比較指示所述第一數字等於所述第一數字的所述數字格式中的所述零值或所述第二比較指示所述第二數字等於所述第二數字的所述數字格式中的所述零值而斷電。
  20. 如請求項17至19中任一項的非暫態機器可讀媒體,還包含從所述單一指令的立即數讀取所述數字格式。
  21. 如請求項17至19中任一項的非暫態機器可讀媒體,還包含從所述單一指令的運算碼確定所述數字格式。
  22. 如請求項17的非暫態機器可讀媒體,其中所述第一欄位識別數字的第一向量、所述第二欄位識別數字的第二向量,並且所述執行電路執行所述經解碼的單一指令以: 使所述數字的第一向量中的每個數字與所述數字的第一向量的所述數字格式中的零值進行複數個第一比較, 使所述數字的第二向量中的每個數字與所述數字的第二向量的所述數字格式中的零值進行複數個第二比較, 作為所述單一指令的結果,為所述複數個第二比較中之各者提供零值,所述零值指示所述數字的第二向量的對應第二數字等於所述數字的第二向量的所述數字格式中的所述零值, 作為所述單一指令的所述結果,為所述複數個第一比較中之各者提供所述零值,所述零值指示所述數字的第一向量的對應第一數字等於所述數字的第一向量的所述數字格式中的所述零值,以及 當第一比較指示所述第一數字不等於所述第一數字的所述數字格式中的所述零值並且對應的第二比較指示所述第二數字不等於所述第二數字的所述數字格式中的所述零值時,作為所述單一指令的所述結果,提供所述數字的第一向量的第一數字和所述數字的第二向量的對應第二數字的乘積。
  23. 如請求項22的非暫態機器可讀媒體,其中當所述數字格式係用於所述第一值和所述第二值的浮點數格式時,所述第一比較將零值與所述第一數字的符號位元進行比較、將零值與所述第一數字的指數欄位進行比較,並且將零值與所述第一數字的分數欄位進行比較,而所述第二比較將所述零值與所述第二數字的符號位元進行比較、將所述零值與所述第二數字的指數欄位進行比較,並且將所述零值與所述第二數字的分數欄位進行比較。
  24. 如請求項17的非暫態機器可讀媒體,其中所述第一比較和所述第二比較與所述執行電路分開地執行。
TW109131698A 2019-12-13 2020-09-15 用於將零值相乘之指令的設備、方法和系統 TW202143029A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/714,684 2019-12-13
US16/714,684 US11847450B2 (en) 2019-12-13 2019-12-13 Apparatuses, methods, and systems for instructions to multiply values of zero

Publications (1)

Publication Number Publication Date
TW202143029A true TW202143029A (zh) 2021-11-16

Family

ID=72355822

Family Applications (1)

Application Number Title Priority Date Filing Date
TW109131698A TW202143029A (zh) 2019-12-13 2020-09-15 用於將零值相乘之指令的設備、方法和系統

Country Status (5)

Country Link
US (1) US11847450B2 (zh)
EP (1) EP3835948A1 (zh)
CN (1) CN112988231A (zh)
BR (1) BR102020019550A2 (zh)
TW (1) TW202143029A (zh)

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226737B1 (en) 1998-07-15 2001-05-01 Ip-First, L.L.C. Apparatus and method for single precision multiplication
US7932911B2 (en) 1998-08-24 2011-04-26 Microunity Systems Engineering, Inc. Processor for executing switch and translate instructions requiring wide operands
US6631392B1 (en) 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
US7058830B2 (en) 2003-03-19 2006-06-06 International Business Machines Corporation Power saving in a floating point unit using a multiplier and aligner bypass
US8103858B2 (en) 2008-06-30 2012-01-24 Intel Corporation Efficient parallel floating point exception handling in a processor
US9047118B2 (en) 2011-06-30 2015-06-02 Altera Corporation Computationally efficient compression of floating-point data
WO2013095552A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Vector instruction for presenting complex conjugates of respective complex numbers
US9383968B2 (en) 2013-09-27 2016-07-05 Nvidia Corporation Math processing by detection of elementary valued operands
US9608664B2 (en) 2013-12-30 2017-03-28 International Business Machines Corporation Compression of integer data using a common divisor
US10297001B2 (en) 2014-12-26 2019-05-21 Intel Corporation Reduced power implementation of computer instructions
CN107766079B (zh) 2016-08-19 2022-03-11 北京百度网讯科技有限公司 处理器以及用于在处理器上执行指令的方法
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10776699B2 (en) * 2017-05-05 2020-09-15 Intel Corporation Optimized compute hardware for machine learning operations
US10725740B2 (en) 2017-08-31 2020-07-28 Qualcomm Incorporated Providing efficient multiplication of sparse matrices in matrix-processor-based devices
US10990650B1 (en) 2018-03-22 2021-04-27 Amazon Technologies, Inc. Reducing computations for data including padding
JP7115211B2 (ja) 2018-10-18 2022-08-09 富士通株式会社 演算処理装置および演算処理装置の制御方法
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US20200311511A1 (en) 2019-03-26 2020-10-01 Mipsology SAS Accelerating neuron computations in artificial neural networks by skipping bits
US10901492B1 (en) 2019-03-29 2021-01-26 Amazon Technologies, Inc. Power reduction in processor pipeline by detecting zeros

Also Published As

Publication number Publication date
BR102020019550A2 (pt) 2021-06-15
US11847450B2 (en) 2023-12-19
CN112988231A (zh) 2021-06-18
US20210182057A1 (en) 2021-06-17
EP3835948A1 (en) 2021-06-16

Similar Documents

Publication Publication Date Title
TWI818885B (zh) 執行複數的熔合乘-加指令的系統與方法
TWI743058B (zh) 硬體處理器、用於融合指令之方法及非暫時性機器可讀媒體
JP6456867B2 (ja) 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法
TWI502499B (zh) 執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法
CN112069459A (zh) 用于稀疏-密集矩阵乘法的加速器
US20190114169A1 (en) Vector multiplication with accumulation in large register space
TWI517041B (zh) 有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法
TWI474258B (zh) 用於執行浮點捨入量決定指令之方法、裝置、系統及機器可讀取儲存媒體
TWI761367B (zh) 用於融合乘加運算的系統、裝置及方法
TWI462007B (zh) 用以執行將遮罩暫存器轉換為向量暫存器的系統、裝置及方法
TWI740859B (zh) 用於跨步的載入(strided load)的系統、設備及方法
TWI715618B (zh) 資料元件比較處理器、方法、系統及指令
TWI610228B (zh) 用於執行向量位元反轉和交叉的方法和設備
CN112861073A (zh) 用于执行16位浮点向量点积指令的系统和方法
TWI747881B (zh) 將來源緊縮資料劃分為巷道的處理器、方法、系統及指令
CN112148251A (zh) 跳过无意义的矩阵运算的系统和方法
TW201732568A (zh) 用於巷道為主的跨類收集的系統、設備與方法
TWI733718B (zh) 用於獲得偶數和奇數資料元素的系統、裝置及方法
TW201810020A (zh) 用於累乘的系統、設備及方法
EP3835947A1 (en) Apparatuses, methods, and systems for instructions to multiply floating-point values of about one
TW201810034A (zh) 用於累和的系統、設備及方法
TW202143029A (zh) 用於將零值相乘之指令的設備、方法和系統
TWI737650B (zh) 用於從鏈結結構取回元件的處理器、系統和方法
US20220413853A1 (en) Apparatuses, methods, and systems for a packed data convolution instruction with shift control and width control
TWI841041B (zh) 用於融合乘加運算的系統、裝置及方法