TW201643705A - 用於在成組的向量元件上進行歸約運算的方法及設備 - Google Patents

用於在成組的向量元件上進行歸約運算的方法及設備 Download PDF

Info

Publication number
TW201643705A
TW201643705A TW104138807A TW104138807A TW201643705A TW 201643705 A TW201643705 A TW 201643705A TW 104138807 A TW104138807 A TW 104138807A TW 104138807 A TW104138807 A TW 104138807A TW 201643705 A TW201643705 A TW 201643705A
Authority
TW
Taiwan
Prior art keywords
field
processor
vector register
value
index value
Prior art date
Application number
TW104138807A
Other languages
English (en)
Other versions
TWI575454B (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 TW201643705A publication Critical patent/TW201643705A/zh
Application granted granted Critical
Publication of TWI575454B publication Critical patent/TWI575454B/zh

Links

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/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/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT

Abstract

描述用於進行SIMD歸約操作的設備及方法。例如,處理器的一實施例用於:包含待歸約的複數個資料元件值的值向量暫存器;索引向量暫存器,用以儲存指示該值向量暫存器中的何等值彼此關聯的複數個索引值;單指令多資料(SIMD)歸約邏輯,藉由將如由該索引向量暫存器中之該等索引值所指示的彼此關聯之來自該值向量暫存器的資料元件值組合,以在該值向量暫存器內的該等資料元件值上進行歸約操作;及累積向量暫存器,用以儲存由該SIMD歸約邏輯產生之該歸約操作的結果。

Description

用於在成組的向量元件上進行歸約運算的方法及設備
此發明通常相關於電腦處理器的領域。更明確地說,本發明相關於用於在成組的向量元件上進行歸約運算的方法及設備。
指令集或指令集架構(ISA)係電腦架構相關於程式設計的部分,並包括原生資料類別、指令、暫存器架構、定址模式、記憶體架構、中斷及異常管理、及外部輸入及輸出(I/O)。應注意到術語「指令」在本文中通常指巨集指令-其係提供至處理器用於執行的指令-與微指令或微運算相反-其係處理器之解碼器解碼巨集指令的結果。微指令或微運算能組態成對處理器上的執行單元下令以實作與巨集指令關聯的邏輯。
ISA與微架構不同,其係用於實作指令集之成組的處理器設計技術。具有不同微架構的處理器可分享共同指令集。例如,Intel® Pentium 4處理器、Intel® CoreTM處理 器、及來自加州桑尼維爾之Advanced Micro Devices,Inc.的處理器實作幾乎完全相同的x86指令集版本(具有已隨較新版本加入的部分延伸),但具有不同的內部設計。例如,ISA的相同暫存器架構可使用已為人熟知的技術以不同方式實作在不同微架構中,包括專屬實體暫存器、使用暫存器更名機制(例如,使用暫存器化名表(RAT)、重排序緩衝器(ROB)、及引退暫存器檔案)的一或多個動態配置實體暫存器。除非另外明定,片語暫存器架構、暫存器檔案、及暫存器在本文中用於指何者可為軟體/程式設計師看見及指令明定暫存器的方式。在需要區分時,形容詞「邏輯的」、「架構的」、或「軟體可見的」將用於指示暫存器架構中的暫存器/檔案,同時不同的形容詞將用於明定給定微架構中的暫存器(例如,實體暫存器、重排序緩衝器、引退暫存器、暫存器池)。
指令集包括一或多種指令格式。給定指令格式界定不同欄位(位元數、位元位置)以,在其他事物中,明定待進行的運算及待於其上進行運算的運算元(等)。盡管界定指令樣板,部分指令格式仍另外受細分(或次格式)。例如,可將給定指令格式的指令樣板界定成具有不同之指令格式欄位的子集(所包括的欄位典型有相同次序,但因為包括較少欄位,至少部分具有不同的位元位置)及/或界定成具有受不同解譯的給定欄位。給定指令係使用給定指令格式表示(且,若受界定,以該指令格式之指令樣板的給定一者),並明定運算及運算元。指令串流係指令的特定序 列,其中該序列中的各指令係指令以指令格式發生(且,若受界定,以該指令格式之指令樣板的給定一者)。
100‧‧‧通用向量親和指令格式
105‧‧‧無記憶體存取指令樣板
110‧‧‧無記憶體存取、全捨入控制型運算指令樣板
112‧‧‧無記憶體存取、寫入遮罩控制、部分捨入控制型運算指令樣板
115‧‧‧無記憶體存取、資料轉移型運算指令樣板
117‧‧‧無記憶體存取、寫入遮罩控制、vsize型運算指令樣板
120‧‧‧記憶體存取指令樣板
125‧‧‧記憶體存取、時間性指令樣板
127‧‧‧記憶體存取、寫入遮罩控制指令樣板
130‧‧‧記憶體存取、非時間性指令樣板
140‧‧‧格式欄位
142‧‧‧基本運算欄位
144‧‧‧暫存器索引欄位
146‧‧‧修飾欄位
150‧‧‧增益運算欄位
152‧‧‧甲欄位
152A‧‧‧RS欄位
152A.1、157A.1‧‧‧捨入
152A.2‧‧‧資料轉移
152B‧‧‧驅逐提示欄位
152B.1‧‧‧時間性
152B.2‧‧‧非時間性
152C‧‧‧寫入遮罩控制(Z)欄位
154‧‧‧乙欄位
154A‧‧‧捨入控制欄位
154B‧‧‧資料轉移欄位
154C‧‧‧資料操控欄位
156‧‧‧抑制所有浮點異常(SAE)欄位
157A‧‧‧RL欄位
157A.2‧‧‧向量長度(VSIZE)
157B‧‧‧廣播欄位
158‧‧‧捨入運算控制欄位
159A‧‧‧捨入運算欄位
159B‧‧‧向量長度欄位
160‧‧‧比例欄位
162A‧‧‧位移欄位
162B‧‧‧位移因子欄位
164‧‧‧資料元件寬度欄位
168‧‧‧類別欄位
168A‧‧‧類別A
168B‧‧‧類別B
170‧‧‧寫入遮罩欄位
172‧‧‧立即欄位
174‧‧‧全運算碼欄位
200‧‧‧特定向量親和指令格式
202‧‧‧EVEX前置碼
205‧‧‧REX欄位
210‧‧‧REX'欄位
215‧‧‧運算碼映射欄位
220‧‧‧EVEX.vvvv
225‧‧‧前置編碼欄位
230‧‧‧實際運算碼欄位
240‧‧‧MOD R/M欄位
242‧‧‧MOD欄位
244‧‧‧Reg欄位
246‧‧‧R/M欄位
254‧‧‧SIB.xxx
256‧‧‧SIB.bbb
300‧‧‧暫存器架構
310‧‧‧向量暫存器
315、526、K0-K7‧‧‧寫入遮罩暫存器
325‧‧‧通用暫存器
345‧‧‧純量浮點堆疊暫存器檔案(x87堆疊)
350‧‧‧MMX封裝整數平坦暫存器檔案
400‧‧‧處理器管線
402‧‧‧提取級
404‧‧‧長度解碼級
406‧‧‧解碼級
408‧‧‧配置級
410‧‧‧更名級
412‧‧‧排程級
414‧‧‧暫存器讀取/記憶體讀取級
416‧‧‧執行級
418‧‧‧寫回/記憶體寫入級
422‧‧‧異常管理級
424‧‧‧提交級
430‧‧‧前端單元
432‧‧‧分支預測單元
434‧‧‧指令快取單元
436‧‧‧指令轉換後備緩衝器(TLB)
438‧‧‧指令提取單元
440‧‧‧解碼單元
450‧‧‧執行引擎單元
452‧‧‧更名/配置器單元
454‧‧‧引退單元
456‧‧‧排程器單元
458‧‧‧實體暫存器檔案(等)單元
460‧‧‧執行叢集
462‧‧‧執行單元
464‧‧‧記憶體存取單元
470‧‧‧記憶體單元
472‧‧‧資料TLB單元
474‧‧‧資料快取單元
476‧‧‧2級(L2)快取記憶體單元
490、602A、602N‧‧‧核心
500‧‧‧指令解碼器
502‧‧‧晶粒上互連網路
504‧‧‧2級(L2)快取記憶體區域子集
506‧‧‧L1快取記憶體
506A‧‧‧L1資料快取記憶體
508‧‧‧純量單元
510‧‧‧向量單元
512‧‧‧純量暫存器
514‧‧‧向量暫存器
520‧‧‧交叉混合單元
522A-B‧‧‧數值轉變單元
524‧‧‧複製單元
528‧‧‧ALU
600、710、715、815‧‧‧處理器
606‧‧‧共享快取記憶體單元
608‧‧‧特殊用途邏輯
610‧‧‧系統助理單元
612‧‧‧環形為基的互連單元
614‧‧‧積體記憶體控制器單元
616‧‧‧匯流排控制器單元
700、800、900‧‧‧系統
720‧‧‧控制器集線器
740、832、834‧‧‧記憶體
745、838、1020‧‧‧共處理器
750‧‧‧輸入/輸出集線器(IOH)
760‧‧‧輸入/輸出(I/O)裝置
790‧‧‧圖形記憶體控制器集線器(GMCH)
795‧‧‧連接
814、914‧‧‧I/O裝置
816‧‧‧第一匯流排
818‧‧‧匯流排橋接器
820‧‧‧第二匯流排
822‧‧‧鍵盤及/或滑鼠
824‧‧‧音訊I/O
827‧‧‧通訊裝置
828‧‧‧儲存單元
830‧‧‧指令/碼及資料
839‧‧‧高效能介面
850‧‧‧點-對-點互連
852、854‧‧‧P-P介面
870‧‧‧第一處理器
872、882‧‧‧積體記憶體及I/O控制邏輯(「CL」)
876、878、886、888‧‧‧點對點(P-P)介面
880‧‧‧第二處理器
890‧‧‧晶片組
894、898‧‧‧點對點介面電路
896‧‧‧介面
915‧‧‧傳統I/O裝置
1000‧‧‧SoC
1002‧‧‧互連單元
1010‧‧‧應用處理器
1030‧‧‧靜態隨機存取記憶體(SRAM)單元
1032‧‧‧直接記憶體存取(DMA)單元
1040‧‧‧顯示單元
1102‧‧‧高階語言
1104‧‧‧x86編譯器
1106‧‧‧x86二進位碼
1108‧‧‧替代指令集編譯器
1110‧‧‧替代指令集二進位碼
1112‧‧‧指令變換器
1114‧‧‧不具有至少一個x86指令集核心的處理器
1116‧‧‧具有至少一個x86指令集核心的處理器
1200、1201、1202、1203‧‧‧資料元件
1210、1211、1212、1213‧‧‧結果
1220‧‧‧輸入向量暫存器
1230、1402‧‧‧輸出向量暫存器
1301‧‧‧「索引」向量暫存器
1302‧‧‧「值」向量暫存器
1303‧‧‧累積向量暫存器
1305‧‧‧SIMD樹歸約邏輯
1501‧‧‧pc_vec向量暫存器
1502‧‧‧eo_mask暫存器
xmm0-xmm15、ymm0-ymm15、zmm0-zmm31‧‧‧暫存器
可從結合下列圖式的下列詳細描述得到對本發明的更佳理解,其中:圖1A及1B係描繪根據本發明的一實施例之通用向量親和指令格式及其指令樣板的方塊圖;圖2A-D係描繪根據本發明的實施例之範例特定向量親和指令格式的方塊圖;圖3係根據本發明的一實施例之暫存器架構的方塊圖;且圖4A係描繪根據本發明的實施例之範例有序提取、解碼、引退管線、及範例暫存器更名、無序發佈/執行管線二者的方塊圖;圖4B係根據本發明的實施例之描繪包括在處理器中的範圍實施例之有序提取、解碼、引退核心、及範例暫存器更名、無序發佈/執行架構核心二者的方塊圖;圖5A係單一處理核心連同其之至晶粒上互連網路的連接的方塊圖;圖5B描繪根據本發明的實施例之圖5A中的處理器核心之部分的擴大圖;圖6係根據本發明的實施例之具有積集記憶體控制器及圖形處理器的單核心處理器及多核心處理器的方塊圖; 圖7描繪根據本發明的一實施例之系統的方塊圖;圖8描繪根據本發明的實施例之第二系統的方塊圖;圖9描繪根據本發明的實施例之第三系統的方塊圖;圖10描繪根據本發明的實施例之系統單晶片(SoC)的方塊圖;圖11描繪根據本發明的實施例之對照將來源指令集中的二進位指令變換為目標指令集中之二進位指令的軟體指令變換器之使用的方塊圖;圖12根據本發明的一實施例描繪衝突偵測運算可如何進行;圖13描繪用於在值向量暫存器內的資料元件上進行歸約運算之本發明的一實施例;圖14描繪衝突如何使用索引值偵測並儲存在向量暫存器內的額外細節;圖15根據本發明的一實施例描繪與歸約運算之效能有關的額外細節;及圖16描繪根據本發明之一實施例的方法。
【發明內容及實施方式】
在以下描述中,為了解釋,陳述許多具體細節以提供對下文描述之本發明的實施例的徹底瞭解。然而,可實現本發明的實施例而無需部分此等具體細節對熟悉本發明之人士將係明顯的。在其他實例中,以方塊圖形式顯示已為人熟知的結構及設備,以避免模糊本發明之實施例的以下 原理。
例示處理器架構及資料種類
指令集包括一或多種指令格式。給定指令格式界定不同欄位(位元數、位元位置)以,在其他事物中,明定待進行的運算(運算碼)及待於其上進行運算的運算元(等)。盡管界定指令樣板,部分指令格式仍更受細分(或次格式)。例如,可將給定指令格式的指令樣板界定成具有不同之指令格式欄位的子集(所包括的欄位典型有相同次序,但因為包括較少欄位,至少部分具有不同的位元位置)及/或界定成具有受不同解譯的給定欄位。因此,ISA的各指令使用給定指令格式表示(且,若受界定,以該指令格式之指令樣板的給定一者),並包括用於明定運算及運算元的欄位。例如,範例ADD指令具有特定運算碼及包括運算碼欄位以明定運算碼及運算元欄位以選擇運算元(來源1/目標及來源2)的指令格式;且此ADD指令在指令串流中的發生將在選擇特定運算元的運算元欄位中具有特定內容。稱為先進向量延伸(AVX)(AVX1及AVX2)並使用向量延伸(VEX)編碼設計的SIMD延伸集已發表及/或發行(例如,見Intel® 64及IA-32架構軟體發展者手冊,2011年十月;並見Intel®先進向量延伸程式設計參考手冊,2011月六月)。
範例指令格式
本文描述之指令(等)的實施例可用不同格式具現。此外,於下文詳細描述範例系統、架構、及管線。指令(等)的實施例可在此種系統、架構、及管線上執行,但未受限於此等細節。
A. 通用向量親和指令格式
向量親和指令格式係適用於向量指令的指令格式(例如,有特別用於向量運算的特定欄位)。雖然描述在其中向量及純量運算二者經由向量親和指令格式受支援的實施例,其他實施例僅使用向量親和指令格式的向量運算。
圖1A-1B係描繪根據本發明的實施例之通用向量親和指令格式及其指令樣板的方塊圖。圖1A係描繪根據本發明的實施例之通用向量親和指令格式及其類別A指令樣板的方塊圖;而圖1B係描繪根據本發明的實施例之通用向量親和指令格式及其類別B指令樣板的方塊圖。具體地說,類別A及B指令樣板針對通用向量親和指令格式100界定,彼等二者包括無記憶體存取指令樣板105及記憶體存取指令樣板120。在向量親和指令格式之上下文中的術語通用係指該指令格式未束縛於任何特定指令集。
在將描述在其中向量親和指令格式支援下列各者的本發明之實施例的同時:具有32位元(4位元組)或64位元(8位元組)資料元件寬度(或尺寸)的64位元組向量運算元長度(或尺寸)(且因此,64位元組向量由16個雙字組尺寸元件或替代地由8個四字組尺寸元件之其中一者組成); 具有16位元(2位元組)或8位元(1位元組)資料元件寬度(或尺寸)的64位元組向量運算元長度(或尺寸);具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或尺寸)的32位元組向量運算元長度(或尺寸);及具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或尺寸)的16位元組向量運算元長度(或尺寸);其他實施例可能支援具有更多、更少、或不同資料元件寬度(例如,128位元(16位元組)資料元件寬度)的更多、更少、及/或不同向量運算元尺寸(例如,256位元組向量運算元)。
圖1A中的類別A指令樣板包括:1)在無記憶體存取指令樣板105內,顯示無記憶體存取、全捨入控制型運算指令樣板110及無記憶體存取、資料轉移型運算指令樣板115;及2)在記憶體存取指令樣板120內,顯示記憶體存取、時間性指令樣板125及記憶體存取、非時間性指令樣板130。圖1B中的類別B指令樣板包括:1)在無記憶體存取指令樣板105內,顯示無記憶體存取、寫入遮罩控制、部分捨入控制型運算指令樣板112及無記憶體存取、寫入遮罩控制、vsize型運算指令樣板117;及2)在記憶體存取指令樣板120內,顯示記憶體存取、寫入遮罩控制指令樣板127。
通用向量親和指令格式100包括以描繪於圖1A-1B中的次序於下文列示的以下欄位。
格式欄位140-此欄位中的特定值(指令格式識別符值)獨特地識別向量親和指令格式,且因此該向量親和指令格式中的指令發生在指令串流中。因此,此欄位在其對僅具有通用向量親和指令格式之指令集係非必要的情形中係選擇性的。
基本運算欄位142-其內容區別不同的基本運算。
暫存器索引欄位144-其內容直接或經由位址產生明定來源及目的地運算元的位置,彼等是否在暫存器或記憶體中。此等包括充份的位元數以從PxQ(例如,32x512、16x128、32x1024、64x1024)暫存器檔案選擇N個暫存器。在一實施例中N可能多達三個來源及一個目的地暫存器的同時,其他實施例可支援更多或更少的來源及目的地暫存器(例如,可支援多達二個來源,其中此等來源之一者也作為目的地使用、可支援多達三個來源,其中此等來源之一者也作為目的地使用、可支援多達二個來源及一個目的地)。
修飾欄位146-其內容在通用向量指令格式中區別明定記憶體存取之指令及不明定記憶體存取之指令的發生;亦即,在無記憶體存取指令樣板105及記憶體存取指令樣板120之間區別。記憶體存取運算讀及/或寫記憶體階層(在部分情形中,使用暫存器中的值明定來源及/或目的地位址),而非記憶體存取運算不讀寫記憶體階層(例如,來源及目的地均係暫存器)。在一實施例中此欄位也在三種不同方式之間選擇以進行記憶體位址計算的同時,其他實 施例可能支援更多、更少、或不同方式以進行記憶體位址計算。
增益運算欄位150-其內容區別除了基本運算外進行各種不同運算的何一者。此欄位係上下文特定的。在本發明的一實施例中,將此欄位分割為類別欄位168、甲欄位152、及乙欄位154。增益運算欄位150容許運算的共同群組在單一指令而非在2、3、或4個指令中進行。
比例欄位160-其內容容許將用於記憶體位址產生之索引欄位的內容比例化(例如,針對使用2scale*index+base的位址產生)。
位移欄位162A-將其內容使用為記憶體位址產生的一部分(例如,針對使用2scale*index+base+displacement的位址產生)。
位移因子欄位162B(須注意將位移欄位162A直接並排在位移因子欄位162B上方指示使用一者或另一者)-將其內容使用為位址產生的一部分;其明定藉由記憶體存取尺寸(N)比例化的移位因子-其中N係記憶體存取中的位元組數量(例如,針對使用2scale*index+base+scaled displacement的位址產生)。忽略冗餘的低階位元,且因此將位移因子欄位的內容乘以記憶體運算元總尺寸(N),以產生在計算有效位址時使用的最終位移。N的值係由處理器硬體在執行時間基於全運算碼欄位174(本文稍後描述)及資料操控欄位154C決定。位移欄位162A及位移因子欄位162B在彼等未用於無記憶體存取指令樣板105及/或 未用於可能僅實作彼等二者之一或均未實作的不同實施例的情形中係選擇性的。
資料元件寬度欄位164-其內容區別使用許多資料元件寬度的何一者(在部分實施例中針對所有指令;在其他實施例僅針對部分指令)。此欄位在若僅支援一種資料元件寬度而不需要其及/或使用運算碼之特定態樣支援資料元件寬度的情形中係選擇性的。
寫入遮罩欄位170-其內容在每個資料元件位置的基礎上控制目的地向量運算元中的資料元件位置是否反映基本運算及增益運算的結果。類別A指令樣板支援合併寫入遮罩,而類別B指令樣板支援合併及歸零寫入遮罩二者。當合併時,向量遮罩在執行任何(由基本運算及增益運算明定)運算期間容許目的地中的任何成組元件免於更新;在另一實施例中,保存了其中對應遮罩位元具有0的目的地之各元件的舊值。相反地,當歸零向量遮罩在執行任何(由基本運算及增益運算明定)運算期間容許將目的地中的任何成組元件歸零時;在一實施例中,當對應遮罩位元具有0值時,將目的地的元件設定為0。此功能的子集有控制所進行的運算之向量長度的能力(亦即,正受修改之從第一者至最後一者之元件的跨距);然而,受修改的元件不必係連續的。因此,寫入遮罩欄位170容許部分向量運算,包括載入、儲存、算術、邏輯等。在描述在其中寫入遮罩欄位170的內容選擇包含待使用之寫入遮罩的許多寫入遮罩暫存器之一者(且因此寫入遮罩欄位170的內容間 接識別待實施的遮罩)的本發明實施例的同時,其他實施例替代地或另外容許寫入遮罩欄位170的內容直接明定待實施的遮罩。
立即欄位172-其內容容許明定立即值。此欄位在其不存在於不支援立即值之通用向量指令格式的實作中及其不存在於不使用立即值之指令中的情形中係選擇性的。
類別欄位168-其內容在不同類別的指令之間區別。參考圖1A-B,此欄位的內容在類別A及類別B指令之間選擇。在圖1A-B中,使用滾邊方形指示特定值存在於欄位中(例如,在圖1A-B中分別用於類別欄位168的類別A 168A及類別B 168B)。
類別A的指令樣板
在類別A之無記憶體存取指令樣板105的情形中,將甲欄位152解譯為RS欄位152A,其內容區別進行不同增益運算種類之何一者(例如,捨入152A.1及資料轉移152A.2分別明定用於無記憶體存取、捨入型運算指令樣板110及無記憶體存取、資料轉移型運算指令樣板115明定),而乙欄位154區別進行該明定種類的何等運算。在無記憶體存取指令樣板105中,不存在比例欄位160、位移欄位162A、及位移因子欄位162B。
無記憶體存取指令樣板-全捨入控制型運算
在無記憶體存取全捨入控制型運算指令樣板110中, 將乙欄位154解譯為捨入控制欄位154A,其內容(等)提供靜態捨入。在本發明的描述實施例中,捨入控制欄位154A包括抑制所有浮點異常(SAE)欄位156及捨入運算控制欄位158的同時,其他實施例可支援可將此等二觀念編碼入相同欄位中或僅具有此等觀念/欄位的一者或另一者(例如,可僅具有捨入運算控制欄位158)。
SAE欄位156-其內容區別是否將異常事件回報除能;當SAE欄位156的內容指示將致能抑制時,給定指令不回報任何種類的浮點異常旗標且不喚起任何浮點異常管理器。
捨入運算控制欄位158-其內容區別進行捨入運算群組之何一者(例如,捨進、捨去、朝零捨入、及捨入至最近者)。因此,捨入運算控制欄位158容許在每個指令的基礎上改變捨入模式。在本發明的一實施例中,其中處理器包括用於明定捨入模式的控制暫存器,捨入運算控制欄位158的內容覆寫該暫存器值。
無記憶體存取指令樣板-資料轉移型運算
在無記憶體存取資料轉移型運算指令樣板115中,將乙欄位154解譯為資料轉移欄位154B,其內容區別進行許多資料轉移之何一者(例如,無資料轉移,交叉混合、廣播)。
在類別A之記憶體存取指令樣板120的情形中,將甲欄位152解譯為驅逐提示欄位152B,其內容區別使用驅 逐提示之何一者(在圖1A中,時間性152B.1及非時間性152B.2分別明定用於記憶體存取、時間性指令樣板125及記憶體存取、非時間性指令樣板130),而將乙欄位154解譯為資料操控欄位154C,其內容區別進行許多資料操控運算之何一者(也稱為基元)(例如,無操控;廣播;來源的昇轉換;及目的地的降轉換)。記憶體存取指令樣板120包括比例欄位160、並選擇性地包括位移欄位162A及位移因子欄位162B。
向量記憶體指令使用轉換支援進行從記憶體載入向量及將向量儲存至記憶體。當使用正常向量指令時,使用藉由選擇為寫入遮罩之向量遮罩的內容明定的實際轉移的元件,向量記憶體指令以逐資料元件方式從記憶體轉移資料/將資料轉移至記憶體。
記憶體存取指令樣板-時間性
時間性資料係可能很快重使用而足以從快取獲利的資料。然而,此係提示,且不同處理器可用不同方式實作其,包括完全忽略該提示。
記憶體存取指令樣板-非時間性
非時間性資料係不太可能很快重使用落足以從第1級快取記憶體快取獲利,且應給定驅逐優先權的資料。然而,此係提示,且不同處理器可用不同方式實作其,包括完全忽略該提示。
類別B的指令樣板
在類別B之指令樣板的情形中,將甲欄位152解譯為寫入遮罩控制(Z)欄位152C,其內容區別由寫入遮罩欄位170控制的寫入遮罩是否應合併或歸零。
在類別B之無記憶體存取指令樣板105的情形中,將乙欄位154的一部分解譯為RL欄位157A,其內容區別進行不同增益運算種類之何一者(例如,將捨入157A.1及向量長度(VSIZE)157A.2分別明定用於無記憶體存取、寫入遮罩控制、部分捨入控制型運算指令樣板112及無記憶體存取、寫入遮罩控制、VSIZE型運算指令樣板117),而乙欄位154的其餘部分區別進行明定種類的何等運算。在無記憶體存取指令樣板105中,不存在比例欄位160、位移欄位162A、及位移因子欄位162B。
在無記憶體存取、寫入遮罩控制、部分捨入控制型運算指令樣板110中,將乙欄位154的其餘部分解譯為捨入運算欄位159A並將異常事件回報除能(給定指令不回報任何種類的浮點異常旗標且不喚起任何浮點異常管理器)。
捨入運算控制欄位159A-正如同捨入運算控制欄位158,其內容區別進行捨入運算之群組的何一者(例如,捨進、捨去、朝零捨入、及捨入至最近者)。因此,捨入運算控制欄位159A容許在每個指令的基礎上改變捨入模式。在本發明的一實施例中,其中處理器包括用於明定捨入模式的控制暫存器,捨入運算控制欄位158的內容覆寫該暫存器值。
在無記憶體存取、寫入遮罩控制、VSIZE型運算指令樣板117中,將乙欄位154的其餘部分解譯為向量長度欄位159B,其內容區別於許多資料向量長度的何一長度上進行(例如,128、256、或512位元組)。
在類別B之記憶體存取指令樣板120的情形中,將乙欄位154的一部分解譯為廣播欄位157B,其內容區別是否進行廣播型資料操控運算,而將乙欄位154的其餘部分解譯為向量長度欄位159B。記憶體存取指令樣板120包括比例欄位160、並選擇性地包括位移欄位162A及位移因子欄位162B。
關於通用向量親和指令格式100,將全運算碼欄位174顯示成包括格式欄位140、基本運算欄位142、及資料元件寬度欄位164。在將一實施例顯示成其中全運算碼欄位174包括所有此等欄位的同時,在不支援彼等全部的實施例中,全運算碼欄位174包括比所有此等欄位少的欄位。全運算碼欄位174提供運算碼(運算碼)。
在通用向量親和指令格式中,增益運算欄位150、資料元件寬度欄位164、及寫入遮罩欄位170容許在每個指令的基礎上明定此等特性。
寫入遮罩欄位及資料元件寬度欄位的組合產生在其中彼等容許遮罩基於不同資料元件寬度施用的類型化指令。
在類別A及類別B內發現的各種指令樣板在不同情況中係有利的。在本發明的部分實施例中,不同處理器或處理器內的不同核心可僅支援類別A、僅支援類別B、或 支援二種類別。例如,意圖用於通用計算的高效能通用無序核心可僅支援類別B,主要意圖用於圖形及/或科學(通量)計算的核心可僅支援類別A,且意圖用於二者的核心可支援二者(當然,具有來自二類別之樣板及指令而非來自二類別之所有樣板及指令的部分混合的核心在本發明的範圍內)。又,單處理器可能包括多個核心,彼等全部支援相同類別或在其中不同核心支援不同類別。例如,在具有分離式圖形及通用核心的處理器中,主要意圖用於圖形及/或科學計算之圖形核心的一者可僅支援類別A,而通用核心的一或多者可係僅支援類別B之意圖用於通用計算之具有無序執行及暫存器更名的高效能通用核心。不具有分離式圖形核心的另一處理器可包括支援類別A及類別B二者的一或多個通用有序或無序核心。當然,在本發明的不同實施例中,也可將來自一類別的特性實作在另一類別中。會將以高階語言撰寫的程式放入(例如,即時編譯或靜態編譯)各種不同的可執行形式中,包括:1)僅具有由用於執行之目標處理器支援的類別(等)之指令的形式;或2)具有使用所有類別的指令的不同組合撰寫的其他常式,並具有基於由目前執行該碼的處理器所支援之指令選擇執行的常式之控制流程碼的形式。
B. 範例特定向量親和指令格式
圖2係描繪根據本發明的實施例之範例特定向量親和指令格式的方塊圖。圖2顯示在特別用於其明定欄位之位 置、尺寸、解譯、及次序,以及部分此等欄位之值的特別情形中的特定向量親和指令格式200。特定向量親和指令格式200可用於延伸x86指令集,且因此部分欄位與使用在既存x86指令集及其延伸(例如,AVX)中的欄位相似或相同。此格式仍與具有延伸之既存x86指令集的前置編碼欄位、實際運算碼位元組欄位、MOD RIM欄位、SIB欄位、位移欄位、及立即欄位保持一致。說明來自圖2的欄位映射至其中之來自圖1的欄位。
應理解為了說明目的,本發明的實施例雖然係在通用向量親和指令格式100的上下文中參考特定向量親和指令格式200而描述,除非另有聲明,本發明並未受限於特定向量親和指令格式200。例如,通用向量親和指令格式100設想用於各種欄位的各種可能尺寸,但將特定向量親和指令格式200顯示為具有特定尺寸的欄位。藉由特定範例,在特定向量親和指令格式200中將資料元件寬度欄位164說明為一位元欄位的同時,本發明並未受如此限制(亦即,通用向量親和指令格式100設想其他尺寸的資料元件寬度欄位164)。
通用向量親和指令格式100包括以描繪於圖2A中的次序於下文列示的以下欄位。
EVEX前置碼(位元組0-3)202-係以四位元組形式編碼。
格式欄位140(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)係格式欄位140且其包含0x62(在本發 明的一實施例中該獨特值用於區別向量親和指令格式)。
第二至第四位元組(EVEX位元組1-3)包括提供特定能力的許多位元欄位。
REX欄位205(EVEX位元組1,位元[7-5])-由EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及EVEX.B(EVEX位元組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'欄位210-此係REX'欄位210的第一部分且係用於編碼32個延伸暫存器集之上16個或下16個之任一者的EVEX.R'位元欄位(EVEX位元組1,位元[4]-R')。在本發明的一實施例中,此位元,連同於下文指示的其他位元,以位元反相格式儲存,以(在已為人熟知的x86 32-位元模式中)與BOUND指令區別,其實際運算碼位元組為62,但不在MOD R/M欄位(於下文描述)中接受MOD欄位中的值11;本發明的其他實施例不以反相格式儲存此及其他於下文指示的位元。將值1用於編碼較低的16個暫存器。換言之,R'Rrrr係藉由組合EVEX.R'、EVEX.R、及來自其他欄位的RRR形成。
運算碼映射欄位215(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼隱含的前導運算碼位元組(0F、0F 38、或0F 3)。
資料元件寬度欄位164(EVEX位元組2,位元[7]-W)-藉由符號EVEX.W代表。使用EVEX.W界定資料種類的粒度(尺寸)(32-位元資料元件或64-位元資料元件之其中一者)。
EVEX.vvvv 220(EVEX位元組2、位元[6:3]-vvvv)-EVEX.vvvv的角色可能包括下列各者:1)EVEX.vvvv編碼以反相(1的補數)形式明定的第一來源暫存器運算元並對具有2或多個來源運算元的指令有效;2)EVEX.vvvv針對特定向量偏移編碼以1的補數形式明定的目的地暫存器運算元;或3)EVEX.vvvv不編碼任何運算元,該欄位保留並應包含1111b。因此,EVEX.vvvv欄位220編碼以反相(1的補數)形式儲存之第一來源暫存器明定器的4個低階位元。依據指令,使用額外的不同EVEX位元欄位將明定器尺寸延伸至32個暫存器。
EVEX.U類別欄位168(EVEX位元組2,位元[2]-U)-若EVEX.U=0,其指示類別A或EVEX.U0;若EVEX.U=1,其指示類別B或EVEX.U1。
前置編碼欄位225(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前置編碼,且因此不需要擴展。
甲欄位152(EVEX位元組3,位元[7]-EH;也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;也使用α說明)-如先前描述的,此欄位係特殊內容。
乙欄位154(EVEX位元組3,位元[6:4]-SSS,也稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ說明)-如先前描述的,此欄位係特殊內容。
REX'欄位210-此係REX'欄位的其餘部分且係可用於編碼32個延伸暫存器集之上16個或下16個之任一者的EVEX.V'位元欄位(EVEX位元組3,位元[3]-V')。此位元以位元反相格式儲存。將值1用於編碼較低的16個暫存器。換言之,V'VVVV係藉由組合EVEX.V'、 EVEX.vvvv形成。
寫入遮罩欄位170(EVEX位元組3,位元[2:0]-kkk)-如先前描述的,其內容明定暫存器在寫入遮罩暫存器中的索引。在本發明的一實施例中,特定值EVEX.kkk=000具有隱含無寫入遮罩用於特定指令的特殊行為(此可用包括使用硬接至全部的寫入遮罩或將遮罩硬體旁路之硬體的各種方式實作)。
實際運算碼欄位230(位元組4)也稱為運算碼位元組。將運算碼的一部分明定在此欄位中。
MOD R/M欄位240(位元組5)包括MOD欄位242、Reg欄位244、及R/M欄位246。如先前描述的,MOD欄位242的內容在記憶體存取及無記憶體存取運算之間區別。Reg欄位244的角色可總結成二情況:編碼目的地暫存器運算元或來源暫存器運算元的任一者,或被視為係運算碼延伸且不用於編碼任何指令運算元。R/M欄位246的角色可包括下列各者:編碼參考記憶體位址的指令運算元,或編碼目的地暫存器運算元或來源暫存器運算元之任一者。
比例、索引、基底(SIB)位元組(位元組6)-如先前描述的,將比例欄位160的內容用於記憶體位址產生。SIB.xxx 254及SIB.bbb 256-此等欄位的內容已關於暫存器索引Xxxx及Bbbb於先前參考。
位移欄位162A(位元組7-10)-當MOD欄位242包含10時,位元組7-10係位移欄位162A,且其與傳統32-位 元位移(disp32)相同地運作並以位元組粒度運作。
位移因子欄位162B(位元組7)-當MOD欄位242包含01時,位元組7係位移因子欄位162B。此欄位的位置與傳統x86指令集8-位元位移(disp8)相同,其以位元組粒度運作。因為disp8係正負號延伸的,其僅能在-128及127位元組移位之間定址;依據64位元組快取線,disp8使用僅能設定成四個實際有用值-128、-64、0、及64的8位元;因為常需要較大範圍,使用disp32;然而,disp32需要4個位元組。與disp8及disp32相反,位移因子欄位162B係disp8的重解譯;當使用位移因子欄位162B時,實際位移係由位移因子欄位的內容乘以記憶體運算元存取的尺寸(N)而決定。將此種位移稱為disp8*N。此減少平均指令長度(將單一位元組用於位移,但具有更大的範圍)。此種壓縮位移係基於有效位移係記憶體存取粒度之倍數的假設,且因此,不需要將位址移位的冗餘低階位元編碼。換言之,位移因子欄位162B取代傳統x86指令集8-位元位移。因此,除了將disp8多載為disp8*N的例外之外,以與x86指令集8-位元位移相同的方式編碼位移因子欄位162B(所以在ModRM/SIB編碼規則中沒有改變)。換言之,在編碼規則或編碼長度上沒有改變,但僅在藉由硬體解譯位移值上改變(其需要以記憶體運算元的尺寸將位移比例化,以得到逐位元位址移位)。
立即欄位172如先前描述地運算。
全運算碼欄位
圖2B係描繪根據本發明的一實施例之構成全運算碼欄位174的特定向量親和指令格式200之欄位的方塊圖。具體地說,全運算碼欄位174包括格式欄位140、基本運算欄位142、及資料元件寬度(W)欄位164。基本運算欄位142包括前置編碼欄位225、運算碼映射欄位215、及實際運算碼欄位230。
暫存器索引欄位
圖2C係描繪根據本發明的一實施例之構成暫存器索引欄位144的特定向量親和指令格式200之欄位的方塊圖。具體地說,暫存器索引欄位144包括REX欄位205、REX'欄位210、MODR/M.reg欄位244、MODR/M.r/m欄位246、VVVV欄位220、xxx欄位254、及bbb欄位256。
增益運算欄位
圖2D係描繪根據本發明的一實施例之構成增益運算欄位150的特定向量親和指令格式200之欄位的方塊圖。當類別(U)欄位168包含0時,其表示EVEX.U0(類別A 168A);當其包含1時,其表示EVEX.U1(類別B 168B)。當U=0且MOD欄位242包含11(表示無記憶體存取運算)時,將甲欄位152(EVEX位元組3,位元[7]-EH)解譯為rs欄位152A。當rs欄位152A包含1(捨入152A.1)時,將乙 欄位154(EVEX位元組3,位元組[6:4]-SSS)解譯為捨入控制欄位154A。捨入控制欄位154A包括一位元的SAE欄位156及二位元的捨入運算欄位158。當rs欄位152A包含0(資料轉移152A.2)時,將乙欄位154(EVEX位元組3,位元[6:4]-SSS)解譯為三位元的資料轉移欄位154B。當U=0且MOD欄位242包含00、01、或10(表示記憶體存取運算)時,將甲欄位152(EVEX位元組3,位元[7]-EH)解譯為驅逐提示(EH)欄位152B,並將乙欄位154(EVEX位元組3、位元[6:4]-SSS)解譯為三位元的資料操控欄位154C。
當U=1時,將甲欄位152(EVEX位元組3,位元[7]-EH)解譯為寫入遮罩控制(Z)欄位152C。當U=1且MOD欄位242包含11(表示無記憶體運算)時,將乙欄位154的一部分(EVEX位元組3、位元[4]-S0)解譯為RL欄位157A;當其包含1(捨入157A.1)時,將乙欄位154的其餘部分(EVEX位元組3,位元[6-5]-S2-1)解譯為捨入運算欄位159A,而當RL欄位157A包含0(VSIZE 157.A2)時,將乙欄位154的其餘部分(EVEX位元組3、位元[6-5]-S2-1)解譯為向量長度欄位159B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位242包含00、01、或10(表示記憶體存取運算)時,將乙欄位154(EVEX位元組3,位元[6:4]-SSS)解譯為向量長度欄位159B(EVEX位元組3,位元[6-5]-L1-0)及廣播欄位157B(EVEX位元組3,位元[4]-B)。
C. 範例暫存器架構
圖3係根據本發明的一實施例之暫存器架構300的方塊圖。在所說明的實施例中,有32個512位元寬的向量暫存器310;將此等暫存器稱為zmm0至zmm31。將較低的16個zmm暫存器的低階256個位元重疊在暫存器ymm0-15上。將較低的16個zmm暫存器的低階128個位元(ymm暫存器之低階128個位元)重疊在暫存器xmm0-15上。如在下表中說明的,特定向量親和指令格式200在此等重疊暫存器檔案上運算。
換言之,向量長度欄位159B在最大長度及一或多個其他較短長度之間選擇,其中各個此種較短長度為先前長度的一半長度;且不具有向量長度欄位159B的指令樣板在最大向量長度上運算。另外,在一實施例中,特定向量親和指令格式200的類別B指令樣板在封裝或純量單/倍精準浮點資料及封裝或純量整數資料上運算。純量運算係 在zmm/ymm/xmm暫存器中之最低階資料元件位置上進行的運算;較高階的資料元件位置保持成與在該指令之前相同或依據實施例歸零。
寫入遮罩暫存器315-在說明實施例中,有8個寫入遮罩暫存器(k0至k7),各者的尺寸為64位元。在另一實施例中,寫入遮罩暫存器315的尺寸為16位元。如先前描述的,在本發明的一實施例中,向量遮罩暫存器k0不能使用為寫入遮罩;當將通常會指示k0的編碼用於寫入遮罩時,其選擇0xFFFF的硬接寫入遮罩,有效地將該指令的寫入遮罩除能。
通用暫存器325-在說明實施例中,有連同既存之x86定址模式使用以定址記憶體運算元的十六個64位元通用暫存器。藉由名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15參考至此等暫存器。
純量浮點堆疊暫存器檔案(x87堆疊)345,在其上的係化名的MMX封裝整數平坦暫存器檔案350-在說明實施例中,x87堆疊係用於使用x87延伸指令集在32/64/80位元浮點資料上進行純量浮點運算的八元件堆疊;而將MMX暫存器用於在64位元封裝整數資料上進行運算,及針對在MMX及XMM暫存器之間進行的部分運算保持運算元。
本發明的其他實施例可使用更寬或更窄的暫存器。此外,本發明的其他實施例可使用更多、更少、或不同的暫存器檔案及暫存器。
D. 範例核心架構、處理器、及電腦架構
處理器核心可針對不同用途以不同方式實作及實作在不同處理器中。例如,此種核心的實作可包括:1)意圖用於通用計算的通用有序核心;2)意圖用於通用計算的高效能通用無序核心;3)主要意圖用於圖形及/或科學(通量)計算的特殊用途核心。不同處理器的實作可包括:1)包括意圖用於通用計算之一或多個通用有序核心及/或意圖用於通用計算之一或多個通用無序核心的CPU;及2)包括主要意圖用於圖形及/或科學(通量)之一或多個特殊用途核心的共處理器。此種不同處理器導致不同的電腦系統架構,彼等可包括:1)共處理器在與CPU分離的晶片上;2)共處理器在與CPU相同之封裝中的分離晶粒上;3)共處理器與CPU在相同晶粒上(在該情形中,此種共處理器有時稱為特殊用途邏輯,諸如,整合圖形及/或科學(通量)邏輯,或稱為特殊用途核心);及4)系統單晶片,可在相同晶粒上包括所描述的CPU(有時稱為應用核心(等)或應用處理器(等))、上述共處理器、及額外功能。其次描述範例核心架構,之後描述範例處理器及電腦架構。
圖4A係根據本發明的實施例描繪範例有序管線及範例暫存器更名、無序發佈/執行管線二者的方塊圖。圖4B係根據本發明的實施例描繪包括在處理器中的有序架構核心之範例實施例及範例暫存器更名、無序發佈/執行架構核心二者的方塊圖。圖4A-B中的實線方塊描繪有序管線及有序核心,而選擇性加入的點虛線方塊描繪暫存器更 名、無序發佈/執行管線及核心。假定有序樣態係無序樣態的子集,將描述無序樣態。
在圖4A中,處理器管線400包括提取級402、長度解碼級404、解碼級406、配置級408、更名級410、排程(也稱為調度或發佈)級412、暫存器讀取/記憶體讀取級414、執行級416、寫回/記憶體寫入級418、異常管理級422、及提交級424。
圖4B顯示包括耦接至執行引擎單元450之前端單元430的處理器核心490,且二者均耦接至記憶體單元470。核心490可係精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、極長指令(VLIW)核心、或混合或其他核心類型。作為另一選項,核心490可係特殊用途核心,諸如,網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理單元(GPGPU)核心、或圖形核心等。
前端單元430包括耦接至指令快取單元434的分支預測單元432,其耦接至指令轉譯後備緩衝器(TLB)436,其耦接至指令提取單元438,其耦接至解碼單元440。解碼單元440(或解碼器)可解碼指令,並產生作為輸出之解碼自、或另外反映、或導自原始指令之一或多個微運算、微碼進入點、微指令、其他指令、或其他控制信號。解碼單元440可使用各種不同的機制實作。合適機制的範例包括,但未受限於,查找表、硬體實作、可程式化邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等。在一實施例中,核心490包括微碼ROM或儲存用於特定巨集指令之微碼的其 他媒體(例如,在解碼單元440中或另外在前端單元430內)。將解碼單元440耦接至執行引擎單元450中的更名/配置器單元452。
執行引擎單元450包括耦接至引退單元454及一組一或多個排程器單元(等)456的更名/配置器單元452。排程器單元(等)456代表任何數量的不同排程器,包括保留站、中央指令窗等。將排程器單元(等)456耦接至實體暫存器檔案(等)單元(等)458。實體暫存器檔案(等)單元458各者代表一或多個實體暫存器檔案,彼等的不同者儲存一或多種不同的資料型別,諸如,純量整數、純量浮點、封裝整數、封裝浮點、向量整數、向量浮點、狀態(例如,係待執行的次一指令之位址的指令指標器)等。在一實施例中,實體暫存器檔案(等)單元458包含向量暫存器單元、寫入遮罩暫存器單元、及純量暫存器單元。此等暫存器單元可提供架構向量暫存器、向量遮罩暫存器、及通用暫存器。實體暫存器檔案(等)單元(等)458與引退單元454重疊,以說明可能實作暫存器更名及無序執行的各種方式(例如,使用重排序緩衝器(等)及引退暫存器檔案(等);使用未來檔案(等)、歷史緩衝器(等)、及引退暫存器檔案(等);使用暫存器映射及暫存器池;等)。將引退單元454及實體暫存器檔案(等)單元(等)458耦接至執行叢集(等)460。執行叢集(等)460包括一組一或多個執行單元462及一組一或多個記憶體存取單元464。執行單元462可在各種資料型別(例如,純量浮點、封裝整數、封裝浮 點、向量整數、向量浮點)上進行各種運算(例如,移位、加法、減法、乘法)。雖然部分實施例可包括專用於特定功能或功能集的許多執行單元,其他實施例可僅包括一執行單元或全部進行所有功能的多個執行單元。將排程器單元(等)456、實體暫存器檔案(等)單元(等)458、及執行叢集(等)460顯示為可能係複數個,因為特定實施例針對特定種類的資料/運算建立個別管線(例如,各者具有自有之排程器單元、實體暫存器檔案(等)單元、及/或執行叢集的純量整數管線、純量浮點/封裝整數/封裝浮點/向量整數/向量浮點管線、及/或記憶體存取管線-且在分離式記憶體存取管線的情形中,實作在其中僅有此管線的執行叢集具有記憶體存取單元(等)464的特定實施例)。也應理解當使用分離式管線時,此等管線的一或多者係無序發佈/執行的而其餘係有序的。
將該組記憶體存取單元464耦接至記憶體單元470,其包括耦接至資料快取單元474的資料TLB單元472,該資料快取單元474耦接至2級(L2)快取單元476。在一範例實施例中,記憶體存取單元464可包括載入單元、儲存位址單元、及儲存資料單元,彼等各者耦接至記憶體單元470中的資料TLB單元472。將指令快取單元434另外耦接至記憶體單元470中的2級(L2)快取單元476。L2快取單元476耦接至一或多個其他級快取記憶體且最終耦接至主記憶體。
藉由範例,範例暫存器更名、無序發佈/執行核心架 構可將管線400實作如下:1)指令提取438進行提取及長度解碼級402及404;2)解碼單元440進行解碼級406;3)更名/配置器單元452進行配置級408及更名級410;4)排程單元(等)456進行排程級412;5)實體暫存器檔案(等)單元(等)458及記憶體單元470進行暫存器讀取/記憶體讀取級414;執行叢集460執行執行級416;6)記憶體單元470及實體暫存器檔案(等)單元(等)458進行寫回/記憶體寫入級418;7)各種單元可能包含在異常管理級422中;且8)引退單元454及實體暫存器檔案(等)單元(等)458進行提交級424。
核心490可支援包括本文描述之指令(等)的一或多個指令集(例如,x86指令集(具有已加有較新版本的特定延伸);加州桑尼維爾的MIPS Technologies的MIPS指令集;加州桑尼維爾的ARM Holdings的ARM指令集(具有選擇性的額外延伸,諸如NEON))。在一實施例中,核心490包括邏輯,以支援封裝資料延伸指令集(例如,AVX1、AVX2),因此容許由許多多媒體應用程式使用的運算使用封裝資料進行。
應理解該核心可支援多執行緒(執行二或多個平行運算或執行緒集),並可用包括時間切片多執行緒、同步多執行緒(其中單一實體核心為實體核心同步多緒的每個執行緒提供邏輯核心)、或彼等之組合(例如,下文的時間切片提取及解碼及同步多執行緒,諸如,在Intel®超執行緒技術中)的各種方式進行。
雖然暫存器更名係在無序執行的背景中描述,應理解暫存器更名可使用在有序架構中。雖然處理器的說明實施例也包括分離式指令及資料快取單元434/474及共享L2快取單元476,其他實施例可具有用於指令及資料二者的單一內部快取記憶體,諸如,1級(L1)內部快取記憶體、或多級內部快取記憶體。在部分實施例中,該系統可包括內部快取記憶體及在核心及/或處理器外部之外部快取記憶體的組合。或者,所有快取記憶體可均在核心及/或處理器外部。
圖5A-B描繪更具體之範例有序核心架構的方塊圖,其核心會係晶片中的數個邏輯區塊(包括相同種類及/或不同種類的其他核心)之一者。邏輯區塊依據應用經由高帶寬互連網路(例如,環狀網路)與特定固定功能邏輯、記憶體I/O介面、及其他必要I/O邏輯通訊。
圖5A係根據本發明的實施例之單處理器核心,連同其之至晶粒上互連網路502的連接及其之2級(L2)快取記憶體的區域子集504的方塊圖。在一實施例中,指令解碼器500支援具有封裝資料延伸指令集的x86指令集。L1快取記憶體506容許將記憶體快取入純量及向量單元的低潛伏期存取。雖然在一實施例中,純量單元508及向量單元510使用分離的暫存器集(分別係純量暫存器512及向量暫存器514),並將在彼等之間轉移的資料寫至記憶體,然後從1級(L1)快取記憶體506讀回(以簡化設計),本發明的其他實施例可使用不同方法(例如,使用單一暫存器 集或包括容許資料在二暫存器檔案之間轉移而無需寫入及讀回的通訊路徑)。
L2快取記憶體區域子集504係分割成分離區域子集的整體L2快取的一部分,每個處理器核心有一子集。各處理器核心具有至其自有之L2快取記憶體區域子集504的直接存取路徑。將由處理器核心讀取的資料儲存在其L2快取記憶體子集504中,並能與存取彼等自有之區域L2快取記憶體子集的其他處理器核心平行地迅速地存取。將由處理器核心寫入的資料儲存在其自有的L2快取記憶體子集504中,且若有需要,從其他子集清除。該環狀網路確保共享資料的一致性。該環狀網路係雙向的,以容許助理,諸如,處理器核心、L2快取記憶體、及其他邏輯方塊在晶片內彼此通訊。各環狀資料路徑在每方向上為1012-位元寬。
圖5B係根據本發明的實施例之圖5A中的處理器核心之一部分的擴大圖。圖5B包括L1快取記憶體504的L1資料快取記憶體506A部分,以及關於向量單元510及向量暫存器514的更多細節。具體地說,向量單元510係寬度16的向量處理單元(VPU)(見寬度16的ALU 528),其執行一或多個整數、單精準浮點、及倍精準浮點指令。VPU支援在記憶體輸入上使用交叉混合單元520交叉混合暫存器輸入、使用數值轉變單元522A-B的數值轉變、及使用複製單元524的複製。寫入遮罩暫存器526容許預測所產生的向量寫入。
圖6係根據本發明的實施例之可具有多於一核心、可具有積集記憶體控制器、並可具有積集圖形處理器之處理器600的方塊圖。圖6中的實線方塊描繪具有單核心602A、系統助理610、一組一或多個匯流排控制器單元616的處理器600,而點虛線方塊描繪選擇性加入之具有多核心602A-N、在系統助理單元610中的一組一或多個積集記憶體控制器單元(等)614、及特殊用途邏輯608的其他處理器600。
因此,處理器600的不同實作可包括:1)具有係積集圖形及/或科學(通量)邏輯之特殊用途邏輯608的CPU(其可包括一或多個核心),且核心602A-N係一或多個通用核心(例如,通用有序核心、通用無序核心、該等二者的組合);2)具有係主要意圖用於圖形及/或科學(通量)之大量特殊用途核心之核心602A-N的共處理器;及3)具有係大量通用有序核心之核心602A-N的共處理器。因此,處理器600可係通用處理器、共處理器、或特殊用途處理器,諸如,網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高通量多積集核心(MIC)共處理器(包括30個或更多核心)、或嵌入式處理器等。該處理器可實作在一或多個晶片上。處理器600可係使用任何數量的處理技術,例如,BiCMOS、CMOS、或NMOS,之一或多個基材的一部分及/或實作在該等基材上。
記憶體階層包括在核心內的一或多級快取記憶體、一組或一或多個共享快取記憶體單元606、及耦接至該組積 集記憶體控制器單元614的外部記憶體(未圖示)。該組共享快取記憶體單元606可包括一或多個中級快取記憶體,諸如,2級(L2)、3級(L3)、4級(L4)、或其他級快取記憶體、末級快取記憶體(LLC)、及/或彼等的組合。雖然在一實施例中,環形為基的互連單元612互連積集圖形邏輯608、該組共享快取記憶體單元606、及系統助理單元610/積集記憶體控制器單元(等)614,其他實施例可使用用於互連此種單元之任何數量的已為人熟知的技術。在一實施例中,在一或多個快取記憶體單元606及核心602A-N之間維持一致性。
在部分實施例中,一或多個核心602A-N有多執行緒的能力。系統助理610包括協調及運算核心602A-N的此等組件。系統助理單元610可包括,例如,電源控制單元(PCU)及顯示單元。PCU可係或包括調節核心602A-N及積集圖型邏輯608之電源狀態所需要的邏輯及組件。顯示單元用於驅動一或多個外部連接的顯示器。
核心602A-N可依據架構指令集係同質或異質的;亦即,二或多個核心602A-N可有執行相同指令集的能力,而其他核心可有僅能執行該指令集的子集或不同指令集的能力。
圖7-10係範例電腦架構的方塊圖。在本技術中為人所知之用於膝上型、桌上型、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位訊號處理器(DSP)、圖形裝置、視訊 遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持裝置、及各種其他電子裝置的其他系統設計及組態也係合適的。通常,能合併如本文揭示之處理器及/或其他執行邏輯之種類繁多的系統或電子裝置通常係合適的。
現在參考至圖7,顯示係根據本發明的一實施例之系統700的方塊圖。系統700可包括一或多個處理器710、715,彼等耦接至控制器集線器720。在一實施例中,控制器集線器720包括圖形記憶體控制器集線器(GMCH)790及輸入/輸出集線器(IOH)750(彼等可在不同晶片上);GMCH 790包括將記憶體740及共處理器745耦接至其的記憶體及圖形控制器;IOH 750將輸入/輸出(I/O)裝置760耦接至GMCH 790。或者,將記憶體及圖形控制器之一或二者積集在處理器內(如本文描述的)、將記憶體740及共處理器745直接耦接至處理器710、且控制器集線器720在具有IOH 750的單一晶片中。
在圖7中以虛線標示額外處理器715的選擇性性質。各處理器710、715可包括本文描述的一或多個處理核心並可係某個版本的處理器600。
記憶體740可係,例如,動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或二者的組合。針對至少一實施例,控制器集線器720經由多分支匯流排,諸如,前側匯流排(FSB),點對點介面,諸如,快速通道互連(QPI)或相似連接795與處理器(等)710、715通訊。
在一實施例中,共處理器745係特殊用途處理器,例如,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等。在一實施例中,控制器集線器720可包括積集圖形加速器。
依據包括架構、微架構、熱、及電力消耗特徵等之優點的度量頻譜,在實體資源710、715之間能有多種不同。
在一實施例中,處理器710執行控制一般種類的資料處理運算的指令。共處理器指令可嵌入於該等指令內。處理器710將此等共處理器指令識別為應由附接之共處理器745執行的種類。因此,處理器710在共處理器匯流排或至共處理器745的其他互連上發佈此等共處理器指令(或代表共處理器指令的控制訊號)。共處理器(等)745接受並執行已接收的共處理器指令。
現在參考至圖8,顯示根據本發明的實施例之第一更具體模範系統800的方塊圖。如圖8所示,多處理器系統800係點對點互連系統,並包括經由點對點互連850耦接的第一處理器870及第二處理器880。各處理器870及880可係某種版本的處理器600。在本發明的一實施例中,處理器870及880分別係處理器710及715,而共處理器838係共處理器745。在另一實施例中,處理器870及880分別係處理器710及共處理器745。
將處理器870及880顯示成分別包括積集記憶體控制器(IMC)單元872及882。處理器870也包括作為其匯流 排控制器單元之一部分的點對點(P-P)介面876及878;相似地,第二處理器880包括P-P介面886及888。處理器870、880可經由使用P-P介面電路878、888的點對點(P-P)介面850交換資訊。如圖8所示,IMC 872及882將處理器耦接至個別記憶體,亦即,記憶體832及834,彼等可係區域地附接至個別處理器之主記憶體的部分。
處理器870、880各者可經由使用點對點介面電路876、894、886、898的個別P-P介面852、854與晶片組890交換資訊。晶片組890可選擇性地經由高效能介面839與共處理器838交換資訊。在一實施例中,共處理器838係特殊用途處理器,例如,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等。
可將共享快取記憶體(未圖示)包括在處理器中或二處理器外側,仍經由P-P互連與處理器連接,使得若處理器置於低電源模式中,可將任一個或二個處理器的區域快取資訊儲存在共享快取記憶體中。
可經由介面896將晶片組890耦接至第一匯流排816。雖然本發明的範圍未受如此限制,在一實施例中,第一匯流排816可係週邊組件互連(PCI)匯流排、或係諸如PCI快速匯流排或其他第三代I/O互連匯流排的匯流排。
如圖8所示,各種I/O裝置814可連同將第一匯流排816耦接至第二匯流排820的匯流排橋接器818耦接至第 一匯流排816。在一實施例中,將一或多個額外處理器(等)815,諸如,共處理器、高通量MIC處理器、GPGPU的加速器(諸如,圖形加速器或數位訊號處理器(DSP)單元)、場效可規劃閘極陣列、或任何其他處理器,耦合至第一匯流排816。在一實施例中,第二匯流排820可係低插腳數(LPC)匯流排。在一實施例中,可將各種裝置耦接至第二匯流排820,包括,例如,鍵盤及/或滑鼠822、通訊裝置827、以及儲存單元828,諸如,硬碟驅動器,或可包括指令/碼及資料830的其他大量儲存裝置。另外,可能將音訊I/O 824耦接至第二匯流排820。須注意其他架構也係可能的。例如,取代圖8的點對點架構,系統可實作多分支匯流排或其他此種架構。
現在參考至圖9,顯示根據本發明的實施例之第二更具體模範系統900的方塊圖。圖8及9中的相似元件有相似參考數字,且圖8的特定態樣已從圖9省略,以避免混淆圖9的其他態樣。
圖9描繪處理器870、880可分別包括積集記憶體及I/O控制邏輯(「CL」)872及882。因此,CL 872、882包括積集記憶體控制器單元並包括I/O控制邏輯。圖9描繪不僅將記憶體832、834耦接至CL 872、882,也將I/O裝置914耦接至控制邏輯872、882。將傳統I/O裝置915耦接至晶片組890。
現在參考至圖10,顯示係根據本發明的實施例之SoC 1000的方塊圖。圖10中的相似元件有相似的參考數字。 又,虛線方塊係在更先進SoC上的選擇性特性。在圖10中,將互連單元(等)1002耦接至:應用處理器1010,其包括一組一或多個核心602A-N及共享快取記憶體單元(等)606;系統助理單元610;匯流排控制器單元(等)616;積集記憶體控制器單元(等)614;一組一或多個共處理器1020,彼等可包括積集圖形邏輯、影像處理器、音訊處理器、及視訊處理器;靜態隨機存取記憶體(SRAM)單元1030;直接記憶體存取(DMA)單元1032;用於耦接至一或多個外部顯示器的顯示單元1040。在一實施例中,共處理器(等)1020包括特殊用途處理器,諸如,網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、或嵌入式處理器等。
本文揭示之機制的實施例可用硬體、軟體、韌體、或此種實作方式的組合實作。本發明的實施例可實作為在可程式化系統上執行的電腦程式或程式碼,該系統包含至少一處理器、儲存系統(包括揮發性及非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
可能將程式碼,諸如描繪於圖8中的碼830,施用至輸入指令,以進行本文描述的功能並產生輸出資訊。可用已知方式將輸出資訊施用至一或多個輸出裝置。針對此申請案的用途,處理系統包括具有處理器,諸如;數位訊號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器,的任何系統。
程式碼可用高階程序或物件導向程式語言實作,以與 處理系統通訊。若有需要,程式碼也可用組合或機器語言實作。實際上,本文描述的機制並未受限在任何特定程式語言範圍中。在任何情形中,語言可係編譯或解譯語言。
至少一實施例的一或多個態樣可藉由儲存在機器可讀媒體上之代表處理器內的各種邏輯的代表性指令實作,當其由機器讀取時,導致機器製造邏輯以進行本文描述的技術。可將稱為「IP核心」的此種代表儲存在實體機器可讀媒體中,並供應至各種客戶或製造設施,以載入至實際產生邏輯或處理器的製造機器中。
此種機器可讀儲存媒體可不受限制地包括藉由機器或裝置製造或形成的非暫態實體製品配置,包括儲存媒體,諸如,硬碟、任何其他種類的碟片,包括軟碟、光碟、光碟唯讀記憶體(CD-ROM)、可重寫光碟(CD-RW)、以及磁光碟、半導體裝置,諸如,唯讀記憶體(ROM)、隨機存取記憶體(RAM),諸如,動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式化唯讀記憶體(EPROM)、快閃記憶體、電可抹除可程式化唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光學卡、或適合儲存電子指令之任何其他種類的媒體。
因此,本發明的實施例也包括包含指令或包含設計資料,諸如,硬體描述語言(HDL),其界定本文描述之結構、電路、設備、處理器、及/或系統特性的非暫態實體機器可讀媒體。此種實施例也可稱為程式產品。
在部分情形中,指令變換器可用於將指令從來源指令 集變換為目標指令集。例如,指令變換器可將指令轉換(例如,使用靜態二進位轉換、包括動態編譯的動態二進位轉換)、變形、模仿、或另外變換為待由核心處理的一或多個其他指令。指令變換器可用軟體、硬體、韌體、或彼等的組合實作。指令變換器可在處理器上、在處理器外、或部分在處理器上且部分在處理器外。
圖11係根據本發明的實施例之使用軟體指令變換器將來源指令集中的二進位指令變換為目標指令集中之二進位指令的對照方塊圖。在說明實施例中,指令變換器係軟體指令變換器,雖然指令變換器可替代地以軟體、韌體、硬體、或彼等的各種組合實作。圖11顯示可使用x86編譯器1104編譯以高階語言1102撰寫的程式,以產生可由具有至少一x86指令集核心的處理器1116原生地執行的x86二進位碼1106。具有至少一x86指令集核心的處理器1116代表能藉由相容地執行或另外處理(1)Intel x86指令集核心的實質指令集部分,或(2)目標為在具有至少一x86指令集核心的Intel處理器上運行之應用程式或其他軟體的目的碼版本,進行與具有至少一x86指令集核心之Intel處理器實質相同之功能的任何處理器,以實現與具有至少一x86指令集核心之Intel處理器實質相同的結果。x86編譯器1104代表可運算以使用或不使用額外聯結處理以產生能在具有至少一x86指令集核心的處理器1116上執行之x86二進位碼1106(例如,目的碼)的編譯器。相似地,圖11顯示可使用替代指令集編譯器1108編 譯以高階語言1102撰寫的程式,以產生可為不具有至少一x86指令集核心的處理器1114(例如,具有執行加州桑尼維爾的MIPS Technologies的MIPS指令集及/或加州桑尼維爾的ARM Holdings的ARM指令集之核心的處理器)原生地執行的替代指令集二進位碼1110。指令變換器1112用於將x86二進位碼1106變換為可為不具有x86指令集核心的處理器1114原生地執行的碼。此已變換碼不太可能與替代指令集二進位碼1110相同,因為難以產生能作到此的指令變換器;然而,已變換碼將完成一般運算且係由來自替代指令集的指令構成。因此,指令變換器1112代表經由模仿、模擬、或任何其他處理容許不具有x86指令集處理器或核心的處理器或其他電子裝置執行x86二進位碼1106的軟體、韌體、硬體、或彼等的組合。
用於在成組的向量元件上進行歸約運算的方法及設備
「稀疏更新」係向量化會對其有利的重要演算法模式。此處,讀取-修改-寫入運算可在間接定址記憶體位置上進行(例如,載入A[B[i]]、加某物至其、及儲存該值回A[B[i]]中)。向量化此種運算包含實施收集-修改-散佈運算。例如,此種運算可包含藉由收集運算針對i的16個連續值進行該形式A[B[i]]的16次間接戴入、進行單指令多資料(SIMD)計算;及散佈新值回記憶體。然而,此向量化假設單一收集/散佈指令將存取各記憶體位置不超過一 次。例如,若B[i]的二個連續值相同,則用於第二者的讀取-修改-寫入相依於第一者。因此,以SIMD方式同時實施此違反此等相依性且可導致不正確結果。
本發明的一實施例使用比較向量暫存器內之元件以偵測重複的衝突偵測指令,諸如,VPCONFLICT。該指令可特別針對與該輸入之所有先前元件的相等性測試其向量暫存器輸入的每個元件(例如,較接近最低有效位元(LSB)的所有元件),並將此等比較的結果輸出為成組的位元向量。衝突偵測指令提供決定元件是否具有在相同SIMD暫存器內包含其他元件之資料相依性的方式。
圖12描繪具有包含成組之資料元件1200-1203的輸入向量暫存器1220及輸出暫存器1230以儲存衝突偵測指令之結果1210-1213的範例。在運算時,衝突偵測指令比較資料元件1200-1203各者與其之前的資料元件。第一元件1200不與另一元件比較(因為,無元件在其之前),並在輸出向量暫存器1230中的第一元件中將結果儲存為指示沒有衝突的0000。第二元件1201與第一元件1200比較。因為該等元件不相等,結果也係儲存在輸出向量暫存器1230之第二位置1211中的0000(無衝突)。因為第三元件1202等於第一元件1200,將0001的結果儲存在輸出向量暫存器1230的第三輸出位置1212中。在一實施例中,0001係二進位值且在結果之第一位置中的1指示第三元件1202等於輸入向量暫存器1220的第一元件1200。最後,因為第四元件1203等於第一元件1200及第 三元件1202,將0101的值設定在輸出向量暫存器1230的第四位置1213中(以第一位元位置中的第一個1指示與第一資料元件1200的相等性及以第三位元位置中的第二個1指示與第三資料元件1202的相等性)。
在跨SIMD暫存器元件的可能資料相依性可另外防止向量化的情形中,識別SIMD暫存器的分離元件內之重複值的能力允許純量碼向量化。例如,相依性能藉由決定具有唯一索引之元件的子集、以SIMD方式計算彼等、然後循環以重試殘餘元件、因此將具有相同索引之元件上的計算序列化而實施。在上述範例中,前二個元件會同時計算,然後第三元件自行計算(從第一元件的輸出值取得輸入值),且最後元件自行計算(從第三元件的輸出值取得輸入值)。此方式以下列範例迴路表示,其在N個資料元件的陣列上進行運算(「計算」)並向量化以在每個迭代中在SIMD_WIDTH個元件上運算:
為了簡明,已將Compute_Mask_of_Unique_Remaining_Indices函數的討論省略。
在將上述碼範例向量化的同時,迴路的向量化版本有時能導致比其純量等效版本更低的效能,使其難以預測向量化是否有利。藉由向量化提供的效能加速特別相依於索引SIMD暫存器中有多少元件(「indices」)具有重複值。此方法在任何明定索引有少數實例時運作良好-亦即,當常見情形係具有while迴路的少數迭代時。然而,當相同索引有許多實例時,執行時間可劣於純量執行,因為「while」迴路的最大迭代數等於SIMD寬度。
為解決此等問題,下文描述之本發明的實施例包括在SIMD暫存器內的元件上並行地進行多個樹歸約、每個唯一索引值一個歸約的技術。此方法具有最多log2SIMD_WIDTH的計算步驟。本發明的實施例特別能跨成組值並行地進行任意數量的二元樹歸約,該等成組值在SIMD暫存器內具有任意次序。衝突偵測指令,諸如,VPCONFLICT,的飽含資訊輸出可用於從具有相同索引的成對SIMD元件迭代地識別及組合部分結果。當新指令,VPOPCNT,允許將共享索引的各元件排序時,可用於此方法。VPOPCNT指令的一實施例計算各SIMD元件中的已設定位元(亦即,1)數。
在單一SIMD暫存器內,可有必需經由一或多個歸約模式組合的多個值。例如,應用可在單一SIMD暫存器內具有必需組合的成組值{a0,b0,a1,a2,b1,a3,a4,b2},使得所有該等「a」值加總,並所有該等「b」值加總,而僅產生二值{a0+a1+a2+a3+a4,b0+b1+b2}。給定僅具有二輸入的歸約運算(例如,處理器中的加指令),在有多種方式實行此的同時,最有效的方式係跨SIMD暫存器的元件並行地進行多個二元樹歸約。
本發明的實施例解決跨向量暫存器的通道進行多個暫存器中歸約的問題,而不必(A)針對各獨立歸約將歸約運算序列化或(B)計數關聯「索引」向量內之各唯一索引值的實例數。如下文所更詳細地描述的,此可藉由產生識別獨立歸約的第一輸出及產生可用於識別二元歸約樹中的左 對右子節點的第二輸出而完成。在一實施例中,第一輸出係使用VPCONFLICT指令產生且第二輸出係使用VPOPCNT指令產生。
如圖13所示,SIMD樹歸約邏輯1305的一實施例將二個向量暫存器取用為輸入:包含待歸約(例如,加總)之值的「值」向量暫存器1302,及指示「值」向量中的何值(或通道)與另一者關聯的「索引」向量暫存器1301。若「索引」向量暫存器1301中的二通道具有相等值,則彼等包含在相同的樹歸約中。若「索引」向量暫存器1301中的二通道具有不同值,則彼等包含在分離歸約中。SIMD樹歸約邏輯1305的輸出係包含最左側通道(亦即,最接近最高有效位元組)中的各歸約之結果的累積向量暫存器1303,該最左側通道包含與該歸約關聯之索引值的實例。
在本文描述之實施例使用各暫存器的最高有效位元/位元組靠「左」且最低有效位元/位元組靠「右」之配置的同時,本發明的基本原理並未受限於此種配置。例如,在替代實施例中,最低有效位元/位元組靠「左」且最高有效位元/位元組靠「右」。針對此實施例,在本揭示發明中對「左」及「最左」的任何參考可用「右」或「最右」取代且反之亦然。
在圖13的範例中,索引向量暫存器1301內的值A、B、C、及D代表任意(唯一)整數值。圖13也描繪如何藉由SIMD樹歸約邏輯進行歸約運算使用各迭代(顯示迭代 0-2)將來自值向量1302的不同組值加總。例如,索引向量暫存器1301中之A的各實例識別值向量暫存器中之待歸約的值組:d15、d14、d8、d3、及d0。在最終迭代後,此等值已加總以形成單一值,α,其儲存在累積向量1303的最左側資料元件位置中(與索引向量中之最左側A的位置一致)。β的值以使用與來自索引向量之B的各實例(d13、d11、d10、d9、d6、d5、d4、及d1)關聯之值的相同方式形成,並將β的最終值儲存在累積向量暫存器1303中左側第三個資料元件位置(與索引向量中之最左側B的位置一致)。
以下虛擬碼代表暫存器中樹歸約,其可基於索引值由SIMD樹歸約邏輯1305進行:
在運算時,向量暫存器「value_vec」(值向量暫存器1302)包含待歸約的值,且向量暫存器「index_vec」(索引向量暫存器1301)包含此等值的索引或關聯性。例如,在一實施例中,「index_vec」內的相等值意指「value_vec」中的對應值屬於相同歸約。VEC_OP函數代表正常會在歸約中使用的任何運算,其典型地係交換性及結合性的數學運算,諸如,整數加法。具有大括號的左側值(例如,「cnt_vec{eo_mask}」)代表在遮罩下進行的向量運算。針對「i_vec{eo_mask}」運算,應將任何無效通道歸零。針對「accum_vec{eo_mask}」運算,任何無效通道應保持「accum_vec_」的先前值。
一旦完成,「accum_vec」向量包含並行發生之所有歸約的結果,包含在「index_vec」中的每個唯一值有一個結果。各歸約的結果將在「accum_vec」暫存器1303的最左側通道(最接近MSB)中,其具有與「index_vec」中的該歸約關聯的索引值(如圖13中所描繪的)。
在「索引」向量中的所有值均係唯一的情形中(亦即,「無衝突」情形),此等技術的成本相當小(VPCONFLICT、及其將失敗之最初「while」迴路條件測試、及迴路分支的成本)。在「索引」向量中的所有值均 相同的情形中(亦即,「最多衝突」情形),此等技術將迭代「log2N'」次,其中N係向量寬度。此與上文提及之先前實作相反,因為將各歸約有效地序列化(例如,在每次歸約中每次累積一值/通道),其會替代地執行N次迭代。通常,本發明的實施例執行「O(log2N)」次迭代以跨「值」向量1302並行地進行任意數量的歸約,其中N係在「索引」向量1301中具有最多實例之值的實例數。例如,在圖13中,值「B」在「索引」向量中具有最多實例,具有總共N=8個實例(有A的5個實例、C的1個實例、及D的2個實例)。例如,本文描述的技術會迭代3次(log2N),同時先前的演算法會迭代8次(N)。
現在將參考圖14及15描述具體範例。為了清楚,此詳細範例執行遵循圖13所示的範例。如本文所使用的,最低有效位元(LSB)及最低有效通道(LSL)係所示的最右側值(例如,向量暫存器={通道15,通道14,...,通道0})。為了清楚,使用底線以視覺地將用於遮罩值的位元分組。
輸入值以及第一衝突偵測運算(例如,VPCONFLICT)的結果如下,其中A、B、C、及D代表唯一及任意整數值,且d0至d15代表包含在歸約中的值:
圖14描繪在輸入向量暫存器1402內產生最初「vc_vec」值的衝突偵測運算(例如,以VPCONFLICT實作)。在說明實施例中,輸出向量暫存器1402儲存16個資料元件,各者與儲存在索引資料暫存器內之索引資料元件的一者關聯,具有代表與對應通道關聯之先前衝突的元件值。如上文提及的,索引向量暫存器1301中的各元件與最接近最低有效通道/位元的所有其他元件比較。因此,在位置#4中的索引資料元件(本範例中係B)與位置#3(A)、位置#2(D)、位置#1(B)、及位置#0(A)中的資料元件比較。若資料元件等於較接近最低有效通道之資料元件的任一者,則設定輸出向量暫存器1402內的對應位元。如此,例如,索引向量暫存器1301左側第二個B產生該輸出11001110010,具有指示索引向量暫存器1301中的其他B之位置的1。如所描繪的,然後在輸出向量暫存器1402中將此值儲存在對應於對其進行比較的B之位置的位置(在本範例中以十六進位值0x0672表示)。相似運算對儲存在索引向量暫存器1301中的各索引值進行。
其次,只要有至少一個位元以輸出向量暫存器1402中的「vc_vec」值設定,迭代上文所陳述的「while」迴路。為了說明範例,歸約運算係加法(例如,VEC_OP=vpadd)。因此,迭代0的結果如下:
圖15描繪pc_vec值如何對迭代0決定及儲存為向量暫存器1501內的資料元件。pc_vec向量暫存器1501中的各資料元件特別對應於索引向量暫存器1301中的索引並具有等於儲存在索引向量暫存器1301中較接近最低有效通道/位元的索引值之實例數的值。例如,pc_vec向量暫存器1501中的最左側值4與索引向量暫存器1301中之索引A的最左側實例關聯,並指示在索引向量暫存器1301中有索引A的4個其他實例(亦即,在A之最左側實例的右方)。相似地,pc_vec向量暫存器1501中的值7與位於索引向量暫存器中的對應位置中之索引B的實例關聯(亦即,距說明範例左側2個位置)。值7指示有索引B的7個實例儲存在索引向量暫存器1301右側。
另外,圖15描繪如何更新eo_mask暫存器1502內的位元。特別係將與各索引值關聯的位元設定成1以指示在索引向量暫存器1301內靠右之該索引值的奇數其他實例。因此,針對明定索引值,在eo_mask暫存器1502內 與索引值關聯的位元將在1及0之間交替。
在迭代0之後,因為仍有位元以輸出向量暫存器1402中的「vc_vec」值設定,進行另一迭代(「迭代1」)。
在迭代1之後,因為仍有位元以輸出向量暫存器1402中的「vc_vec」值設定,進行另一迭代。
因為輸出向量暫存器1402中的「vc_vec」現在全部包含零,脫離迴路。迴路的結果如下,具有用於參考而重複的輸入:
將index_vec中的值粗體化以強調何等通道代表最終歸約結果,將accum_vec中的值粗體化以與index_vec上方的粗體化匹配。須注意各歸約的結果係在具有與歸約關聯之索引值的最左側通道中。在此範例中,最左側索引值「A」與結果「d15+d14+d8+d3+d0」關聯(通道15)、最左側索引值「B」與結果「d13+d11+d10+d9+d6+d5+d4+d1」關聯(通道13)、最左側索引值「C」與結果「d12」關聯(通道12)、且最左側索引值「D」與結果「d7+d2」關聯(通道7)。此與圖13所呈現的最終狀態匹配,標記為「在迭代2後」。
由於散佈指令定義,具有最左側通道(或最高有效通道(MSL))中的結果在某些架構(例如,IA)上係有利的。在散佈中的多個元件具有相同索引(亦即,寫至相同記憶體位置)的情形中,最左側通道(MSL)的值覆寫任何其他通道的值。在最左側用於此特定實施例為佳的同時,本發明的基本原理並未受限於將最左側通道使用為結果。明定索引 值的結果可儲存在與該索引值關聯的最左側或最右側通道中,因為當重複發生時,散佈指令常界定成寧可用與該索引值關聯的最左側或最右側值提供決定性結果。在以上呈現的範例碼中,偏好與明定索引值關聯的最左側通道。
根據本發明之一實施例的方法描繪於圖16中。該方法可實作在上述架構的背景中,但未受限於任何特定系統或處理器架構。
在1601,跨索引通道偵測衝突(例如,另外與最低有效位元/通道相等的索引值),並將結果儲存在VC_VEC暫存器中。例如,在一實施例中,衝突係使用衝突偵測指令,諸如,VPCONFLICT,偵測(見,例如,圖12及關聯本文)。
在1602產生是否有任何衝突存在的決定。此可藉由,例如,檢查VC_VEC是否具有任何目前已設定位元而決定。若為否,則處理終止。若為真,則在1603,將具有相同索引值的通道在彼等個別的歸約樹中標記為左及右子節點。在一實施例中,此使用VPOPCNT(VC_VEC)&0x1完成(如上文描述的)。在一實施例中,此位元序列使用為遮罩(每通道一LSB),其將左子節點標記為有效(例如,左子節點具有靠右的奇數衝突,同時右子節點具有偶數衝突)。
在1604,針對各通道,針對指示在此通道右方(LSL)具有相等索引值之最左側通道(MSL)的最高有效1計算該位元索引。在1605,將右子節點移動成與左子節點對 準,將結果置入暫時位置中。在一實施例中,此使用向量排列/變換指令完成。
在1606,歸約運算使用原始資料施用至來自1605的暫時結果以組合左及右子節點,將結果置入左子節點的通道中。在1607,廣播在1603產生的遮罩並與VC-VEC暫存器中的目前值進行逐位元AND,更新VC-VEC暫存器並因此清除VC_VEC暫存器中與右子節點關聯之位元(亦即,將此等子節點從未來迭代中的考慮移除)。然後處理返回至決定是否有任何衝突殘存的1602(例如,檢查VC_VEC是否具有任何設定成1的位元)。若為否,處理終止;若為真,進行經由1603-1607的另一迭代。
上述技術的一應用係在「直方圖」型運算中,其之一範例於以下顯示。直方圖運算常用在各種應用中,包括影像處理。
//Simple histogram loop for(int i=0;i<N;i++){ a[b[i]]+=1; }
在迴路中,諸如,上述「直方圖」迴路,防止此迴路之原生向量化的複雜因子係「b[j]」及「b[k]」的值可相等,在單一簡單向量化迴路迭代內的相同「a」元件上導致競賽條件。此稱為「衝突」。使用上述技術藉由首先將每個唯一索引值的任何衝突值組合(歸約)至單一值中而移除任何衝突。
在上述之簡單直方圖的情形中,「索引」向量會係向 量寬度「b[i]」值且「值」向量會在每條通道中具有「1」的值。若「+=」運算的右手側係計算結果,而非僅係常數「1」,則「值」向量會保持向量化計算的結果。然後歸約迴路可結合收集及散佈指令使用以向量化上述直方圖迴路。
在上述說明書中,本發明的實施例已參考本發明之具體例示實施例描述。然而,明顯地可對其產生各種修改及改變而不脫離在隨附的申請專利範圍中陳述之本發明之更廣泛的精神及範圍。該說明及該等圖式因此應以說明而非限制的角度看待。
本發明的實施例可包括各種步驟,其已於上文描述。該等步驟可實施在可用於導致通用或專用處理器實施該等步驟的機器可執行指令。或者,此等步驟可藉由包含用於實施此等步驟之硬接線邏輯的特定硬體組件,或藉由程式化電腦組件及客製硬體組件的任何組合實施。
如本文描述的,指令可指硬體的特定組態,諸如,組態成實施特定操作或具有預定功能的特定應用積體電路(ASIC)或儲存在具現在非暫態電腦可讀媒體中之記憶體中的軟體指令。因此,圖式中所示的技術能使用儲存在一或多個電子設備(例如,終端站、網路元件等)上並在其上執行的碼及資料實現。此種電子設備使用電腦機器可讀媒體儲存及通訊(內部及/或透過網路與其他電子設備)碼及資料,諸如,非暫態電腦機器可讀儲存媒體(例如,磁碟;光碟;隨機存取記憶體;唯讀記憶體、快閃記憶體設備; 相變記憶體)及暫態電腦機器可讀通訊媒體(例如,電、光、音、或其他形式的傳播信號,諸如,載波、紅外線信號、數位信號等)。此外,此種電子設備典型包括耦接至一或多個其他組件,諸如,一或多個儲存設備(非暫態機器可讀儲存媒體)、使用者輸入/輸出設備(例如,鍵盤、觸控螢幕、及/或顯示器)、及網路連接,的一組一或多個處理器。該組處理器及其他組件的耦接典型地經由一或多個匯流排及橋接器(也稱為匯流排控制器)。儲存設備及運載網路流量的信號分別代表一或多個機器可讀儲存媒體及機器可讀通訊媒體。因此,明定電子設備的儲存設備典型儲存用於在該電子設備之該組一或多個處理器上執行的碼及/或資料。當然,本發明之實施例的一或多個部分可使用軟體、韌體、及/或硬體的不同組合實現。在此實施方式各處,為了解釋的目的,陳述許多具體細節以提供對本發明的徹底瞭解。然而,對熟悉本發明之人士將係明顯的,可能實現本發明而無需部分此等具體細節。在特定實例中,已為人熟知的結構及功能未使用詳盡細節描述以避免混淆本發明的主題內容。因此,本發明的範圍及精神應依據下文的申請專利範圍判斷。
100‧‧‧通用向量親和指令格式
105‧‧‧無記憶體存取指令樣板
110‧‧‧無記憶體存取、全捨入控制型運算指令樣板
115‧‧‧無記憶體存取、資料轉移型運算指令樣板
120‧‧‧記憶體存取指令樣板
125‧‧‧記憶體存取、時間性指令樣板
140‧‧‧格式欄位
142‧‧‧基本運算欄位
144‧‧‧暫存器索引欄位
146‧‧‧修飾欄位
146A‧‧‧無記憶體存取
146B‧‧‧記憶體存取
150‧‧‧增益運算欄位
152‧‧‧甲欄位
152A‧‧‧RS欄位
152A.1‧‧‧捨入
152A.2‧‧‧資料轉移
152B‧‧‧驅逐提示欄位
152B.1‧‧‧時間性
152B.2‧‧‧非時間性
154‧‧‧乙欄位
154A‧‧‧捨入控制欄位
154B‧‧‧資料轉移欄位
154C‧‧‧資料操控欄位
156‧‧‧抑制所有浮點異常(SAE)欄位
158‧‧‧捨入運算控制欄位
160‧‧‧比例欄位
162A‧‧‧位移欄位
162B‧‧‧位移因子欄位
164‧‧‧資料元件寬度欄位
168‧‧‧類別欄位
168A‧‧‧類別A
170‧‧‧寫入遮罩欄位
172‧‧‧立即欄位
174‧‧‧全運算碼欄位

Claims (26)

  1. 一種處理器,包含:值向量暫存器,用以儲存待歸約的複數個資料元件值;索引向量暫存器,用以儲存指示該值向量暫存器中的何等值彼此關聯的複數個索引值;單指令多資料(SIMD)歸約邏輯,藉由將如由該索引向量暫存器中之該等索引值所指示的彼此關聯之來自該值向量暫存器的資料元件值組合,以在該值向量暫存器內的該等資料元件值上進行歸約操作;及累積向量暫存器,用以儲存由該SIMD歸約邏輯產生之該歸約操作的結果。
  2. 如申請專利範圍第1項的處理器,其中為進行該歸約操作,該SIMD歸約邏輯用以決定具有該相同索引值之資料元件值的群組,並用以組合具有該等相同索引值的該等資料元件以產生複數個結果,該複數個結果各者包含共享該相同索引值的資料元件值之群組的算術組合。
  3. 如申請專利範圍第2項的處理器,其中該SIMD歸約邏輯用以將各結果儲存在該累積向量暫存器的明定資料元件位置內。
  4. 如申請專利範圍第3項的處理器,其中該SIMD歸約邏輯用以進行該歸約操作,係藉由在共享該相同索引值的元件值上進行複數個組合迭代,該等組合迭代之各者組合資料元件值對直到在最終迭代中到達最終結果。
  5. 如申請專利範圍第3項的處理器,其中該累積向量暫存器中的各明定資料元件位置包含對應於該索引向量暫存器中具有相對於相同索引值的其他位置之最高有效位置的關聯索引值之位置的位置,或對應於該索引向量暫存器中具有相對於相同索引值的其他位置之最低有效位置的關聯索引值之位置的位置。
  6. 如申請專利範圍第1項的處理器,其中該值向量暫存器內的該等資料元件值各者與該處理器中的SIMD通道關聯,且其中進行該歸約操作更包含:跨該等通道各者計算衝突,以產生衝突結果並儲存該等衝突結果在衝突目的暫存器中。
  7. 如申請專利範圍第6項的處理器,其中進行該歸約操作更包含:將具有該相同索引值的各通道標記為分別歸約樹中的左及右子節點以產生位元序列。
  8. 如申請專利範圍第7項的處理器,其中進行該歸約操作更包含:將該位元序列使用為將該等左子節點標記為有效或將該等右子節點標記為有效的遮罩。
  9. 如申請專利範圍第8項的處理器,其中該歸約操作更包含對各通道計算最高有效1的位元索引,若該遮罩將該等左子節點標記為有效,其指示具有與右側相等之索引值的最左側通道,或若該遮罩將該等右子節點標記為有效,其指示具有與左側相等之索引值的最右側通道。
  10. 如申請專利範圍第9項的處理器,其中該歸約操作更包含若該遮罩將該等左子節點標記為有效,將右子節點移動成與左子節點對準,或若該遮罩將該等右子節點標記為有效,將左子節點移動成與右子節點對準,以產生暫時結果並將該暫時結果放入暫時位置。
  11. 如申請專利範圍第10項的處理器,更包含使用原始資料將歸約操作施用至該暫時結果以組合左及右子節點以產生新結果,且若該遮罩將該等左子節點標記為有效,將該新結果放入與該左子節點關聯的該通道中,或若該遮罩將該等右子節點標記為有效,將該新結果放入與該右子節點關聯的該通道中。
  12. 如申請專利範圍第10項的處理器,其中進行該歸約操作更包含:若該遮罩將該等左子節點標記為有效,進行該遮罩及該等衝突結果的逐位元AND操作,從而清除該衝突目的暫存器中與一或多個右子節點關聯的位元,並將該等右子節點從未來迭代中的考量移除,或若該遮罩將該等右子節點標記為有效,進行該遮罩及該等衝突結果的逐位元AND操作,從而清除該衝突目的暫存器中與一或多個左子節點關聯的位元,並將該等左子節點從未來迭代中的考量移除。
  13. 如申請專利範圍第2項的處理器,其中該SIMD歸約邏輯決定具有該相同索引值之資料元件值的群組,並藉由相加具有該等相同索引值的該等資料元件而組合該等 資料元件以產生複數個結果,該複數個結果各者包含共享該相同索引值的資料元件值之群組的和。
  14. 一種方法,包含:將待歸約的複數個資料元件值儲存在值向量暫存器中;將指示該值向量暫存器中的何等值彼此關聯的複數個索引值儲存在索引向量暫存器中;藉由將如由該索引向量暫存器中之該等索引值所指示的彼此關聯之來自該值向量暫存器的資料元件值組合,在該值向量暫存器內的該等資料元件值上進行歸約操作;及儲存該歸約操作的結果在累積向量暫存器中。
  15. 如申請專利範圍第14項的方法,其中為進行該歸約操作,決定具有該相同索引值之資料元件值的群組,並組合具有該等相同索引值的該等資料元件以產生複數個結果,該複數個結果各者包含共享該相同索引值的資料元件值之群組的算術組合。
  16. 如申請專利範圍第15項的方法,更包含將各結果儲存在該累積向量暫存器的明定資料元件位置內。
  17. 如申請專利範圍第16項的方法,更包含進行該歸約操作,係藉由在共享該相同索引值的元件值上進行複數個組合迭代,該等組合迭代之各者組合資料元件值對直到在最終迭代中到達最終結果。
  18. 如申請專利範圍第16項的方法,其中該累積向量暫存器中的各明定資料元件位置包含對應於該索引向量 暫存器中具有相對於相同索引值的其他位置之最高有效位置的關聯索引值之位置的位置,或對應於該索引向量暫存器中具有相對於相同索引值的其他位置之最低有效位置的關聯索引值之位置的位置。
  19. 如申請專利範圍第14項的方法,其中該值向量暫存器內的該等資料元件值各者與處理器中的SIMD通道關聯,且其中進行該歸約操作更包含:跨該等通道各者計算衝突,以產生衝突結果並儲存該等衝突結果在衝突目的暫存器中。
  20. 如申請專利範圍第19項的方法,其中進行該歸約操作更包含:將具有該相同索引值的各通道標記為分別歸約樹中的左及右子節點以產生位元序列。
  21. 如申請專利範圍第20項的方法,其中進行該歸約操作更包含:將該位元序列使用為將該等左子節點標記為有效或將該等右子節點標記為有效的遮罩。
  22. 如申請專利範圍第21項的方法,其中該歸約操作更包含對各通道計算最高有效1的位元索引,若該遮罩將該等左子節點標記為有效,其指示具有與右側相等之索引值的最左側通道,或若該遮罩將該等右子節點標記為有效,其指示具有與左側相等之索引值的最右側通道。
  23. 如申請專利範圍第22項的方法,其中該歸約操作更包含若該遮罩將該等左子節點標記為有效,將右子節 點移動成與左子節點對準,或若該遮罩將該等右子節點標記為有效,將左子節點移動成與右子節點對準,以產生暫時結果並將該暫時結果放入暫時位置。
  24. 如申請專利範圍第23項的方法,更包含使用原始資料將歸約操作施用至該暫時結果以組合左及右子節點以產生新結果,且若該遮罩將該等左子節點標記為有效,將該新結果放入與該左子節點關聯的該通道中,或若該遮罩將該等右子節點標記為有效,將該新結果放入與該右子節點關聯的該通道中。
  25. 如申請專利範圍第23項的方法,其中進行該歸約操作更包含:若該遮罩將該等左子節點標記為有效,進行該遮罩及該等衝突結果的逐位元AND操作,從而清除該衝突目的暫存器中與一或多個右子節點關聯的位元,並將該等右子節點從未來迭代中的考量移除,或若該遮罩將該等右子節點標記為有效,進行該遮罩及該等衝突結果的逐位元AND操作,從而清除該衝突目的暫存器中與一或多個左子節點關聯的位元,並將該等左子節點從未來迭代中的考量移除。
  26. 如申請專利範圍第15項的方法,更包含決定具有該相同索引值之資料元件值的群組,並藉由相加具有該等相同索引值的該等資料元件而組合該等資料元件以產生複數個結果,該複數個結果各者包含共享該相同索引值的資料元件值之群組的和。
TW104138807A 2014-12-23 2015-11-23 用於在成組的向量元件上進行歸約運算的方法及設備 TWI575454B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/581,478 US9851970B2 (en) 2014-12-23 2014-12-23 Method and apparatus for performing reduction operations on a set of vector elements

Publications (2)

Publication Number Publication Date
TW201643705A true TW201643705A (zh) 2016-12-16
TWI575454B TWI575454B (zh) 2017-03-21

Family

ID=56129476

Family Applications (2)

Application Number Title Priority Date Filing Date
TW105142765A TWI616817B (zh) 2014-12-23 2015-11-23 用於在成組的向量元件上進行歸約運算的方法及設備
TW104138807A TWI575454B (zh) 2014-12-23 2015-11-23 用於在成組的向量元件上進行歸約運算的方法及設備

Family Applications Before (1)

Application Number Title Priority Date Filing Date
TW105142765A TWI616817B (zh) 2014-12-23 2015-11-23 用於在成組的向量元件上進行歸約運算的方法及設備

Country Status (7)

Country Link
US (1) US9851970B2 (zh)
EP (1) EP3238044A4 (zh)
JP (1) JP6699845B2 (zh)
KR (1) KR102449616B1 (zh)
CN (1) CN107003843B (zh)
TW (2) TWI616817B (zh)
WO (1) WO2016105764A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI673648B (zh) * 2017-04-03 2019-10-01 美商谷歌有限責任公司 向量縮減處理器

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10996959B2 (en) * 2015-01-08 2021-05-04 Technion Research And Development Foundation Ltd. Hybrid processor
US10162603B2 (en) * 2016-09-10 2018-12-25 Sap Se Loading data for iterative evaluation through SIMD registers
EP3336692B1 (en) * 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
US10268479B2 (en) * 2016-12-30 2019-04-23 Intel Corporation Systems, apparatuses, and methods for broadcast compare addition
US10275217B2 (en) * 2017-03-14 2019-04-30 Samsung Electronics Co., Ltd. Memory load and arithmetic load unit (ALU) fusing
WO2019005165A1 (en) * 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
CN109034382A (zh) * 2017-10-30 2018-12-18 上海寒武纪信息科技有限公司 场景或物体的识别方法及相关产品
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
GB2574817B (en) * 2018-06-18 2021-01-06 Advanced Risc Mach Ltd Data processing systems
US11579883B2 (en) * 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11625393B2 (en) * 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11294670B2 (en) * 2019-03-27 2022-04-05 Intel Corporation Method and apparatus for performing reduction operations on a plurality of associated data element values
US11327862B2 (en) 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11340904B2 (en) * 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
CN115220789B (zh) * 2022-06-24 2023-02-07 北京联盛德微电子有限责任公司 一种用于多寄存器的操作命令触发调度方法及单元
US20240004647A1 (en) * 2022-07-01 2024-01-04 Andes Technology Corporation Vector processor with vector and element reduction method
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845112A (en) * 1997-03-06 1998-12-01 Samsung Electronics Co., Ltd. Method for performing dead-zone quantization in a single processor instruction
US7506135B1 (en) 2002-06-03 2009-03-17 Mimar Tibet Histogram generation with vector operations in SIMD and VLIW processor by consolidating LUTs storing parallel update incremented count values for vector data elements
GB2411974C (en) * 2003-12-09 2009-09-23 Advanced Risc Mach Ltd Data shift operations
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
US7330964B2 (en) * 2005-11-14 2008-02-12 Texas Instruments Incorporated Microprocessor with independent SIMD loop buffer
US7991987B2 (en) * 2007-05-10 2011-08-02 Intel Corporation Comparing text strings
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US20110302394A1 (en) 2010-06-08 2011-12-08 International Business Machines Corporation System and method for processing regular expressions using simd and parallel streams
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
CN105955704B (zh) * 2011-11-30 2018-12-04 英特尔公司 用于提供向量横向比较功能的指令和逻辑
US9459865B2 (en) * 2011-12-23 2016-10-04 Intel Corporation Systems, apparatuses, and methods for performing a butterfly horizontal and cross add or substract in response to a single instruction
CN103999037B (zh) * 2011-12-23 2020-03-06 英特尔公司 用于响应于单个指令来执行横向相加或相减的系统、装置和方法
WO2013095634A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing a horizontal partial sum in response to a single instruction
US9268626B2 (en) * 2011-12-23 2016-02-23 Intel Corporation Apparatus and method for vectorization with speculation support
WO2013101198A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Simd variable shift and rotate using control manipulation
WO2013147869A1 (en) 2012-03-30 2013-10-03 Intel Corporation Apparatus and method for selecting elements of a vector coumputation
US9378182B2 (en) * 2012-09-28 2016-06-28 Intel Corporation Vector move instruction controlled by read and write masks
US9588766B2 (en) 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9921832B2 (en) 2012-12-28 2018-03-20 Intel Corporation Instruction to reduce elements in a vector register with strided access pattern
US9372692B2 (en) 2012-12-29 2016-06-21 Intel Corporation Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality
US9411592B2 (en) 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
US9411584B2 (en) 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI673648B (zh) * 2017-04-03 2019-10-01 美商谷歌有限責任公司 向量縮減處理器
US10706007B2 (en) 2017-04-03 2020-07-07 Google Llc Vector reduction processor
US11061854B2 (en) 2017-04-03 2021-07-13 Google Llc Vector reduction processor
TWI738042B (zh) * 2017-04-03 2021-09-01 美商谷歌有限責任公司 由向量縮減電路執行之方法
TWI791262B (zh) * 2017-04-03 2023-02-01 美商谷歌有限責任公司 矩陣向量處理系統及用於執行向量縮減之方法
TWI828502B (zh) * 2017-04-03 2024-01-01 美商谷歌有限責任公司 矩陣向量處理系統及用於執行向量縮減之方法
US11940946B2 (en) 2017-04-03 2024-03-26 Google Llc Vector reduction processor

Also Published As

Publication number Publication date
US9851970B2 (en) 2017-12-26
CN107003843A (zh) 2017-08-01
US20160179537A1 (en) 2016-06-23
JP2018500656A (ja) 2018-01-11
CN107003843B (zh) 2021-03-30
JP6699845B2 (ja) 2020-05-27
KR102449616B1 (ko) 2022-10-04
EP3238044A4 (en) 2018-08-22
TW201737062A (zh) 2017-10-16
KR20170097008A (ko) 2017-08-25
EP3238044A1 (en) 2017-11-01
WO2016105764A1 (en) 2016-06-30
TWI616817B (zh) 2018-03-01
TWI575454B (zh) 2017-03-21

Similar Documents

Publication Publication Date Title
TWI575454B (zh) 用於在成組的向量元件上進行歸約運算的方法及設備
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
TWI499976B (zh) 用以產生整數序列的方法、設備、系統及製造物品
TWI603263B (zh) 執行置換運算的處理器及具有該處理器的電腦系統
TWI455024B (zh) 唯一封裝資料元件識別處理器,方法,系統,及指令
TWI502494B (zh) 用以執行絕對差之雙塊總數之方法,製品及裝置
TW201732570A (zh) 用於聚合集中及跨步的系統、裝置及方法
TWI599952B (zh) 用於執行衝突檢測的方法及裝置
TWI514269B (zh) 用於大整數算術之向量指令的設備與方法
TW201640331A (zh) 用於向量索引載入和儲存之方法和設備
TW201729072A (zh) 至暫存器之藉由指數的散射、以及資料元件重新安排、處理器、方法、系統以及指令
TW201723805A (zh) 資料元件比較處理器、方法、系統及指令
TWI526930B (zh) 用以複製及遮蔽資料結構之設備及方法
TW201732637A (zh) 執行向量位元混洗的方法與裝置
TW201810029A (zh) 用於跨步載入的系統、設備及方法
TWI482086B (zh) 用以於緊縮資料元件上執行差分編碼之系統、裝置及方法
TW201732553A (zh) 用於保留位元的強制執行的裝置及方法
TW201732571A (zh) 用於獲得偶數和奇數資料元素的系統、裝置及方法
TW201732573A (zh) 用於跨步載入(stride load)的系統、設備及方法
TWI610234B (zh) 用於壓縮遮罩值的方法及裝置
TW201810020A (zh) 用於累乘的系統、設備及方法
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置
TWI617977B (zh) 用於執行自旋迴路跳位的裝置及方法
TWI610231B (zh) 用於向量水平邏輯指令的裝置及方法