TWI524266B - 用以偵測向量暫存器內相等元素之裝置及方法 - Google Patents

用以偵測向量暫存器內相等元素之裝置及方法 Download PDF

Info

Publication number
TWI524266B
TWI524266B TW103145814A TW103145814A TWI524266B TW I524266 B TWI524266 B TW I524266B TW 103145814 A TW103145814 A TW 103145814A TW 103145814 A TW103145814 A TW 103145814A TW I524266 B TWI524266 B TW I524266B
Authority
TW
Taiwan
Prior art keywords
register
vector register
vector
field
bit
Prior art date
Application number
TW103145814A
Other languages
English (en)
Other versions
TW201528131A (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 TW201528131A publication Critical patent/TW201528131A/zh
Application granted granted Critical
Publication of TWI524266B publication Critical patent/TWI524266B/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/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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

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

Description

用以偵測向量暫存器內相等元素之裝置及方法
本發明之實施例一般係關於計算機系統的領域。更特別地是,本發明之實施例係關於一種用以偵測向量暫存器內相等元素之裝置與方法。
指令集、或指令集架構(ISA)係關於可程式化之計算機架構的一部分,且可包括原始資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷和例外處理、及外部輸入和輸出(I/O)。指令之詞在本文中通常係指微指令,這是提供給處理器(或指令轉換器,其轉譯(例如,使用靜態二進制轉換、包括動態編譯的動態二進制轉換)、變體、模擬、或以其他方式將指令轉換成一或多個待由處理器處理的其他指令)用於執行的指令,相對於微指令或微運算(micro-ops),這是處理器之解碼器解碼微指令的結果。
ISA係不同於微架構,其係為實作指令集之處理器的 內部設計。具有不同微架構的處理器能共享一共同指令集。例如,Intel® Pentium 4處理器、Intel® CoreTM處理器、及來自美國加州Sunnyvale的進階微裝置的處理器,其實作出幾乎相同形式的x86指令集(具有已添加較新形式的一些擴充),但具有不同的內部設計。例如,ISA的相同暫存器架構可使用熟知技術,包括專用實體暫存器、使用暫存器更名機制的一或多個動態配置實體暫存器(例如,使用暫存器頻疊表(RAT)、重排序緩衝器(ROB)、及引退暫存器檔案、使用多個映射和暫存器池)等在不同微架構下以不同方式來實作。除非另作說明,否則本文所使用的相位暫存器架構、暫存器檔案、及暫存器係指軟體/程式員與指令指定暫存器之方式可見的暫存器。這裡需要明確性,將使用邏輯、架構、或可見軟體之形容詞來表示暫存器架構中的暫存器/檔案,而將對已知微架構中的指定暫存器(例如,實體暫存器、重排序緩衝器、引退暫存器、暫存器池)使用不同的形容詞。
指令集包括一或多個指令格式。已知指令格式定義各種欄位(位元數、位元位置)以除此之外指定待進行之運算(運算碼)和待進行運算之運算元。儘管定義指令模板(或子格式),但仍有一些指令格式進一步地失效。例如,已知指令格式的指令模板可定義為具有指令格式之欄位(所包括之欄位通常依照相同順序,但至少一些具有不同的位元位置,因為包括較少欄位)的不同子集及/或定義為具有不同解釋的已知欄位。因此,ISA的每個指令係 使用已知指令格式來表示(且,若定義的話,在此指令格式的其中一個已知指令模板中)並包括用於指定運算和運算元的欄位。例如,示範ADD指令具有特定運算碼及指令格式,其包括一運算碼欄位來指定運算碼和運算元欄位以選擇運算元(來源1/目的和來源2);及在指令流中發生此ADD指令將在選擇特定運算元的運算元欄位中具有特定內容。
科學、金融、自動向量化的通用目的,RMS(識別、探勘、和合成)、及視覺和多媒體應用程式(例如,2D/3D圖形、影像處理、視頻壓縮/解壓縮、語音辨識演算法和音頻處理)通常需要在大量的資料項目上進行相同運算(稱為「資料平行性」)。單一指令多重資料(SIMD)係指一種使處理器對多個資料項目進行運算的指令類型。SIMD技術特別適用於能將暫存器中的位元邏輯地分成一些固定大小之資料元件的處理器,其中的每一個代表一單獨值。例如,可指定256位元暫存器中的位元與4個單獨的64位元填充資料元件(四字組(Q)大小資料元件)、8個單獨的32位元填充資料元件(雙字組(D)大小資料元件)、16個單獨的16位元填充資料元件(字組(W)大小資料元件)、或32個單獨的8位元資料元件(位元組(B)大小資料元件)一樣操作的來源運算元。這種資料的類型係稱為填充資料類型或向量資料類型,而這種資料類型的運算元係稱為填充資料運算元或向量運算元。換言之,填充資料項目或向量係指一連串的 填充資料元件,而填充資料運算元或向量運算元係為SIMD指令(亦稱為填充資料元件指令或向量指令)的來源或目的運算元。
透過舉例方式,SIMD指令的一種類型指定單一向量運算以垂直形式執行在兩個來源向量運算元上以產生具有相同大小、具有相同資料元件數、及具有相同資料元件順序的目的向量運算元(亦稱為結果向量運算元)。來源向量運算元中的資料元件係稱為來源資料元件,而目的向量運算元中的資料元件係稱為目的或結果資料元件。這些來源向量運算元具有相同大小且包含相同寬度的資料元件,而因此其包含相同的資料元件數。在兩個來源向量運算元中之相同位元位置中的來源資料元件形成資料元件的配對(亦稱為對應資料元件;意即,每個來源運算元對應之資料元件位置0中的資料元件、每個來源運算元對應之資料元件位置1中的資料元件、依此類推)。SIMD指令所指定的操作係對來源資料元件的這些配對之各者分別地執行以產生結果資料元件的相配數,而因此每對來源資料元件具有一對應之結果資料元件。由於操作係垂直的且由於結果向量運算元與來源向量運算元具有相同大小、具有相同資料元件數,且結果資料元件係以相同的資料元件順序來儲存,因此結果資料元件係在與其在來源向量運算元中的來源資料元件之對應配對相同的結果向量運算元之位元位置中。除了此示範類型的SIMD指令之外,還有各種其他類型的SIMD指令(例如,只具有一個或具有兩個以上的 來源向量運算元、以水平形式來運算、產生具有不同大小之結果向量運算元、具有不同大小資料元件、及/或具有不同資料元件順序)。應了解目的向量運算元(或目的運算元)之詞係定義為執行指令所指定之運算的直接結果,包括儲存目的運算元在一位置上(無論是在此指令所指定之暫存器或記憶體位址上)以致於其可由另一指令存取作為來源運算元(藉由另一指令指定相同位置)。
如具有包括x86、MMXTM、資料流SIMD延伸(SSE)、SSE2、SSE3、SSE4.1、及SSE4.2指令之Intel® CoreTM處理器所採用之SIMD技術在應用效能方面有顯著的改善。已發行及/或出版稱為先進向量擴充(AVX)(AVX1和AVX2)並使用向量擴充(VEX)編碼架構的另一組SIMD延伸(例如,參見2011年10月之Intel®64和IA-32架構軟體開發人員手冊;及參見2011年6月之Intel®先進向量擴充編程參考)。
關於本發明之實施例的背景
當如A[B[i]]般間接地存取記憶體時,只有在運轉時間才知道實際的記憶體位址。因此,編譯器不能清楚知道讀取或寫入相同位址。所以,編譯器通常無法向量化具有間接記憶體讀取和寫入的迴圈,例如下列之示範迴圈:
在本實例中,記憶體A[B[i]]和A[D[j]]可能會有落在 向量內的某些索引對(i,j)重疊。例如,若A[D[i]](i=10)參考A[B[i]](i=8)所指的相同位址,則無法同時執行疊代8和10或在i=10時會讀取舊資料,產生不正確的結果。這造成了寫後讀的相依危障。同樣也有可能存在防止向量化之寫後寫、或讀後寫的相依危障。寫後寫的危障係顯示在下列實例中:
編譯器是舊式的最終結果不會向量化上述迴圈而降低效能。
100‧‧‧管線
102‧‧‧提取級
104‧‧‧長度解碼級
106‧‧‧解碼級
108‧‧‧分配級
110‧‧‧更名級
112‧‧‧排程級
114‧‧‧暫存器讀取/記憶體讀取級
116‧‧‧執行級
118‧‧‧寫回/記憶體寫入級
122‧‧‧例外處理級
124‧‧‧提交級
130‧‧‧前端單元
132‧‧‧分支預測單元
134‧‧‧指令快取單元
136‧‧‧指令轉譯後備緩衝器
138‧‧‧指令提取單元
140‧‧‧解碼單元
150‧‧‧執行引擎單元
152‧‧‧更名/分配單元
154‧‧‧引退單元
156‧‧‧排程單元
158‧‧‧實體暫存器檔案單元
160‧‧‧執行叢集
162‧‧‧執行單元
164‧‧‧記憶體存取單元
170‧‧‧記憶體單元
172‧‧‧資料TLB單元
174‧‧‧資料快取單元
176‧‧‧第2級(L2)快取單元
190‧‧‧核心
200‧‧‧處理器
202A-N‧‧‧核心
204A-N‧‧‧快取單元
206‧‧‧共享快取單元
208‧‧‧專用邏輯
210‧‧‧系統代理器
212‧‧‧環形基礎的互連單元
214‧‧‧整合記憶體控制器單元
216‧‧‧匯流排控制器單元
300‧‧‧系統
310‧‧‧處理器
315‧‧‧處理器
320‧‧‧控制器集線器
340‧‧‧記憶體
345‧‧‧共同處理器
350‧‧‧輸入/輸出集線器
360‧‧‧輸入/輸出裝置
390‧‧‧圖形記憶體控制器集線器
395‧‧‧連線
400‧‧‧系統
450‧‧‧點對點互連
470‧‧‧第一處理器
480‧‧‧第二處理器
438‧‧‧共同處理器
472‧‧‧整合記憶體控制器單元
482‧‧‧整合記憶體控制器單元
476‧‧‧P-P介面
478‧‧‧P-P介面
486‧‧‧P-P介面
488‧‧‧P-P介面
494‧‧‧對點介面電路
498‧‧‧對點介面電路
432‧‧‧記憶體
434‧‧‧記憶體
452‧‧‧P-P介面
454‧‧‧P-P介面
490‧‧‧晶片組
439‧‧‧高效能介面
496‧‧‧介面
416‧‧‧第一匯流排
414‧‧‧I/O裝置
418‧‧‧匯流排橋接器
420‧‧‧第二匯流排
422‧‧‧鍵盤/滑鼠
424‧‧‧音頻I/O
427‧‧‧通訊裝置
428‧‧‧儲存單元
430‧‧‧代碼和資料
500‧‧‧系統
472‧‧‧I/O控制邏輯
482‧‧‧I/O控制邏輯
514‧‧‧I/O裝置
515‧‧‧傳統I/O裝置
600‧‧‧單晶片系統
602‧‧‧互連單元
610‧‧‧應用處理器
620‧‧‧共同處理器
630‧‧‧靜態隨機存取記憶體單元
632‧‧‧直接記憶體存取單元
640‧‧‧顯示單元
702‧‧‧高階語言
704‧‧‧x86編譯器
706‧‧‧x86二進制碼
708‧‧‧其他指令集編譯器
710‧‧‧其他指令集二進制碼
712‧‧‧指令轉換器
714‧‧‧不具有x86指令集核心的處理器
716‧‧‧具有至少一x86指令集核心的處理器
801‧‧‧遮罩暫存器k2
802‧‧‧定序器
804‧‧‧定序器
805‧‧‧定序器
808‧‧‧比較器
809‧‧‧累加器
810‧‧‧輸出暫存器k1
1100‧‧‧通用向量合適指令格式
1105‧‧‧無記憶體存取
1120‧‧‧記憶體存取
1140‧‧‧格式欄位
1142‧‧‧基本操作欄位
1144‧‧‧暫存器索引欄位
1146‧‧‧修改欄位
1150‧‧‧擴充操作欄位
1168‧‧‧類別欄位
1152‧‧‧alpha欄位
1154‧‧‧beta欄位
1160‧‧‧縮放欄位
1162A‧‧‧位移欄位
1162B‧‧‧位移因數欄位
1174‧‧‧全運算碼欄位
1154C‧‧‧資料處理欄位
1164‧‧‧資料元件寬度欄位
1170‧‧‧寫入遮罩欄位
1172‧‧‧立即欄位
1168‧‧‧類別欄位
1168A‧‧‧類別A
1168B‧‧‧類別B
1152A‧‧‧RS欄位
1152A.1‧‧‧捨入
1152A.2‧‧‧資料轉換
1154A‧‧‧捨入控制欄位
1156‧‧‧SAE欄位
1158‧‧‧捨入操作控制欄位
1154B‧‧‧資料轉換欄位
1152B‧‧‧逐出暗示欄位
1152B.1‧‧‧暫時
1152B.2‧‧‧非暫時
1157A‧‧‧RL欄位
1152C‧‧‧寫入遮罩控制欄位
1157A.1‧‧‧捨入
1157A.2‧‧‧向量長度
1159A‧‧‧捨入操作控制欄位
1159B‧‧‧向量長度欄位
1157B‧‧‧廣播欄位
1210‧‧‧REX’欄位
1200‧‧‧專用向量合適指令格式
1202‧‧‧EVEX前置
1205‧‧‧REX欄位
1215‧‧‧運算碼映射欄位
1220‧‧‧EVEX.vvvv欄位
1168‧‧‧類別欄位
1225‧‧‧前置編碼欄位
1230‧‧‧實際運算碼欄位
1240‧‧‧MOD R/M欄位
1242‧‧‧MOD欄位
1244‧‧‧Reg欄位
1246‧‧‧R/M欄位
1254‧‧‧xxx欄位
1256‧‧‧bbb欄位
1300‧‧‧暫存器架構
1310‧‧‧向量暫存器
1315‧‧‧寫入遮罩暫存器
1325‧‧‧通用暫存器
1350‧‧‧整數浮點數暫存器檔案
1345‧‧‧純量浮點堆疊暫存器檔案
1400‧‧‧指令解碼器
1402‧‧‧互連網路
1404‧‧‧L2快取
1406‧‧‧L1快取
1408‧‧‧純量單元
1410‧‧‧向量單元
1412‧‧‧純量暫存器
1414‧‧‧向量暫存器
1406A‧‧‧L1資料快取
1428‧‧‧16寬ALU
1420‧‧‧攪和單元
1424‧‧‧複製單元
1426‧‧‧寫入遮罩暫存器
1422A‧‧‧數字轉換單元
1422B‧‧‧數字轉換單元
第1A圖係繪示根據本發明之實施例之示範有序管線和示範暫存器更名、亂序發出/執行管線兩者的方塊圖;第1B圖係繪示根據本發明之實施例之將包括在處理器中的有序架構核心之示範實施例和示範暫存器更名、亂序發出/執行架構核心兩者的方塊圖;第2圖係根據本發明之實施例之具有整合記憶體控制器和圖形的單核心處理器和多核心處理器之方塊圖;第3圖繪示依照本發明之一實施例之系統的方塊圖;第4圖繪示依照本發明之實施例之第二系統的方塊圖;第5圖繪示依照本發明之實施例之第三系統的方塊 圖;第6圖繪示依照本發明之實施例之單晶片系統(SoC)的方塊圖;第7圖繪示根據本發明之實施例之對照使用一軟體指令轉換器來將來源指令集中的二進制指令轉換成目標指令集中的二進制指令之方塊圖;第8圖繪示本發明之一實施例,用來偵測向量暫存器內的相等元素;第9-10圖繪示本發明之一實施例的操作,用來偵測向量暫存器內的相等元素;第11A和11B圖係繪示根據本發明之實施例之通用向量合適指令格式及其指令模板的方塊圖;第12A-D圖係繪示根據本發明之實施例之示範專用向量合適指令格式的方塊圖;第13圖係根據本發明之一實施例之暫存器架構的方塊圖;第14A圖係根據本發明之實施例之單一處理器核心連同其連接單晶片互連網路的連線與其第2級(L2)快取的區域子集之方塊圖;第14B圖係根據本發明之實施例之第14A圖中的處理器核心之部分的分解圖。
【發明內容及實施方式】 示範處理器架構和資料類型
第1A圖係繪示根據本發明之實施例之示範有序管線和示範暫存器更名、亂序發出/執行管線兩者的方塊圖。 第1B圖係繪示根據本發明之實施例之將包括在處理器中的有序架構核心之示範實施例和示範暫存器更名、亂序發出/執行架構核心兩者的方塊圖。第1A-B圖之實線框繪示有序管線和有序核心,而非必要附加的虛線框繪示暫存器更名、亂序發出/執行管線和核心。假定有序態樣係亂序態樣的子集,將說明亂序態樣。
在第1A圖中,處理器管線100包括提取級102、長度解碼級104、解碼級106、分配級108、更名級110、排程(亦稱為調度或發出)級112、暫存器讀取/記憶體讀取級114、執行級116、寫回/記憶體寫入級118、例外處理級122、及提交級124。
第1B圖顯示處理器核心190包括耦接執行引擎單元150的前端單元130,且這兩者都耦接記憶體單元170。 核心190可以是精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令集(VLIW)核心、或混合或替代的核心類型。作為另一選擇,核心190可以是專用核心,例如,網路或通訊核心、壓縮引擎、共同處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心等。
前端單元130包括耦接指令快取單元134的分支預測單元132,指令快取單元134耦接指令轉譯後備緩衝器(TLB)136,指令TLB 136耦接指令提取單元138,指令 提取單元138耦接解碼單元140。解碼單元140(或解碼器)可解碼指令,並產生一或多個微操作、微碼進入點、微指令、其他指令、或其他控制信號作為輸出,其根據原始指令來解碼、或以其他方式反射、或得到。解碼單元140可使用各種不同機制來實作。適當的機制之實例包括,但不受限於查找表、硬體實作、可程式邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等。在一實施例中,核心190包括微碼ROM或儲存用於某些微指令(例如,在解碼單元140中或在前端單元130內)之微碼的其他媒體。解碼單元140耦接在執行引擎單元150中的更名/分配單元152。
執行引擎單元150包括耦接引退單元154及一組一或多個排程單元156的更名/分配單元152。排程單元156表示一些不同排程器,包括保留站、中央指令窗等。排程單元156耦接實體暫存器檔案單元158。實體暫存器檔案單元158之各者表示一或多個實體暫存器檔案,每個儲存一或多個不同的資料類型,例如純量整數、純量浮點數、填充整數、填充浮點數、向量整數、向量浮點數、狀態(例如,待執行之下個指令之位址的指令指標)等。在一實施例中,實體暫存器檔案單元158包含向量暫存器單元、寫入遮罩暫存器單元、及純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮罩暫存器、及通用暫存器。引退單元154重疊實體暫存器檔案單元158以顯示各種可實作暫存器更名和亂序執行的方式(例如,使用重排 序緩衝器和引退暫存器檔案;使用未來檔案、歷史緩衝器、及引退暫存器檔案;使用暫存器映射及暫存器池等)。引退單元154和實體暫存器檔案單元158係耦接執行叢集160。執行叢集160包括一組一或多個執行單元162和一組一或多個記憶體存取單元164。執行單元162可執行各種操作(例如,移位、加法、減法、乘法)及對各種類型的資料(例如,純量浮點數、填充整數、填充浮點數、向量整數、向量浮點數)執行。儘管一些實施例可包括一些專用於特定功能或功能組的執行單元,但其他實施例可只包括一個執行單元或全部執行所有功能的多個執行單元。顯示排程單元156、實體暫存器檔案單元158、及執行叢集160可能是複數個,因為某些實施例產生分開的管線用於某些類型的資料/操作(例如,純量整數管線、純量浮點數/填充整數/填充浮點數/向量整數/向量浮點數管線、及/或記憶體存取管線,其各者均具有自己的排程單元、實體暫存器檔案單元、及/或執行叢集,且在分開的記憶體存取管線之例子中,某些實施例實作出只有管線之執行叢集具有記憶體存取單元164)。亦應了解這裡使用分開的管線,這些管線之一或更多者可以是亂序發出/執行且其餘是有序的。
這組記憶體存取單元164係耦接記憶體單元170,其包括耦接第2級(L2)快取單元176的資料快取單元174之資料TLB單元172。在一示範實施例中,記憶體存取單元164可包括載入單元、儲存位址單元、及儲存資料單 元,各耦接記憶體單元170中的資料TLB單元172。指令快取單元134更耦接在記憶體單元170中的第2級(L2)快取單元176。L2快取單元176耦接一或更多其他級的快取之且最終耦接主記憶體。
透過舉例方式,示範暫存器更名、亂序發送/執行核心架構可如下實作管線100:1)指令提取138進行提取和長度解碼級102和104;2)解碼單元140進行解碼級106;3)更名/分配單元152進行分配級108和更名級110;4)排程單元156進行排程級112;5)實體暫存器檔案單元158和記憶體單元170進行暫存器讀取/記憶體讀取級114;執行叢集160進行執行級116;6)記憶體單元170和實體暫存器檔案單元158進行寫回/記憶體寫入級118;7)各種單元可包括例外處理級122;及8)引退單元154和實體暫存器檔案單元158進行提交級124。
核心190可支援一或多個包括本文所述之指令的指令集(例如,x86指令集(具有已加入較新形式的一些擴充);加州桑尼維爾之MIPS技術的MIPS指令集;加州桑尼維爾之ARM公司的ARM指令集(具有如NEON之非必要額外的擴充))。在一實施例中,核心190包括支援填充資料指令集擴充(例如,下述之AVX1、AVX2、及/或一些形式的通用向量合適指令格式(U=0及/或U=1)的邏輯,藉此允許許多多媒體應用所使用之操作能使用填充資料來執行。
應了解核心可支援多執行緒(執行二或多個平行的操 作組或執行緒),並可以包括時間切割多執行緒、同步多執行緒(其中單一實體核心提供邏輯核心給實體核心係同步多執行緒的每個執行緒)、或以上之組合(例如,如在Intel®超執行緒技術之後的時間切割提取和解碼和同步多執行緒)的各種方式來實行。
儘管在亂序執行的內容中說明了暫存器更名,但應了解可在有序架構中使用暫存器更名。儘管所述之處理器的實施例亦包括分開的指令和資料快取單元134/174及共享L2快取單元176,但其他實施例可具有用於指令和資料兩者的單一內部快取,例如,第1級(L1)內部快取、或多級之內部快取。在一些實施例中,系統可包括內部快取與位於核心及/或處理器外部的外部快取之組合。替代地,所有的快取可在核心及/或處理器的外部。
第2圖係根據本發明之實施例之具有一個以上之核心、可具有整合記憶體控制器、及可具有整合圖形的處理器200之方塊圖。第2圖之實線框繪示具有單核心202A、系統代理器單元210、一組一或多個匯流排控制器單元216的處理器200,而非必要添加的虛線框繪示具有多個核心202A-N、在系統代理器單元210中的一組一或多個整合記憶體控制器單元214、及專用邏輯208的另一處理器200。
因此,處理器200之不同實作可包括:1)具有為整合圖形及/或科學(生產量)邏輯(其可包括一或多個核心)之專用邏輯208的CPU、及為一或多個通用核心(例 如,通用有序核心、通用亂序核心、這兩者之組合)的核心202A-N;2)具有為預期主要用於圖形及/或科學(生產量)的大量專用核心之核心202A-N的共同處理器;及3)具有為大量通用有序核心之核心202A-N的共同處理器。由此,處理器200可以是通用處理器、共同處理器、或專用處理器,例如,網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高產量多重整合核心(MIC)共同處理器(包括30個以上之核心)、內嵌處理器或之類。處理器可實作在一或多個晶片上。處理器200使用如BiCMOS、CMOS、或NMOS的一些處理技術,可以是一部分的一或多個基板及/或可實作在一或多個基板上。
記憶體階層包括核心內之一或多級的快取、一組或一或多個共享快取單元206、及耦接這組整合記憶體控制器單元214的外部記憶體(未顯示)。這組共享快取單元206可包括如第2級(L2)、第3級(L3)、第4級(L4)、或其他級之快取的一或多個中級快取、最後一級快取(LLC)及/或以上之組合。儘管在一實施例中,環形基礎的互連單元212使專用邏輯208,這組共享快取單元206、及系統代理器單元210/整合記憶體控制器單元214互連,但其他實施例可使用一些熟知技術來使上述單元互連。在一實施例中,在一或多個共享快取單元206與核心202A-N之間維持一致性。
在一些實施例中,一或多個核心202A-N能夠進行多 執行緒。系統代理器單元210包括那些協同和操作核心202A-N的元件。系統代理器單元210可包括例如電源控制單元(PCU)及顯示單元。PCU可以是或包括調節核心202A-N和專用邏輯208之電源狀態所需的邏輯和元件。顯示單元係用來驅動一或多個外部連接的顯示器。
核心202A-N在架構指令集方面可以是同型的或不同型的;意即,二或更多之核心202A-N也許能夠執行相同指令集,而其他也許能夠僅執行指令集的子集或不同指令集。
第3-6圖係示範計算機架構的方塊圖。本技術中所知用於膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、開關、內嵌處理器、數位信號處理器(DSP)、圖形裝置、視頻遊戲裝置、機上盒、微控制器、手機、可攜式媒體播放器、手持裝置、及各種其他電子裝置的其他系統設計和組態亦為適用的。一般來說,如本文所揭露之能夠結合處理器及/或其他執行邏輯之種類繁多的系統或電子裝置通常係為適用的。
現在參考第3圖,所顯示的係依照本發明之一實施例之系統300的方塊圖。系統300可包括一或多個耦接控制器集線器320的處理器310、315。在一實施例中,控制器集線器320包括一圖形記憶體控制器集線器(GMCH)390及一輸入/輸出集線器(IOH)350(其可在分開的晶片上);GMCH 390包括耦接記憶體340和共同處理器 345的記憶體和圖形控制器;IOH 350將輸入/輸出(I/O)裝置360耦接至GMCH 390。替代地,記憶體與圖形控制器之一或兩者係整合在處理器內(如本文所述),記憶體340和共同處理器345直接耦接處理器310、及在具有IOH 350之單晶片中的控制器集線器320。
在第3圖中以虛線來表示額外處理器315的非必要性。每個處理器310、315可包括一或多個本文所述之處理核心且可以是一些形式的處理器200。
記憶體340可以是例如動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或這兩者之組合。針對至少一實施例,控制器集線器320經由多點下傳匯流排,例如前端匯流排(FSB)、如快速通道互連(QPI)的點對點介面、或類似連線395來與處理器310、315通訊。
在一實施例中,共同處理器345係為專用處理器,例如,高產量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、內嵌處理器或之類。在一實施例中,控制器集線器320可包括整合圖形加速器。
實體資源310、315之間在包括架構、微架構、熱、功率消耗特性等之度量範圍方面會存在各種差異。
在一實施例中,處理器310執行控制一般類型之資料處理操作的指令。內嵌在指令內的可以是共同處理器指令。處理器310辨識這些共同處理器指令為應由所附接之 共同處理器345所執行的類型。因此,處理器310在共同處理器匯流排或其他互連上發出這些共同處理器指令(或代表共同處理器指令的控制信號)至共同處理器345。共同處理器345接受並執行收到的共同處理器指令。
現在參考第4圖,所顯示的係依照本發明之實施例之第一更具體示範系統400的方塊圖。如第4圖所示,多處理器系統400係為點對點互連系統,且包括經由點對點互連450耦接的第一處理器470和第二處理器480。處理器470和480之各者可以是一些形式的處理器200。在本發明之一實施例中,處理器470和480分別係為處理器310和315,而共同處理器438係為共同處理器345。在另一實施例中,處理器470和480分別係為處理器310和共同處理器345。
顯示處理器470和480分別包括整合記憶體控制器(IMC)單元472和482。處理器470亦包括點對點(P-P)介面476和478作為其匯流排控制器的一部分;同樣地,第二處理器480包括P-P介面486和488。處理器470、480可使用P-P介面電路478、488經由點對點(P-P)介面450來交換資訊。如第4圖所示,IMC 472和482將處理器耦接至各自的記憶體,即記憶體432和記憶體434,其可以是部分區域地附接於各自處理器的主記憶體。
處理器470、480各可使用點對點介面電路476、494、486、498經由個別的P-P介面452、454來與晶片 組490交換資訊。晶片組490可選擇性地經由高效能介面439與共同處理器438交換資訊。在一實施例中,共同處理器438係為專用處理器,例如,高產量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、內嵌處理器或之類。
共享快取(未顯示)可包括在任一處理器中或兩處理器之外,還可經由P-P互連與處理器連接,使得若處理器置於低功率模式中,則任一或兩處理器之區域快取資訊可儲存在共享快取中。
晶片組490可經由介面496來耦接第一匯流排416。 在一實施例中,第一匯流排416可以是周邊元件互連(PCI)匯流排、或如PCI快捷匯流排或另一第三代I/O互連匯流排的匯流排,雖然本發明之範圍並不以此為限。
如第4圖所示,各種I/O裝置414可與匯流排橋接器418一起耦接第一匯流排416、其中匯流排橋接器418耦接第一匯流排416和第二匯流排420。在一實施例中,一或多個如共同處理器、高產量MIC處理器、GPGPU的、加速器(例如,圖形加速器或數位信號處理(DSP)單元)、現場可程式閘陣列、或任何其他處理器的額外處理器415係耦接第一匯流排416。在一實施例中,第二匯流排420可以是低針腳數(LPC)匯流排。在一實施例中,各種裝置可耦接第二匯流排420,包括例如鍵盤及/或滑鼠422、通訊裝置427及如磁碟機或其他可包括指令/代碼和資料430的大容量儲存裝置之儲存單元428。再者,音頻 I/O 424可耦接第二匯流排420。請注意其他架構係可能的。例如,系統可實作多點下傳匯流排或其他上述架構而不是第4圖之點對點架構。
現在回到第5圖,所顯示的係依照本發明之實施例之第二更具體示範系統500的方塊圖。第4和5圖中的相似元件具有相同參考數字,且第4圖之某些態樣已從第5圖省略以避免模糊第5圖之其他態樣。
第5圖繪示處理器470、480分別可包括整合記憶體和I/O控制邏輯(「CL」)472和482。因此,CL 472、482包括整合記憶體控制器單元且包括I/O控制邏輯。第5圖繪示不只記憶體432、434耦接CL 472、482,而且還繪示I/O裝置514亦耦接控制邏輯472、482。傳統I/O裝置515係耦接晶片組490。
現在回到第6圖,所顯示的係依照本發明之實施例之SoC 600的方塊圖。第2圖中的相似元件具有相同參考數字。而且,虛線框在更進階的SoC上是非必要的特徵。在第6圖中,互連單元602係耦接:包括一組一或多個核心202A-N和共享快取單元206的應用處理器610、系統代理器單元210、匯流排控制器單元216、整合記憶體控制器單元214、可包括整合圖形邏輯、影像處理器、音頻處理器、和視頻處理器的一組一或多個共同處理器620、靜態隨機存取記憶體(SRAM)單元630、直接記憶體存取(DMA)單元632、及用於耦接一或多個外部顯示器的顯示單元640。在一實施例中,共同處理器620包括專用處 理器,例如網路或通訊處理器、壓縮引擎、GPGPU、高產量MIC處理器、內嵌處理器或之類。
本文所述之機制的實施例可以硬體、軟體、韌體、或上述實作方法之組合來實作。本發明之實施例可實作成執行在包含至少一處理器、儲存系統(包括揮發性和非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置的可程式系統上的電腦程式或程式碼。
可使用如第4圖所示之代碼430的程式碼來輸入指令以執行本文所述之功能並產生輸出資訊。可以已知方式來將輸出資訊應用於一或多個輸出裝置。為了此應用之目的,處理系統包括任何具有處理器(例如,數位信號處理器(DSP)、微控制器、專用積體電路(ASIC)、或微處理器)之系統。
程式碼可以高階程序或物件導向程式語言來實作以與處理系統通訊。若需要的話,程式碼亦可以組合或機器語言來實作。事實上,本文敘述的機制並不受限於此領域的任何特定程式語言。在任何情況下,語言可以是已編譯或已翻譯之語言。
至少一實施例的一或多個態樣可藉由儲存在機器可讀媒體上的代表指令來實作,其表現在處理器內的各種邏輯,當機器讀取指令時,會使機器組裝邏輯來執行本文描述的技術。這樣的表現,稱為「IP核心」,可儲存在有形的機器可讀媒體上並供應至各種顧客或製造廠來下載至實際產生邏輯的製造機器或處理器中。
毫無限制地,上述機器可讀儲存媒體可包括機器或裝置製造或形成的物件之非暫態、有形的排列,包括如硬碟、任何類型之磁碟(包括軟碟、光碟、唯讀光碟機(CD-ROM)、可抹寫光碟(CD-RW)、及磁光碟機)、如唯讀記憶體(ROM)的半導體裝置、如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)的隨機存取記憶體(RAM)、可抹除可程式化唯讀記憶體(EPROM)、快閃記憶體、電子可抹除可程式化唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光學卡、或可適用於儲存電子指令的任何其他類型之媒體的儲存媒體。
因此,本發明之實施例也包括非暫態、有形的機器可讀媒體,其內含指令或包含設計資料,如硬體描述語言(HDL),其定義本文描述的結構、電路、設備、處理器及/或系統特徵。上述實施例也可指程式產品。
在一些情況下,可使用指令轉換器來將來源指令集的指令轉換成目標指令集。例如,指令轉換器可轉譯(例如,使用靜態二進制轉換、包括動態編譯的動態二進制轉換)、變體、模擬、或以其他方式將指令轉換成一或多個待由核心處理的其他指令。指令轉換器可以軟體、硬體、韌體、或以上之組合來實作。指令轉換器可在處理器上、在處理器之外、或部分在處理器上且部分在處理器外。
第7圖係根據本發明之實施例之對照於使用軟體指令轉換器來將來源指令集中的二進制指令轉換成目標指令集 中的二進制指令之方塊圖。在所述之實施例中,指令轉換器係為軟體指令轉換器,儘管指令轉換器可替代地以軟體、韌體、硬體、或以上之各種組合來實作。第7圖顯示高階語言702的程式可使用x86編譯器704來編譯以產生x86二進制碼706,其本身可由具有至少一x86指令集核心的處理器716來執行。具有至少一x86指令集核心的處理器716表示能執行實質上與具有至少一x86指令集核心的Intel處理器有相同功能的處理器,其藉由協調地執行或以其他方式處理(1)Intel x86指令集核心的實質部份之指令集或(2)目標碼型式的應用程式或其他在具有至少一x86指令集核心的Intel處理器上執行的軟體,以達到大致上與具有至少一x86指令集核心的Intel處理器有相同的結果。x86編譯器704表示可操作來產生x86二進制碼706(例如,目標碼)的編譯器,其會連同或無須額外的連鎖處理地在具有至少一x86指令集核心的處理器716上執行。同樣地,第7圖顯示高階語言702的程式可使用其他指令集編譯器708來編譯以產生原本就可被不具有至少一x86指令集核心的處理器714(例如,具有執行美國加州Sunnyvale的MIPS科技之MIPS指令集及/或執行美國加州Sunnyvale的ARM科技之ARM指令集之核心的處理器)執行的其他指令集二進制碼710。指令轉換器712係用來將x86二進制碼706轉成本身可被不具有x86指令集核心的處理器714執行的代碼。由於能轉換上述的指令轉換器難以製造,因此已轉換的代碼不太可能與其他 指令集二進位碼710相同;然而,已轉換的代碼將完成一般操作且由其他指令集的指令組成。因此,指令轉換器712代表軟體、韌體、硬體、或以上之組合,透過模仿、模擬或任何其他程序,允許處理器或其他不具有x86指令集處理器或核心的電子裝置能執行x86二進制碼706。
用於偵測向量暫存器內相等元素的本發明之實施例
以下所述的本發明之實施例包括指令家族,用來比較目的索引(或位址)的向量與來源索引(或位址)的向量且通知哪兩個索引/位址的信號係相等的。所提出的指令具有類似功能,但在運算元大小和比較方向上有所不同。在一實施例中,這些指令係為整數類型且具有下列變化:
1)vConflict32 k1{k2},v0,v1
2)vConflict64 k1{k2},v0,v1
3)vConflict32_dual k1{k2},v0,v1
4)vConflict64_dual k1{k2},v0,v1
這裡的vConflict32和vConflict64兩者皆為單向比較指令,其比較來源v0中的每個元素與來源v1中的前面主動元素且若任何比較返回真時則設定遮罩。32和64表示運算元之大小(32係用於32位元索引和位址且64係用於64位元索引和位址)。指令vConflict32_dual和vConflict64_dual皆為雙向比較指令,其比較v1中的每個主動元素與其他輸入的所有元素。例如,vConflict32_dual k3,v0,v1將比較來源v0中的每個元素 與來源v1中的所有前面主動元素,並比較來源v1中的每個主動元素與來源v0中的所有前面元素,且若元素為主動則比較v0與v1之緊接在前的元素。接著將結果「OR」起來以形成最終結果,儲存作為輸出k1。輸出遮罩k2係當作一寫入遮罩,其判定v1中的對應元素是否為主動的而因此為比較和輸出進行遮罩。
這些指令的家族之其一目標係為了偵測兩個輸入之間的衝突(一個輸入是第一組索引或位址而另一個輸入是第二組索引或位址),其要求向量運算被動態地分割。在一實施例中,向量化停止在第一衝突以防止寫後讀、寫後寫、或讀後寫危障。由於危障可能改變讀取的值,因此必須重新估計在第一衝突索引之後對索引的存取。能產生使用vConflict指令預測遮罩的輸出遮罩以分割偵測到危障的向量。
說明vConflict實作之一實施例的虛擬碼如下:
儘管有許多方式用來實作這個vConflict指令家族,但在一實施例中,單向指令(vConflict32和vConflict64)採用一組N2/2比較器,這裡的N等於SIMD寬度。針對N=8(如一些Intel先進向量擴充(AVX)指令),可總共需要使用32個比較器。針對雙向(或雙)指令(vConflict32_dual和vConflict64_dual),比較器的數量係雙倍的。若由於需要大量的比較器而關心所需面積,則此可實作成多步驟指令(例如,使用微代碼)。例如,此指令的一個型式可使用微編碼迴圈來實作,微編碼 迴圈中的一個元素會與其他輸入運算元中的所有元素相比。
用於執行上述操作之裝置的一實施例係繪示於第8圖中。輸入遮罩暫存器k2 801係當作寫入遮罩,用來控制目前主動元素是否被用於比較。定序器802透過輸入遮罩暫存器k2 801之位元位置來定序。若在803中判斷遮罩暫存器k2之目前位元位置的值是0,則接著將輸出暫存器k1 810中的對應位元位置設為0。
若遮罩暫存器k2之目前位元位置的值是1,則接著設定用於定序器804和805之操作的開始點。比較器808比較v0的每個元素i+1與v1的所有前面元素i、i-1、i-2等,且比較的結果會與累加器809 OR起來。因此接著更新遮罩暫存器k1。
用於vConflict32和vConflict64之系統操作的具體實例係繪示於第9圖中。這些操作比較v0的元素與v1的前面元素。k2中的值表示應與v0的哪些前面元素比較。因此,在所示之實例中,v1的元素位置1、2、和6將參與比較。輸出遮罩k1被設為0並包括k2中所看到的第一個1位元。於是,關於位置0-1的輸出值係設為0。
k1中之位元位置2的值係設為1,因為v1的元素位置1中的值等於v0的元素位置2中的值且k2在位元位置1的值是1。同樣地,k1中之位元位置7的值係設為1,因為v1的元素位置2中的值等於v0的元素位置7中的值且k2的位元位置2是1。然而,k1中之位元位置6的值 係設為0,因為v0的元素位置6中的值不等於v0的元素位置2-5中的值或k2在對應於v0之位元位置是0。在此實例中,v1的元素位置3等於v0在元素6的值。然而,由於k2在位元位置3是0,因此忽略此等式。v0的元素位置6亦等於v1的元素位置1。然而,由於位置1出現在於k1中記錄最後衝突的位置2之前,因此亦忽略此比較。於是,關於k1的輸出被設為00100001。
用於vConflict32_dual和vConflict64_dual之系統操作的具體實例係繪示於第10圖中。如上所述,這些都是雙向比較指令,其中來源v0中的每個元素會與來源v1中的目前和所有前面主動元素相比較,且接著來源v1中的每個主動元素會與來源v0中的目前和所有前面元素相比較。即使v0和v1的元素0相等,k1中之位元位置1的值仍設為0,因為v1的元素0當k2在位元位置0是0時係不主動的。k1的位元2係設為1,因為v0的元素2等於v1的主動元素1。k1的位元4係設為1,因為v0和v1的元素3係相等的且v1的元素3係主動的。k1的位元6係設為0,因為v1自位於元素4的最後衝突之點(即元素4和5)起沒有前面主動元素與v0元素6比較為相等的,且v0的元素4和5係不主動而因此不與v1的元素6相比較。於是,關於k1的輸出係設為00101000。上述本發明之實施例使編譯器能藉由使用上述指令來向量化迴圈以當在運轉期間偵測到記憶體危障時動態地分割向量執行。因此,迴圈可被向量化,這在先前系統中會由於無法 被靜態判斷且在相依圖中造成週期之可能的跨迴圈記憶體相依性而不能被向量化。藉此,計算效率會明顯地增加。
示範指令格式
本文所述的指令之實施例可以不同格式來具體化。另外,以下詳述示範系統、架構、及管線。指令之實施例可在這類系統、架構、及管線上執行,但不以那些詳述細節為限。
向量合適指令格式是一種適用於向量指令的指令格式(例如,有一些向量運算專用的欄位)。儘管所述之實施例中係透過向量合適指令格式來支援向量和純量運算,但其他實施例只使用向量合適指令格式來執行向量運算。
第11A-11B圖係繪示根據本發明之實施例之通用向量合適指令格式及其指令模板的方塊圖。第11A圖係繪示根據本發明之實施例之通用向量合適指令格式及其類別A指令模板的方塊圖;而第11B圖係繪示根據本發明之實施例之通用向量合適指令格式及其類別B指令模板的方塊圖。具體來說,用於通用向量合適指令格式1100的模板係定義為類別A與類別B指令模板,這兩個都包括無記憶體存取1105指令模板及記憶體存取1120指令模板。向量合適指令格式之內容中的通用之詞係指不受制於任何具體指令集的指令格式。
儘管將敘述本發明之實施例的向量合適指令格式支援下列:具有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位元組的向量運算元)。
第11A圖中的類別A指令模板包括:1)在無記憶體存取1105指令模板內顯示一無記憶體存取、全捨入控制類型操作1110指令模板及一無記憶體存取、資料轉換類型操作1115指令模板;及2)在記憶體存取1120指令模板內顯示一記憶體存取、暫時1125指令模板及一記憶體存取、非暫時1130指令模板。第11B圖中的類別B指令模板包括:1)在無記憶體存取1105指令模板中顯示一無記憶體存取、寫入遮罩控制、部份捨入控制類型操作1112指令模板及一無記憶體存取、寫入遮罩控制、vsize 類型操作1117指令模板;及2)在記憶體存取1120指令模板中顯示一記憶體存取、寫入遮罩控制1127指令模板。
通用向量合適指令格式1100包括如下在第11A-11B圖中所示之依照順序列於下方的欄位。
格式欄位1140-在此欄位中的一特定值(指令格式識別符值)能唯一識別向量合適指令格式,如此能在指令流中出現為向量合適指令格式的指令。由此而論,此欄位就某種意義而言係可選的,其對於僅具有通用向量合適指令格式的指令是非必要的。
基本操作欄位1142-其內容區別不同的基本操作。
暫存器索引欄位1144-其內容會直接地或透過位址產生來指定來源和目的運算元的位置係在暫存器中或在記憶體中。這些包括夠多位元數以從PxQ(例如,32x512、16x128、32x1024、64x1024)暫存器檔案中選擇N個暫存器。儘管在一實施例中,N可能高達三個來源與一個目的暫存器,但其他實施例可支援更多或更少的來源與目的暫存器(例如,可支援高達兩個來源,這些來源的其中一個也充當目的、可支援高達三個來源,這些來源的其中一個也充當目的、可支援高達兩個來源與一個目的)。
修改欄位1146-其內容區別出現指定記憶體存取之為通用向量指令格式的指令與出現未指定記憶體存取之指令;意即,在無記憶體存取1105指令模板與記憶體存取1120指令模板之間。記憶體存取操作讀取及/或寫入記憶 體階層(在一些例子中係使用暫存器中的值來指定來源及/或目的位址),而無記憶體存取操作並非如此(例如,來源及目的都是暫存器)。儘管在一實施例中,此欄位也從三個不同的方式之間選擇來執行記憶體位址計算,但其他實施例可支援更多、更少、或不同的方式來執行記憶體位址計算。
擴充操作欄位1150-其內容區別除了基本操作之外,可執行各種不同操作中的哪一個。此欄位是特定內容。在本發明之一實施例中,此欄位分成一類別欄位1168、一alpha欄位1152、及一beta欄位1154。擴充操作欄位1150使一般操作群組能在單一指令中執行,而不是2、3或4個指令。
縮放(scale)欄位1160-其內容考慮到縮放索引欄位的內容來產生記憶體位址(例如,使用2scale*索引+基底來產生位址)。
位移(displacement)欄位1162A-其內容係用來產生部份的記憶體位址(例如,使用2scale*索引+基底+位移來產生位址)。
位移因數欄位1162B(請注意將位移欄位1162A直接並列於位移因數欄位1162B上就表示使用一或另一個)-其內容係用來產生部份的位址;指定待由記憶體存取(N)的大小所縮放的位移因數,這裡的N是記憶體存取中的位元組數量(例如,使用2scale*索引+基底+已縮放之位移來產生位址)。忽略多餘的低序位元,因此位移因數 欄位的內容乘以記憶體運算元總大小(N)便產生用來計算有效位址的最終位移。處理器硬體在運轉期間會基於全運算碼欄位1174(本文所述)及資料處理欄位1154C來決定N值。位移欄位1162A與位移因數欄位1162B就某種意義而言係可選的,其不用於無記憶體存取1105指令模板,及/或不同的實施例可只實作其中一個或兩者皆無。
資料元件寬度欄位1164-其內容區別出使用哪一個資料元件寬度(在一些實施例中對所有指令;在其他實施例中只對一些指令)。此欄位就某種意義而言係可選的,若僅支援一種資料元件寬度及/或使用運算碼的一些態樣來支援資料元件寬度,則不需要此欄位。
寫入遮罩欄位1170-其內容在每資料元件位置基礎上控制在目的向量運算元中的資料元件位置是否反映出基本操作與擴充操作的結果。類別A指令模板支援合併寫入遮罩,而類別B指令模板則支援合併與歸零寫入遮罩。當合併時,向量遮罩使任何在目的中的元素組避免在任何操作(由基本操作與擴充操作所指定)執行期間被更新;在其他的一實施例中,保留目的之每個元素的舊值,其中對應的遮罩位元具有0值。反之,當歸零時,向量遮罩使任何在目的中的元素組在任何操作(由基本操作與擴充操作所指定)執行期間被歸零;在一實施例中,當對應的遮罩位元具有0值時,目的之元素就被設為0。此功能的子集係為控制所執行操作之向量長度(意即,被修改之第一個到 最後一個元素的範圍)的能力;然而,所修改的元素不必是連續的。因此,寫入遮罩欄位1170允許部份的向量操作,包括載入、儲存、運算、邏輯、等等。儘管本發明之實施例係敘述寫入遮罩欄位1170的內容選擇了其中一個包含被使用之寫入遮罩的寫入遮罩暫存器(且因此寫入遮罩欄位1170的內容間接地識別被執行的遮罩),但其他實施例反而或額外允許寫入遮罩欄位1170的內容能直接地指定被執行的遮罩。
立即欄位1172-其內容考量到指定一立即值。此欄位就某種意義而言是可選的,在不支援立即值之通用向量合適格式的實作中不會出現,且在不使用立即值的指令中不會出現。
類別欄位1168-其內容區別不同類別的指令。關於第11A-B圖,此欄位的內容在類別A與類別B指令之間作選擇。在第11A-B圖中,使用圓角方形來表示出現在欄位中的特定值(例如,分別在第11A-B圖中的類別欄位1168之類別A 1168A與類別B 1168B)。
類別A的指令模板
在類別A的無記憶體存取1105指令模板例子中,alpha欄位1152被解釋為RS欄位1152A,其內容區別出哪一種不同的擴充操作類型會被執行(例如,對無記憶體存取、捨入類型操作1110與無記憶體存取、資料轉換類型操作1115指令模板分別指定捨入1152A.1與資料轉換 1152A.2),而beta欄位1154區別指定類型的哪種操作會被執行。在無記憶體存取1105指令模板中,不會出現縮放欄位1160、位移欄位1162A,及位移因數欄位1162B。
無記憶體存取指令模板-全捨入控制類型操作
在無記憶體存取全捨入控制類型操作1110指令模板中,beta欄位1154係被解釋為捨入控制欄位1154A,其內容提供靜態捨入。儘管在本發明所述之實施例中,捨入控制欄位1154A包括一抑制所有浮點數例外(SAE)欄位1156與一捨入操作欄位1158,但其他實施例可支援可將這兩個概念編碼成相同的欄位或僅有其中一個或另一個這些概念/欄位(例如,可僅有捨入操作欄位1158)。
SAE欄位1156-其內容區別是否去能例外事件報告;當SAE欄位1156的內容指示啟動抑制時,已知指令不會報告任何種類的浮點數例外旗標且不啟動任何浮點數例外的處理器。
捨入操作欄位1158-其內容區別捨入操作群組中的哪一個操作會被執行(例如,無條件進入、無條件捨去、化整為零和四捨五入)。因此,捨入操作欄位1158考量到改變每指令基礎上的捨入模式。在本發明之一實施例中的處理器包括用來規定捨入模式的控制暫存器,捨入操作欄位1158的內容會蓋過此暫存器值。
無記憶體存取指令模板-資料轉換類型操作
在無記憶體存取資料轉換類型操作1115指令模板中,beta欄位1154被解釋為資料轉換欄位1154B,其內容區別哪一種資料轉換會被執行(例如,無資料轉換、攪和、廣播)。
在類別A的記憶體存取1120指令模板例子中,alpha欄位1152被解釋為逐出暗示欄位1152B,其內容區別哪一個逐出暗示會被使用(在第11A圖中,對記憶體存取、暫時1125指令模板與記憶體存取、非暫時1130指令模板分別規定暫時1152B.1與非暫時1152B.2),而beta欄位1154被解釋為資料處理欄位1154C,其內容區別哪一個資料處理操作(也稱作基元)會被執行(例如,無處理、廣播、來源之上轉換、及目的之下轉換)。記憶體存取1120指令模板包括縮放欄位1160,及選擇性地包括位移欄位1162A或位移因數欄位1162B。
向量記憶體指令利用轉換支援來進行從記憶體載入向量及將向量存入記憶體。如同正常的向量指令,向量記憶體指令以逐資料元件的方式從/至記憶體傳輸資料,而且實際上傳輸的元素會被選為寫入遮罩的向量遮罩內容所指示。
記憶體存取指令模板-暫時
暫時資料很可能是快到能從快取中再被使用的資料。然而,這只是一個建議,且不同的處理器可以不同方式來 實作,包括完全地忽略這個建議。
記憶體存取指令模板-非暫時
非暫時資料不太可能是快到能從第1級快取中再被使用的資料且應該優先逐出。然而,這只是一個建議,且不同的處理器可以不同方式來實作,包括完全地忽略這個建議。
類別B的指令模板
在類別B的指令模板例子中,alpha欄位1152被解釋為寫入遮罩控制(Z)欄位1152C,其內容區別是否應該合併或歸零被寫入遮罩欄位1170控制的寫入遮罩。
在類別B的無記憶體存取1105指令模板例子中,部份的beta欄位1154被解釋為RL欄位1157A,其內容區別哪一種擴充操作類型會被執行(例如,對無記憶體存取、寫入遮罩控制、部份捨入控制類型操作1112指令模板與無記憶體存取、寫入遮罩控制、VSIZE類型操作1117指令模板分別規定捨入1157A.1與向量長度(VSIZE)1157A.2),而其餘的beta欄位1154區別哪一種指定類型的操作會被執行。在無記憶體存取1105指令模板中,不會出現縮放欄位1160、位移欄位1162A、及位移因數欄位1162B。
在無記憶體存取、寫入遮罩控制、部份捨入控制類型操作1110指令模板中,其餘的beta欄位1154被解釋為 捨入操作欄位1159A且例外事件報告會失效(已知指令不會報告任何種類的浮點數例外旗標且不啟動任何浮點數例外的處理器)。
捨入操作欄位1159A-正如捨入操作控制欄位1158,其內容區別捨入操作群組中的哪一個操作會被執行(例如,無條件進入,無條件捨去,化整為零和四捨五入)。 因此,捨入操作欄位1159A考量到改變每指令基礎上的捨入模式。在本發明之一實施例中的處理器包括用來規定捨入模式的控制暫存器,捨入操作欄位1159A的內容蓋過此暫存器值。
在無記憶體存取、寫入遮罩控制、VSIZE類型操作1117指令模板中,其餘的beta欄位1154被解釋為向量長度欄位1159B,其內容區別會進行哪一個資料向量長度(例如,128、256、或512個位元組)。
在類別B的記憶體存取1120指令模板例子中,部份的beta欄位1154被解釋為廣播欄位1157B,其內容區別是否會執行廣播類型資料處理操作,而其餘的beta欄位1154被解釋為向量長度欄位1159B。記憶體存取1120指令模板包括縮放欄位1160,及選擇性地包括位移欄位1162A或位移因數欄位1162B。
關於通用向量合適指令格式1100,顯示全運算碼欄位1174包括格式欄位1140、基本操作欄位1142、及資料元件寬度欄位1164。儘管顯示一實施例中的全運算碼欄位1174包括所有這些欄位,但在不支援所有欄位的實施 例中,全運算碼欄位1174包括比所有這些欄位還少的欄位。全運算碼欄位1174提供運算碼(opcode)。
擴充操作欄位1150、資料元件寬度欄位1164、及寫入遮罩欄位1170允許在通用向量合適指令格式的每個指令基礎上規定這些特徵。
結合寫入遮罩欄位與資料元件寬度欄位會產生類型化指令,其使遮罩能基於不同的資料元件寬度來應用。
在類別A與類別B中發現的各種指令模板會在不同情況下有幫助。在本發明之一些實施例中,不同處理器或處理器內的不同核心可僅支援類別A、僅支援類別B、或支援這兩種類別。例如,適用於通用計算的高效能通用亂序核心可僅支援類別B,主要適用於圖形及/或科學(生產量)計算的核心可僅支援類別A,而適用於兩者的核心可支援這兩種類別(當然,具有來自兩種類別之一些混合的模板和指令的核心,但並非來自兩種類別之所有模板和指令都在本發明之範圍內)。而且,單一處理器可包括多個核心,所有核心支援相同類別或其中有不同核心支援不同類別。例如,在具有單獨圖形和通用核心的處理器中,主要用於圖形及/或科學計算的其中一個圖形核心可僅支援類別A,而一或多個通用核心可以是具有亂序執行和用於通用計算的暫存器更名之高效能通用核心,其僅支援類別B。不具有單獨圖形核心的另一處理器可包括一或多個通用有序或亂序核心,其支援類別A與類別B兩者。當然,在本發明之不同實施例中,來自一類別的特徵亦可實 作在其他類別中。用高階語言所編寫的程式將被編譯(例如,及時編譯或靜態地編譯)成各種不同的可執行形式,包括:1)僅具有用於執行的目標處理器所支援之類別之指令的形式;或2)具有使用所有類別之不同指令組合來編寫替代常式並具有選擇常式以基於由目前正在執行代碼的處理器所支援的指令來執行的控制流程之形式。
第12A-D圖係繪示根據本發明之實施例之示範專用向量合適指令格式的方塊圖。第12圖顯示專用向量合適指令格式1200,就某種意義而言其係為特定的,其規定位置、大小、解釋、及欄位順序,以及一些欄位的值。可使用專用向量合適指令格式1200來擴充x86指令集,因此有些欄位會類似或等同於在現存之x86指令集及其擴充(例如,AVX)中使用的欄位。這個格式依然符合具有擴充之現存的x86指令集之前置編碼欄位、實際運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位、及立即欄位。說明了第11圖之欄位映射到的第12圖之欄位。
應了解雖然本發明之實施例為了說明而在通用向量合適指令格式1100之上下文中說明關於專用向量合適指令格式1200,但除了所請求之範圍外,本發明並不受限於專用向量合適指令格式1200。例如,通用向量合適指令格式1100考量各種可能大小用於各種欄位,而專用向量合適指令格式1200係顯示為具有特定大小的欄位。藉由特定實例,儘管顯示資料元件寬度欄位1164在專用向量合適指令格式1200中是一個位元欄位,但本發明不以此 為限(意即,通用向量合適指令格式1100考量其他大小的資料元件寬度欄位1164)。
通用向量合適指令格式1100包括如下在第12A圖中所示之依照順序列於下方的欄位。
EVEX前置(位元組0-3)1202-被編碼成四位元組格式。
格式欄位1140(EVEX位元組0,位元[7:0]-第一位元組(EVEX位元組0)是格式欄位1140且內含0x62(用來區別本發明之一實施例中的向量合適指令格式之唯一值)。
第二到第四個位元組(EVEX位元組1-3)包括一些提供特定能力的位元欄位。
REX欄位1205(EVEX位元組1,位元[7-5]-由EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及1157BEX位元組1,位元[5]-B)所組成。EVEX.R、EVEX.X、及EVEX.B位元欄位提供與對應之VEX位元欄位相同的功能性,且使用1補數形式來編碼,意即,將ZMM0編碼成1111B、將ZMM15編碼成0000B。如本領域所知悉,指令的其他欄位會編碼暫存器索引的最低三位元(rrr、xxx、及bbb),如此可藉由增加EVEX.R、EVEX.X、及EVEX.B來形成Rrrr、Xxxx、及Bbbb。
REX’欄位1210-這是REX’欄位1210之第一部份且是EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’), 其用來編碼最高16或最低16的擴充32暫存器組。在本發明之一實施例中,此位元與如下面指出的其他位元係儲存成位元反轉的格式,以區別出(在熟知的x86 32位元模式中)BOUND指令,其實際運算碼位元組是62,但在MOD R/M欄位中(下面所述)不接受在MOD欄位中的11值;本發明之其他實施例不會以反轉格式儲存此位元與下面指出的其他位元。1值係用來編碼最低的16個暫存器。換言之,R’Rrrr係藉由結合EVEX.R’、EVEX.R、及其他欄位的其他RRR來形成。
運算碼映射欄位1215(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼一隱含的引導運算碼位元組(OF、OF 38、或OF 3)。
資料元件寬度欄位1164(EVEX位元組2,位元[7]-W)-係以符號EVEX.W來表示。EVEX.W係用來定義資料型態的粒度(大小)(不是32位元的資料元件就是64位元的資料元件)。
EVEX.vvvv 1220(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的作用可包括下列:1)EVEX.vvvv以反轉(1補數)形式來編碼所指定的第一來源暫存器運算元,且對具有2或多個來源運算元的指令皆有效;2)EVEX.vvvv對某個向量偏移以1補數形式來編碼所指定的目的暫存器運算元;或3)EVEX.vvvv不編碼任何運算元,此欄位被保留且應包含1111b。因此,EVEX.vvvv欄位1220將所儲存之第一來源暫存器指示符之4個低序位 元編碼成反轉(1補碼)形式。基於指令,使用額外不同的EVEX位元欄位來將指示符大小擴充至32個暫存器。
EVEX.U 1168類別欄位(EVEX位元組2,位元[2]-U)-若EVEX.U=0,則表示類別A或EVEX.U0;若EVEX.U=1,則表示類別B或EVEX.U1。
前置編碼欄位1225(EVEX位元組2,位元[1:0]-pp)-提供額外的位元用於基本操作欄位。除了對EVEX前置格式的傳統SSE指令提供支援,也具有緊密SIMD前置的優點(而不需要一位元組來表示SIMD前置,EVEX前置僅需要2位元)。在一實施例中,為了支援使用為傳統格式與EVEX前置格式的SIMD前置(66H、F2H、F3H)之傳統SSE指令,這些傳統SIMD前置會被編碼入SIMD前置編碼欄位中;且在提供到解碼器的PLA之前,在運轉時間時展開到傳統SIMD前置(因此PLA可執行這些傳統指令之傳統與EVEX格式而不需修改)。雖然較新的指令可直接使用EVEX前置編碼欄位的內容作為運算碼擴充,但某些實施例為了一致性會以類似方式來擴充,可是要考量到這些傳統SIMD前置所規定的不同意思。另一實施例可重設計PLA來支援2位元SIMD前置編碼,因而不需要擴充。
Alpha欄位1152(EVEX位元組3,位元[7]-EH;也稱作EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;也以α來說明)-如先前所述,此欄位是特定的內容。
Beta欄位1154(EVEX位元組3,位元[6:4]-SSS;也稱作EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ來說明)-如先前所述,此欄位是特定的內容。
REX’欄位1110-這是REX’欄位之餘數且是EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’),其可用來編碼最高16或最低16的擴充32暫存器組。此位元係儲存成位元反轉的格式。使用1值來編碼最低的16個暫存器。 換言之,V’VVVV係藉由結合EVEX.V’、EVEX.vvvv來形成。
寫入遮罩欄位1170(EVEX位元組3,位元[2:0]-kkk)-其內容指定在寫入遮罩暫存器中的暫存器之索引,如先前所述。在本發明之一實施例中,特定值EVEX.kkk=000具有意謂著沒有對特定指令使用寫入遮罩的特殊行為(可以各種方式來實作,包括使用固線式連至所有1的寫入遮罩或繞過遮罩硬體的硬體)。
實際運算碼欄位1230(位元組4)也稱作運算碼位元組。部份的運算碼係在這個欄位中規定。
MOD R/M欄位1240(位元組5)包括MOD欄位1242、Reg欄位1244、及R/M欄位1246。如先前所述,MOD欄位1242的內容區別記憶體存取與非記憶體存取操作。Reg欄位1244的作用可概括為兩種情況:編碼目的暫存器運算元或來源暫存器運算元、或視為運算碼擴充且不用來編碼任何指令運算元。R/M欄位1246的作用可包 括下列:編碼參考一記憶體位址的指令運算元、或編碼目的暫存器運算元或來源暫存器運算元。
縮放、索引、基底(SIB)位元組(位元組6)-如先前所述,擴充操作欄位1150的內容係用來產生記憶體位址。SIB.xxx 1254與SIB.bbb 1256-之前已經提到這些欄位的內容係關於暫存器索引Xxxx與Bbbb。
位移欄位1162A(位元組7-10)-當MOD欄位1242內含10時,位元組7-10是位移欄位1162A,且其作用如同傳統32位元位移(位移32)且以位元組大小來運作。
位移因數欄位1162B(位元組7)-當MOD欄位1242內含01時,位元組7是位移因數欄位1162B。此欄位的位置係與傳統x86指令集8位元位移(位移8)的位置相同,其以位元組大小來運作。由於位移8是有號擴充,因此會只在-128與127位元組偏移量之間定址;就64位元組快取線而言,位移8使用8位元,其只會設成四個實際有用的值-128、-64、0、及64;由於通常需要較大的範圍,故使用位移32;然而,位移32需要4位元組。相對於位移8與位移32,位移因數欄位1162B重新詮釋了位移8;當使用位移因數欄位1162B時,實際位移會由乘以記憶體運算元存取的大小(N)之位移因數欄位之內容所決定。這類型的位移係稱作位移8*N。這減少了平均指令長度(用來位移但具有大上許多範圍的單一位元組)。這樣的壓縮位移係基於假設有效的位移是記憶體存取大小的倍數,因此,不需要編碼位址偏移量之多餘的低序位元。 換言之,位移因數欄位1162B取代了傳統x86指令集8位元位移。因此,會以與x86指令集8位元位移的相同方式來編碼(故不改變ModRM/SIB編碼規則)位移因數欄位1162B,只有將位移8超載至位移8*N例外。換言之,沒有改變編碼規則或編碼長度,而只是改變硬體所詮釋的位移值(其需要以記憶體運算元的大小來縮放位移以獲得逐位元組位址偏移量)。
立即欄位1172係如先前所述來運作。
全運算碼欄位
第12B圖係繪示根據本發明之一實施例之組成全運算碼欄位1174的專用向量合適指令格式1200之欄位的方塊圖。具體來說,全運算碼欄位1174包括格式欄位1140、基本操作欄位1142、及資料元件寬度(W)欄位1164。基本操作欄位1142包括前置編碼欄位1225、運算碼映射欄位1215、及實際運算碼欄位1230。
暫存器索引欄位
第12C圖係繪示根據本發明之一實施例之組成暫存器索引欄位1144的專用向量合適指令格式1200之欄位的方塊圖。具體來說,暫存器索引欄位1144包括REX欄位1205、REX’欄位1210、MODR/M.reg欄位1244、MODR/M.r/m欄位1246、VVVV欄位1220、xxx欄位1254、及bbb欄位1256。
擴充操作欄位
第12D圖係繪示根據本發明之一實施例之組成擴充操作欄位1150的專用向量合適指令格式1200之欄位的方塊圖。當類別(U)欄位1168包含0時,表示EVEX.U0(類別A 1168A);當包含1時,表示EVEX.U1(類別B 1168B)。當U=0且MOD欄位1242包含11時(表示無記憶體存取操作),alpha欄位1152(EVEX位元組3,位元[7]-EH)被解釋為rs欄位1152A。當rs欄位1152A包含1(捨入1152A.1)時,beta欄位1154(EVEX位元組3,位元[6:4]-SSS)被解釋為捨入控制欄位1154A。捨入控制欄位1154A包括一個位元SAE欄位1156和兩個位元捨入操作欄位1158。當rs欄位1152A包含0(資料轉換1152A.2)時,beta欄位1154(EVEX位元組3,位元[6:4]-SSS)被解釋為三個位元資料轉換欄位1154B。當U=0且MOD欄位1242包含00、01、或10時(表示記憶體存取操作),alpha欄位1152(EVEX位元組3,位元[7]-EH)被解釋為逐出暗示(EH)欄位1152B且beta欄位1154(EVEX位元組3,位元[6:4]-SSS)被解釋為三個位元資料處理欄位1154C。
當U=1時,alpha欄位1152(EVEX位元組3,位元[7]-EH)被解釋為寫入遮罩控制(Z)欄位1152C。當U=1且MOD欄位1242包含11時(表示無記憶體存取操作),部分的beta欄位1154(EVEX位元組3,位元[4]- S0)被解釋為RL欄位1157A;當包含1(捨入1157A.1)時,其餘的beta欄位1154(EVEX位元組3,位元[6-5]-S2-1)被解釋為捨入操作欄位1159A,而當RL欄位1157A包含0(VSIZE 1157.A2)時,其餘的beta欄位1154(EVEX位元組3,位元[6-5]-S2-1)被解釋為向量長度欄位1159B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位1242包含00、01、或10時(表示記憶體存取操作),beta欄位1154(EVEX位元組3,位元[6:4]-SSS)被解釋為向量長度欄位1159B(EVEX位元組3,位元[6-5]-L1-0)和廣播欄位1157B(EVEX位元組3,位元[4]-B)。
第13圖係根據本發明之一實施例之暫存器架構1300的方塊圖。在所述之實施例中,有32個512位元寬的向量暫存器1310;這些暫存器被引用為zmm0至zmm31。最低16zmm暫存器的低序256位元係覆蓋在暫存器ymm0-16上。最低16zmm暫存器的低序128位元(ymm暫存器的低序128位元)係覆蓋在暫存器xmm0-15上。專用向量合適指令格式1200在如下表中所示的這些覆蓋暫存器檔案上操作。
換言之,向量長度欄位1159B在最大長度與一或多個其他較短長度之間作選擇,這裡的每個上述較短長度係為前面長度之長度的一半;且不包括向量長度欄位1159B的指令模板會在最大向量長度上操作。再者,在一實施例中,專用向量合適指令格式1200的類別B指令模板係在填充或純量單/雙精度浮點數資料和填充或純量整數資料上操作。純量操作係執行在zmm/ymm/xmm暫存器中的最低序資料元件位置上的操作;高序資料元件位置依據實施例而處於在指令或歸零之前的位置。
寫入遮罩暫存器1315-在所述之實施例中,有8個寫入遮罩暫存器(k0至k7),每個大小為64位元。在另一實施例中,寫入遮罩暫存器1315的大小為16位元。如之前所述,在本發明之一實施例中,向量遮罩暫存器k0不能作為寫入遮罩;當編碼通常指示出k0係用於寫入遮罩 時,便選擇0xFFFF的固線式寫入遮罩,有效地禁能對此指令的寫入遮罩。
通用暫存器1325-在所述之實施例中,有16個64位元的通用暫存器,其與現存之x86定址模式一起使用以定址記憶體運算元。這些暫存器所引用的名稱為RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15。
純量浮點堆疊暫存器檔案(x87堆疊)1345,於其上堆疊MMX填充整數浮點數暫存器檔案1350-在所述之實施例中,x87堆疊係為8元素堆疊,用來使用x87指令集擴充對32/64/80位元浮點數資料執行純量浮點數操作;而MMX暫存器係用來對64位元填充整數資料進行操作,以及對在MMX與XMM暫存器之間進行的一些操作保持運算元。
本發明之其他實施例可使用較寬或較窄的暫存器。另外,本發明之另一實施例可使用更多、更少、或不同的暫存器檔案和暫存器。
第14A-B圖係繪示更具體之示範有序核心架構的方塊圖;其核心會是晶片中的多個邏輯方塊之其一者(包括相同類型及/或不同類型的其他核心)。邏輯方塊依據應用程式透過高頻寬互連網路(例如,環形網路)來與一些固定功能邏輯、記憶體I/O介面、及其他必要I/O邏輯通訊。
第14A圖係根據本發明之實施例之單一處理器核心連 同其連接單晶片環形網路1402的連線與其第2級(L2)快取1404的區域子集之方塊圖。在一實施例中,指令解碼器1400支援具有填充資料指令集擴充的x86指令集。 L1快取1406允許將快取記憶體低潛時地存取至純量和向量單元。儘管在一(為了簡化設計的)實施例中,純量單元1408和向量單元1410使用單獨暫存器組(分別為純量暫存器1412和向量暫存器1414),且傳輸於其間的資料被寫入至記憶體而接著從第1級(L1)快取1406讀回,但本發明之其他實施例可使用不同的方法(例如,使用單一暫存器組或包括一通訊路徑,其允許資料將在沒被寫入和讀回的情況下傳輸於這兩個暫存器檔案之間。
L2快取1404的區域子集係為部分的全域L2快取,其分成單獨的區域子集,每個處理器核心一個。每個處理器核心具有直接存取路徑至自己的L2外取1404之區域子集。處理器核心所讀取的資料係儲存在其L2快取子集1404中且能與存取其自己區域L2快取子集之其他處理器核心並行地快速存取。處理器核心所寫入的資料係儲存在其自己的L2快取子集1404中且若需要的話會從其他子集清除。環形網路確保共享資料的一致性。環形網路係為雙向的以允許如處理器核心、L2快取及其他邏輯方塊的代理器能在晶片內彼此通訊。每個環形資料路徑在每個方向上係為1012位元寬。
第14B圖係根據本發明之實施例之第14A圖中的處理器核心之一部分的分解圖。第14B圖包括L1快取1406 之L1資料快取1406A部分、以及關於向量單元1410和向量暫存器1414的更多細節。具體來說,向量單元1410係16寬的向量處理單元(VPU)(參見16寬的ALU 1428),其執行整數、單精度浮點數、及雙精度浮點數指令之一或更多者。VPU以攪和單元1420來支援攪和暫存器輸入、以數字轉換單元1422A-B來支援數字轉換、且以複製單元1424來支援複製記憶體輸入。寫入遮罩暫存器1426允許預測所得之向量寫入。
以上已描述,本發明之實施例可包括各種步驟。步驟可以可用來使通用或專用處理器執行步驟的機器可執行指令來具體化。替代地,這些步驟可由包含用於執行步驟的固線式邏輯的特定硬體元件、或由程式化電腦元件與定製硬體元件之任何組合執行。
如本文所述,指令可指如專用積體電路(ASIC)的硬體之特定配置,配置用來執行某些操作或具有一預定功能或以非暫態電腦可讀媒體實作之儲存在記憶體中的軟體指令。因此,圖中所示的技術能使用儲存和執行在一或多個電子裝置(例如,終點站、網路元件等)上的代碼與資料來實作。上述電子裝置使用如非暫態電腦機器可讀儲存媒體(例如,磁碟、光碟、隨機存取記憶體、唯讀記憶體、快閃記憶體裝置、相變記憶體)和暫態電腦機器可讀通訊媒體(例如,電子、光學、聲學或其他形式的傳播信號-例如載波、紅外線信號、數位信號)之電腦機器可讀媒體來儲存和傳遞(內部地及/或在網路上與其他電子裝 置通訊)代碼與資料。此外,上述電子裝置通常包括一組一或多個處理器,其耦接一或多個其他元件,例如一或多個儲存裝置(非暫態機器可讀儲存媒體)、使用者輸入/輸出裝置(例如,鍵盤、觸控螢幕、及/或顯示器)、及網路連線。耦接這組處理器與其他元件通常透過一或多個匯流排和橋接器(亦稱為匯流排控制器)。儲存裝置和傳送網路流量的信號分別表示一或多個機器可讀儲存媒體和機器可讀通訊媒體。因此,已知電子裝置的儲存裝置通常儲存用於在此電子裝置之這組一或多個處理器上執行的代碼及/或資料。當然,本發明之實施例之一或多個部分可使用不同組合的軟體、韌體、及/或硬體來實作。在整個詳細的說明中,為了解釋之目的,提出了許多具體細節以提供對於本發明之實施例的全面性了解。然而,本領域之熟知技術者將清楚明白無需某些的具體細節便可實行本發明之實施例。在某些情況下,不會詳盡說明熟知結構和功能以避免模糊本發明之主題。因此,本發明之範圍和精神 應根據下列之申請專利範圍來作判定。
100‧‧‧管線
102‧‧‧提取級
104‧‧‧長度解碼級
106‧‧‧解碼級
108‧‧‧分配級
110‧‧‧更名級
112‧‧‧排程級
114‧‧‧暫存器讀取/記憶體讀取級
116‧‧‧執行級
118‧‧‧寫回/記憶體寫入級
122‧‧‧例外處理級
124‧‧‧提交級

Claims (9)

  1. 一種用來偵測相等元素的處理器,該處理器包含:用以解碼指令之解碼單元,具有第一向量暫存器、第二向量暫存器、輸入遮罩暫存器以及輸出遮罩暫存器;執行單元,用以執行該已解碼指令,以:將該第二向量暫存器中的該等主動元素之各者與在該第二向量暫存器中之該等主動元素之各者的一位元位置前面的位元位置中之該第一向量暫存器中的元素作比較,其中該第二向量暫存器中之該等主動元素對應於該輸入遮罩暫存器中之無遮罩位元;及對於該第二向量暫存器中之該等主動元素之各者,若該第一向量暫存器中的該等前面位元位置之該等元素的任一者等於對應於該輸出遮罩暫存器中的該位元之該第二向量暫存器中之主動元素,則設定該輸出遮罩暫存器中的對應位元為一真值。
  2. 如申請專利範圍第1項所述之處理器,其中該執行單元對於該第二向量暫存器中之該等主動元素之各者,若該第一向量暫存器中的該等前面位元位置中的該等元素皆無等於對應於該輸出遮罩暫存器中的該位元之該第二向量暫存器中之該主動元素,則設定該輸出遮罩暫存器中的對應位元為一假值。
  3. 如申請專利範圍第1項所述之處理器,其中若該輸入遮罩暫存器中的一對應位元位置中的位元具有一假值,則該執行單元設定該輸出遮罩暫存器中的一位元為一假 值。
  4. 如申請專利範圍第1項所述之處理器,其中該暫存器包含512-位元且該第一向量暫存器之各資料元素係為32-位元元素和64-位元元素之一者。
  5. 一種用來偵測相等元素的處理器,該處理器用以執行指令以實施操作包含:讀取第一向量暫存器;讀取第二向量暫存器;讀取輸入遮罩暫存器,該輸入遮罩暫存器識別待與該第一向量暫存器之元素比較之該第二向量暫存器中之主動元素;將該第二向量暫存器中的該等主動元素之各者與在該第二向量暫存器中的該等主動元素之各者的位元位置前面具有位元位置之該第一向量暫存器中的元素比較;及對於該第二向量暫存器中之該等主動元素之各者,若該第一向量暫存器中的該前面位元位置中的該等元素之任一者等於該第二向量暫存器中的該對應主動元素,則設定一輸出遮罩暫存器中的一對應位元位置為一真值。
  6. 一種電腦系統,包含:一記憶體,用來儲存程式指令和資料;一處理器,用來偵測一向量暫存器內相等元素,該處理器執行一指令以實施操作包含:讀取第一向量暫存器;讀取第二向量暫存器; 讀取輸入遮罩暫存器,該輸入遮罩暫存器識別待與該第一向量暫存器之元素比較之該第二向量暫存器中之主動元素;將該第二向量暫存器中的該等主動元素之各者與在該第二向量暫存器中的該等主動元素之各者的位元位置前面具有位元位置之該第一向量暫存器中的元素比較;及對於該第二向量暫存器中之該等主動元素之各者,若該第一向量暫存器中的該前面位元位置中的該等元素之任一者等於該第二向量暫存器中的該對應主動元素,則設定一輸出遮罩暫存器中的一對應位元位置為一真值。
  7. 一種用來偵測相等元素的裝置,包含:第一向量暫存器;第二向量暫存器;輸入遮罩暫存器,該輸入遮罩暫存器可識別待與該第一向量暫存器之元素比較之該第二向量暫存器中之主動元素,以及待與該第二向量暫存器中元素比較之該第一向量暫存器之主動元素;執行單元,用以執行一指令:將該第二向量暫存器中的該等主動元素之各者與具有該第二向量暫存器中的該等主動元素之各者的位元位置相等或前面位元位置之該第一向量暫存器中的元素作比較;若該第一向量暫存器中的該等相等和前面元素之任一者等於該第二向量暫存器中之對應主動元素,或若該 第一向量暫存器中的該等相等和前面元素之任一者等於該第二向量暫存器中之對應主動元素,則設定輸出遮罩暫存器中的位元位置等於一真值。
  8. 如申請專利範圍第7項所述之裝置,其中該暫存器包含512-位元。
  9. 如申請專利範圍第8項所述之裝置,其中該第一向量暫存器之各資料元素係為32-位元元素和64-位元元素之一者。
TW103145814A 2011-12-23 2012-12-05 用以偵測向量暫存器內相等元素之裝置及方法 TWI524266B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/067083 WO2013095606A1 (en) 2011-12-23 2011-12-23 Apparatus and method for detecting identical elements within a vector register

Publications (2)

Publication Number Publication Date
TW201528131A TW201528131A (zh) 2015-07-16
TWI524266B true TWI524266B (zh) 2016-03-01

Family

ID=48669247

Family Applications (2)

Application Number Title Priority Date Filing Date
TW103145814A TWI524266B (zh) 2011-12-23 2012-12-05 用以偵測向量暫存器內相等元素之裝置及方法
TW101145630A TWI476682B (zh) 2011-12-23 2012-12-05 用以偵測向量暫存器內相等元素之裝置及方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
TW101145630A TWI476682B (zh) 2011-12-23 2012-12-05 用以偵測向量暫存器內相等元素之裝置及方法

Country Status (4)

Country Link
US (1) US20140089634A1 (zh)
CN (1) CN104081336B (zh)
TW (2) TWI524266B (zh)
WO (1) WO2013095606A1 (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9665368B2 (en) * 2012-09-28 2017-05-30 Intel Corporation Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US9411592B2 (en) * 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
US9720667B2 (en) 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
US9910650B2 (en) 2014-09-25 2018-03-06 Intel Corporation Method and apparatus for approximating detection of overlaps between memory ranges
US20160092217A1 (en) * 2014-09-29 2016-03-31 Apple Inc. Compare Break Instructions
US20160092398A1 (en) * 2014-09-29 2016-03-31 Apple Inc. Conditional Termination and Conditional Termination Predicate Instructions
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
GB2540943B (en) * 2015-07-31 2018-04-11 Advanced Risc Mach Ltd Vector arithmetic instruction
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
US20170177350A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Set-Multiple-Vector-Elements Operations
US10204396B2 (en) * 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
GB2549737B (en) * 2016-04-26 2019-05-08 Advanced Risc Mach Ltd An apparatus and method for managing address collisions when performing vector operations
CN109313552A (zh) * 2016-07-27 2019-02-05 英特尔公司 用于复用向量比较的系统和方法
US10838720B2 (en) * 2016-09-23 2020-11-17 Intel Corporation Methods and processors having instructions to determine middle, lowest, or highest values of corresponding elements of three vectors
US9959247B1 (en) * 2017-02-17 2018-05-01 Google Llc Permuting in a matrix-vector processor
WO2019005165A1 (en) * 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
EP3428792B1 (en) * 2017-07-10 2022-05-04 Arm Ltd Testing bit values inside vector elements

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030105945A1 (en) * 2001-11-01 2003-06-05 Bops, Inc. Methods and apparatus for a bit rake instruction
US7095808B1 (en) * 2000-08-16 2006-08-22 Broadcom Corporation Code puncturing method and apparatus
US7590830B2 (en) * 2004-05-28 2009-09-15 Sun Microsystems, Inc. Method and structure for concurrent branch prediction in a processor
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US7774661B2 (en) * 2007-03-29 2010-08-10 Montage Technology Group Limited Register read mechanism
US8019976B2 (en) * 2007-05-14 2011-09-13 Apple, Inc. Memory-hazard detection and avoidance instructions for vector processing
US8667250B2 (en) * 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
US8209525B2 (en) * 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code

Also Published As

Publication number Publication date
TWI476682B (zh) 2015-03-11
TW201528131A (zh) 2015-07-16
TW201339960A (zh) 2013-10-01
WO2013095606A1 (en) 2013-06-27
CN104081336A (zh) 2014-10-01
CN104081336B (zh) 2018-10-23
US20140089634A1 (en) 2014-03-27

Similar Documents

Publication Publication Date Title
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
CN107003843B (zh) 用于对向量元素集合执行约减操作的方法和设备
TWI483183B (zh) 混洗浮點或整數值的裝置與方法
TWI517041B (zh) 有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法
TWI517039B (zh) 用以對緊縮資料執行差異解碼之系統,設備,及方法
JP6466388B2 (ja) 方法及び装置
TWI501147B (zh) 用於從通用暫存器至向量暫存器的廣播之裝置及方法
TWI509406B (zh) 用於以推測支援來執行向量化的裝置及方法
CN104081340B (zh) 用于数据类型的下转换的装置和方法
TWI525538B (zh) 超級乘加(super madd)指令技術
TWI515650B (zh) 用於遮罩暫存器擴充操作之設備及方法
TWI663545B (zh) 執行置換運算的處理器
TW201344561A (zh) 用以執行遮罩位元壓縮之系統、設備、及方法
KR20170097626A (ko) 벡터 인덱스 로드 및 저장을 위한 방법 및 장치
CN107003848B (zh) 用于融合乘法-乘法指令的装置和方法
TWI603261B (zh) 用以執行離心操作的指令及邏輯
KR20170097015A (ko) 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치
TWI490781B (zh) 用於選擇向量運算之元素的裝置及方法
CN108241509B (zh) 用于高效地处理存储器排序缓冲器的分配的方法和装置
CN109643235B (zh) 用于多源混合操作的装置、方法和系统
TW201732571A (zh) 用於獲得偶數和奇數資料元素的系統、裝置及方法
TWI517032B (zh) 用以執行兩向量暫存器之對應填充資料元件間絕對差計算之系統、裝置及方法
CN107003841B (zh) 用于融合加法-加法指令的装置和方法
TWI617977B (zh) 用於執行自旋迴路跳位的裝置及方法

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees