TW201643742A - 利用索引和立即數執行向量排列的方法和設備 - Google Patents

利用索引和立即數執行向量排列的方法和設備 Download PDF

Info

Publication number
TW201643742A
TW201643742A TW104139443A TW104139443A TW201643742A TW 201643742 A TW201643742 A TW 201643742A TW 104139443 A TW104139443 A TW 104139443A TW 104139443 A TW104139443 A TW 104139443A TW 201643742 A TW201643742 A TW 201643742A
Authority
TW
Taiwan
Prior art keywords
data
vector
destination
source
field
Prior art date
Application number
TW104139443A
Other languages
English (en)
Other versions
TWI574166B (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 TW201643742A publication Critical patent/TW201643742A/zh
Application granted granted Critical
Publication of TWI574166B publication Critical patent/TWI574166B/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
    • 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
    • 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
    • G06F15/8076Details on data register access
    • G06F15/8084Special arrangements thereof, e.g. mask or switch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9017Indexing; Data structures therefor; Storage structures using directory or table look-up
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/46Indexing scheme relating to G06F9/46
    • G06F2209/462Lookup
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/764Masking

Abstract

本發明揭示用於執行向量排列的方法和設備。例如,處理器的一個實施例包含:來源向量暫存器,用以儲存複數個來源資料元件;目的地向量暫存器,用以儲存複數個目的地資料元件;控制向量暫存器,用以儲存複數個控制資料元件,各控制資料元件對應於該些目的地資料元件中的一者且包括N位元值,該N位元值指示來源資料元件是否被複製到該對應的目的地資料元件;向量排列邏輯,用以將各控制資料元件的該N位元值與立即數的N位元部分比較以決定是否將來源資料元件複製到對應的目的地資料元件,其中如果該些N位元值匹配,則該向量排列邏輯是用以使用包括在該控制資料元件中的索引值來識別來源資料元件,以及用以響應地將該來源資料元件複製到該目的地向量暫存器中的該對應的目的地資料元件。

Description

利用索引和立即數執行向量排列的方法和設備
本發明一般係關於電腦處理器的領域。尤其是,本發明係關於一種用於利用索引和立即數執行向量排列的方法和設備。
指令集、或指令集架構(ISA)是與編程相關的電腦架構的部分,包括本地資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷和異常處理以及外部輸入和輸出(I/O)。應當指出的是,術語“指令”在本說明書中一般是指巨集指令(macro-instructions)-其為提供給處理器用於執行的指令-與微指令(micro-instructions)或微運算(micro-ops)相反-其是解碼巨集指令的處理器的解碼器的結果。微指令或微運算可以被配置以指示處理器上的執行單元以執行運算來實施與巨集指令相關的邏輯。
ISA與微架構不同,其為一組用於實施指令集的處理器設計技術。具有不同微架構的處理器可以共享一通用的 指令集。例如,Intel® Pentium 4處理器、Intel® CoreTM 處理器、以及來自加州的桑尼維爾的Advanced Micro Devices,Inc.的處理器,實施幾乎相同的版本的x86指令集(已經加入更新版本的一些擴展),但有不同的內部設計。例如,ISA相同的暫存器架構可以使用習知技術以不同的微架構、不同的方式來實施,包括專用的實體暫存器、使用暫存器重新命名機制的一或多個動態分配實體暫存器(例如,使用暫存器別名表(Register Alias Table,RAT)、重新排序緩衝器(Reorder Buffer,ROB)和退休暫存器檔)。除非另有說明,在本說明書中所用的短語暫存器架構、暫存器檔和暫存器是用於指代是對軟體/程式設計師可見的那些,和指令指定的暫存器的方式。在需要區別之處,形容詞“邏輯(的)”、“架構(的)”或“軟體可見(的)”將被用來表示在暫存器架構中的暫存器/檔,而不同的形容詞將被用以指定在給定的微架構中的暫存器(例如,實體暫存器、重新排序緩衝器、退休暫存器、暫存器池)。
指令集包括一或多個指令格式。給定的指令格式定義各種欄位(位元數、位元位置)以,除了其他事項之外,指定將要被執行的運算和將要對其執行運算的運算元。透過指令模板(或子格式)的定義,有些指令格式進一步被細分。例如,給定的指令格式的指令模板可以被定義為具有不同子集的指令格式的欄位(所包括的欄位通常係相同的順序,但至少有一些具有不同的位元位置,因為其包括 有更少欄位)及/或被定義為具有不同解釋的給定欄位。給定的指令是使用給定的指令格式(以及如果被定義,在該指令格式的指令模板中給定的一者之中)來表達,並指定運算和運算元。指令串流是指令的特定順序,其中該序列中的每個指令是以指令格式的指令的發生(以及如果被定義,該指令格式的指令模板的給定的一者)。
105‧‧‧無記憶體存取
110‧‧‧無記憶體存取、完全捨入型控制類型運算
115‧‧‧無記憶體存取、資料變換類型運算
112‧‧‧無記憶體存取、寫入遮罩控制、部分捨入控制類型運算
117‧‧‧無記憶體存取寫入遮罩控制v大小類型運算
120‧‧‧記憶體存取
125‧‧‧記憶體存取、時效性
127‧‧‧記憶體存取寫入遮罩控制
130‧‧‧記憶體存取、非時效性
140‧‧‧格式欄位
142‧‧‧基底運算欄位
144‧‧‧暫存器索引欄位
146‧‧‧修飾符欄位
146A‧‧‧無記憶體存取
146B‧‧‧記憶體存取
150‧‧‧擴充運算欄位
152‧‧‧α欄位
152A‧‧‧RS欄位
152A.1‧‧‧捨入
152A.2‧‧‧資料變換
152B‧‧‧驅逐提示欄位
152B.1‧‧‧時效性
152B.2‧‧‧非時效性
154‧‧‧β欄位
154A‧‧‧捨入控制欄位
154B‧‧‧三位元資料變換欄位
154C‧‧‧三位元資料操縱欄位
156‧‧‧抑制所有浮點數異常欄位
158‧‧‧捨入運算控制欄位
160‧‧‧標度欄位
162A‧‧‧位移欄位
162B‧‧‧位移標度欄位
164‧‧‧資料元件寬度欄位
170‧‧‧寫入遮罩欄位
172‧‧‧立即數欄位
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‧‧‧xxx欄位
256‧‧‧bbb欄位
300‧‧‧暫存器架構
310‧‧‧向量暫存器
315‧‧‧寫入遮罩暫存器
325‧‧‧通用暫存器
345‧‧‧純量浮點堆疊暫存器檔
350‧‧‧MMX分包整數平暫存器檔
400‧‧‧處理器管線
402‧‧‧擷取階段
404‧‧‧長度解碼階段
406‧‧‧解碼階段
408‧‧‧分配階段
410‧‧‧重新命名階段
412‧‧‧排程階段
414‧‧‧暫存器讀取/記憶體讀取階段
416‧‧‧執行階段
418‧‧‧寫回/記憶體存寫入階段
422‧‧‧異常處理階段
424‧‧‧提交階段
430‧‧‧前端單元
432‧‧‧分支預測單元
434‧‧‧指令快取單元
436‧‧‧轉譯後備緩衝區
438‧‧‧指令擷取單元
440‧‧‧解碼單元
450‧‧‧執行引擎單元
452‧‧‧重新命名/分配器單元
454‧‧‧退休單元
456‧‧‧排程器單元
458‧‧‧實體暫存器檔單元
460‧‧‧執行叢集
462‧‧‧執行單元
464‧‧‧記憶體存取單元
470‧‧‧記憶體單元
472‧‧‧資料TLB單元
474‧‧‧資料快取單元
476‧‧‧第2階(L2)快取單元
500‧‧‧指令解碼器
502‧‧‧片上互連網路
504‧‧‧第2階(L2)快取
506‧‧‧L1快取
506A‧‧‧L1資料快取
508‧‧‧純量單元
510‧‧‧向量單元
512‧‧‧純量暫存器
514‧‧‧向量暫存器
520‧‧‧拌和單元
522A‧‧‧數字轉換單元
522B‧‧‧數字轉換單元
524‧‧‧複製單元
526‧‧‧寫入遮罩暫存器
528‧‧‧16位元寬ALU
600‧‧‧處理器
602A~602N‧‧‧核心
604A~604N‧‧‧快取單元
606‧‧‧共享快取單元
608‧‧‧整合圖形邏輯
610‧‧‧系統代理單元
612‧‧‧環狀基互連單元
614‧‧‧整合記憶體控制器單元
616‧‧‧匯流排控制器單元
700‧‧‧系統
710‧‧‧處理器
715‧‧‧處理器
720‧‧‧控制器集線器
740‧‧‧記憶體
745‧‧‧共處理器
750‧‧‧輸入/輸出集線器(IOH)
760‧‧‧輸入/輸出(I/O)裝置
790‧‧‧圖形記憶體控制器集線器
795‧‧‧連接
800‧‧‧系統
814‧‧‧I/O裝置
815‧‧‧額外處理器
816‧‧‧第一匯流排
818‧‧‧匯流排橋
820‧‧‧第二匯流排
822‧‧‧鍵盤及/或鼠標
824‧‧‧音頻I/O
827‧‧‧通信裝置
828‧‧‧儲存單元
830‧‧‧指令/碼和資料
832‧‧‧記憶體
834‧‧‧記憶體
838‧‧‧共處理器
839‧‧‧高效能介面
850‧‧‧點對點互連
852‧‧‧P-P介面
854‧‧‧P-P介面
870‧‧‧第一處理器
872‧‧‧整合記憶體及I/O控制邏輯
876‧‧‧點對點介面電路
878‧‧‧點對點介面電路
880‧‧‧第二處理器
882‧‧‧I/O控制邏輯
886‧‧‧P-P介面
888‧‧‧P-P介面
890‧‧‧晶片組
892‧‧‧介面
894‧‧‧點對點介面電路
896‧‧‧介面
898‧‧‧點對點介面電路
900‧‧‧系統
914‧‧‧I/O裝置
915‧‧‧傳統I/O裝置
1000‧‧‧SoC
1002‧‧‧互連單元
1010‧‧‧應用處理器
1020‧‧‧共處理器
1030‧‧‧靜態隨機存取記憶體(SRAM)單元
1032‧‧‧直接記憶體存取(DMA)單元
1040‧‧‧顯示單元
1102‧‧‧高階語言
1104‧‧‧x86編譯器
1106‧‧‧x86的二進制碼
1108‧‧‧替代的指令集編譯器
1110‧‧‧替代的指令集二進制碼
1112‧‧‧指令轉換器
1114‧‧‧x86指令集核心
1116‧‧‧x86指令集核心
1200‧‧‧主記憶體
1201‧‧‧分支目標緩衝器
1202‧‧‧分支預測單元
1203‧‧‧下一個指令指標
1204‧‧‧指令轉譯後備緩衝器
1205‧‧‧通用暫存器
1206‧‧‧向量暫存器
1207‧‧‧遮罩暫存器
1210‧‧‧指令擷取單元
1211‧‧‧第2階(L2)快取
1212‧‧‧第1階(L1)快取
1216‧‧‧第3階(L3)快取
1220‧‧‧指令快取
1221‧‧‧資料快取
1230‧‧‧解碼單元
1231‧‧‧向量排列解碼邏輯
1240‧‧‧執行單元
1241‧‧‧向量排列執行邏輯
1250‧‧‧寫回單元
1255‧‧‧處理器
1300‧‧‧向量排列邏輯
1305‧‧‧來源暫存器
1310‧‧‧控制暫存器
1311‧‧‧立即數值
1312‧‧‧遮罩值
1315‧‧‧目的地暫存器
更好地理解本發明的可以從結合以下附圖與以下詳細描述來獲得,其中:圖1A和1B是根據本發明的實施例,示出通用向量友好指令格式和其指令模板的方框圖;圖2A-D是根據本發明的實施例,示出示例性特定向量友好指令格式的方框圖;圖3是根據本發明的一個實施例的暫存器架構的方框圖;以及圖4A是根據本發明的實施例,示出一示例性的有序之擷取、解碼、退休管線和一示例性的暫存器重新命名、無序發出/執行管線兩者的方框圖;圖4B是根據本發明的實施例,示出被包括在處理器中的一示例性實施例的有序之擷取、解碼、退休核心和一示例性的暫存器重新命名、無序發出/執行架構核心兩者的方框圖;圖5A是單一處理器核心的方框圖,除了它的連接至 晶粒上互連網路外;圖5B是根據本發明實施例示出在圖5A中的處理器核心的一部分的擴展圖;圖6是根據本發明實施例的具有整合的記憶體控制器和圖形的單核處理器和多核處理器的方框圖;圖7根據本發明的一個實施例示出系統的方框圖;圖8根據本發明的實施例示出第二系統的方框圖;圖9根據本發明的實施例示出第三系統的方框圖;圖10根據本發明的實施例示出片上系統(system on a chip,SoC)的方框圖;圖11根據本發明的實施例示出對比軟體指令轉換器之使用以將在來源指令集中的二進制指令轉換成在目標指令集中的二進制指令的方框圖;圖12示出本發明的實施例可以在其上實施的示例性處理器;圖13根據使用立即數值的本發明的實施例示出向量排列邏輯;圖14示出可能如何執行一排列,其使用來自不同的來源暫存器之資料元件;以及圖15根據本發明的一個實施例示出方法。
【發明內容及實施方式】
在以下的描述中,出於解釋的目的,許多具體的細節被闡述以便提供徹底理解本發明下述的實施例。然而,這 將對本發明領域中的通常知識者是顯而易見的,本發明之實施例可在沒有這些具體細節的情況下實踐。在其他實例中,習知的結構和裝置以方框圖的形式示出,以避免模糊本發明的實施例的基本原理。
示例性處理器架構和資料類型
指令集包括一或多個指令格式。給定的指令格式定義各種欄位(位元數、位元位置)以,除了其他事項之外,指定將要執行的運算(opcode,運算碼)和將要對其執行運算的運算元。透過指令模板(或子格式)的定義,有些指令格式進一步被細分。例如,給定的指令格式的指令模板可以被定義為具有不同子集的指令格式的欄位(所包括的欄位通常係相同的順序,但至少有一些具有不同的位元位置,因為其包括有更少欄位)及/或被定義為具有不同解釋的給定欄位。因此,每一個ISA的指令是使用給定的指令格式(以及如果被定義,在該指令格式的指令模板中給定的一者之中)來表達,並且包括用於指定運算和運算元的欄位。例如,示例性ADD指令具有特定的運算碼和包括運算碼欄位的指令格式,以指定運算碼和運算元欄位來選擇運算元(來源1/目的地和來源2);以及在指令串流中的此ADD指令的出現將在選擇特定的運算元的運算元欄位中具有特定內容。已經發布及/或公布一組SIMD擴充,其被稱為進階向量擴充(Advanced Vector Extensions,AVX)(AVX1和AVX2),並且使用向量擴 充(Vector Extensions,VEX)編碼機制(例如,參見2011年10月之Intel® 64和IA-32架構軟體開發者手冊,以及參見2011年6月看到Intel®進階向量擴充編程參考)。
示例性指令格式
本發明所描述的指令的實施例可以利用不同的格式體現。此外,示例性的系統、架構、和管線詳述如下。指令的實施例可以在這樣的系統、架構、和管線執行,但不局限於這些詳細說明。
A. 通用向量友好指令格式
向量友好指令格式是適用於向量指令的指令格式(例如,有針對向量運算的某些欄位)。所描述的實施例中,向量和純量運算兩者都透過向量友好指令格式所支持,替代的實施例中只使用向量運算的向量友好指令格式。
圖1A和1B是根據本發明的實施例,示出通用向量友好指令格式和其指令模板的方框圖。圖1A是根據本發明的實施例,示出通用向量友好指令格式和其類別A指令模板的方框圖;而圖1B是根據本發明的實施例,示出通用向量友好指令格式和其類別B指令模板的方框圖。具體地講,被定義為類別A和類別B指令模板的通用向量友好指令格式100,這兩者都包括無記憶體存取105指令模板和記憶體存取120指令模板。在向量友好指令格式的上 下文中之術語通用是指不繫於任何特定指令集的指令格式。
而本發明所描述的發明之實施例,其中向量友好指令格式支持下列:64位元組(byte)向量運算元長度(或大小)其具有32位元(4位元組)或64位元(8位元組)資料元件寬度(或大小)(以及因此,64位元組向量由16個雙字(doubleword)大小元件或替代地,8個四倍字(quadword)大小元件組成);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位元組)的資料元件寬度)。
圖1A中的類別A指令模板包括:1)無記憶體存取105指令模板內,示出了無記憶體存取、完全捨入型控制類型運算110指令模板以及無記憶體存取資料變換類型運算115指令模板;以及2)記憶體存取120指令模板內,示出了記憶體存取暫時125指令模板以及記憶體存取非暫 時130指令模板。1B中的類別B指令模板包括:1)無記憶體存取105指令模板內,示出了無記憶體存取、寫入遮罩控制、部分捨入型控制類型運算112指令模板以及無記憶體存取寫入遮罩控制向量大小(vsize)類型運算117指令模板;以及2)記憶體存取120指令模板內,示出了記憶體存取寫入遮罩控制127指令模板。
通用向量友好指令格式100包括在圖1A-1B所示的順序中於下方所列出的以下欄位。
格式欄位140-在此欄位的一特定值(指令格式識別符值)唯一識別該向量友好指令格式,且因此在指令串流中的向量友好指令格式中的指令發生。因此,就該欄位不需要用於僅具有通用向量友好指令格式的指令集之意義來看,該欄位是可選的。
基底運算欄位(Base operation field)142-其內容區分不同的基底運算。
暫存器索引欄位(Register index field)144-它的內容,直接地或透過位址產生,指定來源的位置和目的地運算元,無論是在暫存器或記憶體中。這些包括足夠數目的位元用以從P×Q個(例如32x512、16x128、32x1024、64x1024)暫存器檔選擇N個暫存器。而在一個實施例中,N可以是多達三個來源和一個目的地暫存器,替代的實施例可支持更多或更少的來源和目的地暫存器(例如,可以支持多達兩個來源,其中這些來源中的一者還可作為目的地;可以支持多達到三個來源,其中這些來源中的一 者還可作為目的地;可以支持多達兩個來源和一個目的地)。
修飾符欄位(Modifier field)146-其內容區分在通用向量指令格式中的指令的出現,其指定從那些不在無記憶體存取105指令模板和記憶體存取120指令模板之間的記憶體存取。記憶體存取運算讀取及/或寫入至記憶體階層(在某些情況下,使用在暫存器中的值來指定來源及/或目的地位址),而非記憶體存取運算則不讀取及/或寫入(例如,來源和目的地為暫存器)。而在一個實施例中,此欄位還在三種不同的方式之間選擇以執行記憶體位址計算,替代實施例可支持更多、更少或不同的方式以執行記憶體位址計算。
擴充運算欄位(Augmentation operation field)150-其內容區分各種不同的運算中的哪一個以在除基底運算之外被執行。此欄位是上下文特定。在本發明的一個實施例中,該欄位被劃分成類別欄位168、α欄位152及β欄位154。擴充運算欄位150允許將在單個指令中而不是2個、3個或4個的指令中被執行之運算的通用群組。
標度欄位(Scale field)160-其內容允許索引欄位的內容之縮放用於記憶體位址產生(例如,使用2標度*索引+基底之位址產生)。
位移欄位(Displacement Field)162A-其內容被使用作為記憶體位址產生的一部分(例如,使用2標度*索引+基底+位移之位址產生)。
位移因子欄位(Displacement Factor Field)162B(注意,在位移因子欄位162B的正上方的位移欄位162A之並列指示一個或另一個被使用)-其內容作為位址產生的部分;其指定位移因子是藉由記憶體存取(N)的大小而被縮放-其中N是記憶體存取中的位元組數(例如,對於採用2標度*索引+基底+經定標之位移的位址產生)。冗餘低階位元被忽略,且因此,位移因子欄位的內容與記憶體運算元總大小(N)相乘,以產生最終的位移以被使用於計算有效位址。N的值是依據全運算碼欄位(full opcode field)174(在本文後續描述)以及資料操縱欄位154C在運行期間藉由處理器硬體所決定。就以下意義來看,位移欄位162A以及位移因子欄位162B為可選的:在它們沒有被用於無記憶體存取105指令模板,以及/或不同的實施例可能只實施兩者之一或兩者皆無之時。
資料元件寬度欄位(Data element width field)164-其內容區分數個資料元件寬度中的哪一者被使用(在一些實施例中用於所有指令;在一些實施例中只用於指令中的一些)。就以下意義來看,此欄位是可選的:如果只有一個資料元素寬度被支持及/或使用運算碼中的一些態樣而使資料元件寬度被支持,則不需要此欄位。
寫入遮罩欄位(Write mask field)170-其內容,在每資料元件位置基礎上,控制在目的地向量運算元中的資料元件位置是否反應出基底運算和擴充運算的結果。類別A指令模板支持合併寫入遮蓋(merging-writemasking), 而類別B指令模板支持合併寫入遮蓋和歸零寫入遮蓋兩者。當合併時,向量遮罩允許目的地中的任何一組元件被保護而在任何運算的執行期間(由基底運算和擴充運算所指定)免於更新;在另一個實施例中,保留其對應的遮罩位元具有0之目的地中的每一個元件的舊值。相反地,當歸零向量遮罩允許目的地中的任何一組元件在任何運算的執行期間(由基底運算和擴充運算所指定)被歸零時;在一個實施例中,當對應的遮罩位元具有值0時,目的地的元件被設定為0。此功能性的一子集為用以控制被執行的運算的向量長度之能力(也就是,從第一個到最後一個正被修改的元件的跨距);然而,被修改的元件不須要是連續的。寫入遮罩欄位(write mask field)170允許部分的向量運算,其包括載入、儲存、運算、邏輯等。而本發明的實施例描述為,其中寫入遮罩欄位170的內容在數個包含將被使用的寫入遮罩的寫入遮罩暫存器中選擇一者(以及因此寫入遮罩欄位170的內容非直接地識別將被執行的遮蓋),替代的實施例替代或額外的允許遮罩寫入欄位170的內容用以直接地指定將被執行的遮罩。
立即數欄位(Immediate field)172-其內容允許立即數的規範。就以下意義來看,此欄位是可選的:其不出現在不支持立即數的通用向量友善格式的實施中且其不出現在不使用立即數的指令中。
類別欄位(Class field)168-其內容區分不同類別間的指令。參照圖1A至1B,此欄位的內容在類別A和類 別B指令之間選擇。在圖1A至1B中,圓弧框被用以指示欄位中出現的特定值(例如,分別於圖1A至1B中用於類別欄位168的類別A 168A和類別B 168B)。
類別A的指令模板
在類別A的無記憶體存取105指令模板的情況中,α欄位152被解譯為RS欄位152A,其內容區分不同的擴充運算類型中的哪一者將被執行(例如,捨入(round)152A.1和資料變換(data transform)152A.2分別被指定用於非記憶體存取、捨入類型運算110和無記憶體存取、資料變換類型運算115指令模板),而β欄位154區分所指定的類型的運算中的哪一者將被執行。在無記憶體存取105指令模板中,沒有出現標度欄位160、位移欄位162A和位移標度欄位162B。
無記憶體存取指令模板-完全捨入控制類型運算(Full Round Control Type Operation)
在無記憶體存取完全捨入控制類型運算110指令模板中,β欄位154被解譯為捨入控制欄位154A,其內容提供靜態捨入。而在本發明所描述的實施例中,捨入控制欄位154A包括抑制所有浮點數異常(suppress all floating point exceptions,SAE)欄位156以及捨入運算控制欄位158,替代實施例可支持將這兩者概念編碼進相同欄位或具有這些概念/欄位中的一者或另一者(例如,可只具有 捨入運算控制欄位158)。
SAE欄位156-其內容區分是否禁能異常事件回報;當SAE欄位156的內容指示抑制被致能,給定的指令並未回報任何種類的浮點數異常旗標且未引起任何浮點數異常處理器。
捨入運算控制欄位(Round operation control field)158-其內容區分一組捨入運算中的哪一者要執行(例如,向上捨入、向下捨去、向零捨入和就近捨入)。因此,捨入運算控制欄位158允許在每一指令基礎上改變捨入模式。在其中處理器包括用於指定捨入模式的控制暫存器的本發明的一個實施例中,捨入運算控制欄位150的內容覆寫該暫存器值。
無記憶體存取指令模板-資料變換類型運算
在無記憶體存取資料變換類型運算115指令模板中,β欄位154被解譯為資料變換欄位154B,其內容區分將要執行的數個資料變換中的哪一者(例如,無資料變換、拌和(swizzle)、廣播)。
在類別A的記憶體存取120指令模板的情況中,α欄位152被解譯為驅逐提示欄位(eviction hint field)152B,其內容區別哪一個驅逐提示將被使用(在圖1A中,時效性(temporal)152B.1和非時效性(non-temporal)152B.2分別被指定用於記憶體存取、時效性125指令模板和記憶體存取、非時效性130指令模板), 而β欄位154被解譯為資料操縱欄位154C,其內容區分數種資料操縱運算(亦習知為基元)中的哪一者將被執行(例如,無操縱;廣播;來源向上轉換;以及目的地向下轉換)。記憶體存取120指令模板包括標度欄位160以及可選地位移欄位162A或位移標度欄位162B。
向量記憶體指令執行來自記憶體的向量加載和至記憶體的向量儲存,具有轉換支援。如同常規向量指令,向量記憶體指令以逐個資料元件方式傳送來自記憶體的資料或傳送資料到記憶體,其中由被選為寫入遮罩的向量遮罩的內容決定實際傳送的元件。
記憶體存取指令模板-時效性
時效性資料是可能足夠快被再次使用以受益於快取的資料。然而,這就是提示,以及不同的處理器可以不同的方式來實施它,包括完全地忽視該提示。
記憶體存取指令模板-非時效性
非時效性資料是不太可能足夠快地被再次使用以受益於第一層快取中的快取且應被給定優先驅逐之資料。然而,這就是提示,以及不同的處理器可以不同的方式來實施它,包括完全地忽視該提示。
類別B的指令模板
在類別B的指令模板的情況中,將α欄位152解譯為 寫入遮罩控制(Z)欄位152C,其之內容區別由寫入遮罩欄位170所控制之寫入遮蓋是否應為合併或歸零。
在類別B的無記憶體存取105指令模板的情況中,將β欄位154的一部分解譯為RL欄位157A,其之內容區分不同的擴充運算類型中的哪一者將被執行(例如,針對無記憶體存取寫入遮罩控制部分捨入控制類型運算112指令模板及無記憶體存取寫入遮罩控制VSIZE類型運算117指令模板分別指名捨入157A.1及向量長度(VSIZE)157A.2),而β欄位154的其餘部分則區分所指明的類型的運算中的哪一者將被執行。在無記憶體存取105指令模板中,沒有出現標度欄位160、位移欄位162A和位移標度欄位162B。
在無記憶體存取寫入遮罩控制部分捨入控制類型運算110指令模板中,β欄位154的其餘部分被解譯為捨入運算欄位159A且禁能異常事件回報(給定的指令不會回報任何種類的浮點異常旗標且不會引起任何浮點異常處理器)。
捨入運算控制欄位(Round operation control field)159A-如同捨入運算控制欄位158,其內容區分一組捨入運算中的哪一者要執行(例如,向上捨入、向下捨去、向零捨入和就近捨入)。因此,捨入運算控制欄位159A允許在每一指令基礎上改變捨入模式。在處理器包括用於指明捨入模式的控制暫存器的本發明的一個實施例中,捨入運算控制欄位150的內容覆寫該暫存器值。
無記憶體存取寫入遮罩控制VSIZE類型運算117指令模板中,β欄位154的其餘部分被解譯為向量長度欄位159B,其之內容區分將要執行的數個資料向量長度中的哪一者(例如,128、256、或512位元組)。
在類別B的記憶體存取120指令模板的情況中,將β欄位154的一部分解譯為廣播欄位157B,其之內容區分廣播類型資料操縱運算是否執行,而將β欄位254的其餘部分解譯為向量長度欄位159B。記憶體存取120指令模板包括標度欄位160以及可選地位移欄位162A或位移標度欄位162B。
關於通用向量友善指令格式100,顯示全運算碼欄位174,包括格式欄位140、基底運算欄位142及資料元件寬度欄位164。示出一個實施例,其中全運算碼欄位174包括所有這些欄位,在不支持他們全部的實施例中,全運算碼欄位174包括少於這些欄位的全部。全運算碼欄位174提供運算碼(opcode)。
擴充運算欄位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 R/M欄位、SIB欄位、位移欄位以及立即數欄位保持一致。將描述從圖2的欄位映射到圖1的欄位。
應該理解的是,即使出於說明性目的在通用向量友好指令格式100的上下文中參考特定向量友好指令格式200描述本發明的實施例,本發明除了所聲明之處外並不受限於特定向量友好指令格式200。例如,通用向量友好指令格式100設想用於各種欄位的各種可能的大小,而特定向量友好指令格式200被示出為具有特定的大小的欄位。藉由特定例子,資料元件寬度欄位164被闡釋為特定向量友好指令格式200中的一個位元欄位,而本發明並不受限於此(也就是說,通用向量友好指令格式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)、以及157BEX位元組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’欄位110-這是REX’欄位110的第一部分且是被用於編碼擴展的32暫存器集的上部16或下部16的EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’)。在本發明的一個實施例中,此位元,以及下面所指示的其他位元,是以位元反轉格式所儲存,以與BOUND指令區別(習知的x8632位元模式),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前綴的益處(不像需要一位元組來表示SIMF前綴,EVEX前綴僅需2個位元)。在一個實施例中,欲在傳統格式和EVEX前綴格式兩者中支持使用SIMD前綴(66H、F2H、F3H)的傳統SSE指令,將這些傳統SIMD前綴編碼到SIMD前綴編碼欄位中;並在被提供給解碼器的PLA之前,在運行時被擴展到傳統SIMD前綴中(因此PLA可以無須修改就執行這些傳統指令的傳統格式和EVE格式兩者)。儘管較新的指令可以直接將EVEX前綴編碼欄位的內容用作運算碼擴展,某些實施例以相似的方式以便獲得一致性,但允許這些傳統SIMD前綴指明不同的含義。替代的實施例可以重新設計PLA以便支持2位元SIMD前綴編碼,且因此不需擴展。
α欄位152(EVEX位元組3,位元[7]-EH;亦稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control(寫入遮罩控制)和EVEX.N;也用α描述)-如先前所描述,此欄位是上下文特定的。
β欄位154(EVEX位元組3,位元[6:4]-SSS,亦稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ描述)-如先前所描述,此欄位是上下文特定的。
REX’欄位110-這是REX’欄位的剩餘部分且可以是被 用於編碼擴展的32暫存器集的上部16或下部16的EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’)。此位元以位元反轉格式被儲存。值1被用來編碼下部16暫存器。換言之,藉由結合EVEX.V’、EVEX.vvvv來形成V’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)-如先前所描述的,標度欄位150的內容被用於記憶體位址產生。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使用8位元,其僅可被設定成四個真正有用的值-128、-64、0和64;由於時常需要更大範圍,使用disp32;然而,disp32需要4位元組。相較於disp8及disp32,位移因子欄位162B係disp8的重新解譯;當使用位移因子欄位162B時,由位移因子欄位的內容乘上記憶體運算元存取的大小(N)來決定實際的位移。這種位移稱為disp8*N。這減少平均指令長度(針對位移使用的單一位元組但具有大許多的範圍)。這種壓縮的位移係基於在有效位移為記憶體存取之粒度的倍數之假設上,且因此,不需編碼位址偏移的冗餘低階位元。換言之,位移因子欄位162B取代傳統x86指令集8位元位移。因此,以與x86指令集8位元位移的相同方式編碼位移因子欄位162B(所以在ModRM/SIB編碼規則中無改變),而僅有的例外是disp8被過載至disp8*N。換句話說,編碼規則或編碼長度沒有改變,但在硬體對位移值的解譯中有變 (其需要以記憶體運算元的大小定標位移來獲得逐位元組之位址偏移)。
立即數欄位272如前述般運算。
全運算碼欄位
圖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。捨入控制欄位154包括一位元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的方框圖。在所描述的實施例中,存在有512位元寬的32個向量暫存器310;這些暫存器稱為zmm0至zmm31。下部16 zmm暫存器的低階256位元覆加在暫存器ymm0-16上。下部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-在所示實施例中,有十六個64位元的通用暫存器,其連同現有x86定址模式一起用於定址記憶體運算元。以名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15參照這些暫存器。
純量浮點堆疊暫存器檔(x87堆疊)345,其上別名有MMX分包整數平暫存器檔350-在所示實施例中,該x87堆疊為8元件堆疊,其被用於在32/64/80位元浮點資料上使用x87指令集擴展來執行純量浮點運算;而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,指令快取單元434耦合到指令轉譯後備緩衝區(translation lookaside buffer,TLB)436,轉譯後備緩 衝區436耦合到指令擷取單元438,指令擷取單元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科技的MIPS指令集;加州桑尼維爾,ARM控股的ARM指令集(具有可選的額外擴展,像是NEON),包括本發明所描述的指令。在一個實施例中,核心490包括邏輯,其用以支持分包的資料指令集擴展 (例如,AVX1、AVX2),藉此使用分包資料允許由許多多媒體應用所使用的運算被執行。
但是應當理解的是,核心可以支持多執行緒(執行兩個或多個平行組運算或執行緒),並且可以多種方式這樣做,包括時間分片的多執行緒、同步多執行緒(其中單個實體核心提供邏輯核心用於實體核心是同步地多執行緒的每一個執行緒),或它們的組合(例如,時間切片擷取和解碼以及此後的同時多執行緒,像是Intel® Hyperthreading(超線程)技術)。
而暫存器重新命名是描述在無序執行的上下文中,但是應該理解的是,暫存器重新命名可以在有序結構中被使用。儘管所描述的處理器的實施例還包括分開的指令和資料快取單元434/474和共享的L2快取單元476,替代的實施例可具有用於指令和資料兩者的單一內部快取,像是,例如,第1階(Level 1,L1)的內部快取,或多階的內部快取。在一些實施例中,系統可包括內部快取和對核心及/或處理器是外部的外部快取的組合。可替換地,所有的快取可以是對核心及/或處理器是外部的。
圖5A-B示出了更具體的示例性的有序核心架構的方框圖,該核心將是晶片中的幾個邏輯區塊(包括相同類型及/或不同類型的其他核心)中的一者。邏輯區塊透過一高帶寬互連網路(例如,一個環形網路)與一些固定功能邏輯、記憶體I/O介面、及其它必要的I/O邏輯通訊,這取決於應用。
圖5A是根據本發明的實施例的一單一處理器核心的方框圖,隨著其連接到片上(on-die)互連網路502,以及隨著其第2階(Level 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資料快取506A、L1快取504的部分以及有關的向量單元510和向量暫存器514的更多的細節。具體地,向量單元510是16寬向量處理單元(VPU)(見16寬ALU 528),其執行一或多個整數、單精度浮點和雙精度浮點指令。VPU支持在記憶體輸入上以拌和單元520拌和暫存器輸入、以數字轉換單元522A-B作數字轉換、以及以複製單元524複製。寫入遮罩暫存器526允許預測結果向量寫入。
圖6是根據本發明的實施例,其可具有一個以上的核心,可能具有整合記憶體控制器,以及可具有整合圖形的處理器600的方框圖。6中的實線框示出具有單核心602A的處理器600、系統代理610、一組一或多個匯流排控制器單元616,而可選的額外虛線框示出了替代處理器600,其具有多個核心602A-N、系統代理單元610中的一組一或多個整合記憶體控制器單元614、以及專用邏輯608。
因此,處理器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和核心602-A到N之間維持一致性。
在一些實施例中,一個核心602A-N的一個或多個能夠多線程。系統代理610包括這些元件協調和運行核心602A-N。系統代理單元610可包括例如功率控制單元(PCU)和顯示單元。在PCU可以是或包括需要用於調節核心602A-N和整合圖形邏輯608的功率狀態的邏輯和元件。顯示單元是用於驅動一或多個外部連接的顯示器。
核心602A-N可以是就結構指令集而言為均相或非均相;也就是,兩個或多個核心602A-N可以是能夠執行相同的指令集,而其他也是能夠只執行該指令集或不同的指令集的一個子集。
圖7-10是示例性電腦結構的方框圖。其他系統的設計和組態在本領域中習知為用於筆記型電腦、桌上型電腦、手持個人電腦、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位信號處理器(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利用IOH 750被直接地耦合到處理器710以及在單一晶片中的控制器集線器 720。
額外的處理器715的可選性以圖7中的虛線來表示。每個處理器710、715可包括一或多個在此描述的處理核心且其可以是一些處理器600的一些版本。
記憶體740可以是,例如,動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或者是兩者的組合。對於至少一個實施例中,控制器集線器720經由像是前側匯流排(FSB)的多點匯流排與處理器710、715、像是QuickPath互連(QPI)的點對點介面、或類似的連接795通信。
在一個實施例中,共處理器745是一個專用處理器,諸如,例如,高通量的MIC處理器、網路或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似物。在一個實施例中,控制器集線器720可以包括整合的圖形加速器。
就包括架構、微架構、熱、功率消耗特性等一系列的優點衡量標準而論,在實體資源710、715之間可以有各種差異。
在一個實施例中,處理器710執行其控制一般類型的資料處理運算的指令。指令內的嵌入可能是共處理器指令。處理器710識別這些共處理器指令為應該由附加的共處理器745所執行的類型。因此,處理器710在共處理器匯流排或其它互連上發出這些共處理器指令(或代表共處理器指令的控制信號)至共處理器745。共處理器745接 受並執行接收到的共處理器指令。
現在參照圖8示出根據本發明的一個實施例的第一更詳細的示例性系統800的方框圖。如圖8所示,多處理器系統800是點對點互連系統,且包括第一處理器870和第二處理器880其經由點對點互連850耦合。處理器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)介面850使用P-P介面電路888和878來交換資訊。如圖8,IMC 872和882將處理器耦合到各自的記憶體,即記憶體832和記憶體834,其可以是本地連接到相應處理器的主要記憶體的部分。
處理器870和880可各經由各別P-P介面852、854使用點對點介面電路876、894、886和898與晶片組890交換資訊。晶片組890可選地經由一高效能介面839與共處理器838交換資訊。在一個實施例中,共處理器838是一個專用處理器,諸如,例如,高通量的MIC處理器、網路或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌 入式處理器或類似物。
共享快取(未示出)可以被包括在兩個處理器之外或任一處理器中,但經由P-P互連與處理器連接,以使得如果處理器被置於低功率模式時,任一個或兩個處理器的本地快取資訊可被儲存在共享快取中。
晶片組890可以經由介面896耦合到第一匯流排816。在一個實施例中,第一匯流排816可以是周邊組件互連(PCI)匯流排、或像是PCI Express匯流排或另一種第三代I/O互連匯流排的匯流排,但是本發明的範圍並不局限於此。
圖8所示,各種I/O裝置814可以被耦合到第一匯流排816,連同匯流排橋818,其耦合第一匯流排816到第二匯流排820。在一個實施例中,一或多個額外處理器815,如共處理器、高通量的MIC處理器、GPGPU的處理器、加速器(如,例如,圖形加速器或數位信號處理(DSP)單元)、現場可編程閘陣列,或任何其它的處理器,皆耦合到第一匯流排816。在一個實施例中,第二匯流排820可以是低針腳計數(low pin count,LPC)匯流排。在一個實施例中,各種裝置可以被耦合到第二匯流排820,其包括例如,鍵盤及/或滑鼠822、通信裝置827和像是硬碟或其它大容量存儲裝置的儲存單元828,其可以包括指令/碼和資料830。此外,音頻I/O 824可以被耦合到第二匯流排820。注意,其它架構也是可能的。例如,除了圖8的點對點架構,系統可以實現多點匯流排或 其它這種架構。
現在參照圖9示出根據本發明的一個實施例的第二更詳細的示例性系統900的方框圖。像在圖8和9中具有相似的附圖標記的元件,以及為了避免模糊圖9的其他方面而使圖8的某些方面已經從圖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的方框圖。在圖6中相似的元件具有類似的參考圖標。另外,虛線方框是更進階的SoC上的可選功能。在圖10中,互連單元1002被耦接到:應用處理器1010,其包括一組一或多個核心202A-N及共享快取單元606;系統代理單元610;匯流排控制器單元616;整合記憶體控制器單元614;一組或一或多個共處理器1020,其可包括整合圖形邏輯、影像處理器、音訊處理器和視訊處理器;靜態隨機存取記憶體(SRAM)單元1030;直接記憶體存取(DMA)單元1032;及用於耦合到一或多個外部顯示器的顯示單元1040。在一個實施例中,共處理器1020包括一個專用處理器,諸如,例如,網路或通信處理器、壓縮引擎、GPGPU、高通MIC處理器、嵌入式處理器或類似 物。
本文公開的機制的實施例可以以硬體、軟體、韌體或這些實施方式的組合來實現。本發明的實施例可以被實施為在可編程系統上執行的電腦程式或程式碼,系統包含至少一個處理器、儲存系統(包括易失性和非易失性記憶體及/或儲存元件)、至少一輸入裝置,以及至少一輸出裝置。
例如在圖8所示的碼830的程式碼,可應用於輸入指令以執行本文描述的功能和產生輸出資訊。輸出資訊可以被應用於一或多個輸出裝置,以習知的方式。對於本申請案的目的,處理系統包括具有處理器的任何系統,像是,例如:數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器。
程式碼可以以高階程序或物件導向編程語言以與處理系統進行通信來實現。程式碼還可以以組合或機器語言來實現,如果需要的話。事實上,本文描述的機制並不限於任何特定的程式語言的範圍。在任何情況下,語言可以是編譯或解譯語言。
至少一個實施例的一或多個方面可以由儲存在機器可讀媒體上代表的指令來實施,其表示處理器內的各種邏輯,其當由機器讀取時,使機器製造邏輯以執行本文描述的技術。這樣的表示,習知為“IP核心”,可以被儲存在有形的、機器可讀媒體上和被供給到各種客戶或生產設施以載入到製造機器,其實際上製造邏輯或處理器。
這樣的機器可讀儲存媒體可以包括,但不受限於,藉由機器或裝置所形成或製造的非暫態、實體配置的物體,其包括儲存媒體,例如:硬碟或任何包括軟碟、光碟、唯讀光碟記憶體(CD-ROM)、可重寫光碟(CD-RW)和磁光碟的其他類型的硬碟;像是唯讀記憶體(ROM)、像是動態隨機存取記憶體(DRAM)和靜態隨機存取記憶體(SRAM)的隨機存取記憶體(RAM)、可擦除可編程唯讀記憶體(EPROM)、快閃記憶體、電可擦除可編程唯讀記憶體(EEPROM)、相變記憶體(PCM)的半導體裝置;磁或光卡,或適用於儲存電子指令的任何其它類型的媒體
因此,本發明的實施例還包括非暫態的、包含指令或包含設計資料的有形機器可讀媒體,像是硬體描述語言(HDL),其限定本文所描述的結構、電路、設備、處理器及/或系統功能。這樣的實施例也可以被稱為程式產品。
在某些情況下,指令轉換器可用於將指令從源指令集轉換為目標指令集。例如,指令轉換器可轉譯(例如,使用靜態二進制轉譯、包括動態編譯的動態二進制轉譯)、變形、模擬、或以其他方式轉換指令成一或多個其它指令以被核心所處理。指令轉換器可以以軟體、硬體、韌體,或其組合來實現。指令轉換器可能是開啟處理器、關閉處理器、或部開啟和部分關閉處理器。
圖11是根據本發明的實施例對比使用軟體指令轉換 器用以將在來源指令集中的二進制指令轉換成在目標指令集中的二進制指令之方框圖。在所示實施例中,指令轉換器是一個軟體指令轉換器,雖然可替代地,指令轉換器可以以軟體、韌體、硬體、或它們的各種組合來實現。圖11示出高階語言1102的程式可以使用x86編譯器1104編譯,以產生x86的二進制碼1106,其可被具有至少一個x86指令集核心1116的處理器本身執行。具有至少一個x86指令集核心1116的處理器表示可以執行與具有至少一個x86指令集核心的Intel處理器的實質上相同功能的任何處理器,其藉由相容地執行或反之處理(1)Intelx86指令集核心的指令集的實質部分或(2)目標在具有至少一個x86指令集核心的Intel處理器上運行的應用程式的物件碼版本或其他軟體,以實現實質上與具有至少一個x86指令集核心的Intel處理器相同的結果。在x86編譯器1104表示編譯器,其可操作以產生x86的二進制碼1106(例如,物件碼),其可利用或不利用額外連結處理而在具有至少一個x86指令集核心1116的處理器上執行。類似地,圖11示出在高階語言1102中的程式可以使用替代的指令集編譯器1108來編譯,以產生替代的指令集二進制碼1110,其可以由不含至少一個x86指令集核心1114的處理器本身執行(例如,具有執行加州桑尼維爾的MIPS科技的MIPS指令集及/或執行加州桑尼維爾的ARM控股的ARM指令集之核心的處理器)。指令轉換器1112被用於轉換x86二進制碼1106成可由不具有 x86指令集核心1114的處理器本身執行的碼。此轉換的碼可能不同於替代的指令集二進制碼1110,因為能夠這樣的指令轉換器很難製造;然而,此轉換後的碼將完成一般操作,並由來自替換指令集的指令所構成。因此,指令轉換器1112代表軟體、韌體、硬體、或其組合,透過仿真、模擬或任何其他製程,允許不具有x86指令集處理器或核心的處理器或其他電子裝置來執行x86二進制碼1106。
利用索引和立即數執行向量排列的方法和設備
本發明的一個實施例包括指令(在此有時候被稱為VPERMBI/WI),其利用立即數控制來執行向量位元組/字組排列,其中只對在控制暫存器中的最高有效位元(MSB)與立即數值的最低有效位元(LSB)匹配之元件執行排列。如以下所討論的,這些指令可被用於有效率地實施表格的查找,其常見地被使用在許多高效能計算(high performance computing,HPC)工作負載中。
圖12所描述,在本發明的實施例可被實施於其上的示例性處理器1255包括具有向量排列解碼邏輯1231的解碼器1230以及具有向量排列執行邏輯1241的執行邏輯1240,向量排列解碼邏輯1231用於解碼在此所述的向量排列指令以產生複數個微運算(uops)以及向量排列執行邏輯1241用於執行向量排列微運算。示例性處理器的額外細節將不會被描述。應該注意的是,然而,本發明的基 本原則不受限於微碼處理器或處理器架構的任何特定類型。
所描述的處理器架構包括一組通用暫存器(GPR)1205、一組向量暫存器1206及一組遮罩暫存器1207。在一個實施例中,多個向量資料元件被分包成每個向量暫存器1206,其可以具有512位元寬度,用於儲存兩個256位元的值、四個128位元值、八個64位元值、十六個32位元值等。然而,本發明的根本原理不受限於任何特定的向量資料大小/類型。在一個實施例中,遮罩暫存器1207包括被用於在儲存在向量暫存器1206中所儲存的值上而執行位元遮蓋運算(例如,實施如上所述遮罩暫存器k0-k7)八個64位元運算元遮罩暫存器。然而,本發明的根本原理不受限於任何特定的遮罩暫存器大小/類型。
單一處理器核心(“核心0”)的細節為簡單起見示於圖12。然而,應當理解,在圖12中所示的每個核心可具有相同組的邏輯的作為核心0。例如,每個核心可包括一個專用的第1階(L1)快取1212和第2階(L2)快取1211,用於根據一個指定的快取管理策略來快取指令和資料。L1快取1212包括用於儲存指令的單獨的指令快取1220和用於儲存資料的單獨的資料快取1221。儲存在各種處理器快取內的指令和資料以可為固定大小的快取線的粒度進行管理(例如,64、128、512位元組的長度)。此示例性實施例的每個核心具有指令擷取單元1210,用於從主記憶體1200及/或共享的第3階(L3)快取1216 擷取指令;用於解碼指令的解碼單元1220(例如,將程式指令解碼成微運算或“uops”);用於執行指令的執行單元1240;以及用於退役指令和寫回結果的寫回單元1250。
指令擷取單元1210包括各種習知的元件,包括用於儲存將從記憶體1200(或快取中的一個)擷取的下一個指令的位址的下一個指令指標1203;用於儲存最近使用的虛擬到實體指令位址的地圖的指令轉譯後備緩衝器(instruction translation look-aside buffer,ITLB)1204,以提高位址轉譯的速度;分支預測單元1202用於推測性預測指令分支位址;以及用於儲存分支位址和目標位址的分支目標緩衝器(branch target buffer,BTB)1201。一旦擷取,指令隨後被串流到指令管線的其餘階段,指令管線包括解碼單元1230、執行單元1240、以及寫回單元1250。每個這些單元的結構和功能是由那些本發明領域中的通常知識者理解並在此將不再詳細描述,以避免模糊本發明的不同實施例的相關方面。
如所提及的,在一個實施例中,向量排列指令交換連續位元或儲存在來源暫存器中的位元的群組的位置以及在立即數的控制之下將結果儲存在目的地暫存器中,該立即數指明將被反轉/交換的位元群組的大小。在一個實施例中,只允許兩個位元組大小的功率,使得所有位元組具有一對可與其交換。
13示出描述向量排列邏輯1300的一個實施例,其 回應於控制暫存器1310中的一組排列控制元件及立即數值1311而將來自來源暫存器1305的資料元件排列至目的地暫存器1315。在一個實施例中,在控制暫存器1310中的每一個元件對應於目的地暫存器1315中的資料元件,並包括索引值,其識別來源暫存器1305內的元件以被複製到目的地。例如,在圖13中,在控制暫存器1310(例如,最低有效位元組)中的每個位元組對應於目的地暫存器1315中在相對應的位置的位元組並且包括索引值,其識別來自來源暫存器1305的資料元件以被複製到該位置。在一個實施例中,索引值包括每一個位元組的6個位元,其識別來自來源暫存器1305的64個來源位元組B0~B63中的一者。
如所提到的,在一個實施例中,只對在控制暫存器1310中對應的控制位元組中的最高有效位元(MSB)與立即數值1311的最低有效位元(LSB)匹配的那些目的地資料元件執行排列。在圖13中,例如,立即數值1311(其被醒目顯示)的兩個最低有效位元是01。因此,只有具有最高顯示位元位置中為01的那些控制元件被用於識別來自來源的資料元件以被複製到目的地。因此,第一控制位元組01000011被用於將來自來源的位元組B3排列至目的地1315(即,因為它從01開始,並且具有識別位元組B3的000011的索引值)中的第一位元組。但是,由於下一個控制位元組在最高有效位元位置不具有01(即,它具有值10110010),它不能被用於識別來自來 源1305的一值,以被複製到目的地中的下一個位元組位置(如由圖13中的下一個位元組位置所指示)。在一個實施例中,在目的地中的這個位元組位置沒有被修改,使得先前儲存在其中的任何值被保持。第三個控制位元組是01000100。因為它從01(對應於立即數的最低有效位元)開始,它的索引值000100被用來識別位元組B4以從來源複製到目的地。接著該排列,對應於以01開始的控制位元組的所有目的地位元組被控制位元組的索引值識別的來源位元組所填滿,而對應於以00、10或11開始的控制位元組的所有目的地位元組則並未被修改。
在所描述的實施例中,來源暫存器1305、控制暫存器1310以及目的地暫存器1315各包括能夠儲存64位元組值的512位元向量暫存器。相同的基本原理可以使用不同大小的資料元件被應用。例如,在一個實施例中,16位元資料元件(字組)被儲存在來源1305中且使用其最高有效N位元對應於立即數的最低有效N位元的控制元件而被排列至目的地1315。也可以使用32位元、64位元,及/或128位元的資料元件大小。另外,如圖13所示,可以提供遮罩值1312對儲存在目的地中的結果執行寫入遮蓋。
在一個實施例中,本文所描述的技術可以被用來將來自多個來源暫存器的資料元件排列到單一目的地暫存器中。這可以說對於像是在散佈跨越於多個來源暫存器的表格中的表格查找之應用特別有用。
透過舉例的方式,圖14示出了一個實施例,其中來源資料元件散佈跨越四個暫存器:zmm1、zmm2、zmm3和zmm4。向量排列邏輯1300可以執行VPERMBI指令的以下四種情況,每一者具有不同的立即數值(0x0、0x1、0x2和0x3),以有效地致能儲存在zmm31內的不同控制元件(即,具有對應於立即數的LSB之MSB的那些控制元件):
vpermbi zmm0,zmm31,zmm1,0x0
vpermbi zmm0,zmm31,zmm2,0x1
vpermbi zmm0,zmm31,zmm3,0x2
vpermbi zmm0,zmm31,zmm4,0x3
換言之,對於具有立即數為0x0的第一指令,只有那些來自zmm31的控制元件被用於從zmm1至zmm0排列資料元件,控制元件具有對應於立即數值(例如,00)的LSB之MSB。類似地,對於具有立即數為0x1的第二指令,只有那些來自zmm31的控制元件被用於從zmm2至zmm0排列資料元件,控制元件具有對應於立即數值(例如,01)的LSB之MSB。對於具有立即數為0x2的第三指令,只有那些來自zmm31的控制元件被用於從zmm3至zmm0排列資料元件,控制元件具有對應於立即數值(例如,10)的LSB之MSB;對於具有立即數為0x3的第四指令,只有那些來自zmm31的控制元件被用於從zmm4至zmm0排列資料元件,控制元件具有對應於立即數值(例如,11)的LSB之MSB。在最後,目的地暫存 器zmm0包含依據立即數和來自zmm31的控制元件的每一者而排列自四個暫存器zmm1-zmm4每一者的資料元件。
在一個實施例中,上述技術可以被用於執行有效率的表格查找運算,其中256B表格被儲存在zmm1、zmm2、zmm3和zmm4中。在所示描述的指令序列後,目的地zmm0暫存器包含64個已查找的位元組。
根據本發明的一個實施例的方法示於圖15。方法可以在本文所述之架構的上下文內被執行,但不局限於任何特定的處理器架構。
在1501,向量排列指令是從記憶體擷取或從指令快取讀取。在1502,將被排列的資料元件被儲存在來源向量暫存器中以及控制元件被儲存在控制向量暫存器中。在1503,對於在控制向量暫存器中的每一個控制元件,最高有效N位元是與立即數的最低有效N位元比較。在1504決定如果有匹配,則在1505,從控制元件讀取索引值以識別來源資料元件且該來源資料元件被複製到對應於控制元件的目的地資料元件。如果控制元件的MSB不等於立即數的LSB,則在1506,對應的目的地資料元件保持不變。注意,以運算1503開始的流程圖的部分在被執行用於控制向量暫存器每一個控制元件。
在前述的說明書中,本發明的實施例已經參照其具體的示例性實施例被描述。然而,很明顯的是可以對其進行各種修改和改變而不脫離本發明的更寬的精神和範圍,如 所附申請專利範圍中所闡述。因此,說明書和附圖是應被認為是說明性的意義而不是限制性意義。
本發明的實施例可包括已在上面描述的各種步驟。這些步驟可以體現在其可用於使通用或專用處理器執行步驟的機器可執行指令。或者,這些步驟可以由包含用於執行步驟之硬線邏輯的特定硬體組件所執行,或由編程的電腦組件和客製化硬體組件的任何組合所執行。
如本文所述,指令可以指的是像是特定應用積體電路(ASIC)的硬體的特定配置,其配置為執行某些操作或具有預定的功能或儲存在體現為非暫態電腦可讀媒體的記憶體中的軟體指令。因此,在圖中所示的技術可以使用在一或多個電子裝置儲存並執行的碼和資料來實現(例如,終端站、網路元件等等)。這種電子裝置使用如非暫態電腦機器可讀儲存媒體的電腦機器可讀媒體(例如,磁碟;光碟;隨機存取記憶體;唯讀記憶體;快閃記憶體裝置:相變記憶體)和暫態電腦機器可讀通信媒體(例如,電、光、聲或其它形式的傳播信號-像是載波、紅外信號、數位信號等等)(於內部及/或透過網路與其它電子設備)儲存和通信碼和資料。此外,這種電子裝置通常包括一組耦合到像是一或多個儲存裝置(非暫態機器可讀儲存媒體)、使用者輸入/輸出裝置(例如,鍵盤、觸控螢幕及/或顯示器)以及網路連接的一或多個其它組件的一或多個處理器。該組處理器與其他組件的耦合通常是通過一或多個匯流排和橋接器(也稱為匯流排控制器)。儲存裝置 和攜帶網路流量的信號分別表示一或多個機器可讀儲存媒體和機器可讀通信媒體。因此,給定電子裝置的儲存裝置通常儲存用於在該電子裝置的該組一或多個處理器上執行的碼及/或資料。當然,本發明的一個實施例的一或多個部分可使用軟體、韌體及/或硬體的不同組合來實現。在此詳細描述全篇中,出於解釋的目的,許多具體的細節被闡述以便提供徹底理解本發明。然而,這將對本發明領域中的通常知識者是顯而易見的,本發明可在沒有這些具體細節的情況下實踐。在某些情況下,習知的結構和功能沒有被精細描述,以避免模糊本發明的標的。因此,本發明的範圍和精神應在隨後申請專利範圍中判斷。
1200‧‧‧主記憶體
1201‧‧‧分支目標緩衝器
1202‧‧‧分支預測單元
1203‧‧‧下一個指令指標
1204‧‧‧指令轉譯後備緩衝器
1205‧‧‧通用暫存器
1206‧‧‧向量暫存器
1207‧‧‧遮罩暫存器
1210‧‧‧指令擷取單元
1211‧‧‧第2階(L2)快取
1212‧‧‧第1階(L1)快取
1216‧‧‧第3階(L3)快取
1220‧‧‧指令快取
1221‧‧‧資料快取
1230‧‧‧解碼單元
1231‧‧‧向量排列解碼邏輯
1240‧‧‧執行單元
1241‧‧‧向量排列執行邏輯
1250‧‧‧寫回單元
1255‧‧‧處理器

Claims (24)

  1. 一種處理器,包含:來源向量暫存器,用以儲存複數個來源資料元件;目的地向量暫存器,用以儲存複數個目的地資料元件;控制向量暫存器,用以儲存複數個控制資料元件,各控制資料元件對應於該些目的地資料元件中的一者且包括N位元值,該N位元值指示來源資料元件是否被複製到該對應的目的地資料元件;向量排列邏輯,用以將各控制資料元件的該N位元值與立即數的N位元部分比較以決定是否將來源資料元件複製到對應的目的地資料元件,其中如果該些N位元值匹配,則該向量排列邏輯是用以使用包括在該控制資料元件中的索引值來識別來源資料元件,以及用以響應地將該來源資料元件複製到該目的地向量暫存器中的該對應的目的地資料元件。
  2. 如申請專利範圍第1項所述之處理器,其中該立即數的該N位元部分包含該立即數的最低有效N位元部分,且其中該控制資料元件的該N位元部分包含該控制資料元件的最高有效N位元部分。
  3. 如申請專利範圍第2項所述之處理器,其中N=2。
  4. 如申請專利範圍第1項所述之處理器,其中該些來源資料元件、該些目的地資料元件以及該些控制資料元 件每一者包含位元組。
  5. 如申請專利範圍第4項所述之處理器,其中每一個控制位元組的6個位元被用於該索引值以索引在該來源向量暫存器中的64個來源位元組的一者。
  6. 如申請專利範圍第5項所述之處理器,其中每一個控制位元組的2個位元將被與該立即數的2位元部分比較,以決定是否將來源資料元件複製到該對應的目的地資料元件。
  7. 如申請專利範圍第1項所述之處理器,其中該些來源資料元件、該些目的地資料元件以及該些控制資料元件每一者包含字組。
  8. 如申請專利範圍第1項所述之處理器,其中該向量排列邏輯是用以執行一或多個向量排列指令以執行其運算。
  9. 如申請專利範圍第8項所述之處理器,其中該向量排列邏輯是用以執行複數個向量排列指令,各具有不同的立即數值及不同的來源向量暫存器以將來自該些不同的來源向量暫存器之值排列至該目的地向量暫存器中。
  10. 如申請專利範圍第1項所述之處理器,進一步包含:遮罩暫存器,用以儲存遮罩值,其中該向量排列邏輯是用以使用該遮罩值在被複製到該目的地向量暫存器的資料元件上執行寫入遮蓋。
  11. 一種方法,包含: 將複數個來源資料元件儲存在來源向量暫存器中;將複數個目的地資料元件儲存在目的地向量暫存器中;將複數個控制資料元件儲存在控制向量暫存器中,各控制資料元件對應於該些目的地資料元件中的一者且包括N位元值,該N位元值指示來源資料元件是否被複製到該對應的目的地資料元件;將各控制資料元件的該N位元值與立即數的N位元部分比較以決定是否將來源資料元件複製到對應的目的地資料元件,其中如果該些N位元值匹配,則使用包括在該控制資料元件中的索引值來識別來源資料元件,響應地將該來源資料元件複製到該目的地向量暫存器中的該對應的目的地資料元件。
  12. 如申請專利範圍第11項所述之方法,其中該立即數的該N位元部分包含該立即數的最低有效N位元部分,且其中該控制資料元件的該N位元部分包含該控制資料元件的最高有效N位元部分。
  13. 如申請專利範圍第12項所述之方法,其中N=2。
  14. 如申請專利範圍第11項所述之方法,其中該些來源資料元件、該些目的地資料元件以及該些控制資料元件每一者包含位元組。
  15. 如申請專利範圍第14項所述之方法,其中每一個控制位元組的6個位元被用於該索引值以索引在該來源 向量暫存器中的64個來源位元組的一者。
  16. 如申請專利範圍第15項所述之方法,其中每一個控制位元組的2個位元將被與該立即數的2位元部分比較,以決定是否將來源資料元件複製到該對應的目的地資料元件。
  17. 如申請專利範圍第11項所述之方法,其中該些來源資料元件、該些目的地資料元件以及該些控制資料元件每一者包含字組。
  18. 如申請專利範圍第11項所述之方法,其中執行一或多個向量排列指令以執行所述操作。
  19. 如申請專利範圍第18項所述之方法,其中執行複數個向量排列指令,各具有不同的立即數值及不同的來源向量暫存器以將來自該些不同的來源向量暫存器之值排列至該目的地向量暫存器中。
  20. 如申請專利範圍第1項所述之方法,進一步包含:在遮罩暫存器儲存遮罩值,以及使用該遮罩值在被複製到該目的地向量暫存器的資料元件上執行寫入遮蓋。
  21. 一種系統,包含:記憶體,用以儲存資料和指令,包括向量排列指令和資料;複數個核心,用以執行該些指令和處理該資料;圖形處理器,用以回應於特定指令來執行圖形操作;網路介面,用於在網路上接收和傳送資料; 使用者輸入介面,用於從滑鼠或鼠標控制裝置接收使用者輸入;以及在該些核心的一或多個中的來源向量暫存器,用以儲存複數個來源資料元件;在該些核心的一或多個中的目的地向量暫存器,用以儲存複數個目的地資料元件;在該些核心的一或多個中的控制向量暫存器,用以儲存複數個控制資料元件,各控制資料元件對應於該些目的地資料元件中的一者且包括N位元值,該N位元值指示來源資料元件是否被複製到該對應的目的地資料元件;在該些核心的一或多個中的向量排列邏輯,用以將各控制資料元件的該N位元值與立即數的N位元部分比較以決定是否將來源資料元件複製到對應的目的地資料元件,其中如果該些N位元值匹配,則該向量排列邏輯是用以使用包括在該控制資料元件中的索引值來識別來源資料元件,以及用以響應地將該來源資料元件複製到該目的地向量暫存器中的該對應的目的地資料元件。
  22. 如申請專利範圍第21項所述之系統,其中該立即數的該N位元部分包含該立即數的最低有效N位元部分,且其中該控制資料元件的該N位元部分包含該控制資料元件的最高有效N位元部分。
  23. 如申請專利範圍第22項所述之系統,其中N=2。
  24. 如申請專利範圍第21項所述之系統,其中該些 來源資料元件、該些目的地資料元件以及該些控制資料元件每一者包含位元組。
TW104139443A 2014-12-27 2015-11-26 利用索引和立即數執行向量排列的方法和設備 TWI574166B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/583,644 US10445092B2 (en) 2014-12-27 2014-12-27 Method and apparatus for performing a vector permute with an index and an immediate

Publications (2)

Publication Number Publication Date
TW201643742A true TW201643742A (zh) 2016-12-16
TWI574166B TWI574166B (zh) 2017-03-11

Family

ID=56151356

Family Applications (2)

Application Number Title Priority Date Filing Date
TW105141618A TWI603208B (zh) 2014-12-27 2015-11-26 利用索引和立即數執行向量排列的方法和設備
TW104139443A TWI574166B (zh) 2014-12-27 2015-11-26 利用索引和立即數執行向量排列的方法和設備

Family Applications Before (1)

Application Number Title Priority Date Filing Date
TW105141618A TWI603208B (zh) 2014-12-27 2015-11-26 利用索引和立即數執行向量排列的方法和設備

Country Status (7)

Country Link
US (2) US10445092B2 (zh)
EP (1) EP3238038B1 (zh)
JP (1) JP6849275B2 (zh)
KR (1) KR102508075B1 (zh)
CN (1) CN107003986A (zh)
TW (2) TWI603208B (zh)
WO (1) WO2016105823A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111831335A (zh) * 2011-12-23 2020-10-27 英特尔公司 经改进的插入指令的装置和方法
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
GB2561674A (en) * 2017-02-17 2018-10-24 Google Llc Permuting in a matrix-vector processor
EP3428792B1 (en) * 2017-07-10 2022-05-04 Arm Ltd Testing bit values inside vector elements
US9853900B1 (en) * 2017-08-07 2017-12-26 Mellanox Technologies Tlv Ltd. Using consistent hashing for ECMP routing
KR102564774B1 (ko) * 2018-09-18 2023-08-09 에스케이하이닉스 주식회사 메모리 시스템 혹은 데이터 처리 시스템의 동작을 진단하는 장치 혹은 진단을 통해 신뢰성을 확보하는 방법
US10853067B2 (en) * 2018-09-27 2020-12-01 Intel Corporation Computer processor for higher precision computations using a mixed-precision decomposition of operations
US11385897B2 (en) * 2019-10-01 2022-07-12 Marvell Asia Pte, Ltd. Merge execution unit for microinstructions
US20230075534A1 (en) * 2021-08-19 2023-03-09 International Business Machines Corporation Masked shifted add operation

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100348808B1 (ko) 1996-04-24 2003-01-29 엘지전자주식회사 메모리간의 데이타 전송장치
US6594754B1 (en) 1999-07-07 2003-07-15 Intel Corporation Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters
US6446198B1 (en) 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US6564105B2 (en) * 2000-01-21 2003-05-13 Medtronic Minimed, Inc. Method and apparatus for communicating between an ambulatory medical device and a control device via telemetry using randomized data
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US6931511B1 (en) 2001-12-31 2005-08-16 Apple Computer, Inc. Parallel vector table look-up with replicated index element vector
US20060075481A1 (en) * 2004-09-28 2006-04-06 Ross Alan D System, method and device for intrusion prevention
EP1836601A2 (en) * 2004-11-30 2007-09-26 Tokyo Electron Limited Dynamically reconfigurable processor
US20070124631A1 (en) * 2005-11-08 2007-05-31 Boggs Darrell D Bit field selection instruction
US7958181B2 (en) * 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
US9495724B2 (en) * 2006-10-31 2016-11-15 International Business Machines Corporation Single precision vector permute immediate with “word” vector write mask
US20080100628A1 (en) 2006-10-31 2008-05-01 International Business Machines Corporation Single Precision Vector Permute Immediate with "Word" Vector Write Mask
US8909901B2 (en) * 2007-12-28 2014-12-09 Intel Corporation Permute operations with flexible zero control
US8051226B2 (en) 2008-06-13 2011-11-01 Freescale Semiconductor, Inc. Circular buffer support in a single instruction multiple data (SIMD) data processor
US8996845B2 (en) * 2009-12-22 2015-03-31 Intel Corporation Vector compare-and-exchange operation
US20120143780A1 (en) 2010-12-01 2012-06-07 International Business Machines Corporation Providing assisted business analysis to users
JP5933725B2 (ja) * 2011-09-26 2016-06-15 インテル・コーポレーション ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
US9513918B2 (en) * 2011-12-22 2016-12-06 Intel Corporation Apparatus and method for performing permute operations
CN104011616B (zh) * 2011-12-23 2017-08-29 英特尔公司 改进置换指令的装置和方法
US20140059322A1 (en) * 2011-12-23 2014-02-27 Elmoustapha Ould-Ahmed-Vall Apparatus and method for broadcasting from a general purpose register to a vector register
WO2013095611A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for performing a permute operation
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US8959275B2 (en) 2012-10-08 2015-02-17 International Business Machines Corporation Byte selection and steering logic for combined byte shift and byte permute vector unit
US9639503B2 (en) * 2013-03-15 2017-05-02 Qualcomm Incorporated Vector indirect element vertical addressing mode with horizontal permute
JP6160259B2 (ja) * 2013-05-30 2017-07-12 富士通株式会社 文字列探索方法、文字列探索装置および文字列探索プログラム
US9268863B2 (en) * 2014-06-03 2016-02-23 International Business Machines Corporation Hierarchical in-memory sort engine

Also Published As

Publication number Publication date
TWI574166B (zh) 2017-03-11
WO2016105823A1 (en) 2016-06-30
JP6849275B2 (ja) 2021-03-24
TWI603208B (zh) 2017-10-21
CN107003986A (zh) 2017-08-01
JP2018500658A (ja) 2018-01-11
TW201810070A (zh) 2018-03-16
KR20170099869A (ko) 2017-09-01
EP3238038A1 (en) 2017-11-01
US20200097290A1 (en) 2020-03-26
EP3238038B1 (en) 2022-01-05
US20160188530A1 (en) 2016-06-30
KR102508075B1 (ko) 2023-03-10
US10445092B2 (en) 2019-10-15
EP3238038A4 (en) 2018-08-08

Similar Documents

Publication Publication Date Title
TWI574166B (zh) 利用索引和立即數執行向量排列的方法和設備
KR102463858B1 (ko) 벡터 인덱스 로드 및 저장을 위한 방법 및 장치
CN107003852B (zh) 用于执行向量位混洗的方法和装置
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP6635438B2 (ja) ベクトルビット反転およびクロスを実行するための方法および装置
CN114942786A (zh) 用于复数乘法和累加的装置和方法
JP2018500654A (ja) ベクトルビット反転を実行するための方法および装置
JP2018500652A (ja) マスクをマスク値のベクトルに拡張するための方法および装置
TW201732553A (zh) 用於保留位元的強制執行的裝置及方法
TWI657372B (zh) 用於執行向量位元聚集的方法、處理器和系統
TWI610234B (zh) 用於壓縮遮罩值的方法及裝置