TWI760341B - 用於跨步載入的系統、設備及方法 - Google Patents

用於跨步載入的系統、設備及方法 Download PDF

Info

Publication number
TWI760341B
TWI760341B TW106118135A TW106118135A TWI760341B TW I760341 B TWI760341 B TW I760341B TW 106118135 A TW106118135 A TW 106118135A TW 106118135 A TW106118135 A TW 106118135A TW I760341 B TWI760341 B TW I760341B
Authority
TW
Taiwan
Prior art keywords
field
packed data
instruction
value
stride
Prior art date
Application number
TW106118135A
Other languages
English (en)
Other versions
TW201810029A (zh
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 TW201810029A publication Critical patent/TW201810029A/zh
Application granted granted Critical
Publication of TWI760341B publication Critical patent/TWI760341B/zh

Links

Images

Classifications

    • 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/30018Bit or string 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

說明了用於跨步載入的系統、方法及設備。在實施例中,用以包括至少運算碼、用於至少二緊縮資料來源運算元的欄位、用於緊縮資料目的地運算元的欄位及立即值的指令被指明為跨步載入指令。執行該指令以使用跨步來從該至少二緊縮資料來源運算元載入緊縮資料元件,並且將跨步載入之結果儲存到從部分地自該立即值決定的定義位置開始的該緊縮資料目的地運算元中。

Description

用於跨步載入的系統、設備及方法
本發明之技術領域一般係關於電腦處理器架構,且更特別的是關於一種指令,當執行其時造成特定的結果。
指令集或指令集架構(ISA;instruction set architecture)為關於編程(programming)的電腦架構的部分,且可包括原生資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷及例外處置,以及包括外部的輸入及輸出(I/O)。應注意的是,術語指令於此一般指的是巨集指令(macro-instruction)-其為提供給用於執行的處理器的指令-相反於微指令或「micro-op」-其自處理器的解碼器解碼巨集指令造成。
指令集架構係與微架構有區別,其為實行ISA的處理器之內部設計。具有不同的微架構的處理器能共用通用指令集(common instruction set)。例如,英特爾奔騰 4(Intel Pentium 4)處理器、英特爾核心(Intel Core)處理器以及加州桑尼維爾的超微裝置公司(Advanced Micro Devices,Inc)處理器實行幾乎相同的x86指令集的版本(具有已加至較新版本的一些延伸),但具有不同的內部設計。例如,ISA之相同的暫存器架構可使用周知的技術以不同的方式在不同的微架構中實行,包括專屬實體暫存器、使用暫存器更名機制的一或多個動態分配實體暫存器(例如,使用暫存器別名表(RAT;Register Alias Table)、重排序緩衝器(ROB;Reorder Buffer)以及引退暫存器檔案;使用暫存器之多個映射和池)等。除非另以明定,詞彙暫存器架構、暫存器檔案以及暫存器指的是可見於軟體/程式設計師且指令以之明定暫存器的方式。在需要明確性(specificity)下,將使用形容詞邏輯的、架構的或軟體可見的來指示在暫存器架構中的暫存器/檔案,同時將使用不同的形容詞以給定的微架構來指明暫存器(例如,實體暫存器、重排序緩衝器、引退暫存器、暫存器池)。
指令集包括一或多個指令格式。給定的指令格式界定各種欄位(位元之數量、位元之位置)以明定要被進行的運算以及要對其進行該運算之運算元之類的。給定的指令使用給定指令格式來表達且明定運算及運算元。指令流為指令之特定序列,其中在該序列中的各個指令為以指令格式的指令之發生。
科學的、金融的、自動向量化通用、RMS(辨識、探勘、及合成)/視覺的以及媒體應用(例如,2D/3D圖 形、影像處理、視訊壓縮/解壓縮、語音辨識演算法及音訊操控(audio manipulation))常需要相同的運算來在大數量的資料項目上進行(亦稱為「資料平行性(data parallelism)」)。單指令多資料(SIMD;Single Instruction Multiple Data)指的是引起處理器在多個資料項目上進行相同的運算的指令之類型。SIMD技術特別合適於處理器能邏輯地將在暫存器中的位元分成若干個固定大小的資料元件,其各者代表分開的值。例如,在64位元暫存器中的位元可被明定為來源運算元以作為四個分開的16位元資料元件,其各者代表分開的16位元值。如另一範例,在256位元暫存器中的位元可被明定為來源運算元以作為四個分開的64位元緊縮資料元件(四倍字(Q)大小資料元件)、八個分開的32位元緊縮資料元件(雙倍字(D)大小資料元件)、十六個分開的16位元緊縮資料元件(字(W)大小資料元件)或三十二個分開的8位元資料元件(位元組(B)大小資料元件)。此類型的資料稱為緊縮資料類型或向量資料類型,此資料類型的運算元稱為緊縮資料運算元或向量運算元。換言之,緊縮資料項目或向量指的是緊縮資料元件之序列,並且緊縮資料運算元或向量運算元為SIMD指令之來源或目的地運算元(亦已知為緊縮資料指令或向量指令)。
藉由範例的方式,SIMD指令之一類型明定單一向量運算用以在兩個來源向量運算元上以垂直方式進行來產生相同大小的目的地向量運算元(亦稱為結果向量運算元),具有相同數目的資料元件且以相同資料元件次 序。在來源向量運算元中的資料元件稱為來源資料元件,同時在目的地向量運算元中的資料元件稱為目的地或結果資料元件。這些來源向量運算元為相同大小的且包含相同寬度的資料元件,因而他們包含相同數目的資料元件。在兩個來源向量運算元中在相同位元位置中的來源資料元件形成成對的資料元件(亦稱為對應的資料元件;亦即,在各個來源運算元之資料元件位置0中的資料元件相對應,在各個來源運算元之資料元件位置1中的資料元件相對應等等)。藉由SIMD指令明定的運算係在該些對來源資料元件之各者上分開地進行以產生匹配數目的結果資料元件,因而來源資料元件之各對具有對應的結果資料元件。由於運算是垂直的且由於結果向量運算元是相同大小,具有相同數目的資料元件且結果資料元件以相同資料次序儲存為來源向量運算元,故結果資料元件在與在來源向量運算元中他們對應對的來源資料元件相同的結果向量運算元之位元位置中。除了此示範性類型的SIMD指令外,有各式個樣其它類型的SIMD指令(例如,具有僅一或具有多於二的來源向量運算元之者;以水平方式運算之者;產生結果向量運算元且其為不同大小之者;具有不同大小的資料元件之者及/或具有不同資料元件次序之者)。應了解,術語目的地向量運算元(或目的地運算元)被定義為進行由指令明定的運算之直接結果,包括在區域的該目的地運算元之儲存(無論是暫存器或在由該指令明定的記憶體位址處),使得其可如來源運算元由另一個指令來存取(藉由另一指令 明定該相同位置)。
101‧‧‧解碼電路
103‧‧‧排程電路
105‧‧‧暫存器
107‧‧‧記憶體
109‧‧‧執行電路
111‧‧‧引退電路
201‧‧‧來源
205‧‧‧目的地
301‧‧‧來源
303‧‧‧寫入遮罩
305‧‧‧目的地
800‧‧‧一般性向量親和指令格式
805‧‧‧指令模板
810‧‧‧指令模板
812‧‧‧指令模板
815‧‧‧指令模板
817‧‧‧指令模板
820‧‧‧指令模板
825‧‧‧指令模板
827‧‧‧指令模板
830‧‧‧指令模板
840‧‧‧格式欄位
842‧‧‧基底運算欄位
844‧‧‧暫存器索引欄位
846‧‧‧修飾符欄位
850‧‧‧擴充運算欄位
852‧‧‧阿爾發欄位
852A‧‧‧欄位
852A.1‧‧‧欄位
852A.2‧‧‧欄位
852B‧‧‧收回提示欄位
852B.1‧‧‧欄位
852B.2‧‧‧欄位
852C‧‧‧寫入遮罩控制欄位
854‧‧‧欄位
854A‧‧‧捨入控制欄位
854B‧‧‧資料變換欄位
854C‧‧‧資料操控欄位
856‧‧‧浮點異常欄位
857A‧‧‧欄位
857A.1‧‧‧欄位
857A.2‧‧‧欄位
857B‧‧‧廣播欄位
858‧‧‧捨入運算控制欄位
859A‧‧‧捨入運算控制欄位
859B‧‧‧向量長度欄位
860‧‧‧比例欄位
862A‧‧‧位移欄位
862B‧‧‧位移因子欄位
864‧‧‧資料元件寬度欄位
868‧‧‧級別欄位
868A‧‧‧欄位
868B‧‧‧欄位
870‧‧‧寫入遮罩欄位
872‧‧‧立即值欄位
874‧‧‧全運算碼欄位
900‧‧‧特定向量親和指令格式
902‧‧‧前置
905‧‧‧欄位
910‧‧‧欄位
915‧‧‧運算碼映射欄位
920‧‧‧欄位
925‧‧‧前置編碼欄位
930‧‧‧真實運算碼欄位
940‧‧‧欄位
942‧‧‧欄位
944‧‧‧欄位
946‧‧‧欄位
950‧‧‧比例、索引、基底(SIB)位元組
952‧‧‧欄位
954‧‧‧欄位
956‧‧‧欄位
1000‧‧‧暫存器架構
1010‧‧‧向量暫存器
1015‧‧‧寫入遮罩暫存器
1025‧‧‧通用暫存器
1045‧‧‧純量浮點堆疊暫存器檔案
1050‧‧‧MMX緊縮整數平面暫存器檔案
1100‧‧‧處理器管線
1102‧‧‧提取級
1104‧‧‧長度解碼級
1106‧‧‧解碼級
1108‧‧‧分配級
1110‧‧‧更名級
1112‧‧‧排程級
1114‧‧‧暫存器讀取/記憶體讀取級
1116‧‧‧執行級
1118‧‧‧寫回/記憶體寫入級
1122‧‧‧執行處置級
1124‧‧‧提交級
1130‧‧‧前端單元
1132‧‧‧分支預測單元
1134‧‧‧指令快取單元
1136‧‧‧轉譯後備緩衝器
1138‧‧‧指令提取單元
1140‧‧‧解碼單元
1150‧‧‧執行引擎單元
1152‧‧‧更名/分配器單元
1154‧‧‧引退單元
1156‧‧‧排程器單元
1158‧‧‧實體暫存器檔案單元
1160‧‧‧執行叢集
1162‧‧‧執行單元
1164‧‧‧記憶體存取單元
1170‧‧‧記憶體單元
1172‧‧‧資料後備緩衝器(TLB)單元
1174‧‧‧資料快取單元
1176‧‧‧2級快取單元
1190‧‧‧核心
1200‧‧‧指令解碼器
1202‧‧‧晶粒上互連網路
1204‧‧‧2級(L2)快取
1206‧‧‧1級(L1)快取
1208‧‧‧純量單元
1210‧‧‧向量單元
1212‧‧‧純量暫存器
1214‧‧‧向量暫存器
1206A‧‧‧1級(L1)資料快取
1222A‧‧‧數值轉換單元
1222B‧‧‧數值轉換單元
1220‧‧‧拌和單元
1224‧‧‧複製單元
1226‧‧‧寫入遮罩暫存器
1228‧‧‧16寬算術邏輯單元(ALU)
1300‧‧‧處理器
1302A~N‧‧‧核心
1304A~N‧‧‧快取
1306‧‧‧共用快取單元
1308‧‧‧積體圖形邏輯
1310‧‧‧系統代理器
1312‧‧‧環狀的互連單元
1314‧‧‧積體記憶體控制器單元
1316‧‧‧匯流排控制器單元
1400‧‧‧系統
1410‧‧‧處理器
1415‧‧‧處理器
1420‧‧‧控制器集線器
1440‧‧‧記憶體
1445‧‧‧共處理器
1450‧‧‧輸入/輸出集線器
1460‧‧‧輸入/輸出(I/O)裝置
1490‧‧‧圖形記憶體控制器集線器
1495‧‧‧連接
1500‧‧‧系統
1514‧‧‧輸入/輸出(I/O)裝置
1515‧‧‧處理器
1516‧‧‧第一匯流排
1518‧‧‧匯流排橋
1520‧‧‧第二匯流排
1522‧‧‧鍵盤及/或滑鼠
1524‧‧‧音訊輸入/輸出(I/O)
1527‧‧‧通訊裝置
1528‧‧‧儲存單元
1530‧‧‧指令/碼及資料
1532‧‧‧記憶體
1534‧‧‧記憶體
1538‧‧‧共處理器
1550‧‧‧點對點互連
1552‧‧‧點對點(P-P)介面
1554‧‧‧點對點(P-P)介面
1570‧‧‧處理器
1572‧‧‧積體記憶體控制器單元
1576‧‧‧點對點介面電路
1578‧‧‧點對點介面電路
1580‧‧‧處理器
1582‧‧‧積體記憶體控制器單元
1586‧‧‧點對點介面電路
1588‧‧‧點對點介面電路
1590‧‧‧晶片組
1592‧‧‧高效能介面
1594‧‧‧點對點介面電路
1596‧‧‧介面
1598‧‧‧點對點介面電路
1600‧‧‧系統
1614‧‧‧輸入/輸出(I/O)裝置
1615‧‧‧舊有的輸入/輸出(I/O)裝置
1700‧‧‧晶片上系統
1702‧‧‧互連單元
1710‧‧‧應用處理器
1720‧‧‧共處理器
1730‧‧‧靜態隨機存取記憶體(SRAM)單元
1732‧‧‧直接記憶體存取(DMA)單元
1740‧‧‧顯示單元
本發明係藉由範例的方法來闡述而非以附加的圖式的圖來限制,其中相似的參考指的是類似的元件,並且其中:圖1闡述用以處理跨步載入指令的硬體之實施例;圖2闡述依據實施例執行跨步載入指令的範例;圖3闡述依據實施例執行跨步載入指令的範例;圖4闡述跨步載入指令之實施例;圖5闡述用以由處理器處理跨步載入指令的方法之實施例;圖6闡述由處理器進行的方法之執行部分以處理跨步載入指令的實施例;圖7闡述執行跨步載入指令的偽碼表示之實施例;圖8A~8B為依據本發明之實施例闡述一般性向量親和指令格式和其指令模板的方塊圖;圖9A~D闡述依據本發明之實施例的示範性特定向量親和指令格式;圖10為依據本發明之一實施例的暫存器架構之方塊圖;圖11A為依據本發明之實施例闡述示範性循序管線和示範性暫存器更名、亂序派發/執行管線兩者的方塊圖; 圖11B為依據本發明之實施例闡述用以被包括在處理器中的示範性循序架構核心和示範性暫存器更名、亂序派發/執行架構核心兩者的方塊圖;圖12A~B闡述更特定的示範性循序核心架構之方塊圖,其核心會為在晶片中幾個邏輯方塊之其中一者(包括相同類型及/或不同類型的其它核心);圖13為依據本發明之實施例可具有多於一個核心、可具有積體記憶體控制器以及可具有積體圖形的處理器1300之方塊圖;圖14~16為示範性電腦架構之方塊圖;以及圖17為依據本發明之實施例對比用以將在來源指令集中的二進位指令轉換成在目標指令集中的二進位指令的軟體指令轉換器的使用之方塊圖。
【發明內容】及【實施方式】
在下列發明說明中,提出了眾多的特定細節。然而,了解的是,本發明之實施例可不以這些特定細節來實踐。在其它實例中,周知的電路、結構及技術已被詳細地繪示以為了不去模糊本發明說明的了解。
在說明書中對「一實施例」、「實施例」、「範例實施例」等的參考指示所述的實施例可包括特定特徵、結構或特性,但每一個實施例可不必然包括該特定特徵、結構或特性。再者,這類詞彙不必然指的是相同的實施例。進一步,當特定特徵、結構或特性關連於實施例來 說明時,要提出的是不論是否被明白的說明,影響與其它實施例關連的這類特徵、結構或特性是在於本領域具有通常知識者的知識內。
於此詳述的實施例可應用至具有自結構之陣列載入的向量化迴圈的問題。這類的型樣亦已知為跨步載入(stride load)。例如,考量結構之陣列,其由3個欄位組成:typedef struct{ double x; double y; double z; }xyz; xyz *A;且具有對陣列之連序元件的欄位之存取:for(i=0;i<N;i++){ x_local=A[i].x; y_local=A[i].y; z_local=A[i].z; computation(x_local, y_local, z_local); ... }
以具有給定資料類型之KL元件的長度VL位元之向量暫存器來向量化迴圈(在此範例中,當存取64位元浮點資料時KL=VL/64,對於VL=512,KL=8)需要從記憶體將元件收集到向量暫存器。元件以跨步3常駐於記憶體中: x_local_vec=[A[i+7].x:A[i+6].x:A[i+5].x:A[i+4].x:A[i+3].x:A[i+2].x:A[i+1].x:A[i+0].x]
y_local_vec=[A[i+7].y:A[i+6].y:A[i+5].y:A[i+4].y:A[i+3].y:A[i+2].y:A[i+1].y:A[i+0].y]
z_local_vec=[A[i+7].z:A[i+6].z:A[i+5].z:A[i+4].z:A[i+3].z:A[i+2].z:A[i+1].z:A[i+0].z]
具有收集指令(gather instruction)的指令集,此類載入能由具有相同索引的3個相鄰收集來完成。
x_local_vec=gatherqpd[&A[i+0]+v_index*8]
y_local_vec=gatherqpd[&A[i+0]+v_index*8+8]
z_local_vec=gatherqpd[&A[i+0]+v_index*8+16], 其中v_index=[21:18:15:12:9:6:3:0]-索引之向量,其決定與基低位址的元件之偏移。
不幸地,使用收集可能具有一些缺點。例如,收集實行本身比常規向量載入更複雜,因為在一般情形中索引是未知的且需要處理可能的例外。因此,效能不是最佳的。此外,並未考慮x_local、y_local、z_local之地域性(locality)(他們可能在相同的快取線中)。
為了解決這些問題,可致能收集以混洗(G2S;gather-to-shuffle)最佳化,其載入數個連序的向量至向量暫存器,且接著據以混洗(或置換(permute))資料至具有置換指令之序列的數個目的地。在示範性的情形中,應載入8個元件中之3個向量且置換至3個目的地。用G2S最佳化的問題在對於各個目的地的置換控制為獨一的且需要在分開的向量暫存器中產生且保留一段全部迴圈執行的時間。跨步能具有較大的值(N)且獨一的置換控制之數目成長為N*(N-1)。如此,暫存器壓力則劇增。對於跨步5, 將會需要20個暫存器以保持所有置換控制。按序的置換指令之數目亦成長。
跨步型樣亦可顯現於以增量值>1行進的迴圈:for(i=0;i<N;i+=5){ x_local=B[i]; y_local=B[i+1]; z_local=B[i+2]; u_local=B[i+3]; v_local=B[i+4]; computation(x_local,y_local,z_local,u_local,v_local); ... }
考慮產生用於跨步3的置換序列之目前編譯器:vmovdqu32 zmm5,ZMMWORD PTR.L_2i10floatpacket.2[rip]//在迴圈之前
vmovdqu32 zmm4,ZMMWORD PTR.L_2i10floatpacket.3[rip]//自記憶體
vmovdqu32 zmm3,ZMMWORD PTR.L_2i10floatpacket.4[rip]//載入置換控制
vmovdqu32 zmm2,ZMMWORD PTR.L_2i10floatpacket.5[rip]//
vmovdqu32 zmm1,ZMMWORD PTR.L_2i10floatpacket.6[rip]
vmovdqu32 zmm0,ZMMWORD PTR.L_2i10floatpacket.7[rip]
..B1.12:
vmovdqu32 zmm8,ZMMWORD PTR[rcx]//載入3個輸入向量
vmovdqu32 zmm9,ZMMWORD PTR[64+rcx]
vmovdqu32 zmm11,ZMMWORD PTR[128+rcx]
vmovaps zmm6,zmm5//回復覆寫的
vmovaps zmm7,zmm3//置換控制
vmovaps zmm10,zmm1//於此
vpermi2q zmm6,zmm8,zmm9
vpermi2q zmm7,zmm8,zmm9
vpermi2q zmm10,zmm8,zmm9
vmovaps zmm12,zmm4//回復覆寫的
vmovaps zmm13,zmm2//置換控制
vmovaps zmm14,zmm0//於此
vpermi2q zmm12,zmm6,zmm11
vpermi2q zmm13,zmm7,zmm11
vpermi2q zmm14,zmm10,zmm11
cmp eax,r10d
jb..B1.12
在載入3個向量(且加上從記憶體的置換控制之6個載入)之後有6個置換控制和總共12個用於置換的指令。
使用跨步指令,序列將看起來像是:vmovdqu32 zmm1,ZMMWORD PTR[rcx]//載入3個輸入向量
vmovdqu32 zmm2,ZMMWORD PTR[64+rcx]
vmovdqu32 zmm3,ZMMWORD PTR[128+rcx]
strideload zmm12,zmm1,zmm2,010:000:00b//置換其本身
strideload zmm12,zmm3,zmm3,010:010:01b
strideload zmm13,zmm1,zmm2,010:001:00b
strideload zmm13,zmm3,zmm3,010:000:01b
strideload zmm14,zmm1,zmm2,010:010:00b
strideload zmm14,zmm3,zmm3,010:001:01b
這有6個指令用於在3個載入之後的置換,沒有暫存器被保留用於置換控制且沒有記憶體參考用於得到置換控制。
於此所詳述者為使用跨步載入(「strideload」)指令的實施例設備、系統及方法,其當由硬體處理器執行時,引起使用跨步自至少兩個序連緊縮資料 (concatenated packed data)來源運算元(srcM、…、src2、src1)載入緊縮資料元件,並且在從定義的位置開始的目的地運算元中儲存經跨步的載入之結果。目的地之定義的位置係由(round*M*KL+offset)/stride所定義。「捨入(round)」值係由跨步載入(strideload)指令之立即值(immediate)提供。KL為在來源中緊縮資料元件的數目(向量長度(VL)除以緊縮資料元件大小)。M為序連來源運算元的數目。跨步值係至少部分由跨步載入(strideload)指令之立即值所供應。序連來源之開始資料元件位置係由偏移(offset)所界定,該偏移由跨步載入(strideload)指令之立即值所供應。在實施例中,立即值為8位元值且位元7:5被使用來計算跨步(該些位元之值加1),位元4:2提供偏移並且位元1:0提供捨入(round)。在一些實施例中,儲存係在寫入遮罩(writemask)的控制之下,並且用於寫入遮罩的欄位被包括在指令中。
圖1闡述用以處理跨步載入指令的硬體之實施例。闡述的硬體典型地為部分的硬體處理器或核心,像是部分的中央處理單元、加速器等。
跨步載入(strideload)指令係由解碼電路101所接收。例如,解碼電路101從提取邏輯/電路接收此指令。跨步載入(strideload)的跨步指令包括用於二或多個來源運算元(例如,緊縮資料暫存器(有時稱向量暫存器))、目的地運算元(例如,緊縮資料暫存器(有時稱向量暫存器))、運算碼以及立即值的欄位。在一些實施例中,跨步載入 (strideload)指令包括用於立即值的欄位。之後將詳述指令格式之更詳細的實施例。
解碼電路101將跨步載入(strideload)指令解碼成一或多個運算。在一些實施例中,此解碼包括產生用以由執行電路(像是執行電路109)進行的複數個微運算。解碼電路101亦解碼指令前置(instruction prefix)。
在一些實施例中,暫存器更名、暫存器分配及/或排程電路103提供用於下列之一或多者的功能性(functionality):1)更名邏輯運算元值成實體運算元值(例如,在一些實例中的暫存器別名表),2)將狀態位元及旗標分配到解碼的指令,及/或3)排程解碼的指令以用於在出於指令池的執行電路上執行(例如,在一些實施例中使用保留站(reservation station))。
暫存器(暫存器檔案)105和記憶體107儲存資料為用以由執行電路109在其上運算的跨步載入(strideload)指令之運算元。示範性暫存器類型包括緊縮資料暫存器、通用暫存器以及浮點暫存器。暫存器105亦可包括如於此詳述的寫入遮罩暫存器(write mask register)。
執行電路109執行解碼的跨步載入(strideload)指令,用以使用跨步從至少二序連來源運算元(srcM、…、src2、src1)載入緊縮資料元件,並且在從定義的位置開始的目的地運算元中儲存經跨步的載入之結果。目的地之定義的位置係由(round*M*KL+offset)/stride所定義。「捨入(round)」值係由跨步載入(strideload)指令 之立即值(immediate)提供。KL為在來源中緊縮資料元件的數目(向量長度(VL)除以緊縮資料元件大小)。M為序連來源運算元的數目。跨步值係至少部分由跨步載入(strideload)指令之立即值所供應。序連來源之開始資料元件位置係由偏移(offset)所界定,該偏移由跨步載入(strideload)指令之立即值所供應。在實施例中,立即值為8位元值且位元7:5被使用來計算跨步(該些位元加1之值),位元4:2提供偏移並且位元1:0提供捨入(round)。在一些實施例中,儲存係在寫入遮罩(writemask)的控制之下,並且用於寫入遮罩的欄位被包括在指令中。在一些實施例中,引退電路111架構地提交結果(例如,提交目的地暫存器到暫存器105中)並且將指令引退。
圖2闡述依據實施例執行跨步載入指令的範例。此範例並不意味是限制的。例如,在當此範例使用小在前排列法格式(little endian format)的同時,於此的教示允許大在前排列法格式(big endian format)執行。
典型地,用以抽取的緊縮資料元件之數目及他們的大小係取決於指令編碼(資料元件大小)。如此,不同數目的緊縮資料元件,像是2、4、8、16、32或64可在緊縮資料來源中。緊縮資料目的地暫存器大小包括64位元、128位元、256位元及512位元。
在此範例中,來源201(例如,緊縮資料暫存器)各包括8個緊縮資料元件。這些來源201被序連起來以為了跨步載入的目的。最低有效資料元件位置分別儲存 「0」、「2」及「5」。這些值係顯示為十進位的,然而他們典型地被儲存為二進位或十六進位值。
載入/儲存電路(未繪示以為了易於了解)被使用來依據跨步值及初始偏移來從來源201提取資料元件,並且將他們連序地儲存在目的地205中。
在捨入0跨步載入運算(strideload operation)中,目的地為REG0且來源為REG1和REG2。立即值以二進位顯示為01000100。此相當於1之偏移(立即值之位元4:2具有1之值)。此意味用以被選取的第一資料元件自REG1和REG2之序連來源之最低有效資料元件為偏移1。此資料元件被標示在REG1中且具有0的值。要被使用的跨步值為立即位元7:5之值(其為010b或在十進位中為2)加1,其在此範例中為3的跨步值。由立即值之兩個最低有效位元1:0找到捨入且為0。
用於從序連的來源REG1和REG2儲存跨步值到目的地205中的開始點係使用下列(round*M*KL+offset)/stride來找到。如所註解的,round(捨入)為0,來源M的數目為2,offset(偏移)為1且stride(跨步)為3。用於此範例的KL為8(每來源暫存器有8個資料元件)。如此,用於目的地的開始點為0。在此範例中,如所示僅5個資料元件位置被載入到目的地205中以用於此捨入。
在捨入1跨步載入運算(strideload operation)中,目的地為REG0且來源為REG3。立即值以二進位顯示為01000000。此相當於0之偏移(立即值之位元4:2具有0之 值)。此意味用以被選取的第一資料元件自REG3之序連來源之最低有效資料元件為偏移0。此資料元件被標示在REG3中且具有5的值。要被使用的跨步值為立即位元7:5之值(其為010b或在十進位中為2)加1,其在此範例中為3的跨步值。由立即值之兩個最低有效位元1:0找到捨入且為1。
用於從序連的來源REG3儲存跨步值到目的地205中的開始點係使用下列(round*M*KL+offset)/stride來找到。如所註解的,round(捨入)為1,來源M的數目為2,offset(偏移)為0且stride(跨步)為3。用於此範例的KL為8(每來源暫存器有8個資料元件)。如此,用於目的地的開始點為5。在此範例中,如所示僅3個資料元件位置被載入到目的地205中以用於此捨入。
圖3闡述依據實施例執行跨步載入指令的範例。此範例並不意味是限制的。例如,在當此範例使用小在前排列法格式(little endian format)的同時,於此的教示允許大在前排列法格式(big endian format)執行。
典型地,用以抽取的緊縮資料元件之數目及他們的大小係取決於指令編碼(資料元件大小)。如此,不同數目的緊縮資料元件,像是2、4、8、16、32或64可在緊縮資料來源中。緊縮資料目的地暫存器大小包括64位元、128位元、256位元及512位元。
在此範例中,來源301(例如,緊縮資料暫存器)各包括8個緊縮資料元件。這些來源301被序連起來以 為了跨步載入的目的。最低有效資料元件位置分別儲存「0」、「2」及「5」。這些值係顯示為十進位的,然而他們典型地被儲存為二進位或十六進位值。
載入/儲存電路(未繪示以為了易於了解)被使用來依據跨步值及初始偏移來從來源301提取資料元件,並且將他們連序地儲存在目的地305中。
在捨入0跨步載入運算(strideload operation)中,目的地為REG0且來源為REG1和REG2。立即值以二進位顯示為01000100。此相當於1之偏移(立即值之位元4:2具有1之值)。此意味用以被選取的第一資料元件自REG1和REG2之序連來源之最低有效資料元件為偏移1。此資料元件被標示在REG1中且具有0的值。要被使用的跨步值為立即位元7:5之值(其為010b或在十進位中為2)加1,其在此範例中為3的跨步值。由立即值之兩個最低有效位元1:0找到捨入且為0。
用於從序連的來源REG1和REG2儲存跨步值到目的地305中的開始點係使用下列(round*M*KL+offset)/stride來找到。如所註解的,round(捨入)為0,來源M的數目為2,offset(偏移)為1且stride(跨步)為3。用於此範例的KL為8(每來源暫存器有8個資料元件)。如此,用於目的地的開始點為0。然而,在此範例中,使用寫入遮罩303(例如,寫入遮罩暫存器)。在資料元件(或位元)中,寫入遮罩303之位置3為0,其指示跨步值將不被寫入到目的地305中。在此範例中,如所示僅4個資料元件位置被載入 到目的地305中以用於此捨入。
在捨入1跨步載入運算(strideload operation)中,目的地為REG0且來源為REG3。立即值以二進位顯示為01000000。此相當於0之偏移(立即值之位元4:2具有0之值)。此意味用以被選取的第一資料元件自REG3之序連來源之最低有效資料元件為偏移0。此資料元件被標示在REG3中且具有5的值。要被使用的跨步值為立即位元7:5之值(其為010b或在十進位中為2)加1,其在此範例中為3的跨步值。由立即值之兩個最低有效位元1:0找到捨入且為1。
用於從序連的來源REG3儲存跨步值到目的地305中的開始點係使用下列(round*M*KL+offset)/stride來找到。如所註解的,round(捨入)為1,來源M的數目為2,offset(偏移)為0且stride(跨步)為3。用於此範例的KL為8(每來源暫存器有8個資料元件)。如此,用於目的地的開始點為5。再一次,在此範例中,使用相同的寫入遮罩(例如,先前詳述的寫入遮罩暫存器)。在資料元件(或位元)中,寫入遮罩之位置5為0,其指示跨步值將不被寫入到目的地305中。在此範例中,如所示僅2個資料元件位置被載入到目的地305中以用於此捨入。
用於跨步載入指令(strideload instruction)的格式(包括欄位)之實施例為strideload{B/W/D/Q}{k}DST、SRCM...SRC0。在一些實施例中,strideload{B/W/D/Q}為指令之運算碼。B/W/D/Q指示來源/目的地之資料元件大小 為位元組、字、雙倍字及四倍字。DST為緊縮資料目的地暫存器且SRCM...SRC0為緊縮資料來源暫存器。K為寫入遮罩,其如於此詳述的在一些實施例中被使用。
在一些實施例中,跨步載入(strideload)指令包括寫入遮罩暫存器運算元。使用寫入遮罩來條件地控制每元件運算及更新結果。取決於實行,寫入遮罩使用併入(merging)或歸零(zeroing)掩蔽。以述詞(寫入遮罩(writemask)、寫入的遮罩(write mask)或k暫存器)運算元編碼的指令使用該指令以有條件地控制每元件計算運算並且更新結果至目的地運算元。述詞運算元已知為運算遮罩(opmask)(寫入遮罩)暫存器。運算遮罩為一組大小MAX_KL(64位元)之八個架構暫存器。要注意的是,從此組8架構暫存器中,僅k1到k7能被稱呼為述詞運算元。k0能被使用為正規來源或目的地,但不能被編碼為述詞運算元。亦要注意的是,能使用述詞運算元來致能記憶體故障抑制(fault-suppression)以用於具有記憶體運算元(來源或目的地)的一些指令。作為述詞運算元,運算遮罩暫存器包含一位元,用以支配對向量暫存器之各個資料元件的運算/更新。一般而言,運算遮罩暫存器能支援具有元件大小的指令:單精度浮點(float32)、整數雙倍字(int32)、雙精度浮點(float64)、整數四倍字(int64)。運算遮罩暫存器(MAX_KL)之長度足以處置多達64個元件,每元件具有一位元,亦即64位元。對於給定的向量長度,各個指令僅存取基於其資料類型需要的最低有效遮罩位元之數目。運算 遮罩在每元件粒度(granularity)上影響指令。所以,各個資料元件之數值或非數值運算和對目的地運算元的立即結果之每元件更新在運算遮罩暫存器之對應的位元上述詞(predicate)。在大多的實施例中,視為述詞運算元的運算遮罩遵守下列性質:1)若對應的運算遮罩位元未被設定,則未對於元件進行指令的運算(此暗示沒有異常或違反能由在遮蔽元件上的運算引起,因而沒有異常旗標被更新為遮蔽運算之結果);2)若未設定對應的寫入遮罩位元,則不以運算之結果更新目的地元件。相反的,必需保留目的地元件值(併入掩蔽)或其必需被清零(歸零掩蔽);3)對於具有記憶體運算元的一些指令,針對具有0之遮罩位元抑制記憶體故障。要注意的是,當實際上遮罩針對向量暫存器目的地提供併入行為時,此特徵提供萬用的架構以實行控制流程預測。作為替代,能使用掩蔽以用於歸零而不是併入,使得經遮罩輸出(mask out)的元件以0來更新而不是保留舊的值。提供歸零行為以移除對舊的值的隱含相依(當其不被需要時)。
圖4闡述跨步載入(strideload)指令之實施例,包括用於運算碼401、緊縮資料目的地運算元403、緊縮資料來源運算元405、立即值409以及在一些實施例中的寫入遮罩運算元407的欄位。在一些實施例中,對於指令明確編碼足夠的來源運算元是不可能的。在該些實施例中,可使用隱含暫存器(例如,SRC0永遠為特別的暫存器或是在通用暫存器中明定)或藉由編碼指示此暫存器的一來源且 接著下n個暫存器(例如,當採用四個來源的指令具有指示SRC0為運算元的位元時,其亦意味SRC1、SRC2及SRC3為其餘三個來源)。
圖5闡述用以由處理器處理跨步載入指令的方法之實施例。
在501,提取指令。例如,提取跨步載入(strideload)指令。跨步載入(strideload)指令包括用於運算碼、至少一緊縮資料來源運算元、立即值以及緊縮資料目的地運算元的欄位。在一些實施例中,跨步載入(strideload)指令包括用於寫入遮罩運算元的欄位。在一些實施例中,從指令快取提取指令。
在503處,解碼提取的指令。例如,由解碼電路解碼提取的跨步載入(strideload)指令,像是如於此詳述的。在一些實施例中,指令被解碼成一或多個微運算。
在505處,檢索(retrieve)與解碼的指令之來源運算元關聯的資料。例如,在來源位址或來源開始處存取來自記憶體的相連元件及/或存取目的地緊縮資料暫存器。
在507處,由執行電路(硬體)執行解碼的指令,像是於此詳述之者。對於跨步載入(strideload)指令,執行將使用跨步從至少二序連緊縮資料來源運算元(srcM、…、src2、src1)載入緊縮資料元件,並且在從定義的位置開始的目的地運算元中儲存經跨步的載入之結果。目的地之定義的位置係由(round*M*KL+offset)/stride 所定義。「捨入(round)」值係由跨步載入(strideload)指令之立即值(immediate)提供。KL為在來源中緊縮資料元件的數目(向量長度(VL)除以緊縮資料元件大小)。M為序連來源運算元的數目。跨步值係至少部分由跨步載入(strideload)指令之立即值所供應。序連來源之開始資料元件位置係由偏移(offset)所界定,該偏移由跨步載入(strideload)指令之立即值所供應。在實施例中,立即值為8位元值且位元7:5被使用來計算跨步(該些位元加1之值),位元4:2提供偏移並且位元1:0提供捨入(round)。在一些實施例中,儲存係在寫入遮罩(writemask)的控制之下,並且用於寫入遮罩的欄位被包括在指令中。
在一些實施例中,在509處提取或引退指令。
圖6闡述由處理器進行的方法之執行部分以處理跨步載入指令的實施例。
在601處,決定每緊縮資料來源暫存器的資料元件之數目、偏移值、作成的捨入值連同跨步值之計算。每緊縮資料來源暫存器(KL)之數目係由向量長度(VL)除以緊縮資料元件大小(典型地陳述為指令之運算碼的部分)來決定。如上所詳述,指令包括用於被使用來取得其餘值的立即值之欄位。在實施例中,立即值為8位元值且位元7:5被使用來計算跨步(該些位元加1之值),位元4:2提供偏移並且位元1:0提供捨入(round)。偏移為序連緊縮資料來源暫存器之開始資料元件位置。
在603處,來源暫存器被序連。在一些實施例 中,暫時的資料結構被使用於序連結果。
在605處,作成決定緊縮資料目的地暫存器之開始資料元件位置。緊縮資料目的地暫存器之開始位置係由(round*M*KL+offset)/stride定義,其中M為序連緊縮資料來源暫存器的數目。
在607處,從在偏移資料元件位置的序連緊縮資料來源暫存器載入資料元件值且儲存到經決定的緊縮資料目的地暫存器之開始資料元件位置。在一些實施例中,此儲存受利於寫入遮罩。
在609處,來自在資料元件位置的序連緊縮資料來源暫存器的資料元件值、遠離緊接載入資料元件位置的跨步值被載入且儲存到與先前儲存連序的緊縮資料目的地暫存器中。在一些實施例中,此儲存受制於寫入遮罩。
在611處作出是否所有的序連緊縮資料來源暫存器的跨步資料元件位置已被耗盡之判定。若否,則在609處接著載入下一個跨步的資料元件位置等。
若在一些實施例中為是,則在613處將在目的地之資料元件位置中的值歸零。
圖7闡述執行跨步載入指令的偽碼表示之實施例。
下面的圖詳述用以實行上面之實施例的示範性架構和系統。在一些實施例中,上述的一或多個硬體組件及/或指令如下詳述的仿真,或實行為軟體模組。
上述的指令之實施例被體現、可以「一般性 向量親和指令格式」來體現,其詳述於下。在其它實施例中,並未利用這類的格式而是使用另一指令格式,然而,下面說明的寫入遮罩暫存器、各種資料變換(拌和(swizzle)、廣播等)、定址等係一般可應用於說明上面指令之實施例的說明。此外,下面詳述示範性系統、架構以及管線。上述指令之實施例可在這類系統、架構及管線上執行,但不限於詳述之該些者。
指令集可包括一或多個指令格式。給定的指令格式可界定各種欄位(例如,位元之數量、位元之位置)以明定要被進行的運算(例如,運算碼)以及要對其進行該運算的運算元及/或其它資料欄位(例如,遮罩)之類的。一些指令格式更透過定義指令模板(或子格式)來分解。例如,給定的指令格式之指令模板可被定義以具有指令格式的欄位之不同的子集(包括的欄位典型地在相同的次序中,但至少一些具有不同位元位置,因為有較少包括的欄位)及/或被定義以具有不同解譯的給定欄位。因此,ISA之各個指令係使用給定指令格式來表達(且若經定義,在該指令格式之指令模板的給定者中)且包括用於明定該運算及該運算元的欄位。例如,示範性ADD(加法)指令具有特定的運算碼和指令格式,其包括運算碼欄位以明定該運算碼和運算元欄位來選擇運算元(來源1(source1)/目的地及來源2(source2));以及在指令流中的ADD指令的發生將在選擇特定運算元的運算元欄位中具有特定內容。已釋出及/或公開稱為進階向量延伸(AVX;Advanced Vector Extension)(AVX1和AVX2)且使用向量延伸(VEX;Vector Extension)寫碼方案的一組SIMD延伸(例如,請見2014年9月英特爾64(Intel® 64)和IA-32架構軟體開發的手冊;及2014年10月英特爾(Intel®)進階向量延伸程式參考)。
示範性指令格式
於此說明的指令之實施例可以不同的格式來體現。此外,下面詳述示範性系統、架構以及管線。指令之實施例可在這類系統、架構及管線上執行,但不限於詳述之該些者。
一般性向量親和指令格式
向量親和指令格式為合適於向量指令的指令格式(例如,有某些特定於向量運算的欄位)。在當說明其中向量及純量兩者的運算皆透過向量親和指令格式來支援的實施例的同時,替代的實施例僅使用向量運算的該向量親和指令格式。
圖8A~8B為依據本發明之實施例闡述一般性向量親和指令格式和其指令模板的方塊圖。圖8A為依據本發明之實施例闡述一般性向量親和指令格式及其級別A指令模板的方塊圖;同時圖8B為依本發明之實施例闡述一般性向量親和指令格式及其級別B指令模板的方塊圖。具體而言,一般性向量親和指令格式800,針對其而定義有級別A和級別B指令模板,其之兩者包括沒有記憶體存取805 指令模板和記憶體存取820指令模板。在向量親和指令格式之上下文中的術語「一般性」指的是未被綁定到任何特定指令集的指令格式。
當本發明之實施例將說明以其中向量親和指令格式支援下列時: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位元組)資料元件寬度)。
在圖8A中的級別A指令模板包括:1)在沒有記憶體存取805指令模板內,有繪示者沒有記憶體存取、全捨入控制類型運算810指令模板和沒有記憶體存取、資料變換類型運算815指令模板;以及2)在記憶體存取820指令模板內,有繪示著記憶體存取、時序825指令模板和記憶體存取、非時序830指令模板。在圖8B中的級別B指令模 板包括:1)在沒有記憶體存取805指令模板內,有繪示著沒有記憶體存取、寫入遮罩控制、部分捨入控制類型運算812指令模板和沒有記憶體存取、寫入遮罩控制、vsize類型運算817指令模板;以及2)在記憶體存取820指令模板內,有繪示著記憶體存取、寫入遮罩控制827指令模板。
一般性向量親和指令格式800包括以在圖8A~8B中闡述的次序列示的下列欄位。
格式欄位840-在此欄位中的特定值(指令格式識別符值)獨一地識別向量親和指令格式,因而以向量親和指令格式的指令發生在指令流中。如此,此欄位在其不需要具有僅一般性向量親和指令格式的指令集之含意上是可選的。
基底運算欄位842-其內容辨別不同的基底運算。
暫存器索引欄位844-其內容係直接或透過位址產生來明定來源及目的地運算元的位置,無論他們是否在暫存器或在記憶體中。這些包括充分數目的位元以從PxQ(例如,32×512、16×128、32×1024、64×1024)暫存器檔案選擇N個暫存器。在當於一實施例中N可多達三個來源和一個目的地暫存器的同時,替代的實施例可支援更多或更少的來源及目的地暫存器(例如,可支援多達兩個來源其中該些來源之一者亦作動為目的地、可支援多達三個來源其中這些來源之一者亦可作動為目的地、可支援多達兩個來源和一個目的地)。
修飾符欄位846-其內容辨別以一般性向量指令格式的指令發生從未進行的該些者明定記憶體存取;亦即,在沒有記憶體存取805指令模板(846A)與記憶體存取820指令模板之間。記憶體存取運算讀取及/或寫入至記憶體階層(在一些情形中使用在暫存器中的值明定來源及/或目的地定址),同時非記憶體存取運算並未進行(例如,來源及目的地運算元為暫存器)。在當於一實施例中此欄位亦以三個不同的方式之間選擇以進行記憶體位址計算的同時,替代的實施例可支援更多、更少或不同的方式來進行記憶體位址計算。
擴充(augmentation)運算欄位850-其內容辨別除了基底(base)運算以外各種不同運算的何者要被進行。此欄位為上下文特定(context specific)。在本發明之一實施例中,此欄位被分成級別欄位868、阿爾發欄位(alpha field)852以及貝他欄位(beta field)854。擴充運算欄位850允許運算的共同群組用以在單一指令而非2、3或4指令中進行。
比例(scale)欄位860-其內容允許定比(scaling)索引(index)欄位的內容以用於記憶體位址的產生(例如,用於使用2scale * index+base之位址產生)。
位移(displacement)欄位862A-其內容被使用為部分的記憶體位址產生(例如,用於使用2scale * index+base+displacement之位址產生)。
位移因子欄位862B(注意,位移欄位862A直接 在位移因子欄位862B之上的並列指示一者或其餘者被使用)-其內容被使用為部分的位址產生,其明定要由記憶體存取之大小(N)來定比的位移因子-其中N為在記憶體存取中位元組的數目(例如,用於使用2scale * index+base+scaled displacement(定比的位移)之位址產生)。忽略冗餘低階位元,因而位移因子欄位的內容乘以記憶體運算元總大小(N)以為了產生要被使用以計算有效位址中的最終位移。N之值係基於全運算碼欄位874(之後於此說明)以及資料操控欄位854C在運行時間上由處理器硬體來決定。位移欄位862A和位移因子欄位862B在他們不被使用於沒有記憶體存取805指令模板及/或不同實施例可實行兩者中之僅一或沒有的含義上為可選的。
資料元件寬度欄位864-其內容辨別若干個資料元件寬度之何者要被使用(在一些實施例中用於所有指令;在一其它實施例中用於僅指令中之一些者)。此欄位在若支援僅一資料元件寬度及/或使用運算碼之某種態樣支援該些資料元件寬度的話則不需要的含意上是可選的。
寫入遮罩欄位870-其內容在每資料元件位置基礎上控制在目的地向量運算元中的資料元件位置是否反映基底運算和擴充運算的結果。級別A指令模板支援併入寫入掩蔽,同時級別B指令模板支援併入-及歸零-寫入掩蔽。當併入時,向量遮罩允許在目的地之任何組的元件被保護免於在執行任何運算期間更新(由基底運算和擴充運算來明定);在其它一實施例中,保留目的地之各個元件 的舊值,其中對應的遮罩位元具有0。相反的,當歸零向量遮罩允許在目的地中任何組的元件在執行任何運算期間被歸零(由基底運算和擴充運算所明定)時;在一實施例中,當對應的遮罩位元具有0的值時,目的地之元件被設定為0。此功能性的子集為控制被進行的運算之向量長度的能力(亦即,元件之張拓/跨距(span)從第一者修改到最後一者);然而,被修改成連序的元件是不必要的。因此,寫入遮罩欄位870允許部分向量運算,包括載入、儲存、算術、邏輯等。在當本發明之實施例以其中寫入遮罩欄位870的內容選擇若干包含要被使用的寫入遮罩之寫入遮罩暫存器其中一者來說明的同時(因而寫入遮罩欄位870的內容間接識別要被進行的揭蔽),替代的實施例取代或額外地允許寫入遮罩欄位870的內容直接明定要被進行的掩蔽。
立即值(immediate)欄位872-其內容允許明定立即值。此欄位在不存在於不支援立即值的一般性向量親和格式之實行中及不存在於不使用立即值的指令中的含意上是可選的。
級別欄位868-其內容在指令之不同的級別之間進行辨別。參考圖8A~B,此欄位之內容在級別A與級別B指令之間進行選擇。在圖8A~B中,圓角方形被使用來指示特定值出現在欄位中(例如,在圖8A~B中分別用於級別欄位868的級別A的868A和級別B的868B)。
級別A之指令模板
在級別A之非記憶體存取805指令模板的情形中,阿爾發欄位852被解譯為RS欄位852A,其內容辨別不同擴充運算類型的何者要被進行(例如,捨入852A.1和資料變換852A.2分別針對沒有記憶體存取、捨入類型運算810和沒有記憶體存取、資料變換類型運算815指令模板來明定),同時貝他欄位854辨別明定的類型之運算的何者要被進行。在沒有記憶體存取805指令模板中,比例欄位860、位移欄位862A以及位移比例欄位862B不存在。
沒有記憶體存取指令模板-全捨入控制類型運算
在沒有記憶體存取全捨入控制類型運算810指令模板中,貝他欄位854被解譯為捨入控制欄位854A,其內容提供靜態捨入(static rounding)。在當於本發明所述的實施例中捨入控制欄位854A包括抑制所有浮點異常(SAE;floating point exception)欄位856和捨入運算控制欄位858的同時,替代的實施例可支援可將這些概念編碼到相同欄位中或僅具有這些概念/欄位之一者或其餘者(例如,可具有僅捨入運算控制欄位858)。
SAE欄位856-其內容辨別是否要禁能異常事件報告;當SAE欄位856的內容指示禁能抑制時,給定的指令不會報告任何種類的浮點異常旗標且不會引發任何浮點異常處置器。
捨入運算控制欄位858-其內容辨別捨入運算 之群組的何者要進行(例如,捨進(Round-up)、捨去(Round-down)、向零捨入(Round-towards-zero)以及捨入至最近者(Round-to-nearest))。因此,捨入運算控制欄位858允許在每指令基礎上改變捨入模式。在其中處理器包括控制暫存器以用於明定捨入模式之本發明的一實施例中,捨入運算控制欄位850的內容置換該暫存器值。
沒有記憶體存取指令模板-資料變換類型運算
在沒有記憶體存取資料變換類型運算815指令模板中,貝他欄位854被解譯為資料變換欄位854B,其內容辨別若干個資料變換之何者要被進行(例如,沒有資料變換、拌和、廣播)。
在級別A之記憶體存取820指令模板的情形中,阿爾發欄位852被解譯為收回提示(eviction hint)欄位852B,其內容辨別收回提示之何者要被使用(在圖8A中,時序852B.1和非時序852B.2係分別對於記憶體存取、時序825指令模板和記憶體存取、非時序830指令模板來明定),同時貝他欄位854被解譯為資料操控欄位854C,其內容辨別若干個資料操控運算(亦已知為基元)之何者要被進行(例如,沒有操控、廣播;來源之上轉換(up conversion)以及目的地之下轉換(down conversion))。記憶體存取820指令模板包括比例欄位860,且可選地包括位移欄位862A或位移比例欄位862B。
向量記憶體指令以轉換支援從記憶體進行向 量載入且進行向量儲存到記憶體中。至於正規向量指令,向量記憶體指令以逐元件(element-wise)方式自記憶體轉移資料/轉移資料到記憶體,具有由選定為寫入遮罩的向量遮罩之內容所指定(dictate)之實際轉移的元件。
記憶體存取指令模板-時序
時序資料為容易夠快的被再使用的資料用以從快取/高速存取(caching)得益。然而,此為提示,且不同的處理器可以不同的方式實行它,包括整個忽略該提示。
記憶體存取指令模板-非時序
非時序資料為不太會夠快的再使用的資料以自在第1級快取中高速存取得益,且其應被給予收回之優先權。然而,此為提示,且不同的處理器可以不同的方式實行它,包括整個忽略該提示。
級別B之指令模板
在級別B之指令模板的情形中,阿爾發欄位852被解譯為寫入遮罩控制(Z)欄位852C,其內容辨別由寫入遮罩欄位870所控制的寫入掩蔽是否應為併入或歸零。
在級別B之非記憶體存取805指令模板的情形中,部分的貝他欄位854被解譯為RL欄位857A,其內容辨別不同擴充運算類型的何者要被進行(例如,捨入857A.1 和向量長度(VSIZE)857A.2分別針對沒有記憶體存取、寫入遮罩控制、部分捨入控制類型運算812指令模板和沒有記憶體存取、寫入遮罩控制、VSIZE類型運算817指令模板來明定),同時貝他欄位854之剩餘者辨別明定的類型之運算的何者要被進行。在沒有記憶體存取805指令模板中,比例欄位860、位移欄位862A以及位移比例欄位862B不存在。
在沒有記憶體存取、寫入遮罩控制、部分捨入控制類型運算810指令模板中,貝他欄位854之剩餘者被解譯為捨入運算欄位859A且禁能異常事件報告(給定的指令不會報告任何種類的浮點異常旗標且不會引發任何浮點異常處置器)。
捨入運算控制欄位859A-恰如捨入運算控制欄位858,其內容辨別捨入運算之群組的何者要進行(例如,捨進(Round-up)、捨去(Round-down)、向零捨入(Round-towards-zero)以及捨入至最近者(Round-to-nearest))。因此,捨入運算控制欄位859A允許在每指令基礎上改變捨入模式。在其中處理器包括控制暫存器以用於明定捨入模式之本發明的一實施例中,捨入運算控制欄位850的內容置換該暫存器值。
在沒有記憶體存取、寫入遮罩控制、VSIZE類型運算817指令模板中,貝他欄位854之其餘者被解譯為向量長度欄位859B,其內容辨別要對若干個資料向量長度之何者進行(例如,128、256或512位元組)。
在級別B之記憶體存取820指令模板中,部分的貝他欄位854被解譯為廣播欄位857B,其內容辨別是否要進行廣播類型資料操控運算,同時貝他欄位854之剩餘者被解譯為向量長度欄位859B。記憶體存取820指令模板包括比例欄位860,且可選地包括位移欄位862A或位移比例欄位862B。
關於一般性向量親和指令格式800,全運算碼欄位874繪示包括格式欄位840、基底運算欄位842以及資料元件寬度欄位864。在一實施例顯示其中全運算碼欄位874包括所有的這些欄位的同時,在未支援他們之所有的實施例中,全運算碼欄位874包括少於所有的這些欄位。全運算碼欄位874提供運算碼(opcode)。
擴充運算欄位850、資料元件寬度欄位864以及寫入遮罩欄位870允許這些特徵以一般性向量親和指令格式在每指令基礎上被明定。
寫入遮罩欄位與資料元件寬度欄位之結合以他們允許遮罩基於不同資料元件寬度來應用上創建類型指令(typed instruction)。
在級別A和級別B內找到的各種指令模板在不同的情況下是有益的。在本發明之一些實施例中,在處理器內不同的處理器或不同的核心可支援僅級別A、僅級別B或兩級別。舉例而言,打算用於通用計算的高效能通用亂序核心可支援僅級別B,打算主要用於圖形及/或科學(處理量)計算的核心可支援僅級別A,並且打算用於兩者 的核心可支援兩者(當然,具有自兩級別的模板和指令之某種混合但非所有模板和指令來自兩級別的核心在本發明的範圍內)。也同樣的,單處理器可包括多核心、其之所有支援相同級別或者其中不同的核心支援不同的級別。舉例而言,在具有分開的圖形及通用核心的處理器中,打算主要用於圖形及/或科學計算的圖形核心之一者可支援僅級別A,同時通用核心之一或多者可為具有打算用於僅支援級別B之通用計算的亂序執行及暫存器更名的高效能通用核心。不具有分開的圖形核心之另一處理器可包括支援級別A和級別B兩者的一、多個通用循序或亂序核心。當然,來自一級別的特徵亦可在本發明之不同實施例中於其它級別中實行。以高階語言撰寫的程式會被放(例如,即時編譯或靜態編譯)到各種不同可執行形式中,包括:1)具有僅由用於執行的目標處理器所支援的級別之指令的形式;或2)具有使用所有級別之指令的不同結合來撰寫的替代常式和具有選擇常式以基於由目前執行代碼的處理器所支援的指令來執行的控制流程碼的形式。
示範性特定向量親和指令格式
圖9A~D闡述依據本發明之實施例的示範性特定向量親和指令格式。這些顯示以其明定位置、大小、解譯和欄位之次序以及用於該些欄位之一些者的值的含意上為特定之特定向量親和指令格式900。可使用特定向量親和指令格式900來延伸x86指令集,因而欄位之一些者類似 於或相同於在現存x86指令集及其延伸(例如,AVX)中使用的該些者。此格式保持與前置編碼欄位、真實運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位以及具有延伸之現存x86指令集之立即值欄位一致。闡述了自圖9A~D之欄位所映射到的自圖8的欄位。
應了解的是,雖然為了闡述的目的,本發明之實施例參考在一般性向量親和指令格式800之上下文中的特定向量親和指令格式900來說明,但除所請求者外,本發明不限於特定向量親和指令格式900。例如,一般性向量親和指令格式800思量用於各種欄位的各種可能大小,同時特定向量親和指令格式900顯示為具有特定大小之欄位。藉由特定範例的方式,在當資料元件寬度欄位864闡述為在特定向量親和指令格式900中的一位元欄位的同時,本發明並不如此限制(亦即,一般性向量親和指令格式800思量資料元件寬度欄位864之其它大小)。
一般性向量親和指令格式800包括以在圖9A中闡述的次序列示的下列欄位。
EVEX前置(位元組0~3)902-以四位元組形式來編碼。
格式欄位840(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)為格式欄位840且其包含0×62(該獨一值使用於辨別在本發明之一實施例中的向量親和指令格式)。
第二~第四位元組(EVEX位元組1~3)包括提 供特定性能的若干個位元欄位。
REX欄位905(EVEX位元組1,位元[7-5])-由EVEX.R位元欄位(EVEX位元組1,位元[7]-R),EVEX.X位元欄位(EVEX位元組1,位元[6]-X),以及857BEX位元組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’欄位810-此為REX’欄位810之第一部分且為EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’),其被使用來編碼延伸32暫存器組之上16或下16其一者。在本發明之一實施例中,此位元連同如下所指示的其它者以位元倒置格式(bit inverted format)來儲存以自BOUND指令進行辨別(在周知的x86 32位元模式中),其真實運算碼位元組為62,但在MOD R/M欄位(於下說明)中不接受在MOD欄位中11之值,本發明之替代的實施例並不儲存此和下面以倒置格式的其它指示的位元。使用1之值來編碼較低16暫存器。換言之,R’Rrrr係藉由結合EVEX.R’、EVEX.R和來自其它欄位的其它RRR來形成。
運算碼映射欄位915(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼隱含的前導運算碼位元組(0F, 0F 38或0F 3)。
資料元件寬度欄位864(EVEX位元組2,位元[7]-W)-由記法(notation)EVEX.W來代表。使用EVEX.W來定義資料類型(32位元資料元件或64位元資料元件其一者)之粒度(granularity)(大小)。
EVEX.vvvv920(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv之角色可包括下列:1)EVEX.vvvv編碼第一來源暫存器運算元,以倒置(1的補數)形式來明定且對於2或更多來源運算元的指令是有效的;2)EVEX.vvvv編碼目的地暫存器運算元,以1的補數形式來明定以用於某種向量移位;或3)EVEX.vvvv並未編碼任何運算元,此欄位被保留且應包含1111b。因此,EVEX.vvvv欄位920編碼以倒置(1的補數)形式儲存的第一來源暫存器明定符(specifier)之4低階位元。取決於指令,使用額外不同的EVEX位元欄位來將明定符大小延伸到32個暫存器。
EVEX.U 868級別欄位(EVEX位元組2,位元[2]-U)-若EVEX.U=0,其指示級別A或EVEX.U0;若EVEX.U=1,其指示級別B或EVEX.U1。
前置編碼欄位925(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前置編碼,因而不需要該擴展。
阿爾發欄位852(EVEX位元組3,位元[7]-EH;亦已知為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制以及EVEX.N;亦以α來闡述)-如先前所述,此欄位為內容特定的。
貝他欄位854(EVEX位元組3,位元[6:4]-SSS,亦已知為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;亦以βββ來闡述)-如先前所述,此欄位為內容特定的。
REX’欄位810-此為REX’欄位之剩餘者且為EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’),其被使用來編碼延伸32暫存器組之上16或下16其一者。此位元係以位元倒置格式來儲存。使用1之值來編碼較低16暫存器。換言之,V’VVVV係藉由結合EVEX.V’、EVEX.vvvv來形成。
寫入遮罩欄位870(EVEX位元組3,位元[2:0]- kkk)-如先前所述,其內容明定在寫入遮罩暫存器中暫存器之索引。在本發明之一實施例中,特定值EVEX.kkk=000具有特別行為,其隱含沒有寫入遮罩被使用於特定指令(此可以各種方式來實行,包括使用硬連線至所有者或繞過掩蔽硬體之硬體的寫入遮罩。
真實運算碼欄位930(位元組4)亦已知為運算碼位元組。部分的運算碼在此欄位中被明定。
MOD R/M欄位940(位元組5)包括MOD欄位942,Reg欄位944以及R/M欄位946。如先前所述,MOD欄位942的內容在記憶體存取和非記憶體存取運算之間進行辨別。Reg欄位944之角色能總結為兩個情況:編碼目的地暫存器運算元或來源暫存器運算元其一者,或視為運算碼延伸且不使用來編碼任何指令運算碼。R/M欄位946之角色可包括下列:編碼參考記憶體位址的指令運算元,或者編碼目的地暫存器運算元或來源暫存器運算元其一者。
比例、索引、基底(SIB;Scale,Index,Base)位元組(位元組6)950-如先前所述,比例欄位852的內容係使用於記憶體位址產生。SIB.xxx954和SIB.bbb956-這些欄位之內容先前已參照至關於暫存器索引Xxxx和Bbbb。
位移欄位862A(位元組7~10)-當MOD欄位942包含10時,位元組7~10為位移欄位862A,並且其與舊有的32位元位移(disp32)一樣的工作且在位元組粒度上工作。
位移因子欄位862B(位元組7)-當MOD欄位942 包含01時,位元組7為位移因子欄位862B。此欄位之位置為與舊有x86指令集8位元位移(disp8)的相同的之者,其在位元組粒度上工作。由於disp8為正負號(sign)延伸,其能僅在-128和127位元組偏移之間定址;按照64位元組快取線,disp8使用能被設定至僅四個真正有用的值-128、-64、0以及64的8位元;由於常需要較大範圍;故使用disp32;然而,disp32需要4個位元組。相對於disp8和disp32,位移因子欄位862B為disp8之再詮釋(reinterpretation);當使用位移因子欄位862B時,實際位移係由位移因子欄位的內容乘以記憶體運算元存取(N)的大小來決定。此類型的位移稱為disp8*N。此降低平均指令長度(使用於位移但具有大很多的範圍之單一位元組)。這樣的壓縮位移係基於有效位移為記憶體存取之粒度的倍數的假設,因而位址偏移之冗餘低階位元並不需要被編碼。換言之,位移因子欄位862B取代舊有x86指令集8位元位移。因此,位移因子欄位862B與x86指令集8位元位移相同方式來編碼(所以在ModRM/SIB編碼規則中沒有改變),僅具有例外的是disp8對disp8*N是超載的。換言之,在編碼規則或編碼長度中沒有改變,但僅在藉由硬體的位移值之解譯中有改變(其需要藉由記憶體運算元之大小來定比位移以獲得位元組方面的位址偏移)。立即值欄位872如先前所述的運算。
全運算碼欄位
圖9B為依據本發明之一實施例闡述組成全運 算碼欄位874的特定向量親和指令格式900之欄位的方塊圖。具體而言,全運算碼欄位874包括格式欄位840、基底運算欄位842以及資料元件寬度(W)欄位864。基低運算欄位842包括前置編碼欄位925、運算碼映射欄位915以及真實運算碼欄位930。
暫存器索引欄位
圖9C為依據本發明之一實施例闡述組成暫存器索引欄位844的特定向量親和指令格式900之欄位的方塊圖。具體而言,暫存器索引欄位844包括REX欄位905、REX’欄位910、MODR/M.reg欄位944、MODR/M.r/m欄位946、VVVV欄位920、xxx欄位954以及bbb欄位956。
擴充運算欄位
圖9D為依據本發明之一實施例闡述組成擴充運算欄位850的特定向量親和指令格式900之欄位的方塊圖。當級別(U)欄位868包含0時,其意指EVEX.U0(級別A868A);當其包含1時,其意指EVEX.U1(級別B 868B)。當U=0且MOD欄位942包含11(意指沒有記憶體存取運算)時,阿爾發欄位852(EVEX位元組3,位元[7]-EH)被解譯為rs欄位852A。當rs欄位852A包含1(捨入852A.1)時,貝他欄位854(EVEX位元組3,位元[6:4]-SSS)被解譯為捨入控制欄位854A。捨入控制欄位854A包括一位元SAE欄位856和兩位元捨入運算欄位858。當rs欄位852A包含0(資料變換 852A.2)時,貝他欄位854(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料變換欄位854B。當U=0且MOD欄位942包含00、01或10(意指記憶體存取運算)時,阿爾發欄位852(EVEX位元組3,位元[7]-EH)被解譯為收回提示(EH)欄位852B且貝他欄位854(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料操控欄位854C。
當U=1時,阿爾發欄位852(EVEX位元組3,位元[7]-EH)被解譯為寫入遮罩控制(Z)欄位852C。當U=1且MOD欄位942包含11(意指沒有記憶體存取運算)時,部分的貝他欄位854(EVEX位元組3,位元[4]-S0)被解譯為RL欄位857A;當其包含1(捨入857A.1)時,貝他欄位854之其餘者(EVEX位元組3,位元[6-5]-S2-1)被解譯為捨入運算欄位859A,同時當RL欄位857A包含0(VSIZE 857.A2)貝他欄位854之其餘者(EVEX位元組3,位元[6-5]-S2-1)被解譯為向量長度欄位859B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位942包含00、01或10(意指記憶體存取運算)時,貝他欄位854(EVEX位元組3,位元[6:4]-SSS)被解譯為向量長度欄位859B(EVEX位元組3,位元[6-5]-L1-0)以及廣播欄位857B(EVEX位元組3,位元[4]-B)。
示範性暫存器架構
圖10為依據本發明之一實施例的暫存器架構1000之方塊圖。在闡述的實施例中,有32個向量暫存器1010,其為512位元寬;這些暫存器參考為zmm0到 zmm31。低16 zmm暫存器之低階256位元覆蓋在暫存器ymm0~16上。低16 zmm暫存器之低階128位元(ymm暫存器之低階128位元)覆蓋在暫存器xmm0~15上。如下表中闡述的,特定向量親和指令格式900在這些覆蓋的暫存器檔案上運算。
換言之,向量長度欄位859B在最大長度和一或多個其它較短長度之間選擇,其中各個這類的長度為先前長度的一半長度;以及沒有向量長度欄位859B的指令模板在最大向量長度上運算。進一步,在一實施例中,特定向量親和指令格式900之級別B指令模板在緊縮或純量單/雙精度浮點資料和緊縮或純量整數資料上運算。純量運算為在zmm/ymm/xmm暫存器中最低階資料元件位置上進行的運算;取決於實施例,較高階資料元件位置被保留為與他們在指令前相同的或被歸零其一者。
寫入遮罩暫存器1015-在闡述的實施例中,有 8個寫入遮罩暫存器(k0到k7),各者在大小上為64位元。在選替的實施例中,寫入遮罩暫存器1015在大小上為16位元。如先前所述,在本發明之一實施例中,向量遮罩暫存器k0不能被使用為寫入遮罩;當會正常指示k0的編碼被使用於寫入遮罩時,其選擇0xFFFF之硬連線的寫入遮罩,有效地禁能對該指令的寫入掩蔽。
通用暫存器1025-在闡述的實施例中,有十六個64位元通用暫存器,其連同現存x86定址模式來使用用以定址記憶體運算元。這些暫存器參考以名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15。
純量浮點堆疊暫存器檔案(x87堆疊)1045,在其上別名以MMX緊縮整數平面暫存器檔案1050-在闡述的實施例中,x87堆疊為8元件堆疊,用以使用x87指令集延伸在32/64/80位元浮點資料上進行純量浮點運算;同時MMX暫存器被使用來在64位元緊縮整數資料上進行運算,以及用以對於在MMX與XMM暫存器之間進行的一些運算來持定運算元。
本發明之替代的實施例可使用較寬或較窄的暫存器。此外,本發明之替代的實施例可使用更多、更少或不同的暫存器檔案及暫存器。
示範性核心架構、處理器以及電腦架構
處理器核心可以不同的方式、為了不同的目 的且在不同的處理器中實行。舉例而言,這類核心的實行可包括:1)打算用於通用計算的通用循序核心;2)打算用於通用計算的高效能通用亂序核心;3)主要打算用於圖形及/或科學(處理量)計算的專用(special purpose)核心。不同處理器之實行包括:1)包括打算用於通用計算的一或多個通用循序核心及/或打算用於通用計算的一或多個通用亂序核心的CPU;以及2)包括主要打算用於圖形及/或科學(處理量)的一或多個專用核心的共處理器(coprocessor)。這類不同的處理器導致不同電腦系統架構,其可包括:1)在與CPU分開的晶片上的共處理器;2)在與CPU相同的封裝中分開的晶粒上的共處理器;3)在與CPU相同的晶粒上的共處理器(在其情形中,這樣的共處理器有時稱為專用邏輯,像是積體圖形及/或科學(處理量)邏輯或專用核心);以及4)可在相同晶粒上包括所述的CPU(有時稱為應用核心或應用處理器)、上述共處理器以及額外的功能特性的晶片上系統。接著說明示範性核心架構,並有其後說明示範性處理器及電腦架構。
示範性核心架構 循序及亂序核心方塊圖
圖11A為依據本發明之實施例闡述示範性循序管線和示範性暫存器更名、亂序派發/執行管線兩者的方塊圖。圖11B為依據本發明之實施例闡述用以被包括在處理器中的示範性循序架構核心和示範性暫存器更名、亂序 派發/執行架構核心兩者的方塊圖。在圖11A~B中的實心線框闡述序順管線和循序核心,同時可選的添加虛線框闡述暫存器更名、亂序派發/執行管線及核心。有鑒於循序態樣為亂序態樣的子集,將說明亂序態樣。
在圖11A中,處理器管線1100包括提取級1102、長度解碼級1104、解碼級1106、分配級1108、更名級1110、排程(亦已知為分派或派發)級1112、暫存器讀取/記憶體讀取級1114、執行級1116、寫回/記憶體寫入級1118、執行處置級1122以及提交級1124。
圖11B繪示處理器核心1190,包括耦接至執行引擎單元1150的前端單元1130且兩者皆耦接至記憶體單元1170。核心1190可為精簡指令集計算(RISC;reduced instruction set computing)核心、複雜指令集計算(CISC;complex instruction set computing)核心、超長指令字(VLIW;very long instruction word)核心或混合或替代的核心類型。如又另一選項,核心1190可為專用核心、例如像是網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理器單元(GPGPU;general purpose computing graphics processing unit)核心、圖形核心或類似者。
前端單元1130包括耦接至指令快取單元1134的分支預測單元1132,其耦接至轉譯後備緩衝器(TLB;translation lookaside buffer)1136,該轉譯後備緩衝器1136耦接至指令提取單元1138,該指令提取單元1138耦接至解碼單元1140。解碼單元1140(或解碼器)可解碼指令,並且 產生為輸出一或多個微運算、微碼進入點(micro-code entry point)、微指令、其它指令或其它控制信號,其自原始指令解碼、或其另以反映原始指令或衍生自原始指令。解碼單元1140可使用各種不同的機制來實行。合適的機制之範例包括(但不限於)查找表、硬體實行、可編程邏輯陣列(PLA;programmable logic array)、微碼唯讀記憶體(ROM;read only memory)等。在一實施例中,核心1190包括微碼ROM或儲存用於某種巨集指令之微碼的其它媒體(例如,在解碼單元1140中或另以在前端單元1130內)。解碼單元1140耦接至在執行引擎單元1150中的更名/分配器單元1152。
執行引擎單元1150包括耦接至引退單元1154和成組的一或多個排程器單元1156的更名/分配器單元1152。排程器單元1156代表任何數目的不同排程器,包括保留站(reservations station)、中央指令窗等。排程器單元1156耦接至實體暫存器檔案單元1158。實體暫存器檔案單元1158之各者代表一或多個實體暫存器檔案、其之不同者儲存一或多個不同的資料類型,像是純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如作為要被執行之下一指令之位址的指令指標)等。在一實施例中,實體暫存器檔案單元1158包含向量暫存器檔案、寫入遮罩暫存器單元以及純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮罩暫存器以及通用暫存器。實體暫存器檔案單元1158由引退單元1154所重疊, 用以闡述暫存器更名及亂序執行可以其實行的各種方式(例如,使用重排序緩衝器以及引退暫存器檔案;使用未來檔案、歷史緩衝器以及引退暫存器檔案;使用暫存器映射以及暫存器之池等)。引退單元1154和實體暫存器檔案單元1158耦接至執行叢集1160。執行叢集1160包括成組的一或多個執行單元1162和成組的一或多個記憶體存取單元1164。執行單元1162可對各種類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)進行各種運算(例如,移位、加法、減法、乘法)。在當一些實施例可包括專屬於特定功能或成組的功能的若干個執行單元的同時,其它實施例可包括僅一執行單元或多個執行單元,其所有者進行全部的功能。排程器單元1156、實體暫存器檔案單元1158以及執行叢集1160係顯示為可能為複數個,因為某些實施例創建分開的管線以用於特定類型的資料/運算(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線及/或記憶體存取管線,其各者具有他們自己的排程器單元、實體暫存器檔案單元及/或執行叢集-並且在分開的記憶體存取管線的情形中,實行某些實施例,其中僅此管線之執行叢集具有記憶體存取單元1164)。亦應了解的是,在當使用分開的管線下,這些管線之一或多者可為亂序派發/執行且其餘者為循序的。
該組記憶體存取單元1164耦接至記憶體單元1170,其包括資料TLB單元1172,該資料TLB單元1172耦接至資料快取單元1174,該資料快取單元1174耦接至2級 (L2)快取單元1176。在一示範性實施例中,記憶體存取單元1164可包括載入單元、儲存位址單元以及儲存資料單元,其各者耦接至在記憶體單元1170中的資料TLB單元1172。指令快取單元1134更耦接至在記憶體單元1170中的2級(L2)快取單元1176。L2快取單元1176耦接至快取之一或多個其它層級且最終耦接至主記憶體。
藉由範例的方式,示範性暫存器更名、亂序派發/執行核心架構可實行管線1100如下:1)指令提取1138進行提取和長度解碼級1102及1104;2)解碼單元1140進行解碼級1106;3)更名/分配器單元1152進行分配級1108和更名級1110;4)排程器單元1156進行排程級1112;5)實體暫存器檔案單元1158和記憶體單元1170進行暫存器讀取/記憶體讀取級1114;執行叢集1160進行執行級1116;6)記憶體單元1170和實體暫存器檔案單元1158進行寫回/記憶體寫入級1118;7)各種單元可被包含在異常處置級1122;以及8)引退單元1154和實體暫存器檔案單元1158進行提交級1124。
核心1190可支援一或多個指令集(例如,x86指令集(具有一些延伸,其已被添加以較新的版本);加州桑尼維爾的MIPS技術之MIPS指令集;加州桑尼維爾的ARM控股之ARM指令集(具有可選額外的延伸,像是NEON)),包括於此說明的指令。在一實施例中,核心1190包括用以支援緊縮資料指令集延伸(例如,AVX1、AVX2)的邏輯,從而允許由許多多媒體應用所使用的運算 以使用緊縮資料來進行。
應了解,核心可支援多緒執行(multithreading)(執行二或多個平行組的運算或執行緒),並且可以各式個樣的方式來如此做,包括時間分片多緒執行,同時多緒執行(其中單一實體核心提供邏輯核心以用於實體核心同時多緒執行的執行緒之各者),或其結合(例如,時間分片提取及解碼和其之後同時多緒執行,像是在英特爾超執行緒技術(Intel® Hyperthreading technology)中)。
在當暫存器更名在亂序執行之內文中說明的同時,應了解暫存器更名可在順序架構中使用。在當闡述的處理器之實施例亦包括分開的指令及資料快取單元1134/1174和共用的L2快取單元1176的同時,替代的實施例可具有用於指令及資料兩者的單一內部快取,例如像是1級(L1)內部快取或多個層級的內部快取。在一些實施例中,系統可包括內部快取和於核心及/或處理器外部的外部快取之結合。或者,快取之所有者可於核心及/或處理器外部。
特定示範性循序核心架構
圖12A~B闡述更特定的示範性循序核心架構之方塊圖,其核心會為在晶片中幾個邏輯方塊之其中一者(包括相同類型及/或不同類型的其它核心)。取決於應用,邏輯方塊透過具有一些固定功能邏輯、記憶體I/O介面及其它需要的I/O邏輯的高頻寬互連網路(例如,環狀網路)來 通訊。
圖12A為依據本發明之實施例的單一處理器核心連同其對晶粒上互連網路1202的連接和連同其2級(L2)快取1204之區域子集。在一實施例中,指令解碼器1200支援具有緊縮資料指令集延伸的x86指令集。L1快取1206允許快取記憶體到純量及向量單元中的低延遲存取。在當於一實施例中(為了簡化設計),純量單元1208及向量單元1210使用分開的暫存器組(分別是純量暫存器1212和向量暫存器1214)且在他們之間傳輸的資料被寫入至記憶體以及接著在1級(L1)快取1206中自其讀回的同時,本發明之替代的實施例可使用不同的方法(例如,使用單一暫存器組或包括允許資料在兩個暫存器檔案間轉移而不被寫入及讀回的通訊路徑)。
L2快取1204之區域子集為部分的全域L2快取,其被分成分開的區域子集,每處理器核心一個。各個處理器核心具有到其自己的L2快取1204之區域子集的直接存取路徑。由處理器核心讀取的資料被儲存在其L2快取子集1204中且能被快速地存取,與其它處理器核心存取他們自己的區域L2快取子集併行。由處理器核心寫入的資料被儲存在其自己的L2快取子集1204且若需要的話,從其它子集清除(flush)。環狀網路確保共用的資料之一致性(coherency)。環狀網路為雙向以允許像是處理器核心、L2快取及其它邏輯方塊的代理器以與在晶片內的彼此通訊。各個環狀資料路徑為每方向1012位元寬。
圖12B為依據本發明之實施例在圖12A中之部分的處理器核心之展開圖。圖12B包括L1資料快取1206A、部分的L1快取1204以及關於向量單元1210和向量暫存器1214的更多細節。具體而言,向量單元1210為16寬的向量處理單元(VPU;vector processing unit)(請見16寬ALU 1228),其執行整數、單精度浮點以及雙精度浮點指令之一或多者。VPU支援以拌和單元1220拌和暫存器輸入、以數值轉換單元1222A~B數值轉換以及在記憶體輸入上以複製單元1224複製。寫入遮罩暫存器1226允許判定所導致之向量寫入。
圖13為依據本發明之實施例可具有多於一個核心、可具有積體記憶體控制器以及可具有積體圖形的處理器1300之方塊圖。在圖13中的實線框闡述具有單一核心1302A、系統代理器1310、成組的一或多個匯流排控制器單元1316的處理器1300,同時可選添加的虛線框闡述具有多個核心1302A~N、在系統代理單元1310中成組的一或多個積體記憶體控制器單元1314以及專用邏輯1308的替代的處理器1300。
因此,處理器1300之不同的實行可包括:1)具有作為積體圖形及/或科學(處理量)邏輯(其可包括一或多個核心)的專用邏輯1308的CPU,以及作為一或多個通用核心(例如,通用循序核心、通用亂序核心、兩者的結合)的核心1302A~N;2)具有為打算主要用於圖形及/或科學(處理量)的大數目的專用核心之核心1302A~N的共處理 器;以及3)具有為大數目的通用順序核心的核心1302A~N的共處理器。因此,處理器1300可為通用處理器、共處理器或專用處理器,例如像是網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高處理量許多積體核心(MIC;many integrated core)共處理器(包括30或更多核心)、嵌入式處理器或類似者。處理器可在一或多個晶片上實行。處理器1300可使用若干個處理技術之任一者(例如像是,BiCMOS、CMOS或NMOS)而為基板之部分及/或在一或多個基板上實行。
記憶體階層包括在核心內快取1304A~N之一或多個層級、一組或一或多個共用快取單元1306以及耦接至該組積體記憶體控制器單元1314的外部記憶體(未繪示)。該組共用快取單元1306可包括一或多個中級快取,像是2級(L2)、3級(L3)、4級(L4)或快取的其它層級、最終級快取(LLC;last level cache)及/或其結合。在於一實施例中基於環狀的互連單元1312將積體圖形邏輯1308、該組共用快取單元1306以及系統代理單元1310/積體記憶體控制器1314互連的同時,替代的實施例可使用任何數目已知的技術以用於互連這類單元。在一實施例中,一致性係在一或多個快取單元1306與核心1302-A~N之間維持。
在一些實施例中,核心1302A~N之一或多者能夠多緒執行。系統代理器1310包括協調及運算核心1302A~N的該些組件。系統代理單元1310可例如包括功率控制單元(PCU;power control unit)和顯示單元。PCU可 為或包括需要用於調節核心1302A~N及積體圖形邏輯1308之功率狀態的邏輯和組件。顯示單元係用於驅動一或多個外部連接的顯示器。
核心1302A~N按照架構指令集而言可為同質的或異質的,亦即,核心1302A~N之二或多者可能夠執行相同指令集,同時其它者可能夠執行僅該指令集的子集或不同指令集。
示範性電腦架構
圖14~16為示範性電腦架構之方塊圖。在膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程站(engineering workstation)、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、蜂巢式電話、可攜媒體播放器、手持裝置以及各種其它電子裝置領域中已知的其它系統設計及組態亦為合適的。一般而言,能夠包含於此揭示的處理器及/或其它執行邏輯龐大的各種系統或電子裝置一般為合適的。
現請參照圖14,依據本發明之一實施例繪示了系統1400的方塊圖。系統1400可包括一或多個處理器1410、1415,其耦接至控制器集線器1420。在一實施例中,控制器集線器1420包括圖形記憶體控制器集線器(GMCH;graphics memory controller hub)1490和輸入/輸出集線器(IOH;Input/Output Hub)1450(其可在分開的晶片 上);GMCH 1490包括記憶體1440和共處理器1445所對其耦接的記憶體及圖形控制器;IOH 1450將輸入/輸出(I/O)裝置1460耦接至GMCH 1490。或者,記憶體及圖形控制器之一或兩者被整合在處理器內(如於此所述的),記憶體1440及共處理器1445直接耦接至處理器1410,且控制器集線器1420與IOH 1450在單一晶片中。
額外的處理器1415之可選的性質係以虛線在圖14中標誌。各個處理器1410、1415可包括於此說明的處理核心之一或多者且可為處理器1300之某種版本。
記憶體1440可例如為動態隨機存取記憶體(DRAM;dynamic random access memory)、相變記憶體(PCM;phase change memory)或兩者的結合。對於至少一實施例,控制器集線器1420經由多點下傳匯流排(multi-drop bus)與處理器1410、1415通訊,該多點下傳匯流排諸如前端匯流排(FSB;frontside bus)、像是快速通道互連(QPI;QuickPath Interconnect)的點對點介面或類似的連接1495。
在一實施例中,共處理器1445為專用處理器,例如像是高處理量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似者。在一實施例中,控制器集線器1420可包括積體圖形加速器。
就包括架構的、微架構的、熱、功率消耗特性及類似者之指標的度量譜而言,在實體資源1410、1415 之間能有各種差異。
在一實施例中,處理器1410執行控制一般類型之資料處理運算的指令。在指令內嵌入的可為共處理器指令。處理器1410辨識這些共處理器指令為應由附接的共處理器1445執行之類型的。據此,處理器1410在共處理器匯流排或其它互連上派發這些共處理器指令(或代表共處理器指令的控制信號)給共處理器1445。共處理器1445接受且執行接收的共處理器指令。
現請參照圖15,依據本發明之實施例繪示了第一更特定示範性系統1500的方塊圖。如圖15所繪示,多處理器系統1500為點對點互連系統且包括經由點對點互連1550耦接的第一處理器1570和第二處理器1580。處理器1570及1580之各者可為處理器1300之某種版本。在本發明之一實施例中,處理器1570及1580分別為處理器1410及1415,同時共處理器1538為共處理器1445。在另一實施例中,處理器1570及1580分別為處理器1410、共處理器1445。
處理器1570及1580繪示分別包括積體記憶體控制器(IMC;integrated memory controller)單元1572及1582。處理器1570亦包括作為其匯流排控制器單元之部分,點對點(P-P)介面1576及1578;類似地,第二處理器1580包括P-P介面1586及1588。處理器1570、1580可使用P-P介面電路1578、1588經由點對點(P-P)介面1550交換資訊。如在圖15中所繪示,IMC 1572及1582將處理器耦接至 分別的記憶體,即記憶體1532和記憶體1534,其可為區域地附接至分別處理器的主記憶體之部分。
處理器1570、1580各者可使用點對點介面電路1576、1594、1586、1598經由個別P-P介面1552、1554來與晶片組1590交換資訊。晶片組1590可經由高效能介面1592可選地與共處理器1538交換資訊。在一實施例中,共處理器1538為專用處理器,例如像是高處理量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似者。
共用快取(未繪示)可被包括在處理器其一者中或在兩處理器外側,仍經由P-P互連與處理器連接,使得若處理器被置於低功率模式中時,其一或兩處理器的區域快取資訊可儲存在共用快取中。
晶片組1590可經由介面1596耦接至第一匯流排1516。在一實施例中,第一匯流排1516可為周邊組件互連(PCI;Peripheral Component Interconnect)匯流排或像是快速PCI(PCI Express)或另一個第三代I/O互連匯流排的匯流排,雖然本發明的範圍不如此限制。
如在圖15中所繪示,各種I/O裝置1514可耦接至第一匯流排1516,連同將第一匯流排1516耦接至第二匯流排1520的匯流排橋1518。在一實施例中,一或多個額外的處理器1515,像是共處理器、高處理量MIC處理器、GPGPU的加速器(例如像是圖形加速器或數位信號處理(DSP單元)、場可編程閘陣列或任何其它處理器係耦接至 第一匯流排1516。在一實施例中,第二匯流排1520可為低腳位數(LPC;low pin count)匯流排。在一實施例中,各種裝置可耦接至第二匯流排1520,例如包括鍵盤及/或滑鼠1522、通訊裝置1527以及像是碟驅動或其它大量儲存裝置的儲存單元1528,其可包括指令/碼及資料1530。進一步,音訊I/O 1524可耦接至第二匯流排1520。要注意的是,其它架構為可能的。例如,取代圖15的點對點架構的是,系統可實行多點下傳匯流排或其它這樣的架構。
現請參照圖16,依據本發明之實施例繪示了第二更特定示範性系統1600的方塊圖。在圖15及16中相似的元件承接相似的參考數字,並且圖15的某些態樣已自圖16省略,以為了避免模糊圖16的其它態樣。
圖16闡述處理器1570、1580可分別包括積體記憶體及I/O控制邏輯(「CL」)1572及1582。因此,CL 1572、1582包括積體記憶體控制器單元且包括I/O控制邏輯。圖16不僅闡述記憶體1532、1534耦接至CL 1572、1582,亦闡述I/O裝置1614亦耦接至控制器邏輯1572、1582。舊有的I/O裝置1615耦接至晶片組1590。
現請參照圖16,依據本發明之實施例繪示了SoC 1600的方塊圖。在圖13中類似的元件承接相似的參考數字。也同樣的,虛線框為在更進階SoC上之可選的特徵。在圖16中,互連單元1602耦接至:應用處理器1610,其包括成組的一或多個核心1302A~N、快取1304A~N以及共用快取單元1306;系統代理單元1310;匯流排控制器 單元1316;積體記憶體控制器單元1314;成組或一或多個共處理器1620,其可包括積體圖形邏輯、影像處理器、音訊處理器及視訊處理器;靜態專機存取記憶體(SRAM;static random access memory)單元1630;直接記憶體存取(DMA;direct memory access)單元1632;以及用於耦接至一或多個外部顯示器的顯示單元1640。在一實施例中,共處理器1620包括專用處理器,例如像是網路或通訊處理器、壓縮引擎、GPGPU、高處理量MIC處理器、嵌入式處理器或類似者。
於此揭示的機制之實施例可以硬體、軟體、韌體或以這類實行方法之結合來實行。本發明之實施例可實行為在可編程系統上執行的電腦程式或程式碼,該可編程系統包含至少一處理器、儲存系統(包括揮發性和非揮發性記憶體及/或儲存元件)、至少一輸入裝置以及至少一輸出裝置。
程式碼,像是在圖15中闡述的碼1530,可應用到輸入指令以進行於此說明的功能且產生輸出資訊。輸出資訊可以已知的方式應用到一或多個輸出裝置。為了此應用的目的,處理系統包括具有處理器的任何系統,該處理器例如像是數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)或微處理器。
程式碼可以高階程序或物件導向程式語言來實行以與處理系統通訊。若需要,則程式碼亦可以組合或機器語言來實行。事實上,於此所述的機制並不限於任何 特定程式語言的範圍。在任何情形中,該語言可為編譯語言或解譯語言。
至少一實施例的一或多個態樣可由儲存在機器可讀媒體上的代表性指令實行,其代表在處理器內的各種邏輯,其當由機器讀取時引起機器製造用以進行於此說明的技術之邏輯。這類代表,已知為「IP核心」,可儲存在有形、機器可讀媒體上且被提供到各種消費者或製造設施以載入到實際製造邏輯或處理器的製造機器。
這類機器可讀儲存媒體可包括(沒有限定)由機器或裝置製造或形成的物件之非暫態、有形配置,包括像是硬碟的儲存媒體,任何其它類型的碟片包括軟碟、光碟、光碟唯讀記憶體(CD-ROM;compact disk read-only memory)、可複寫光碟(CD-RW;compact disk rewritable)以及磁光碟,該配置包括半導體裝置,像是唯讀記憶體(ROM;read-only memory)、隨機存取記憶體(RAM),隨機存取記憶體像是動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可編程唯讀記憶體(EPROM)、快閃記憶體、電可抹除可編程唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光卡或合適於儲存電子指令的任何其它類型的媒體。
據此,本發明之實施例亦包括非暫態、有形的機器可讀媒體,其包含指令或包含設計資料,像是硬體描述語言(HDL;Hardware Description Language),其界定於此說明的結構、電路、設備、處理器及/或系統特徵。 這類的實施例亦可稱為程式產品。
仿真(包括二進位轉譯、碼變形等)
在一些情形中,指令轉換器可被使用來將指令從來源指令集轉換到目標指令集。例如,指令轉換器可轉譯(例如,使用二進位轉譯、包括動態編譯的動態轉譯)、變形、仿真或另以轉換指令到一或多個其它指令,用以由核心來處理。指令轉換器可以軟體、硬體、韌體或其結合來實行。指令轉換器可在處理器上、處理器外或部分在處理器上且部分在處理器外。
圖17為依據本發明之實施例對比用以將在來源指令集中的二進位指令轉換成在目標指令集中的二進位指令的軟體指令轉換器的使用之方塊圖。雖然指令轉換器可替代地以軟體、韌體、硬體或其各種結合來實行,在闡述的實施例中,指令轉換器為軟體指令轉換器。圖17繪示了在高階語言1702中的程式可使用x86編譯器1704來編譯,用以產生可由具有至少一x86指令集核心1716的處理器所原生地執行的x86二進位碼1706。具有至少一x86指令集核心1716的處理器代表能進行與具有至少一x86指令集核心的英特爾處理器實質相同功能的處理器,其係藉由相同地執行或另以處理(1)英特爾x86指令集核心之指令集的相當部分或(2)針對在具有至少一x86指令集核心的英特爾處理器上運行的應用或其它軟體之目標碼(object code)版本,用以達成與具有至少一x86指令集核心的英特爾處理 器實質相同的結果。該x86編譯器1704代表可操作以產生x86二進位碼1706(例如,目標碼)的編譯器,其在有或沒有聯結處理下能在具有至少一x86指令集核心1716的處理器上執行。同樣的,圖17繪示在高階語言1702中的程式可使用替代的指令集編譯器1708來編譯,以產生可由不具有至少一x86指令集核心1714的處理器原生地執行之替代的指令集二進位碼1710(例如,具有執行加州桑尼維爾之MIPS科技之MIPS指令集及/或執行加州桑尼維爾之ARM控股之ARM指令集的核心的處理器)。指令轉換器1712係用以將x86二進位碼1706轉換成可由不具有x86指令集核心1714的處理器原生地執行的碼。此轉換的碼並不傾向於與替代的指令集二進位碼1710相同,因為能夠進行此的指令轉換器是難以製造的;然而,轉換的碼將完成一般運算且由來自替代的指令集的指令組成。因此,指令轉換器1712代表軟體、韌體、硬體或其結合,而透過仿真、模擬或任何其它處理允許不具有x86指令集處理器或核心的處理器或其它電子裝置執行x86二進位碼1706。

Claims (20)

  1. 一種用於跨步載入的設備,包含:解碼器電路,用以解碼指令,其中該指令用以包括至少用於運算碼的欄位、用於識別至少二序連緊縮資料來源運算元的欄位、用於識別緊縮資料目的地運算元的欄位及用以儲存立即值的欄位;以及執行電路,用以依據該運算碼執行該解碼的指令以使用跨步從該至少二序連緊縮資料來源運算元載入緊縮資料元件,並且將該跨步載入儲存到從該緊縮資料目的地運算元的定義位置開始的該緊縮資料目的地運算元中,該定義位置部分地從該立即值之多個位元來決定。
  2. 如申請專利範圍第1項的設備,其中該緊縮資料來源運算元為序連的。
  3. 如申請專利範圍第2項的設備,其中該定義位置係由該立即值提供的第一值、在該緊縮資料來源運算元之各者中緊縮資料元件的數目、該立即值提供的第二值作為偏移、該緊縮資料來源運算元的數目以及從該立即值決定的該跨步來決定。
  4. 如申請專利範圍第3項的設備,其中該跨步為自該立即值加1的值。
  5. 如申請專利範圍第3項的設備,其中該定義位置為該捨入乘以在該緊縮資料來源運算元之各者中的該緊縮資料元件之數目乘以該緊縮資料來源運算元之數目加偏移,其中將此值除以該跨步。
  6. 如申請專利範圍第1項的設備,其中該指令用以包括用於寫入遮罩運算元的欄位。
  7. 如申請專利範圍第6項的設備,其中該執行電路用以基於該寫入遮罩運算元之值儲存該跨步載入之結果。
  8. 一種用於跨步載入的方法,包含:解碼指令,其中該指令用以包括至少用於運算碼的欄位、用於識別至少二緊序連縮資料來源運算元的欄位、用於識別緊縮資料目的地運算元的欄位及用以儲存立即值的欄位;以及依據該運算碼執行該解碼的指令以使用跨步從該至少二序連緊縮資料來源運算元載入緊縮資料元件,並且將該跨步載入儲存到從該緊縮資料目的地運算元的定義位置開始的該緊縮資料目的地運算元中,該定義位置部分地從該立即值之多個位元來決定。
  9. 如申請專利範圍第8項的方法,其中該緊縮資料來源 運算元為序連的。
  10. 如申請專利範圍第9項的方法,其中該定義位置係由該立即值提供的第一值、在該緊縮資料來源運算元之各者中緊縮資料元件的數目、該立即值提供的第二值作為偏移、該緊縮資料來源運算元之數目以及從該立即值決定的該跨步來決定。
  11. 如申請專利範圍第9項的方法,其中該跨步為自該立即值加1的值。
  12. 如申請專利範圍第9項的方法,其中該定義位置為該捨入乘以在該緊縮資料來源運算元之各者中的該緊縮資料元件之數目乘以該緊縮資料來源運算元之數目加偏移,其中將此值除以該跨步。
  13. 如申請專利範圍第8項的方法,其中該指令用以包括用於寫入遮罩運算元的欄位。
  14. 如申請專利範圍第13項的方法,其中該儲存係基於該寫入遮罩運算元之值。
  15. 一種儲存指令的非暫態機器可讀媒體,其當執行時用以引起處理器進行一方法,該方法包含: 解碼指令,其中該指令用以包括至少用於運算碼的欄位、用於識別至少二序連緊縮資料來源運算元的欄位、用於識別緊縮資料目的地運算元的欄位及用以儲存立即值的欄位;以及依據該運算碼執行該解碼的指令以使用跨步從該至少二序連緊縮資料來源運算元載入緊縮資料元件,並且將該跨步載入儲存到從該緊縮資料目的地運算元的定義位置開始的該緊縮資料目的地運算元中,該定義位置部分地從該立即值之多個位元來決定。
  16. 如申請專利範圍第15項的非暫態機器可讀媒體,其中該緊縮資料來源運算元為序連的。
  17. 如申請專利範圍第16項的非暫態機器可讀媒體,其中該定義位置係由該立即值提供的第一值、在該緊縮資料來源運算元之各者中緊縮資料元件的數目、該立即值提供的第二值作為偏移、該緊縮資料來源運算元之數目以及從該立即值決定的該跨步來決定。
  18. 如申請專利範圍第16項的非暫態機器可讀媒體,其中該跨步為自該立即值加1的值。
  19. 如申請專利範圍第16項的非暫態機器可讀媒體,其中該定義位置為該捨入乘以在該緊縮資料來源運算元之各者 中的該緊縮資料元件之數目乘以該緊縮資料來源運算元之數目加偏移,其中將此值除以該跨步。
  20. 如申請專利範圍第15項的非暫態機器可讀媒體,其中該指令用以包括用於寫入遮罩運算元欄位且該儲存係基於該寫入遮罩運算元的值。
TW106118135A 2016-07-02 2017-06-01 用於跨步載入的系統、設備及方法 TWI760341B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/201,391 2016-07-02
US15/201,391 US10282204B2 (en) 2016-07-02 2016-07-02 Systems, apparatuses, and methods for strided load

Publications (2)

Publication Number Publication Date
TW201810029A TW201810029A (zh) 2018-03-16
TWI760341B true TWI760341B (zh) 2022-04-11

Family

ID=60806213

Family Applications (1)

Application Number Title Priority Date Filing Date
TW106118135A TWI760341B (zh) 2016-07-02 2017-06-01 用於跨步載入的系統、設備及方法

Country Status (5)

Country Link
US (1) US10282204B2 (zh)
CN (1) CN109313553B (zh)
DE (1) DE112017003347T5 (zh)
TW (1) TWI760341B (zh)
WO (1) WO2018009319A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI819683B (zh) * 2022-06-22 2023-10-21 晶心科技股份有限公司 實現向量跨步記憶體存取的處理器、操作方法與載存裝置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11803377B2 (en) * 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
EP4009183A1 (en) 2018-10-18 2022-06-08 Shanghai Cambricon Information Technology Co., Ltd Network-on-chip data processing method and device
US11687341B2 (en) * 2019-08-29 2023-06-27 Intel Corporation Multi-variate strided read operations for accessing matrix operands
CN114205415B (zh) * 2020-09-17 2024-08-23 深圳市中兴微电子技术有限公司 报文修改方法、装置、计算机设备、介质
CN114546488B (zh) * 2022-04-25 2022-07-29 超验信息科技(长沙)有限公司 一种向量跨步指令的实现方法、装置、设备及存储介质
CN116909755B (zh) * 2023-09-13 2023-12-22 北京开源芯片研究院 一种访存方法、处理器、电子设备及可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5940876A (en) * 1997-04-02 1999-08-17 Advanced Micro Devices, Inc. Stride instruction for fetching data separated by a stride amount
US20130212354A1 (en) * 2009-09-20 2013-08-15 Tibet MIMAR Method for efficient data array sorting in a programmable processor
US20140195775A1 (en) * 2011-09-26 2014-07-10 Intel Corporation Instruction and logic to provide vector loads and stores with strides and masking functionality
TWI467477B (zh) * 2011-04-01 2015-01-01 Intel Corp 向量親合的指令格式及其執行
TWI533206B (zh) * 2012-03-15 2016-05-11 萬國商業機器公司 執行將資料載入至由一指令所指示之一指定記憶體邊界之該指令之方法、電腦程式產品及電腦系統

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5148528A (en) * 1989-02-03 1992-09-15 Digital Equipment Corporation Method and apparatus for simultaneously decoding three operands in a variable length instruction when one of the operands is also of variable length
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
CN102707988B (zh) * 2011-04-07 2015-09-09 威盛电子股份有限公司 微处理器及其操作方法
CN108681465B (zh) 2011-12-22 2022-08-02 英特尔公司 用于产生整数序列的处理器、处理器核及系统
US9424039B2 (en) * 2014-07-09 2016-08-23 Intel Corporation Instruction for implementing vector loops of iterations having an iteration dependent condition
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5940876A (en) * 1997-04-02 1999-08-17 Advanced Micro Devices, Inc. Stride instruction for fetching data separated by a stride amount
US20130212354A1 (en) * 2009-09-20 2013-08-15 Tibet MIMAR Method for efficient data array sorting in a programmable processor
TWI467477B (zh) * 2011-04-01 2015-01-01 Intel Corp 向量親合的指令格式及其執行
US20140195775A1 (en) * 2011-09-26 2014-07-10 Intel Corporation Instruction and logic to provide vector loads and stores with strides and masking functionality
TWI533206B (zh) * 2012-03-15 2016-05-11 萬國商業機器公司 執行將資料載入至由一指令所指示之一指定記憶體邊界之該指令之方法、電腦程式產品及電腦系統

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI819683B (zh) * 2022-06-22 2023-10-21 晶心科技股份有限公司 實現向量跨步記憶體存取的處理器、操作方法與載存裝置

Also Published As

Publication number Publication date
US10282204B2 (en) 2019-05-07
US20180004518A1 (en) 2018-01-04
TW201810029A (zh) 2018-03-16
DE112017003347T5 (de) 2019-03-14
CN109313553B (zh) 2024-01-23
CN109313553A (zh) 2019-02-05
WO2018009319A1 (en) 2018-01-11

Similar Documents

Publication Publication Date Title
US10042639B2 (en) Method and apparatus to process 4-operand SIMD integer multiply-accumulate instruction
US10671392B2 (en) Systems, apparatuses, and methods for performing delta decoding on packed data elements
US20180004517A1 (en) Apparatus and method for propagating conditionally evaluated values in simd/vector execution using an input mask register
TWI760341B (zh) 用於跨步載入的系統、設備及方法
US9348592B2 (en) Apparatus and method for sliding window data access
US20140108480A1 (en) Apparatus and method for vector compute and accumulate
CN107967149B (zh) 从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的系统、装置和方法
US9513918B2 (en) Apparatus and method for performing permute operations
US9575757B2 (en) Efficient zero-based decompression
US9189236B2 (en) Speculative non-faulting loads and gathers
CN109196467B (zh) 将源封包数据划分为通路的处理器、方法、系统和指令
KR101729424B1 (ko) 128-비트 프로세서에서의 skein256 sha3 알고리즘에 대한 명령어 세트
US20130311530A1 (en) Apparatus and method for selecting elements of a vector computation
US9495162B2 (en) Apparatus and method for performing a permute operation
TW201643697A (zh) 用於融合乘法乘法指令的裝置及方法
TW201810034A (zh) 用於累和的系統、設備及方法
WO2013100991A1 (en) Systems, apparatuses, and methods for performing delta encoding on packed data elements
US20130332701A1 (en) Apparatus and method for selecting elements of a vector computation
US9389861B2 (en) Systems, apparatuses, and methods for mapping a source operand to a different range
EP3516504A1 (en) Apparatuses, methods, and systems for multiple source blend operations
US20170192789A1 (en) Systems, Methods, and Apparatuses for Improving Vector Throughput
TWI817926B (zh) 用於執行指令的設備、方法及非暫態機器可讀媒體
US20140281369A1 (en) Apparatus and method for sliding window data gather