TWI610233B - 用於提供向量分組元組交叉比較功能的方法、處理器和處理系統 - Google Patents

用於提供向量分組元組交叉比較功能的方法、處理器和處理系統 Download PDF

Info

Publication number
TWI610233B
TWI610233B TW104139445A TW104139445A TWI610233B TW I610233 B TWI610233 B TW I610233B TW 104139445 A TW104139445 A TW 104139445A TW 104139445 A TW104139445 A TW 104139445A TW I610233 B TWI610233 B TW I610233B
Authority
TW
Taiwan
Prior art keywords
complex
vector
data
processor
tuple
Prior art date
Application number
TW104139445A
Other languages
English (en)
Other versions
TW201643707A (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 TW201643707A publication Critical patent/TW201643707A/zh
Application granted granted Critical
Publication of TWI610233B publication Critical patent/TWI610233B/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/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/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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency

Landscapes

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

Abstract

本發明係用於提供SIMD向量分組元組交叉比較功能的指令與邏輯。某些處理器實施例包括第一與第二暫存器,這些暫存器具有可變的複數個資料欄位,每一個資料欄位用來儲存第一資料類型的元素。在一些實施例中,處理器執行用於向量分組元組交叉比較的SIMD指令,其為第一暫存器之元組中之部分資料欄位的每一個資料欄位,比較它的對應元素與第二暫存器之元組中之資料欄位之對應部分的每一個元素,並按照對應的比較,在與對應之第一暫存器部分之每一個未被遮罩之元素對應的位元遮罩中,設定與第二暫存器部分之每一個元素對應的遮罩位元。在一些實施例中,位元遮罩被第三暫存器之資料欄位中之對應的元素移位。比較的類型係由即時運算元指示。

Description

用於提供向量分組元組交叉比較功能的方法、處理器和處理系統
本發明屬於處理邏輯、微處理器、及相關指令集架構的領域,當被處理器或其它處理邏輯執行時,實施邏輯、數學、或其它功能運算。特別是,本發明與用於提供單指令多資料(SIMD)向量分組元組交叉比較功能的處理器指令與邏輯有關。
現代化的處理器通常包括用以提供運算密集之運算的指令,但要通過使用各種資料儲存裝置之有效率的實施,才能提供可被利用的高度資料平行性,例如,諸如SIMD向量暫存器。在SIMD的執行中,單個指令同時或同步對多個資料元素進行運算。典型上,此藉由擴展各種不同資源的寬度來實施,諸如暫存器與算術邏輯單元(ALU),以允許它們能分別保存或運算多個資料元素。
中央處理單元(CPU)可提供此種平行的硬體用以支 援向量的SIMD處理。向量係容納數個連續資料元素的資料結構。大小為L的向量暫存器可包含大小為M的N個向量元素,其中,N=L/M。例如,64位元組的向量暫存器可被分割成(a)64個向量元素,每一個元素容納佔據1位元組的資料項;(b)32個向量元素,每一個元素容納佔據2位元組(或一個“字組”)的資料項:(c)16個向量元素,每一個元素容納佔據4位元組(或一個“雙字組”)的資料項:或(d)8個向量元素,每一個元素容納佔據8位元組(或一個“四字組”)的資料項。
許多應用程式具有大量的資料層級的平行,且可受益於SIMD的支援。不過,一些應用程式花費大量的時間在一組稀疏位置上運算。此外,一些循序的運算係在相同的稀疏位置上實施,且因此這些應用程式從SIMD運算獲益有限。為保持SIMD的效率,一些架構不僅允許SIMD算術運算,也允許SIMD記憶體讀取與寫入(經由收集與分散運算)。在很多應用程式中分散精簡係常見的運算。例如,分散-加的運算可用來使第一陣列的多個值能夠按照指標的分配而精簡到(例如,加到)第二陣列之被選擇的元素中,其通常是隨機的。但由於此,此很難有效率地同時處理多個元素(即,以SIMD模式)。一個問題是當有必要時,要確保純量程式順序被保持。另一個問題是確保當資料被分散到記憶體內時,所得到的記憶體位址的向量僅能包括唯一的位址(即,沒有重複的位址)。
例如,直方圖計算係很多影像處理應用程式中常見的 運算。直方圖可用來追蹤影像中像素之色彩值的分布。不過,更新直方圖陣列可能是隨機的,視輸入到陣列中的資料而定。特別是,鄰接元素的指標會指向到相同的直方圖直方。因此,需要衝突偵測與解法來偵測對於相同位置之多個相依的更新,並確保純量程式順序被保持。這類情況的確造成很難同時處理多個資料(即,使用SIMD運算)。
迄今,對此等衝突問題及相關之處理的困難尚未適當地探究可能的解答。
100‧‧‧系統
102‧‧‧處理器
104‧‧‧內部快取記憶體
106‧‧‧暫存器檔案
108‧‧‧執行單元
109‧‧‧封裝的指令集
110‧‧‧處理器匯流排
112‧‧‧繪圖卡
114‧‧‧加速繪圖埠互連
116‧‧‧系統邏輯晶片
118‧‧‧高頻寬的記憶體路徑
120‧‧‧記憶體
122‧‧‧系統輸入/輸出
124‧‧‧資料儲存裝置
126‧‧‧無線收發器
128‧‧‧韌體集線器
130‧‧‧輸入/輸出控制器集線器
134‧‧‧網路控制器
140‧‧‧資料處理系統
141‧‧‧匯流排
142‧‧‧執行單元
143‧‧‧封裝之指令集
144‧‧‧解碼器
145‧‧‧暫存器檔案
146‧‧‧同步動態隨機存取記憶體控制
147‧‧‧靜態隨機存取記憶體控制
148‧‧‧叢發快閃記憶體介面
149‧‧‧緊湊型快閃記憶卡控制
150‧‧‧液晶顯示器控制
151‧‧‧直接記憶體存取控制器
152‧‧‧匯流排主介面
153‧‧‧輸入/輸出匯流排
154‧‧‧輸入/輸出電橋
155‧‧‧通用非同步接收器/發送器
156‧‧‧通用序列匯流排
157‧‧‧藍牙無線通用非同步接收器/發送器
158‧‧‧輸入/輸出擴充介面
159‧‧‧處理核心
160‧‧‧資料處理系統
161‧‧‧SIMD協同處理器
162‧‧‧執行單元
163‧‧‧指令集
164‧‧‧暫存器檔案
165‧‧‧解碼器
166‧‧‧主處理器
167‧‧‧快取記憶體
168‧‧‧輸入/輸出系統
169‧‧‧無線介面
170‧‧‧處理核心
171‧‧‧協同處理器匯流排
200‧‧‧處理器
201‧‧‧有序前端
202‧‧‧快速排程器
203‧‧‧亂序執行引擎
204‧‧‧慢速/一般浮點排程器
206‧‧‧簡單浮點排程器
208‧‧‧暫存器檔案
210‧‧‧暫存器檔案
211‧‧‧執行方塊
212‧‧‧位址產生單元
214‧‧‧位址產生單元
216‧‧‧快速算術邏輯單元
218‧‧‧快速算術邏輯單元
220‧‧‧慢速算術邏輯單元
222‧‧‧浮點算術邏輯單元
224‧‧‧浮點移動單元
226‧‧‧指令預取器
228‧‧‧指令解碼器
230‧‧‧跡線快取
232‧‧‧微碼ROM
234‧‧‧微操作佇列
310‧‧‧封裝的位元組
320‧‧‧封裝的字
330‧‧‧封裝的雙字
341‧‧‧封裝的半字
342‧‧‧封裝的單字
343‧‧‧封裝的雙字
344‧‧‧無符號封裝位元組表示法
345‧‧‧有符號封裝位元組表示法
346‧‧‧無符號封裝字表示法
347‧‧‧有符號封裝字表示法
348‧‧‧無符號封裝雙字表示法
349‧‧‧有符號封裝雙字表示法
360‧‧‧運算碼格式
364‧‧‧源運算元識別符
365‧‧‧源運算元識別符
366‧‧‧目的運算元識別符
370‧‧‧運算碼格式
374‧‧‧源運算元識別符
375‧‧‧源運算元識別符
376‧‧‧目的運算元識別符
378‧‧‧前置位元組
380‧‧‧運算碼格式
385‧‧‧源運算元識別符
386‧‧‧目的運算元識別符
390‧‧‧源運算元識別符
381‧‧‧條件欄位
397‧‧‧運算碼格式
393‧‧‧標度-索引-基礎識別符
394‧‧‧位移識別符
395‧‧‧立即位元組
391‧‧‧VEX前置位元組
373‧‧‧MOD欄位
398‧‧‧運算碼格式
396‧‧‧EVEX前置位元組
400‧‧‧處理器管線
402‧‧‧提取級
404‧‧‧長度解碼級
406‧‧‧解碼級
408‧‧‧配置級
410‧‧‧更名級
412‧‧‧排程級
414‧‧‧暫存器讀取/記憶體讀取級
416‧‧‧執行級
418‧‧‧寫回/記憶體寫入級
422‧‧‧異常處置級
424‧‧‧確認級
430‧‧‧前端單元
450‧‧‧執行引擎單元
490‧‧‧處理器核心
432‧‧‧分支預測單元
434‧‧‧指令快取單元
436‧‧‧指令轉譯後備緩衝區
438‧‧‧指令提取單元
440‧‧‧解碼單元
452‧‧‧更名/配置單元
470‧‧‧記憶體單元
476‧‧‧2級快取單元
454‧‧‧至止用單元
456‧‧‧排程器單元
458‧‧‧實體暫存器檔案單元
460‧‧‧執行群
462‧‧‧執行單元
464‧‧‧記憶體存取單元
472‧‧‧資料轉譯後備緩衝區單元
500‧‧‧處理器
502‧‧‧核心
506‧‧‧共用快取單元
508‧‧‧整合式繪圖邏輯
510‧‧‧系統代理
512‧‧‧環式互連單元
514‧‧‧整合式記憶體控制器單元
516‧‧‧匯流排控制器單元
600‧‧‧系統
610‧‧‧處理器
615‧‧‧處理器
620‧‧‧圖形記憶體控制器集線器
645‧‧‧顯示器
650‧‧‧輸入/輸出控制器集線器
660‧‧‧外部圖形裝置
670‧‧‧周邊裝置
695‧‧‧前端匯流排
700‧‧‧系統
770‧‧‧處理器
780‧‧‧處理器
772‧‧‧整合式記憶體控制器單元
782‧‧‧整合式記憶體控制器單元
776‧‧‧匯流排控制器單元點對點介面
778‧‧‧匯流排控制器單元點對點介面
786‧‧‧點對點介面
788‧‧‧點對點介面電路
750‧‧‧點對點介面
732‧‧‧記憶體
734‧‧‧記憶體
794‧‧‧點對點介面電路
798‧‧‧點對點介面電路
739‧‧‧高性能圖形介面
738‧‧‧高性能圖形電路
790‧‧‧晶片組
796‧‧‧介面
716‧‧‧第一匯流排
714‧‧‧輸入/輸出裝置
720‧‧‧第二匯流排
718‧‧‧匯流排電橋
722‧‧‧鍵盤及/或滑鼠
727‧‧‧通訊裝置
728‧‧‧儲存單元
730‧‧‧指令/碼與資料
724‧‧‧音訊輸入/輸出裝置
800‧‧‧系統
870‧‧‧處理器
880‧‧‧處理器
872‧‧‧整合式記憶體與輸入/輸出控制邏輯
882‧‧‧整合式記憶體與輸入/輸出控制邏輯
832‧‧‧記憶體
834‧‧‧記憶體
815‧‧‧傳統輸入/輸出裝置
890‧‧‧晶片組
900‧‧‧系統單晶片
902‧‧‧互連單元
910‧‧‧應用處理器
920‧‧‧媒體處理器
924‧‧‧影像處理器
926‧‧‧音訊處理器
928‧‧‧視訊處理器
930‧‧‧靜態隨機存取記憶體單元
932‧‧‧直接記憶體存取(DMA)單元
940‧‧‧顯示單元
1000‧‧‧處理器
1005‧‧‧中央處理單元
1010‧‧‧圖形處理單元
1015‧‧‧影像處理器
1020‧‧‧視訊處理器
1025‧‧‧USB控制器
1030‧‧‧UART控制器
1035‧‧‧SPI/SDIO控制器
1040‧‧‧顯示裝置
1045‧‧‧高解析度多媒體介面控制器
1050‧‧‧MIPI控制器
1055‧‧‧快閃記憶體控制器
1060‧‧‧雙資料率控制器
1065‧‧‧安全引擎
1070‧‧‧整合晶片間聲音/內部積體電路介面
1130‧‧‧儲存器
1120‧‧‧模擬軟體
1110‧‧‧硬體或軟體模型
1140‧‧‧記憶體
1160‧‧‧無線連接
1150‧‧‧有線連接
1205‧‧‧程式
1210‧‧‧仿真邏輯
1215‧‧‧處理器
1304‧‧‧x86編譯器
1302‧‧‧高階語言
1316‧‧‧x86指令集核心
1306‧‧‧x86二進制碼
1308‧‧‧替代的指令集編譯器
1314‧‧‧無x86指令集核心之處理器
1310‧‧‧替代的指令集二進制碼
1312‧‧‧指令轉換器
1601‧‧‧設備
1610‧‧‧向量暫存器
1620‧‧‧向量暫存器
1630-1636‧‧‧偶數前導零計數器
1603‧‧‧前導零計數電路
1631-1637‧‧‧奇數前導零計數器
1640-1643‧‧‧選擇加法器電路
1604‧‧‧前導零計數組合電路
1650‧‧‧SIMD目的暫存器
1660‧‧‧SIMD目的暫存器
1701‧‧‧SIMD向量分組雙倍交叉比較功能指令
1710‧‧‧第一向量暫存器
1720‧‧‧第二向量暫存器
1731‧‧‧即時位元組運算元
1771‧‧‧目的向量暫存器
1702‧‧‧SIMD向量分組四倍交叉比較功能指令
1732‧‧‧即時位元組運算元
1772‧‧‧源/目的向量暫存器
1703‧‧‧SIMD向量分組八倍交叉比較功能指令
1733‧‧‧即時位元組運算元
1773‧‧‧目的向量暫存器
1802‧‧‧第一向量分組雙倍交叉比較
1810‧‧‧向量暫存器
1820‧‧‧向量
1830‧‧‧源/目的向量暫存器
1815‧‧‧第一向量暫存器
1812‧‧‧分組移位
1850‧‧‧向量
1860‧‧‧源/目的向量暫存器
1814‧‧‧分組移位
1845‧‧‧暫時結果向量暫存器
1870‧‧‧第二暫時結果向量暫存器
1830‧‧‧源/目的向量暫存器
1803‧‧‧第二向量分組雙倍交叉比較
1825‧‧‧向量
1835‧‧‧源/目的向量暫存器
1890‧‧‧結果向量暫存器
1813‧‧‧分組移位
1840‧‧‧置換向量
1804‧‧‧第三向量分組雙倍交叉比較
1880‧‧‧第三暫時結果向量暫存器
1901‧‧‧執行設備
1903‧‧‧分組元組比較設備
1940‧‧‧控制邏輯
1942‧‧‧比較器陣列
1905‧‧‧移位設備
1950‧‧‧移位器
1951‧‧‧移位器
1952‧‧‧移位器
1953‧‧‧移位器
1910‧‧‧向量暫存器
1920‧‧‧向量
1970‧‧‧目的向量暫存器
1930‧‧‧即時運算元
1970‧‧‧目的向量暫存器
1906‧‧‧移位設備
1902‧‧‧設備
1904‧‧‧分組元組比較設備
1944‧‧‧比較器陣列
1960‧‧‧移位器
1961‧‧‧移位器
1962‧‧‧移位器
1963‧‧‧移位器
本發明藉由例子來說明,且不限於附圖中的圖式。
圖1A係系統之實施例的方塊圖,該系統執行指令以提供SIMD向量分組元組交叉比較功能。
圖1B係系統之另一實施例的方塊圖,該系統執行指令以提供SIMD向量分組元組交叉比較功能。
圖1C係系統之另一實施例的方塊圖,該系統執行指令以提供SIMD向量分組元組交叉比較功能。
圖2係處理器之實施例的方塊圖,其執行指令以提供SIMD向量分組元組交叉比較功能。
圖3A說明按照一實施例的封裝資料類型。
圖3B說明按照一實施例的封裝資料類型。
圖3C說明按照一實施例的封裝資料類型。
圖3D說明按照一實施例之用以提供SIMD向量分組 元組交叉比較功能的指令編碼。
圖3E說明按照另一實施例之用以提供SIMD向量分組元組交叉比較功能的指令編碼。
圖3F說明按照另一實施例之用以提供SIMD向量分組元組交叉比較功能的指令編碼。
圖3G說明按照另一實施例之用以提供SIMD向量分組元組交叉比較功能的指令編碼。
圖3H說明按照另一實施例之用以提供SIMD向量分組元組交叉比較功能的指令編碼。
圖4A說明用以執行提供SIMD向量分組元組交叉比較功能之指令之處理器微架構之實施例的元件。
圖4B說明用以執行提供SIMD向量分組元組交叉比較功能之指令之處理器微架構之另一實施例的元件。
圖5的方塊圖說明用以執行提供SIMD向量分組元組交叉比較功能之指令之處理器的實施例。
圖6的方塊圖說明用以執行提供SIMD向量分組元組交叉比較功能之指令之電腦系統的實施例。
圖7的方塊圖說明用以執行提供SIMD向量分組元組交叉比較功能之指令之電腦系統的另一實施例。
圖8的方塊圖說明用以執行提供SIMD向量分組元組交叉比較功能之指令之電腦系統的另一實施例。
圖9的方塊圖說明用以執行提供SIMD向量分組元組交叉比較功能之指令之系統單晶片的實施例。
圖10的方塊圖說明用以執行提供SIMD向量分組元 組交叉比較功能之指令之處理器的實施例。
圖11的方塊圖係提供SIMD向量分組元組交叉比較功能之IP核心開發系統的實施例。
圖12的方塊圖係提供SIMD向量分組元組交叉比較功能之架構仿真系統的實施例。
圖13說明用於轉譯提供SIMD向量分組元組交叉比較功能之指令之系統的實施例。
圖14A的流程圖說明例示性使用SIMD向量前導零計數指令為有效的向量位址衝突解法產生置換控制的實施例。
圖14B的流程圖說明例示性使用SIMD向量位址衝突遮罩用於有效的向量位址衝突解法的實施例。
圖15A的流程圖說明在處理器中用來執行指令以提供SIMD向量分組元組交叉比較功能之處理的實施例。
圖15B的流程圖說明使用SIMD向量位址衝突遮罩用於有效的向量位址衝突解法之處理的實施例。
圖16說明習知技術之設備的實施例,其執行指令用以提供SIMD向量前導零計數功能,有利於為有效的向量位址衝突解法產生置換控制。
圖17A-17C說明用以提供SIMD向量分組元組交叉比較功能之指令的一些替代實施例。
圖18說明組合用以提供SIMD向量分組元組交叉比較功能之指令的結果,為有效的向量位址衝突解法產生位址衝突遮罩之方法的實施例。
圖19A說明用於執行提供SIMD向量分組元組交叉比較功能之指令之設備的實施例。
圖19B說明用於執行提供SIMD向量分組元組交叉比較功能之指令之設備的替代實施例。
【發明內容與實施方式】
以下的描述揭示位在處理器、電腦系統、或其它處理設備內,或與該等相關聯之用於提供SIMD向量分組元組交叉比較功能的指令與處理邏輯。本文所揭示的指令與邏輯用於提供SIMD向量分組元組交叉比較功能。一些實施例包括具有第一與第二暫存器的處理器,這些暫存器具有可變的複數個資料欄位,每一個資料欄位用於儲存第一資料類型的元素。在一些實施例中,處理器執行用於向量分組元組交叉比較的SIMD指令,該指令為第一暫存器之元組中一部分資料欄位的每一個資料欄位,比較它的對應元素與第二暫存器之元組中之資料欄位之對應部分的每一個元素,並按照對應的比較,在與對應之第一暫存器部分的每一個未遮罩之元素對應的位元遮罩中,設定與第二暫存器部分之每一個元素對應的遮罩位元。在一些實施例中,分組元組每一個可包含2、4、或8個元素。在一些實施例中,位元遮罩在被存入目的暫存器之前,也可被第三暫存器之資料欄位中的對應元素移位。比較類型可藉由指令所指定的即時運算元來指示。在一些實施例中,第三暫存器與目的暫存器可以是相同的暫存器。
當要被比較的元素(例如,指標)與用來表示比較結果所需之遮罩的大小相同時(例如,256位元暫存器中的16個16位元元素),則實施用來交叉比較全部元素的指令為適當。但當要比較的元素比可用來表示比較結果的位元多時,則需要替代的解決方法。可以理解,對於大小可變的元素與記憶體偏位,可使用本文所揭示的SIMD向量分組元組比較指令做為替代的解決方法,用以提供SIMD向量位址衝突偵測功能,並組合結果為有效的SIMD位址衝突解法產生衝突遮罩。亦可理解,SIMD向量分組元組比較指令具有更通用的適用性(例如,當各種不同的比較運算其中任一有用時),且就面積與功耗而論,所需的實施成本低於交叉比較所有元素之指令。
為能更徹底瞭解本發明的實施例,在以下的描述中陳述了許多特定的細節,諸如處理邏輯、處理器類型、微架構條件、事件、允許機制、及類似物。不過,熟悉此領域之習知技藝者應可理解,實施本發明不需要這些特定的細節。此外,一些習知的結構、電路、及類似物並未詳細顯示,以避免不必要地糢糊了本發明的實施例。
雖然以下的實施例是參考處理器來描述,但其它的實施例可應用於其它類型的積體電路及邏輯裝置。類似的技術與本發明之實施例的教學可應用於可得益於較高管線產出量之其它類型的電路或半導體裝置並提升性能。本發明之實施例的教學可應用於實施資料調處的任何處理器或機器。不過,本發明並不限於實施512位元、256位元、 128位元、64位元、32位元、或16位元之資料運算的處理器或機器,其可應用於其內實施資料之調處或管理的任何處理器或機器。此外,以下之描述所提供的例子及顯示各不同例子的附圖乃基於說明之目的。不過,不能將這些例子解釋成限制之意,它們僅用來提供本發明之實施例的例子,而非提供本發明之實施例之所有可能實施的詳盡表列。
雖然以下例子描述指令在執行單元與邏輯電路之環境中的處置與分配,但本發明的其它實施例可藉由儲存在機器可讀取之有形媒體上的資料及/或指令來完成,當其被機器執行時,致使機器實施與本發明之至少一個實施例一致的功能。在一實施例中,與本發明之實施例相關聯的功能係具體化成機器可執行的指令。該等指令可用來致使經該等指令程式化之通用或專用處理器來實施本發明之步驟。本發明之實施例可提供為電腦程式產品或軟體,可包括其上儲存有指令的機器或電腦可讀取媒體,這些指令可用來程式電腦(或其它電子裝置),令其以按照本發明的實施例實施一或多項運算。另者,本發明之實施例的步驟,可藉由包含用於實施該等步驟之固定功能邏輯的特定硬體組件來實施,或藉由經程式化之電腦組件與固定功能硬體組件的任何組合來實施。
用來程式化邏輯以實施本發明之實施例的指令,可以儲存在系統的記憶體內,諸如DRAM、快閃記憶體、或其它儲存器。此外,指令可經由網路或經由其它電腦可讀取 媒體來配送。因此,機器可讀取媒體可包括用於儲存或傳送形式為機器(例如,電腦)可讀取之資訊的任何機制,但不限於軟式磁碟、光碟、小型光碟、唯讀型光碟(CD-ROM)、及磁光碟、唯讀記憶體(ROM)、隨機存取記憶體(RAM)、可抹除可程式唯讀記憶體(EPROM)、電可抹除可程式唯讀記憶體(EEPROM)、磁或光卡、快閃記憶體、或用於在網際網路上經由電、光、聲、或其它形式之傳播信號(例如,載波、紅外線信號、數位信號、等)之實體的機器可讀取儲存器。因此,電腦可讀取媒體包括任何類型的實體機器可讀取媒體,適合儲存或傳送可由機器(例如,電腦)讀取之形式的電子指令或資訊。
設計會走過各種階段,從創造到模擬到製造。用來代表設計的資料可用許多方式來表現設計。首先,在模擬中,使用硬體描述語言或其它的功能描述語言來代表硬體會很管用。此外,可在設計過程的一些階段產生含有邏輯及/或電晶體閘極之電路層級的模型。此外,大多數的設計,在一些階段,到達以資料來表示各裝置在硬體模型中之實體配置的層級。在使用習知半導體製造技術的情況中,用來表示硬體模型的資料,可以是指明各種不同之特徵存在或不存在於用來製造積體電路之光罩的各不同光罩層上的資料。在任何的設計表示法中,資料可儲存在任何形式的機器可讀取媒體上。記憶體或磁性或光學儲存器(諸如碟片)可以是機器可讀取媒體,用以儲存經由光或電波調變後所傳送來的資訊,或以其它方式產生來傳送此 資訊。當指示或攜載碼或設計的電載波被傳送時,到達實施電信號之複製、緩衝、或再傳送的程度,新的複本被製作。因此,通訊提供者或網路提供者可將具體化本發明之實施例之技術的物件,諸如被編碼到載波內的資訊,至少暫時儲存在實體的機器可讀取媒體上。
在現代化的處理器中,使用許多不同的執行單元來處理與執行各種碼及指令。所產生的指令並非全部都相同,如一些較快完成,而其它的則要花費一些時脈周期來完成。指令的產出量愈快,處理器的整體性能愈佳。因此,儘量快速執行儘量多的指令為有利。不過,有一些指令具有較大的複雜度,且需要更多的執行時間與處理器資源。例如,浮點指令、載入/儲存運算、資料移動等。
隨著愈來愈多的電腦系統使用網際網路、文字、及多媒體應用程式,已不時引進額外的處理器支援。在一實施例中,指令集可能與一或多個電腦架構相關聯,包括資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷與異常處置、以及外部的輸入與輸出(I/O)。
在一實施例中,指令集架構(ISA)可藉由一或多個微架構來實施,其包括用來實施一或多個指令集的處理器邏輯與電路。因此,具有不同微架構的處理器可共用至少部分公用的指令集。例如,Intel® Pentium 4處理器、Intel® CoreTM處理器、及來自加州Sunnyvale之Advanced Micro Devices,Inc的處理器,都實施近乎相同版本的x86指令集(較新版本則已增加一些延伸),但具有不同的內 部設計。同樣地,其它處理器開發公司所設計的處理器,諸如ARM Holdings、Ltd.、MIPS、或這些公司的被授權人或採用者,可共用至少部分公用的指令集,但可包括不同的處理器設計。例如,ISA之相同的暫存器架構,可在使用新或習知技術的不同微架構中以不同的方式實施,包括專用的實體暫存器、一或多個使用暫存器更名機制(例如,使用暫存器別名表(Register Alias Table;RAT)、重排序緩衝器(Reorder Buffer;ROB)、及止用暫存器檔案)之動態配置的實體暫存器。在一實施例中,暫存器可包括一或多個暫存器、暫存器架構、暫存器檔案、或其它可被或不可被軟體程式員定址的暫存器組。
在一實施例中,指令可包括一或多個指令格式。在一實施例中,指令格式可指示各不同的欄位(位元數量、位元位置等),除了別的以外,用來指定所要實施的運算,以及該運算所要執行的運算元。一些指令格式可藉由指令樣板(或子格式)進一步分段定義。例如,某指令格式的指令樣板可被定義成具有指令格式之欄位之不同的子集,及/或定義成具有不同解譯的特定欄位。在一實施例中,指令係使用指令格式來表示(且,如果定義,是在該指令格式之其中一個特定的指令樣板中),並指定或指示運算及該運算所要運算的運算元。
科學、金融、通用自動向量化、RMS(辨識、大數據挖掘、及合成)、及視覺與多媒體應(例如,2D/3D繪圖、影像處理、視訊壓縮/解壓縮、語音辨識演算法及音 頻調處)都需要對大量的資料項實施相同的運算。在一實施例中,單指令多資料(SIMD)意指可致使處理器對多個資料元素實施運算的指令類型。SIMD技術可在處理器中使用,其將暫存器中的位元邏輯地劃分成若干個大小固定或大小可變的資料元素,每一個元素代表一獨立的值。例如,在一實施例中,64位元暫存器中的位元可被組織成包含4個獨立之16位元資料元素的源運算元,每一個代表一個獨立的16位元值。此類型的資料可稱為“封裝的”資料類型或“向量”資料類型,且此資料類型的運算元被稱為封裝的資料運算元或向量運算元。在一實施例中,封裝的資料項或向量可以是儲存在單個暫存器內之封裝資料元素的序列,且封裝的運算元或向量運算元可以是SIMD指令(或“封裝的資料指令”或“向量指令”)的源或目的運算元。在一實施例中,SIMD指令指定要對兩個源向量運算元實施的單個向量運算,用以產生大小相同或不同之目的向量運算元(也稱為結果向量運算元),具有相同或不同數目的資料元素,以及相同或不同的資料元素順序。
諸如具有包括x86、MMXTM、Streaming SIMD Extensions(SSE)、SSE2、SSE3、SSE4.1、及SSE4.2指令之指令集的Intel® CoreTM處理器,ARM處理器,諸如具有包括向量浮點(Vector Floating Point;VFP)及/或NEON指令之指令集的ARM Cortex®系列處理器,諸如中國科學院之計算技術研究所(Institute of Computing Technology;ICT)所發展的龍芯(Loongson)系列處理器所使用的SIMD技術,在應用性能方面已能做到重大增進(CoreTM與MMXTM係加州Santa Clara之英代爾公司所註冊的商標)。
在一實施例中,目的與源暫存器/資料係通用術語,用來代表對應之資料或運算的源與目的地。在一些實施例中,它們可被暫存器、記憶體、或具有與那些所描繪之名稱或功能不同的其它儲存區域實施。例如,在一實施例中,“DEST1”可以是暫時的儲存暫存器或其它的儲存區域,然而,“SRC1”與“SRC2”可以是第一與第二源儲存暫存器或其它儲存區域,等等。在其它實施例中,兩或更多個SRC與DEST儲存區域可對應於相同儲存區域(例如,SIMD暫存器)中之不同的資料儲存單元。在一實施例中,其中一個源暫存器也可做為目的暫存器,例如,藉由將在第一與第二源資料上所實施之運算的結果,寫回到兩個源暫存器其中做為目的暫存器者。
圖1A係以處理器所形成的例示性電腦系統的方塊圖,處理器包括執行單元,用以執行按照本發明之實施例的指令。系統100包括按照本發明的組件,諸如處理器102使用包括邏輯的執行單元實施用於處理資料的演算法,諸如本文所描述的實施例。系統100代表基於PENTIUM® III、PENTIUM® 4、Xeontm、Itanium®、XScaletm及/或StrongARMTM微處理器(可從加州Santa Clara之英代爾公司獲得)的處理系統,然而,也可使用 其它系統(包括具有其它微處理器的PC、工程工作站、機上盒等)。在一實施例中,樣品系統100可執行WINDOWSTM作業系統(可從華盛頓Redmond的微軟公司獲得)之版本,然而,也可使用其它的作業系統(例如,UNIX與Linux)、內建軟體、及/或圖形使用者介面。因此,本發明的實施例並不限於任何特定硬體電路與軟體的組合。
實施例並不限於電腦系統。本發明的替代實施例可用於其它裝置,諸如手持式裝置與嵌入式應用。手持式裝置的一些例子包括細胞式電話、網際網路協定裝置、數位式照相機器、個人數位式助理(PDA)、及手持式PC。嵌入式應用可包括微控制器、數位信號處理器(DSP)、系統單晶片、網路電腦(NetPC)、機器上盒、網路集線器、廣域網路(WAN)交換機、或可實施按照至少一實施例之一或多個指令的任何其它系統。
圖1A係以處理器102所形成的電腦系統100的方塊圖,其包括一或多個用以執行演算法的執行單元108,用以實施按照本發明之至少一個實施例。一實施例可在單處理器的桌上型電腦或伺服系統的環境中描述,但替代的實施例可包括在多處理器系統中。系統100係“集線器”系統架構的例子。系統100包括用以處理資料信號的處理器102。處理器102可以是複雜指令集電腦(CISC)微處理器、精簡指令集計算(RISC)微處理器、極長指令字(VLIW)微處理器、實施混合指令集的處理器、或任何 其它的處理器裝置,例如,諸如,數位信號處理器。處理器102耦接至處理器匯流排110,其可在處理器102與系統100中的其它組件之間傳送資料信號。系統100之各元件實施它們習知功能,這些為熟悉此領域之習知技藝者所熟知。
在一實施例中,處理器102包括1階(L1)內部快取記憶體104。視架構而定,處理器102可具有單一的內部快取或多階的內部快取。另者,在另一實施例中,快取記憶體存在於處理器102的外部。其它實施例也可視特定的實施與需要而包括內部與外部快取兩者的組合。暫存器檔案106可將不同類型的資料儲存在各不同的暫存器中,包括有整數暫存器、浮點暫存器、狀態暫存器、及指令指標暫存器。
執行單元108包括用以實施整數與浮點運算的邏輯,也存在於處理器102內。處理器102也包括微碼(ucode)ROM,其儲存一些微指令所用的微碼。關於一實施例,執行單元108包括用以處置封裝指令集109的邏輯。藉由在通用處理器102的指令集中包括封裝的指令集109,連同用以執行該等指令的相關電路,很多多媒體應用程式所使用的運算,都可使用封裝的資料在通用處理器102中實施。因此,藉由使用處理器之全寬的資料匯流排來對封裝的資料實施運算,很多多媒體應用程式可以被加速且更有效率的執行。此可消除橫過處理器之資料匯流排轉移較小資料單元的需要,以一次對一個資料元素實施一 或多項運算。
執行單元108的另一實施例也可使用在微控制器、內嵌式處理器、繪圖裝置、DSP、及其它類型的邏輯電路中。系統100包括記憶體120。記憶體120可以是動態隨機存取記憶體(DRAM)裝置、靜態隨機存取記憶體(SRAM)裝置、快閃記憶體裝置、或其它記憶體裝置。記憶體120可儲存以處理器102可執行之資料信號所代表的指令及/或資料。
系統邏輯晶片116耦接至處理器匯流排110與記憶體120。在說明性實施例中的系統邏輯晶片116係記憶體控制器集線器(MCH)。處理器102可經由處理器匯流排110與MCH 116通訊。MCH 116提供到達記憶體120的高頻寬的記憶體路徑118,用以儲存指令與資料,及用於繪圖命令、資料、及紋理的儲存。MCH 116在處理器102、記憶體120、及系統100中的其它組件之間導引資料信號,且在處理器匯流排110、記憶體120、及系統I/O 122之間橋接資料信號。在一些實施例中,系統邏輯晶片116可提供用以耦接繪圖控制器112的圖形埠。MCH 116經由記憶體介面118耦接至記憶體120。繪圖卡112經由加速繪圖埠(AGP)互連114耦接至MCH 116。
系統100使用專屬的集線器介面匯流排122將MCH 116耦接至I/O控制器集線器(ICH)130。ICH 130經由本地I/O匯流排提供與一些I/O裝置的直接連接。本地I/O匯流排係高速I/O匯流排,用於將周邊連接到記憶體 120、晶片組、與處理器102。一些例子係音訊控制器、韌體集線器(快閃BIOS)128、無線收發器126、資料儲存器124、包含使用者輸入與鍵盤介面的傳統I/O控制器、諸如萬用序列匯流排(USB)的序列擴充埠、以及網路控制器134。資料儲存裝置124可包含硬式磁碟機、軟式磁碟機、CD-ROM裝置、快閃記憶體裝置、或其它的大量儲存裝置。
關於系統的其它實施例,按照一實施例的指令可用於系統單晶片。系統單晶片的一實施例包含處理器與記憶體。用於此一系統的記憶體係快閃記憶體。快閃記憶體可位於與處理器及其它系統組件同一片晶粒上。此外,其它的邏輯區塊,諸如記憶體控制器或繪圖控制器也可位於系統單晶片上。
圖1B說明資料處理系統140,其實施本發明之實施例的原理。熟悉此領域的習知技藝者將很容易理解,本文所描述的實施例可用於替代的處理系統,不會偏離本發明之實施例的範圍。
電腦系統140包含有能力實施按照一實施例之至少一個指令的處理核心159。關於一實施例,處理核心159代表任何類型之架構的處理單元,包括但不限於CISC、RISC、或VLIW類型的架構。處理核心159也適合以一或多種處理技術並藉由表示於機器可讀取媒體上之充分的細節來製造,這些細節適合有助於該製造。
處理核心159包含執行單元142、一組暫存器檔案 145、及解碼器144。處理核心159也包括額外的電路(未顯示),其對於瞭解本發明之實施例並非必要。執行單元142用於執行處理核心159所接收的指令。除了實施典型的處理器指令之外,執行單元142也實施封裝之指令集143中的指令,用以對封裝的資料格式實施運算。封裝的指令集143包括用於實施本發明之實施例的指令及其它的封裝指令。執行單元142藉由內部匯流排耦接至暫存器檔案145。暫存器檔案145表示處理核心159上用於儲存資訊(包括資料)的儲存區域。如前所述,須瞭解,用於儲存封裝之資料的儲存區域並非關鍵。執行單元142耦接至解碼器144。解碼器144用來將處理核心159所接收的指令解碼成控制信號及/或微碼登錄點。執行單元142回應這些控制信號及/或微碼登錄點而實施適當的運算。在一實施例中,解碼器係用來解譯指令的運算碼,其指示應對該指令內所指示之對應的資料實施何種運算。
處理核心159耦接至匯流排141用以與各種其它的系統裝置通訊,例如,其包括但不限於同步動態隨機存取記憶體(SDRAM)控制146、靜態隨機存取記憶體(SRAM)控制147、叢發快閃記憶體介面148、個人電腦記憶體卡國際協會(PCMCIA)/緊湊型快閃記憶卡(CF)控制149、液晶顯示器(LCD)控制150、直接記憶體存取(DMA)控制器151、及替代的匯流排主介面152。在一實施例中,資料處理系統140也包含I/O電橋154,用於經由I/O匯流排153與各不同的I/O裝置通訊。這些 I/O裝置可包括但不限於例如,通用非同步接收器/發送器(UART)155、通用序列匯流排(USB)156、藍牙無線UART 157、及I/O擴充介面158。
資料處理系統140的一實施例提供行動、網路及/或無線通訊,且處理核心159具有實施包括文字串比較運算之SIMD運算的能力。處理核心159可用各種音訊、視訊、成像與通訊的演算法來編程,包括離散變換,諸如沃爾什-哈達瑪變換、快速傅利葉變換(FFT)、離散餘弦變換(DCT)、及以上這些各自的逆變換;壓縮/解壓縮技術,諸如色彩空間變換、視訊編碼移動估計、或視訊解碼移動壓縮;以及調變/解調變(MODEM)功能,諸如脈衝編碼調變(PCM)。
圖1C說明資料處理系統的另一替代實施例,其具有執行提供SIMD向量分組元組交叉比較功能之指令的能力。按照一替代的實施例,資料處理系統160包括主處理器166、SIMD協同處理器161、快取記憶體167、及輸入/輸出系統168。輸入/輸出系統168可選用地耦接至無線介面169。SIMD協同處理器161有能力實施包括按照一實施例之指令的運算。處理核心170適合以一或多種處理技術且藉由表示於機器可讀取媒體上的充分細節來製造,這些細節適合有助於製造包括處理核心170之所有或部分的資料處理系統160。
關於一實施例,SIMD協同處理器161包含執行單元162與一組暫存器檔案164。主處理器166的一實施例包 含解碼器165,用以辨識指令集163之指令,其包括供執行單元162執行之按照一實施例的指令。關於替代的實施例,SIMD協同處理器161也包含至少部分的解碼器165B,用以解碼指令集163的指令。處理核心170也包括其它電路(未顯示),其對於瞭解本發明之實施例並非必要。
運算時,主處理器166執行資料處理指令的串流,其控制一般類型的資料處理運算,包括與快取記憶體167、及輸入/輸出系統168的互動。SIMD協同處理器指令嵌入在資料處理指令的串流中。主處理器166的解碼器165辨識出這些SIMD協同處理器指令係應由附加的SIMD協同處理器161來執行的類型。因此,主處理器166在協同處理器匯流排171上發出這些SIMD協同處理器指令(或代表SIMD協同處理器指令的控制信號),由任何附加的SIMD協同處理器接收。在此情況,SIMD協同處理器161將接受並執行任何所接收之供其使用的SIMD協同處理器指令。
可經由無線介面169接收資料以供SIMD協同處理器指令處理。例如,以數位信號之形式接收語音通訊,其可由SIMD協同處理器指令處理,以再生語音通訊的數位音訊樣本表示。關於另一例子,接收數位位元串流形式之經壓縮的音訊及/或視訊,其可由SIMD協同處理器指令處理,以再生數位音訊樣本及/或移動的視訊框。關於處理核心170、主處理器166、及SIMD協同處理器161被整 合到單一處理核心170的實施例,其包含執行單元162、一組暫存器檔案164、及用以辨識指令集163之指令的解碼器165,指令集163包括按照一實施例的指令。
圖2係處理器200之微架構的方塊圖,其包括用以實施按照本發明一實施例之指令的邏輯電路。在一些實施例中,按照一實施例的指令可被實施來運算具有位元組、單字、雙字、四字等大小及諸如單或雙精度整數與浮點資料類型的資料元素。在一實施例中,有序前端201係處理器200的一部分,其擷取要被執行的指令,並準備這些指令,以便稍後在處理器管線中使用。前端201可包括幾個單元。在一實施例中,指令預取器226從記憶體擷取指令,並將其饋送至指令解碼器228,其依次解碼或解譯這些指令。例如,在一實施例中,解碼器將所接收的指令解碼成機器可執行的一或多個運算,稱為“微指令”或“微運算”(也稱為micro op或uops)。在其它實施例中,解碼器將指令剖析成運算碼及對應的資料與控制欄位,其被微架構使用來實施按照一實施例的運算。在一實施例中,跡線快取230取得經解碼的微運算,並將它們組合到微運算佇列234中的程式有序序列或跡線內供執行。當跡線快取230遇到複雜的指令時,微碼ROM 232提供完成運算所需的微運算。
一些指令被轉換成單個微運算,然而其它的指令需要數個微運算來完成整個運算。在一實施例中,如果需要4個以上的微運算來完成指令,則解碼器228存取微碼 ROM 232來完成該指令。關於一實施例,指令可在指令解碼器228處被解碼成少量的微運算供處理。在另一實施例中,可被儲存在微碼ROM 232內的指令需要若干個微運算來完成運算。跡線快取230參考登錄點可程式邏輯陣列(PLA)來決定一正確的微指令指標器以從微碼ROM 232讀取微碼序列,用來完成按照一實施例的一或多個指令。在微碼ROM 232為指令完成微運算的排序之後,機器的前端201恢復從跡線快取230擷取微運算。
指令在亂序執行引擎203處被準備供執行。亂序執行邏輯具有若干緩衝器用以平滑及重排序指令流,以最佳化當這些指令下到管線並取得供執行之排程時的性能。配置器邏輯為每一個微運算配置為了執行所需的機器緩衝器與資源。暫存器更名邏輯將邏輯暫存器更名到暫存器檔案中的登錄上。在指令排程器(記憶體排程器、快速排程器202、慢速/一般浮點排程器204、及簡單浮點排程器206)之前,配置器也為每一個微運算在兩個微運算佇列其中之一之中配置登錄,一個佇列用於記憶體運算及另一個佇列用於非記憶體運算。微運算排程器202、204、206根據它們相依之輸入暫存器運算元來源的就緒度,以及微運算完成它們之運算所需之執行資源的可用度,來決定微運算何時準備好執行。一實施例的快速排程器202可在每半個主時脈周期上排程,而其它排程器僅能每個主處理器時脈周期排程一次。排程器對調度埠(dispatch port)進行仲裁,以便排程微運算供執行。
暫存器檔案208、210位於排程器202、204、206與執行方塊211中的執行單元212、214、216、218、220、222、224之間。暫存器檔案208、210係為獨立的,分別用於整數與浮點運算。一實施例的暫存器檔案208、210也包括旁通網路,其可將剛完成尚未寫入暫存器檔案的結果旁通或向前轉送給新的相依微運算。整數暫存器檔案208和浮點暫存器檔案210也有能力和另一個通訊資料。關於一實施例,整數暫存器檔案208被分割成兩個獨立的暫存器檔案,一個暫存器檔案用於資料的低位32位元,第二個暫存器檔案用於資料的高位32位元。由於浮點指令的運算元典型上具有64至128位元的寬度,因此,一實施例的浮點暫存器檔案210具有128位元寬的登錄。
執行方塊211包含執行單元212、214、216、218、220、222、224,指令在此被實際地執行。此段包括暫存器檔案208、210,其儲存微指令執行所需要的整數與浮點資料運算元的值。一實施例的處理器200係由位址產生單元(AGU)212、AGU 214、快速算術邏輯單元(ALU)216、快速ALU 218、慢速ALU 220、浮點ALU 222、浮點移動單元224等執行單元組成。關於一實施例,浮點執行方塊222、224執行浮點、MMX、SIMD、及SSE、或其它運算。一實施例的浮點ALU 222包括64位元除64位元的浮點除法器,用於執行除、平方根、及餘數微運算。關於本發明的實施例,包括浮點值的指令可使用浮點硬體來處理。在一實施例中,ALU運算前往高速 ALU執行單元216、218。一實施例的快速ALU216、218可用半個時脈周期之有效的潛時執行快速運算。關於一實施例,由於慢速ALU 220包括有用於長潛時類型之運算的整數執行硬體,最複雜的整數運算前往慢速ALU 220,諸如乘法器、移位、旗標邏輯、及分支處理等。記憶體載入/儲存運算係由AGU 212、214來執行。關於一實施例,對於整數ALU 216、218、220的描述,係在對64位元之資料運算元實施整數運算的環境中。在替代的實施例中,ALU 216、218、220可實施來支援各種不同的資料位元,包括16、32、128、256等。同樣地,浮點單元222、224可實施來支援一範圍之各種不同位元寬度的運算元。關於一實施例,浮點單元222、224可結合SIMD與多媒體指令對128位元寬的封裝資料運算元運算。
在一實施例中,在母體載入完成之前,微運算排程器202、204、206先執行調度相依的運算。當微運算在處理器200中被推測地排程與執行時,處理器200也包括邏輯用來處置記憶體未命中。如果在資料快取中資料載入未命中,則相關的運算在管線中飛行,其以暫時的錯誤資料留置排程器。一重播機制追蹤並再執行使用錯誤資料的指令。僅相關的運算需要被重播且允許無關的運算完成。處理器之一實施例的排程器與重播機制也被設計來捕捉提供SIMD向量分組元組交叉比較功能的指令。
名詞“暫存器”可意指內建在處理器的儲存位置,其被當成指令的一部分使用,用以識別運算元。換言之,暫存 器是可從處理器外部使用的那些儲存位置(從程式員的觀點)。不過,實施例的暫存器不限於意指特定類型的電路。反之,實施例的暫存器具有儲存與提供資料並實施本文所描述之功能的能力。本文所描述的暫存器可藉由處理器內使用多種任何不同技術的電路來實施,諸如專用的實體暫存器、使用暫存器更名之動態配置的實體暫存器、專用與動態配置之實體暫存器的組合等。在一實施例中,整數暫存器儲存32位元的整數資料。一實施例的暫存器檔案也包含用於封裝資料的8個多媒體SIMD暫存器。關於以下的討論,須瞭解暫存器係資料暫存器,設計用來保存封裝的資料,諸如微處理器中之64位元寬的MMXTM暫存器(在一些例中也稱為‘mm’暫存器),以來自加州Santa Clara之英代爾公司的MMX技術致能。這些MMX暫存器在整數與浮點兩種形式中均可用,可用伴隨SIMD與SSE指令的封裝資料元素來運算。同樣地,與SSE2、SSE3、SSE4或以上(一般為“SSEx”)技術有關之128位元寬的XMM暫存器,也被用來保存此封裝的資料運算元。在一實施例中,在儲存封裝資料與整數資料方面,暫存器不需要區分此兩資料類型。在一實施例中,整數與浮點可包含在相同的暫存器檔案或不同的暫存器檔案中。此外,在一實施例中,浮點與整數資料可儲存在不同的暫存器或相同的暫存器中。
在以下各圖的例子中描述若干資料運算元。圖3A說明按照本發明一實施例,各種不同的封裝資料類型在多媒 體暫存器中的表示法。圖3A說明用於128位元寬之運算元的封裝位元組310、封裝字320、及封裝雙字330的資料類型。本例之封裝位元組格式310長128位元,且包含16個封裝位元組資料元素。在此,位元組的定義為8位元的資料。每一個位元組資料元素的資訊係儲存在位元組0的位元7至位元0、位元組1的位元15至位元8、位元組2的位元23至位元16、及最後位元組15的位元120至位元127。因此,暫存器中所有可用的位元都被使用。此儲存配置增加了處理器的儲存效率。同樣地,以16個資料元素存取,一個運算現在可對16個資料元素平行實施。
一般來說,資料元素係個別的資料件,其與長度相同的其它資料元素儲存在單個暫存器或記憶體位置中。在與SSEx技術相關的封裝資料序列中,儲存在XMM暫存器中之資料元素的數量係128位元除以個別資料元素之位元長度。類似地,在與MMX及SSE技術相關的封裝資料序列中,儲存在MMX暫存器中之資料元素的數量係64位元除以個別資料元素之位元長度。雖然圖3A中所說明之資料類型為128位元長,但本發明之實施例也可運算64位元寬、256位元寬、512位元寬、或其它大小的運算元。本例之封裝字格式320係128位元長,且包含8個封裝字資料元素。每一個封裝字包含16位元的資訊。圖3A之封裝雙字格式330係128位元長,且包含4個封裝雙字資料元素。每一個封裝雙字資料元素包含32位元的資 訊。封裝四字係128位元長,且包含2個封裝四字資料元素。
圖3B說明替代之暫存器內的資料儲存格式。每一個封裝資料可包括一個以上的獨立資料元素。在此說明3個封裝的資料格式:封裝的半字341、封裝的單字342、及封裝的雙字343。封裝半字341、封裝單字342、及封裝雙字343的一實施例包含固定點資料元素。一或多個封裝半字341、封裝單字342、及封裝雙字343的替代實施例可包含浮點資料元素。封裝半字341的替代實施例係128位元長,包含8個16位元的資料元素。封裝單字342的一實施例係128位元長且包含4個32位元的資料元素。封裝雙字343的一實施例係128位元長且包含2個64位元的資料元素。須理解,此封裝資料格式可進一步延伸到其它的暫存器長度,例如,96位元、160位元、192位元、224位元、256位元、512位元、或更多。
圖3C說明按照本發明一實施例,各種有符號與無符號之封裝資料類型在多媒體暫存器中的表示法。無符號封裝位元組表示法344說明無符號的封裝位元組在SIMD暫存器中的儲存。每一個位元組資料元素的資訊係位元組0儲存在位元7至位元0、位元組1儲存在位元15至位元8、位元組2儲存在位元23至位元16、等,及最後,位元組15儲存在位元120至位元127。因此,暫存器中所有可用的位元都被使用。此儲存配置增加了處理器的儲存效率。同樣地,以16個資料元素存取,一個運算現在可 用平行的方式對16個資料元素實施。有符號封裝位元組表示法345說明有符號封裝位元組的儲存。須注意,每個位元組資料元素的第8個位元為符號指示元。無符號封裝字表示法346說明字7到字0在SIMD暫存器中如何儲存。有符號封裝字表示法347與無符號封裝字暫存器內表示法346類似。須注意,每一個字資料元素的第16個位元係符號指示元。無符號封裝雙字表示法348顯示雙字資料元素如何儲存。有符號封裝雙字表示法349與無符號封裝雙字暫存器內表示法348類似。須注意,每一個雙字資料元素所需的符號位元係第32個位元。
圖3D描繪運算編碼(運算碼)格式360的實施例,其具有32或更多個位元,且暫存器/記憶體運算元定址模式符合“Intel® 64 and IA-32 Intel Architecture Software Developer’s Manual Combined Volumes 2A and 2B:Instruction Set Reference A-Z,”中所描述之運算碼格式的類型,其可從全球通訊網(www)上之加州Santa Clara之英代爾公司的intel.com/products/processor/manuals/處獲得。在一實施例中,指令係由一或多個欄位361與362來編碼。每個指令識別達兩個運算元位置,包括兩個源運算元識別符364與365。關於一實施例,目的運算元識別符366與源運算元識別符364相同,然而在其它實施例中它們則不相同。關於一替代實施例,目的運算元識別符366與源運算元識別符365相同,然而在其它實施例中它們不同。在一實施例中,被源運算元識別符364與365識 別的其中一個源運算元被指令的結果覆寫,然而,在另一實施例中,識別符364對應於源暫存器元素,及識別符365對應於目的暫存器元素。關於一實施例,運算元識別符364與365可用來識別32位元或64位元的源與目的運算元。
圖3E描繪另一替代的運算編碼(運算碼)格式370,其具有40或更個多位元。運算碼格式370與運算碼格式360相符,且包含選用的前置位元組378。按照一實施例的指令可被一或多個欄位378、371、及372編碼。每個指令可有兩個運算元位置可被源運算元識別符374與375及被前置位元組378識別。關於一實施例,前置位元組378可用來識別32位元或64位元的源與目的運算元。關於一實施例,目的運算元識別符376與源運算元識別符374相同,然而在其它實施例中它們則不相同。關於一替代實施例,目的運算元識別符376與源運算元識別符375相同,然而在其它實施例中它們則不相同。在一實施例中,指令對被運算元識別符374與375所識別的一或多個運算元運算,且被運算元識別符374與375所識別的一或多個運算元被指令的結果覆寫,然而,在其它實施例中,被識別符374與375所識別的一或多個運算元被寫入另一暫存器中的另一資料元素。運算碼格式360與370允許暫存器對暫存器、記憶體對暫存器、暫存器被記憶體、暫存器被暫存器、暫存器被立即、暫存器對記憶體等定址,部分是由MOD欄位363與373與選用的標度-指標-基礎 (scale-index-base)與位移位元組所指定。
接下來轉向圖3F,在一些替代的實施例中,64位元(或128位元、或256位元、或512位元、或更多)單指令多資料(SIMD)算術運算可透過協同處理器資料處理(coprocessor data processing;CDP)指令來實施。運算編碼(運算碼)格式380描繪一個諸如具有CDP運算碼欄位382與389的CDP指令。關於替代的實施例,CDP類型之指令的運算,可由一或多個欄位383、384、387、及388來編碼。每個指令能有3個運算元位置被識別,包括兩個源運算元識別符385與390及一個目的運算元識別符386。協同處理器的一實施例可對8、16、32、及64位元的值運算。關於一實施例,指令係對整數元素實施。在一些實施例中,可使用條件欄位381有條件地執行指令。關於一些實施例,源資料大小可由欄位383來編碼。在一些實施例中,零(Z)、負(N)、進位(C)、及溢位(V)檢測可在SIMD欄位完成。關於一些指令,飽合的類型可藉由欄位384來編碼。
現轉向圖3G,其描繪提供按照另一實施例之SIMD向量分組元組交叉比較功能的另一替代運算編碼(運算碼)格式397,其符合“Intel® Advanced Vector Extensions Programming Reference,”中所描述之運算元格式的類型,其可從全球通訊網(www)上之加州Santa Clara之英代爾公司的intel.com/products/processor/manuals/處獲得。
原始的x86指令集提供具有各種不同格式之位址字節 的1位元組運算碼與包含在附加位元組中的立即運算元,它的存在係從第一個“運算碼”位元組得知。此外,會有一些位元組值保留給運算碼(稱為前置,由於它們必須放在指令的前面)做為修改符。當256個運算碼位元組的原始調色板(包括這些特殊前置值)被用盡時,有一個位元組被專用於逸出到新組的256運算碼。當向量指令(例如,SIMD)被附加時,產生更多運算碼的需求,且即使當透過使用前置來擴充時,“兩位元組”的運算碼映圖也不夠。為此目的,新的指令被加入到附加的映圖中,其使用2位元組加上選用的前置做為識別符。
此外,為了方便64位元模式的附加暫存器,在前置與運算碼之間使用附加的前置(稱為"REX")(及用來決定運算碼所需的任何逸出位元組)。在一實施例中,在64位元模式中,REX可具有4個“酬載”位元用來指示附加暫存器的使用。在其它實施例中,其可少於或多於4個位元。至少一個指令集(其通常與格式360及/或格式370相符)的通用格式一般可藉由以下來說明:[prefixes][rex]escape[escape2]opcode modrm(等)
運算碼格式397與運算碼格式370相符,且包含選用的VEX前置位元組391(在一實施例中,以十六進制的C4開始)用來置換其它最常使用的傳統指令前置位元組與逸出碼。例如,以下說明的實施例使用兩個欄位來編碼指令,當原始指令中存在有第二個逸出碼時,或當REX欄位中需要使用額外的位元(例如,XB與W欄位)時, 其會被使用。在以下說明的實施例中,以新的逸出值來代表傳統的逸出,傳統的前置被完全壓縮成為“酬載”位元組的一部分,傳統前置被再生且可用於未來的擴展,第二個逸出碼被壓縮入“映圖”欄位,含有未來的映圖或可用的特徵空間,且加入新的特徵(例如,增加的向量長度與附加的源暫存器說明符)。
Figure TWI610233BD00001
按照一實施例的指令可藉由一或多個欄位391與392來編碼。藉由欄位391結合源運算元識別符374與375並結合選用的標度-指標-基礎(SIB)識別符393、選用的位移識別符394、與選用的立即位元組395能識別每個指令的4個運算元位置。關於一實施例,VEX前置位元組391可用來識別32位元或64位元的源與目的運算元,及/或128位元或256位元的SIMD暫存器或記憶體運算元。關於一實施例,運算碼格式397所提供的功能可與運算碼格式370冗餘,然而,在其它實施例中,它們可不相同。運算碼格式370與397允許暫存器對暫存器、記憶體對暫存器、暫存器被記憶體、暫存器被暫存器、暫存器被立即、暫存器對記憶體定址,部分是由MOD欄位373及由選用 的(SIB)與識別符393、選用的位移識別符394及選用的立即位元組395所指定。
接下來轉向圖3H,其描繪用以提供按照另一實施例之SIMD向量分組元組交叉比較功能的另一替代運算編碼(運算碼)格式398。運算碼格式398與運算碼格式370與397相符,且包含選用的EVEX前置位元組396(在一實施例中以十六進制的62開始)來置換其它最常使用的傳統指令前置位元組及逸出碼並提供附加功能。按照一實施例的指令,其可藉由一或多個欄位396與392來編碼。藉由欄位396結合源運算元識別符374與375並結合選用的標度-指標-基礎(SIB)識別符393、選用的位移識別符394、與選用的立即位元組395能識別每個指令的4個運算元位置與遮罩。關於一實施例,EVEX前置位元組396用來識別32位元或64位元的源與目的運算元,及/或128位元、256位元、或512位元的SIMD暫存器或記憶體運算元。關於一實施例,運算碼格式398所提供的功能可與運算碼格式370或397冗餘,然而,在其它實施例中,它們可不相同。運算碼格式398允許暫存器對暫存器、記憶體對暫存器、暫存器被記憶體、暫存器被暫存器、暫存器被立即、暫存器對記憶體以遮罩定址,部分是由MOD欄位373及由選用的(SIB)與識別符393、選用的位移識別符394、及選用的立即位元組395所指定。至少一個指令集(其通常與格式360及/或格式370相符)的通用格式一般可藉由以下來說明: evex1 RXBmmmmm WvvvLpp evex4 opcode modrm[sib][disp][imm]
關於按照EVEX格式398編碼之指令的實施例可具有附加的“酬載”位元,其可用於提供SIMD向量分組元組交叉比較功能與附加的幾項新特徵,例如,諸如使用者可組態的遮罩暫存器、或附加的運算元、或在128位元、256位元、或512位元向量暫存器中選擇,或在更多的暫存器中選擇等。
例如,VEX格式397可用來提供不用遮罩的SIMD向量分組元組交叉比較功能,而EVEX格式398可用來提供SIMD向量分組元組交叉比較功能與顯式的使用者可組態遮罩。此外,VEX格式397可用來在128位元或256位元向量暫存器上提供SIMD向量分組元組交叉比較功能,而EVEX格式398可用來在128位元、256位元、或512位元或更大(或更小)的向量暫存器上提供SIMD向量分組元組交叉比較功能。
藉由以下的例子來說明提供SIMD向量分組元組交叉比較功能的指令例,用於有效的向量位址衝突解法:
Figure TWI610233BD00002
當要被比較的元素(例如,指標)與用來表示比較結果所需之遮罩的大小相同時(例如,256位元暫存器中的16個16位元元素),則實施用來交叉比較全部元素的指令為適當。但當要比較的元素比可用來表示比較結果的位元多時,則需要替代的解決方法。可以理解,如以上所例舉的SIMD向量分組元組比較指令,可用做為對於大小可變的元素與記憶體偏位的替代解決方法,以提供SIMD向量位址衝突偵測功能,並結合結果為有效的SIMD位址衝突解法產生衝突遮罩。
例子包括具有第一與第二暫存器的處理器,這些暫存器具有可變的複數個資料欄位,每一個資料欄位儲存第一資料類型的元素。在一些實施例中的處理器執行用於向量分組元組(例如,雙倍、四倍、或八倍)交叉比較的SIMD指令,該指令為構成第一暫存器中之元組之部分資料欄位的每一個資料欄位比較它的對應元素與第二暫存器中元組之資料欄位之對應部分的每一個元素(或記憶體中的向量),並按照對應的比較,在與對應的第一暫存器部分之每一個未遮罩之元素對應的位元遮罩中,設定與第二向量部分之每一個元素對應的遮罩位元。每一個分組元組可包含2、4、或8個元素,其中,該等元素可以是有符號或無符號的封裝位元組(8位元)、字(16位元)、雙字(32位元)、或4字(64位元)。在一些實施例中,任何比較的位元遮罩在被儲存到源/目的暫存器內之前,也可被另一源/目的暫存器之資料欄位中的對應元素向左 移位。典型上,比較類型是由指令所指定的即時運算元所指示(例如,如等於、小於、小於或等於、總為假、不等於、不小於、不小於或等於、及總為真其中之一)。亦可理解,SIMD向量前導零計數指令可與大小可變的元素和衝突遮罩一起使用,用來提供SIMD置換控制,藉以允許暫存器中之有效的SIMD位址衝突解法,而不通過記憶體實施相依的計算,以下將關於圖14A更詳細描述。因此,本文所揭示的指令提供有效的SIMD位址衝突解法,特別是在收集-修改-分散的應用程式中。
圖4A說明按照本發明至少一實施例之循序管線與暫存器更名級、亂序發出/執行管線的方塊圖。圖4B說明包括在按照本發明至少一實施例之處理器中的循序架構核心與暫存器更名邏輯、亂序發出/執行邏輯。圖4A中的實線方塊說明循序管線,而虛線方塊說明暫存器更名、亂序發出/執行管線。同樣地,圖4B中的實線方塊說明循序架構邏輯,而虛線方塊說明暫存器更名邏輯與亂序發出/執行邏輯。
在圖4A中,處理器管線400包括提取級402、長度解碼級404、解碼級406、配置級408、更名級410、排程(也稱為調度或發送)級412、暫存器讀取/記憶體讀取級414、執行級416、寫回/記憶體寫入級418、異常處置級422、與確認級424。
在圖4B中,箭頭指示兩或多個單元之間的耦接,而箭頭方向指示這些單元之間資料流的方向。圖4B顯示處 理器核心490包括前端單元430耦接至執行引擎單元450,且兩者耦接至記憶體單元470。
核心490可以是精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、極長指令字組(VLIW)核心、或混合或替代的核心類型。如還有其它選擇,核心490可以是特殊用途核心,例如,諸如網路或通訊核心、壓縮引擎、繪圖核心、或類似物。
前端單元430包括耦接至指令快取單元434的分支預測單元432,指令讀取單元也耦接至指令轉譯後備緩衝區(TLB)436,其耦接至指令提取單元438,其耦接至解碼單元440。解碼單元或解碼器可解碼指令,並產生如一或多個微運算、微碼登錄點、微指令、其它指令、或其它控制信號的輸出,這些係解碼自、或以其它方式反映、或導出自原始指令。解碼器可使用各種不同的機制來實施。適合的機制例包括但不限於查找表、硬體實施、可程式邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等。指令快取單元434進一步耦接至記憶體單元470中的2階(L2)快取單元476。解碼單元440耦接至執行引擎單元450內的更名/配置單元452。
執行引擎單元450包括更名/配置單元452耦接至止用單元454及一組一或多個排程器單元456。排程器單元456代表任何數量之不同的排程器,包括保留站、中央指令視窗等。排程器單元456耦接至實體暫存器檔案單元458。每一個實體暫存器檔案單元458代表一或多個實體 暫存器檔案,不同的暫存器檔案儲存一或多個不同的資料類型,諸如純量整數、純量浮點、封裝的整數、封裝的浮點、向量整數、向量浮點等、狀態(例如,指令指標器,其係要被執行之下一個指令的位址)等。實體暫存器檔案單元458被止用單元454重疊用以說明可用來實施暫存器更名與亂序執行的各種不同的方法(例如,使用重排序緩衝區與止用暫存器檔案;使用未來檔案、歷史緩衝區、及止用暫存器檔案;使用暫存器映圖與暫存器池;等)。通常,從處理器之外部或從程式員的觀點可以看到架構暫存器。暫存器並不限於任何特定類型的電路。任何不同類型的暫存器都可適用,只要它們能夠按本文之描述儲存與提供資料。適用之暫存器的例子包括但不限於專用的實體暫存器、使用暫存器更名的動態配置實體暫存器、專用與動態配置之實體暫存器的組合等。止用單元454與實體暫存器檔案單元458被耦接至執行群460。執行群460包括一組一或多個執行單元462與一組一或多個記憶體存取單元464。執行單元462可對各種類型的資料(例如,純量浮點、封裝的整數、封裝的浮點、向量整數、向量浮點)實施各種的運算(例如,移位、加、減、乘)。雖然一些實施例可包括若干個專用於特定功能或一組功能的執行單元,但其它實施例可包括全部用來實施所有功能的僅一個執行單元或多個執行單元。圖中所顯示的排程器單元456、實體暫存器檔案單元458、與執行群460有可能是複數個,這是因為一些實施例為一些類型的資料/運算建 立各自獨立的管線(例如,純量整數管線、純量浮點/封裝的整數/封裝的浮點/向量整數/向量浮點管線,及/或記憶體存取管線,其每一個具有它們自已的排程器單元、實體暫存器檔案單元、及/或執行群,且在獨立記憶體存取管線的情況中,所實施的一些實施例中僅此管線的執行群具有記憶體存取單元464)。亦須瞭解,使用獨立管線之處,一或多個這些管線可以是亂序發出/執行且其餘的為循序。
該組記憶體存取單元464耦接至記憶體單元470,其包括資料TLB單元472耦接至資料快取單元474耦接至2階(L2)快取單元476。在一例示的實施例中,記憶體存取單元464可包括載入單元、儲存位址單元、及儲存資料單元,每一個單元皆耦接至記憶體單元470中的資料TLB單元472。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指令集,含一些延伸,較新的版本已增加);加州Sunnyvale之MIPS Technologies的MIPS指令集;加州Sunnyvale之ARM Holdings的ARM指令集(具有選用的附加延伸,諸如NEON)。
須瞭解,核心可支援多執行緒(執行兩或多個平行組的運算或執行緒),且可有多種方法做到,包括分時多緒執行、同時多緒執行(其中,單個實體核心提供邏輯核心給每一個執行緒,該實體核心係同時多緒執行)、或此兩者的組合(例如,分時提取與解碼,並於之後同時多緒執行,諸如Intel®的混合緒執行技術)。
雖然是在亂序執行的環境中來描述暫存器更名,但須瞭解,在循序架構中也可使用暫存器更名。雖然所說明的處理器實施例也包括獨立的指令與資料快取單元434/474與共用的L2快取單元476,但替代的實施例可具有用於指令與資料兩者的單一個內部快取,例如,諸如1階(L1)內部快取,或多階的內部快取。在一些實施例中,系統可包括內部快取與外部快取的組合,外部快取位於核心及/或處理器的外部。或者,所有的快取都可位在核心及/或處理器的外部。
圖5係按照本發明之實施例的單核心處理器與多核心處理器500的方塊圖,其具有整合式記憶體控制器與繪圖 邏輯。圖5中的實線方塊說明處理器500,其具有單核心502A、系統代理510、一組一或多個匯流排控制器單元516,而選用的附加虛線方塊說明替代的處理器500,其具有多核心502A-N、位於系統代理單元510內的一組一或多個整合式記憶體控制器單元514、及整合式繪圖邏輯508。
記憶體階層包括核心內的一或多階快取、一組一或多個共用快取單元506、耦接至整合式記憶體控制器單元組514的外部記憶體(未顯示)。共用快取單元組506包括一或多個中階快取,諸如2階(L2)、3階(L3)、4階(L4)、或其它階的快取、末階快取(LLC)、及/或它們的組合。在一實施例中雖然是以環式互連單元512來互連整合式繪圖邏輯508、共用快取單元組506、與系統代理單元510,但替代的實施例可使用任何數量之習知技術來互連這些單元。
在一些實施例中,一或多個核心502A-N具有多緒執行的能力。系統代理單元510包括那些協調與運算核心502A-N的組件。系統代理單元510例如也包括電力控制單元(PCU)與顯示單元。PCU可以是或包括調節核心502A-N與整合式繪圖邏輯508之電力狀態所需的邏輯與組件。顯示單元用於驅動一或多個外部連接的顯示器。
從架構及/或指令集的角度,核心502A-N可以是均質或異質的。例如,一些核心502A-N可以是循序的,而其它是亂序的。如另一例,兩或多個核心502A-N有能力執 行相同的指令集,而其它的核心僅能執行該指令集的子集或不同的指令集。
處理器可以是通用處理器,諸如可獲自加州Santa Clara之英代爾公司的CoreTM i3、i5、i7、2 Duo與Quad、XeonTM、ItaniumTM、XScaleTM、或StrongARMTM處理器。或者,來自其它公司的處理器,諸如ARM Holdings公司、MIPS等。處理器可以是特殊用途處理器,例如,諸如網路或通訊處理器、壓縮引擎、圖形處理器、協同處理器、內嵌式處理器、或類似處理器。處理器可在一或多個晶片上實施。處理器500可以使用任何多種的處理技術在部分基板及/或在一或多個基板上實施,例如,諸如BiCMOS、CMOS、或NMOS等技術。
圖6-8係適合包括處理器500的例示性系統,而圖9係可包括一或多個核心502的例示性系統單晶片(SoC)。用於膝上型電腦、桌上型電腦、手持式PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換機、內嵌式處理器、數位信號處理器(DSP)、圖形裝置、遊戲機、機上盒、微控制器、細胞式電話、可攜式媒體播放器、手持式裝置、及各種其它電子裝置之習知技藝的其它系統設計與組構也都適合。一般來說,能夠結合如本文所描述之處理器及/或其它執行邏輯之各式各樣的系統或電子裝置都一體適合。
現參考圖6,圖中顯示按照本發明一實施例之系統600的方塊圖。系統600可包括一或多個處理器610、 615,其耦接至圖形記憶體控制器集線器(GMCH)620。選用性質的附加處理器615在圖6中以虛線表示。
每一個處理器610、615可以是處理器500的一些型式。不過,須注意,不同的是,處理器610、615內可含有整合式圖形邏輯與整合式記憶體控制單元。圖6說明GMCH 620可耦接至記憶體640,其例如是動態隨機存取記憶體(DRAM)。在至少一個實施例中,DRAM與非揮發性快取相關聯。
GMCH 620可以是晶片組或是晶片組的一部分。GMCH 620可以與處理器610、615通訊,並控制處理器610、615與記憶體640之間的互動。GMCH 620也可做為處理器610、615與系統600中其它元件之間的加速匯流排介面。關於至少一實施例,GMCH 620經由多點匯流排(諸如前端匯流排(FSB)695)與處理器610、615通訊。
此外,GMCH 620耦接至顯示器645(諸如平面顯示器)。GMCH 620可包括整合式圖形加速器。GMCH 620進一步耦接至輸入/輸出(I/O)控制器集線器(ICH)650,其可用來將各種不同的周邊裝置耦接至系統600。圖6之實施例中所顯示的例子係外部圖形裝置660,其是分離的圖形裝置,連同其它的周邊裝置670耦接至ICH 650。
另者,在系統600中也可存在附加或不同的處理器。例如,附加的處理器615可包括與處理器610相同的附加 處理器、與處理器610異質或不對稱的附加處理器、加速器(諸如,例如,圖形加速器或數位信號處理(DSP)單元)、現場可程式閘陣列、或任何其它的處理器。在特徵之指標的範圍方面,實體資源610、615之間有許多差異,包括架構、微架構、熱、電力消耗特性、或類似物。在處理器610、615之間,這些差異可有效地明白表示出它們的不對稱與異質性。關於至少一實施例,不同的處理器610、615可存在於同一晶粒封裝中。
現參考圖7,圖中顯示按照本發明之實施例之第二系統700的方塊圖。如圖7所示,多處理器系統700係點對點互連系統,且包括經由點對點互連750來耦接的第一處理器770與第二處理器780。每一個處理器770與780可以是處理器500的一些型式,如處理器610、615其中之一或多個處理器。
雖然只顯示兩個處理器770與780,但須瞭解,本發明的範圍並無此限制。在其它實施例中,一或多個附加處理器可存在於特定的處理器中。
所顯示的處理器770與780分別包括整合式記憶體控制器單元772與782。處理器770也包括做為其一部分的匯流排控制器單元點對點(P-P)介面776與778;同樣地,第二處理器780包括點對點介面786與788。處理器770與780可使用點對點介面電路778,788經由點對點(P-P)介面750來交換資訊。如圖7所示,IMC772與782將處理器耦接至各自的記憶體,即記憶體732與記憶 體734,其可以是主記憶體之本地附接到各自處理器的一部分。
每一個處理器770與780可使用點對點介面電路776、794、786、798經由個別的點對點介面752、754與晶片組790交換資訊。晶片組790也可經由高性能圖形介面739與高性能圖形電路738交換資訊。
共用快取(未顯示)可包括在任一個處理器內或兩處理器的外部,依然是經由點對點互連與處理器連接,如果處理器被置於低電力模式中,使得任一或兩個處理器的本地快取資訊可儲存在共用的快取中。
晶片組790可經由介面796耦接至第一匯流排716。在一實施例中,第一匯流排716可以是周邊組件互連(PCI)匯流排、或諸如PCI Express匯流排或其它第三代I/O互連匯流排之匯流排,但本發明之範圍不受此限制。
如圖7所示,各種的I/O裝置714連同將第一匯流排716耦接至第二匯流排720的匯流排電橋718可耦接至第一匯流排716。在一實施例中,第二匯流排720可以是低接腳數(LPC)匯流排。在一實施例中,可耦接至第二匯流排720的各種裝置例如包括鍵盤及/或滑鼠722、通訊裝置727、及儲存單元728,諸如磁碟機或其它的大量儲存裝置,其可包括指令/碼與資料730。此外,音訊I/O裝置724也可耦接至第二匯流排720。須注意,也可以是其它架構。例如,系統可實施多點匯流排或其它的此類架構來取代圖7的點對點架構。
現參考圖8,圖中顯示按照本發明之實施例之第三系統800的方塊圖。在圖8中,與圖7相同之元件也採用相同的參考數字,且為避免模糊了圖8的其它態樣,圖8中也省略了圖7的一些態樣。
圖8說明處理器870、880,其可分別包括整合式記憶體與I/O控制邏輯(“CL”)872與882。關於至少一實施例,CL872與882可包括整合式記憶體控制器單元,諸如以上與圖5及7有關的描述。此外,CL872與882也可包括I/O控制邏輯。圖8中所說明的不僅是記憶體832、834耦接至CL872與882,而且I/O裝置814也耦接至CL872與882。傳統I/O裝置815耦接至晶片組890。
現參考圖9,圖中顯示按照本發明之實施例之SoC900的方塊圖。與圖5中類似的元件具有類似的參考數字。此外,虛線方塊係更先進之SoC上選用的特徵。在圖9中,互連單元902耦接至:包括一組一或多個核心502A-N與共用快取單元506的應用處理器910;系統代理單元510;匯流排控制器單元516;整合式記憶體控制器單元514;一組一或多個媒體處理器920,其包括整合式圖形邏輯508、用於提供靜止及/或視訊攝影機功能的影像處理器924、用於提供硬體音訊加速的音訊處理器926、及用於提供視訊編碼/解碼加速的視訊處理器928;靜態隨機存取記憶體(SRAM)單元930;直接記憶體存取(DMA)單元932;以及顯示單元940,用於耦接至一或多個外部顯示器。
圖10說明包含中央處理單元(CPU)與圖形處理單元(GPU)的處理器,其可實施按照一實施例的至少一個指令。在一實施例中,實施按照至少一實施例之運算的指令可由CPU來實施。在另一實施例中,指令可由GPU來實施。在又另一實施例中,指令可透過經由結合GPU與CPU所實施的運算來實施。例如,在一實施例中,按照一實施例的指令可在GPU上執行接收與解碼。不過,經解碼之指令內的一或多項運算可由CPU來實施,並將結果送回GPU做指令的最終止用。反之,在一些實施例中,CPU可做為主處理器,而GPU做為協同處理器。
在一些實施例中,得益於高度平行、高產出之處理器的指令,可由GPU來實施,而得益於那些得益於深度管線化架構之處理器之性能的指令,則可由CPU來實施。例如,繪圖、科學應用、財經應用、及其它平行工作負荷可得益於GPU之性能,且相應地被其執行,然而,較序列性的應用,諸如作業系統核心或應用程式碼,則較適合CPU。
在圖10中,處理器1000包括CPU 1005、GPU 1010、影像處理器1015、視訊處理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、顯示裝置1040,高解析度多媒體介面(HDMI)控制器1045、MIPI控制器1050、快閃記憶體(FLASH)控制器1055、雙資料率(DDR)控制器1060、安全引擎1065、及整合晶片間聲音/內部積體電路(Integrated Interchip Sound/Inter-Integrated Circuit;I2S/I2C)介面1070。圖10的處理器內可包括其它的邏輯與電路,包括更多的CPU或GPU及其它的周邊介面控制器。
至少一實施例的一或多個態樣可藉由儲存在機器可讀取媒體上的代表資料來實施,其代表處理器內的各種不同邏輯,當其被機器讀取時,致使機器製造用以實施本文所描述之技術的邏輯。此種表示法為習知的“IP核心”,可儲存在實體的機器可讀取的媒體(“磁帶”)上,並供應給各不同的客戶或製造工廠,用以載入到實際製造邏輯或處理器的製造機具內。例如,諸如ARM Holdings公司所開發的CortexTM系列處理器、中國科學院之計算技術研究所(ICT)所開發的龍芯IP核心,這些IP核心可授權或販售給各不同的客戶或被授權者,諸如德州儀器、高通、蘋果、或三星,並在這些客戶或被授權者所生產的處理器中實施。
圖11顯示的方塊圖說明按照一實施例之IP核心的開發。儲存器1130包括模擬軟體1120及/或硬體或軟體模型1110。在一實施例中,代表IP核心設計的資料可經由記憶體1140(例如,硬式磁碟機)、有線連接(例如,網際網路)1150、無線連接1160提供給儲存器1130。由模擬工具與模型所產生的IP核心資訊可接著被傳送到製造工廠,第三方在工廠據以製造,以實施按照至少一實施例的至少一個指令。
在一些實施例中,對應於第一類型或架構(例如, x86)的一或多個指令,可在不同類型或架構(例如,ARM)的處理器上被轉譯或仿真。因此,按照一實施例,指令可在任何處理器或處理器類型上實施,包括ARM、x86、MIPS、GPU、或其它處理器類型或架構。
圖12說明按照一實施例,第一類型的指令如何被不同類型的處理器仿真。在圖12中,程式1205包含一些指令可實施與一實施例之指令相同或實質相同的功能。不過,程式1205的指令可以與處理器1215的類型及/或格式不相同或不相容,此表示程式1205之指令的類型無法被處理器1215原生地執行。不過,藉助於仿真邏輯1210,程式1205之指令被轉譯成能被處理器1215原生執行的指令。在一實施例中,仿真邏輯係被具體化成硬體。在另一實施例中,仿真邏輯被具體化於包含軟體的有形機器可讀取媒體中,該軟體能將程式1205中之指令的類型轉譯成處理器1215可原生執行的類型。在其它實施例中,仿真邏輯係具有固定功能或可程式之硬體與儲存在實體機器可讀取媒體中之程式的組合。在一實施例中,處理器包含仿真邏輯,然而,在其它實施例中,仿真邏輯存在於處理器的外部,且是由第三方提供。在一實施例中,處理器有能力藉由執行包含在處理器中或與處理器相關聯之微碼或韌體而載入具體化於包含軟體之有形機器可讀取媒體中的仿真邏輯。
圖13的方塊圖係按照本發明之實施例,使用軟體指令轉換器將源指令集中的二進制指令轉換到目標指令集中 之二進制指令之對照。在說明的實施例中,指令轉換器係軟體指令轉換器,然而,指令轉換器也可替代地在軟體、韌體、硬體、或以上這些的各種組合中實施。圖13顯示,可使用x86編譯器1304編譯高階語言1302的程式,以產生可被具有至少一個x86指令集核心1316之處理器原生執行的x86二進制碼1306。具有至少一個x86指令集核心1316的處理器代表可實質地實施與具有至少一個x86指令集核心之英代爾處理器相同功能的任何處理器,其為了獲致與具有至少一個x86指令集核心之英代爾處理器實質相同的結果,藉由相容地執行或以其它方式處理(1)英代爾x86指令集核心之指令集的實質部分,或(2)以在具有至少一個x86指令集核心之英代爾處理器上運行為目標之應用程式或其它軟體的目標碼版本。x86編譯器1304代表一編譯器,無論有或無額外的鏈結處理,其可被運算以產生可在具有至少一個x86指令集核心1316之英代爾處理器上執行的x86二進制碼1306(例如目標碼)。同樣地,圖13顯示高階語言1302的程式可使用替代的指令集編譯器1308來編譯,以產生可被不具有至少一個x86指令集核心之處理器1314(例如,具有可執行MIPS Technologies of Sunnyvale,CA之MIPS指令集及/或ARM Holdings of Sunnyvale,CA之ARM指令集之核心的處理器)原生地執行之替代的指令集二進制碼1310。指令轉換器1312被用來將x86二進制碼1306轉換成可被無x86指令集核心之處理器1314原生執行的碼。 此經轉換的碼不太可能與替代的指令集二進制碼1310相同,原因是此指令轉換器的能力很難做到;不過,經轉換的碼將可完成一般的運算,並從替代的指令集組成指令。因此,指令轉換器1312代表軟體、硬體、韌體、或它們的組合,透過仿真、模擬、或任何其它處理,允許不具有x86指令集處理器或核心的處理器或其它電子裝置執行x86二進制碼1306。
圖14A說明的流程圖係使用SIMD向量前導零計數指令來為有效的向量位址衝突解法產生置換控制之處理1401例的實施例。本文所揭示之處理1401與其它的處理係以處理方塊來實施,其可包含專用的硬體或軟體或韌體運算碼,可藉由通用機器或藉由特殊用途機器或兩者之組合來執行。
在處理1401的處理方塊1410中,一組指標例如被初始化到值7、2、7、1、與7。可以理解,偏位指標的數量與偏位指標的值係為了說明而非本發明之實施例的限制。特別是,暫存器中偏位指標的數量,可由特定的應用程式及/或與指標對應之資料元素的大小來決定。偏位指標的值例單純意欲用來說明相依衝突的解法。在處理方塊1415中,將元素遺留遮罩全部(例如,5)設定成1。在處理方塊1420中,按照處理1405之技術(此技術在下文中關於圖18詳細描述)設定相依性遮罩以反映所有匹配的偏位指標。接著,在處理方塊1425中,一組順序遮罩被初始化。在處理方塊1430中,藉由執行相依性遮罩與 順序遮罩之間的逐位元AND來計算衝突遮罩。
接下來進行到處理方塊1439,使用向量前導零計數指令VPLZCNT對衝突遮罩計算前導零計數,此係為衝突遮罩之每一個資料欄位計數被設定成零之相連最有效位元的數量,並將每一個計數當成值儲存在前導零計數的對應資料欄位中。在處理方塊1440中,將最大的計數全部初始化到4,在例示說明中,此為比用來表示衝突遮罩之位元數量小1的值。在處理方塊1445中,藉由實施SIMD分組減法PSUB,以對應的最大計數值(比用來代表衝突遮罩之位元數量少1的值)減去每一個前導零計數的值,來計算一組置換指標,用以產生最大計數減去前導零計數之對應的差。可以理解,對應於偏位指標的那些位置,與先前計算具有負1之置換指標不相關,使用也是有利的。
在處理方塊1450中,按照偏位指標與全部為1的元素遺留遮罩(選用的)從記憶體收集資料。接下來,在處理方塊1455中,使用分組比較不等於指令PCMPNEQ來比較置換指標與所有的負1,以重新計算元素遺留遮罩。在處理方塊1460中,做出元素遺留遮罩是否為零(0)的決定。如果是,則在處理方塊1465中使用偏位指標將資料分散到記憶體,且此組SIMD資料的處理在處理方塊1499結束。
若為否,則在處理方塊1470中,藉由實施SIMD向量分組置換VPERM,使用置換指標與元素遺留遮罩做為完成的遮罩來置換資料,以有利於僅更新遺留要處理的元 素。在處理方塊1475中,使用元素遺留遮罩做為完成的遮罩來對遺留要處理的資料元素實施所需的計算。接著,在習知技術的處理1406中,藉由在處理方塊1480中將元素遺留遮罩廣播到所有元素而將一組被衝突排除的元素初始化。接著,使用向量分組AND指令對先前的衝突遮罩與新的被衝突排除的元素重新計算一組衝突遮罩。接著,使用分組比較不等於指令PCMPNEQ比較每一個衝突遮罩與所有的零來計算新的元素遺留遮罩。接著,處理於處理方塊1460反覆開始,測試新的元素遺留遮罩。亦可理解,如本文之描述,SIMD向量前導零計數指令可有利地與大小可變的元素及衝突遮罩一起使用來提供SIMD置換控制,藉以允許暫存器中之有效的SIMD位址衝突解法,而不通過記憶體實施相依的計算。
圖14B說明對於有效的向量位址衝突解法使用SIMD向量位址衝突遮罩例子之實施例的流程圖。在處理1402的處理方塊1410中,一組偏位指標例如被初始化到值7、2、7、1、與7。再次可以理解,偏位指標的數量與偏位指標的值係為了說明而非本發明之實施例的限制。特別是,暫存器中偏位指標的數量,可由特定的應用程式及/或與指標對應之資料元素的大小來決定。偏位指標的值例係單純意欲用來說明相依衝突的解法。在處理方塊1415中,將元素遺留遮罩全部(例如,5)設定成1。在處理方塊1420中,按照處理1405之技術(此技術在下文中關於圖18詳細描述)設定相依性遮罩,以包括匹配的偏位 指標。接著,在處理方塊1425中,一組順序遮罩被初始化。在處理方塊1430中,藉由執行相依性遮罩與順序遮罩之間的逐位元AND來計算衝突遮罩。
在處理方塊1450中,按照偏位指標與元素遺留遮罩從記憶體收集資料,且元素遺留遮罩(選用的)全部為1。接下來在處理1406中,藉由在處理方塊1480將元素遺留遮罩廣播到所有元素而將一組被衝突排除的元素初始化。在處理方塊1485中,使用向量分組AND指令對先前的衝突遮罩與新的被衝突排除的元素重新計算一組衝突遮罩。接著,在處理方塊1490中,使用分組比較不等於指令PCMPNEQ比較每一個衝突遮罩與所有的零來計算新的元素遺留遮罩。在處理方塊1462中,元素遺留遮罩被否定以形成做這個遮罩(did these mask),且在處理方塊1466中,按照偏位指標將資料元素分散到記憶體。在處理方塊1460中,做出元素遺留遮罩是否為零(0)的決定。如果是,此組SIMD資料的處理在處理方塊1499結束。否則,處理於處理1402的處理方塊1450反覆開始。
圖15A說明處理1501之實施例的流程圖,其係在處理器中執行用於提供SIMD向量分組元組交叉比較功能之指令的處理。每一個分組元組包含2、4、或8個元素。在一些實施例中,比較的類型(例如,等於、小於、小於或等於、假、不等於、不小於、不小於或等於、及真其中之一)係由指令所指定的即時運算元來指示。在處理方塊1510中,將第一資料類型的元素儲存在向量暫存器之複 數n個資料欄位的每一個中。在處理方塊1520中,將第一資料類型的元素儲存在第二向量之n個資料欄位的每一個中。在處理方塊1530中,在處理器中解碼用於向量分組元組交叉比較的SIMD指令。回應用於向量分組元組交叉比較的SIMD指令,處理在處理1503中繼續處理方塊1540。
在處理方塊1540中,向量暫存器中的下一個元組被選擇供處理。在處理方塊1550中,元組中的下一個元素與第二向量之複數n個資料欄位之對應元組的每一個元素比較。在處理方塊1560中,按照對應的比較,在與來自被選擇供處理之向量暫存器元組之目前正被比較之元素對應的下一個位元遮罩中,設定對應於第二向量之每一個元組元素的遮罩位元。在一些實施例中,對應於向量暫存器之元素的所有位元遮罩可全部儲存在目的暫存器中,與向量暫存器中和它們對應之元素的最低有效位元對齊。在一些替代的實施例中,對應於向量暫存器之元素的位元遮罩可代之以儲存在源/目的暫存器中,按照儲存在源/目的暫存器之對應元素中的移位計數重新對齊。在處理方塊1570中,做出關於目前被選擇供處理之元組的比較是否已全部完成的決定。若否,則從處理方塊1550開始反覆處理,直到目前被選擇供處理之元組的每一個資料欄位都完成。在一些實施例中,向量暫存器的資料欄位可能隱性地未遮罩,需要交叉比較它們的每一個。在一些替代的實施例中,向量暫存器的資料欄位被顯性地遮罩或未遮罩 (例如,在指令所指定的遮罩暫存器中),僅未遮罩之資料欄位中的元素需要被交叉比較。至此,對於目前被選擇之元組所需要的全部比較都已完成,處理前進到處理方塊1580,在此決定向量暫存器之所有n個資料欄位的處理是否都已完成。若否,則從處理方塊1540開始反覆處理,在此方塊中,向量暫存器中的另一元組被選擇供處理。否則,處理在處理方塊1590結束。
可以理解,如在本文所描述的實施例中,SIMD向量分組元組交叉比較指令可用於大小可變的元素與記憶體偏位,以提供SIMD向量位址衝突偵測功能,並產生用於有效之SIMD位址衝突解法的衝突遮罩。亦可理解,如在本文所描述的實施例中,SIMD向量分組元組交叉比較指令可與SIMD向量前導零計數指令結合使用,以提供SIMD置換控制,用於有效之SIMD位址衝突解法,特別是在一些收集-修改-分散的應用程式中,允許在暫存器中的位址衝突解法,而不經由記憶體實施相依的計算。
圖15B說明處理1502之實施例的流程圖,其使用SIMD向量位址衝突遮罩用於有效向量位址衝突解法。在處理方塊1505中,比較第一暫存器或記憶體向量源之每一個元素中的偏位與向量源之每一個較低有效元素中的偏位,以決定它們是否保有匹配的偏位。在處理方塊1515中,將與第一向量源中保有與第一向量目的地中與遮罩對應之元素之偏位匹配之偏位之較低有效元素對應的任何遮罩位元設定成1(例如,如處理1801中所示)。在處理 方塊1525中(例如,如處理1405所示),將目的暫存器中任何其它位元設定成第二值(例如,零)。
在處理方塊1535中,儲存在第一目的暫存器中之每一個遮罩的值與另一向量中之特定值(例如,零)的對應複本比較,以產生依靠計算較低有效元素之那些元素的遮罩。在處理方塊1545中,使用那些依靠對較低有效元素不完整計算之元素的遮罩來偵測準備要處理的元素,並產生完整的遮罩。在處理方塊1555中,使用完整的遮罩對資料實施SIMD計算。接著,在處理方塊1565中,那些依靠對較低有效元素不完整計算之元素的遮罩被更新。在處理方塊1575中,做出全部元素之處理是否完成的決定,且如果是,則這些元素的處理在處理方塊1595結束。否則,處理從處理方塊1545反覆開始。亦可理解,如所說明,雖然處理1502並未假設被處理的元素需要被儲存到記憶體,但按照本發明的替代實施例,任何此類的儲存或分散到記憶體,連同處理1502之額外的後續迭代都可實施。
圖16說明設備1601的習知技術實施例,其用於執行提供SIMD向量前導零計數功能的指令,有助於為有效的向量位址衝突解法產生置換控制。設備1601的實施例可以是管線400(例如,執行級416)或部分的核心490(例如,執行單元462),用以執行提供SIMD向量前導零計數功能的指令。設備1601的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦 接,用以解碼用於SIMD向量前導零計數功能的指令,其允許有效的向量位址衝突解法。一或多個執行單元(例如,執行設備1601)回應被解碼的指令,讀取記憶體向量運算元或向量暫存器1610或1620之每一個資料欄位中的複數個位元,並為憶體向量運算元或向量暫存器1610或1620的每一個資料欄位計數設定成零之最有效連續位元的數量,並將該計數當作值儲存到SIMD目的暫存器1650或1660的對應資料欄位中。
例如,設備1601的實施例可與向量暫存器耦接,向量暫存器(例如,實體暫存器檔案單元458)包含可變之複數n個大小可變的資料欄位,用以儲存可變之複數n個大小可變之資料元素的值。提供SIMD向量前導零計數功能之指令的實施例指定向量前導零計數運算以及用於為憶體向量運算元或向量暫存器1610或1620之每一個資料欄位實施SIMD向量前導零計數之資料欄位的大小,並將該計數當作值儲存到SIMD目的暫存器(例如,1650或1660)中指定大小的對應資料欄位中。
例如,用於執行提供SIMD向量前導零計數功能之指令之設備1601的一實施例讀取記憶體向量運算元或向量暫存器1620中每一個第一大小(例如,16位元或32位元)之資料欄位的複數個位元,並計數前導零計數電路1603之前導零計數器1630-1637中設定成零之最有效連續位元的數量,接著將該計數當作值儲存到SIMD目的暫存器1660中相同指定大小的對應資料欄位中。用於執行提 供SIMD向量前導零計數之指令之設備1601的另一實施例讀取記憶體向量運算元或向量暫存器1610中每一個第二大小(例如,32位元或64位元)之資料欄位的複數個位元,並從奇數前導零計數器1631到1637中選擇設定成零之最有效連續位元的計數,或在前導零計數組合電路1604的選擇加法器電路1640至1643中,將值m分別加到來自偶數前導零計數器1630至1636的計數,接著,將該組合的計數當作值儲存到SIMD目的暫存器1650中指定大小的對應資料欄位中。可以理解,如圖示16所示,用於執行提供SIMD向量前導零計數之指令之設備1601的替代實施例有能力實施第一資料欄位大小之SIMD向量前導零計數與第二資料欄位大小之SIMD向量前導零計數,或可以修改來實施各種特定資料欄位大小的SIMD向量前導零計數。如在本文所描述的實施例中,SIMD向量前導零計數指令可與大小可變的元素和衝突遮罩一起使用,以提供SIMD置換控制,藉以允許在暫存器中更有效的SIMD位址衝突解法,而不經由記憶體實施相依的計算。因此,本文所揭示的SIMD向量前導零計數指令與邏輯提供有效的SIMD位址衝突解法,特別是在某些收集-修改-分散的應用程式,例如,關於圖14A之討論。
當要被比較的元素(例如,指標)與用來表示比較結果所需之遮罩的大小相同時(例如,256位元暫存器中的16個16位元元素),則實施用來交叉比較全部元素的指令為適當。但當要比較的元素比可用來表示比較結果的位 元多時,則需要替代的解決方法。可以理解,對於大小可變的元素與記憶體偏位,可使用本所所揭示的SIMD向量分組元組比較指令做為替代的解決方法,用以提供SIMD向量位址衝突偵測功能,並組合結果為有效的SIMD位址衝突解法產生衝突遮罩。亦可理解,SIMD向量分組元組比較指令具有更通用的適用性(例如,當各種不同的比較運算其中任何一種都有用時),且就面積與功耗而論,所需的實施成本低於交叉比較所有元素之指令。
圖17A說明用於提供SIMD向量分組雙倍交叉比較功能之例示指令1701的實施例。在一些實施例中,指令1701之編碼可記錄在一些用來記錄功能描述素材的一些機器可讀取媒體上,供專用機器或通用處理機器執行。在一些實施例中,指令1701之編碼可指定包含第一複數個資料欄位(例如,n個資料欄位)的第一向量暫存器1710,第一複數個分割成第一部分,每一個第一部分具有第二複數個資料欄位(例如,2個資料欄位),每一個資料欄位被遮罩或未遮罩。在一些實施例中,第一向量暫存器1710的資料欄位可隱性地未遮罩,它們每一個都需要被比較。在一些替代的實施例中,第一向量暫存器1710的資料欄位顯性地被遮罩或未遮罩(例如,在指令1701所指定的遮罩暫存器中),僅未遮罩之資料欄位中的元素需要被比較。指令1701也指定用來表示與第一複數個資料欄位對應之第三複數個資料欄位的第二向量暫存器1720或記憶體儲存器組,第三複數個分割成第二部分, 每一個第二部分也具有該第二複數個資料欄位(例如,2個資料欄位)。在一些實施例中,封裝的元素可以是有符號或無符號的封裝位元組(8位元)、字(16位元)、雙倍字(32位元)、或四倍字(64位元)。指令1701也指定即時位元組運算元1731來編碼特定的比較類型(例如,大於或等於,
Figure TWI610233BD00003
)和目的向量暫存器1771,其包含對應的第一複數個資料欄位(例如,n個資料欄位),其被分割成對應的第一部分,每一對應的第一部分具有第二複數個資料欄位(例如,2個資料欄位)。在一些實施例中,即時運算元1731可指示以下其中之一的比較類型:等於、小於、小於或等於、總是假、不等於、不小於、不小於或等於、及總是真。
關於儲存在第一向量暫存器1710中之第一複數n個資料欄位之第一部分(例如,2元組)之資料欄位中的每一個元素,指令1701比較該元素與代表第二向量暫存器1720或記憶體儲存器組之該第三複數n個資料欄位之對應部分(例如,2元組)的每一個元素。在目的向量暫存器1771中,指令1701按照對應的比較,在與對應之第一暫存器1710部分的每一個未遮罩元素對應的位元遮罩中,設定對應於第二向量1720部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與第一向量暫存器1710之元素對應的所有位元遮罩可儲存在目的向量暫存器1771中,與第一向量暫存器1710中它們 的對應元素的最低有效位元對齊。在一些替代的實施例中,與第一向量暫存器1710之元素對應的位元遮罩,可代之以儲存在源/目的向量暫存器1771中,按照儲存在源/目的向量暫存器1771之對應元素中的移位計數重新對齊。
圖17B說明用於提供SIMD向量分組四倍交叉比較功能之指令1702的替代實施例。在一些實施例中,指令1702的編碼也記錄在一些用來記錄功能描述素材的一些機器可讀取媒體上,供專用機器或通用處理機器執行。在一些實施例中,指令1702之編碼可指定包含第一複數個資料欄位(例如,n個資料欄位)的第一向量暫存器1710,第一複數個分割成第一部分,每一個第一部分具有第二複數個資料欄位(例如,4個資料欄位),每一個資料欄位被遮罩或未遮罩。在一些實施例中,第一向量暫存器1710的資料欄位隱性地未遮罩,它們每一個都需要被比較。在一些替代的實施例中,第一向量暫存器1710的資料欄位顯性地被遮罩或未遮罩(例如,在指令1702所指定的遮罩暫存器中),僅未遮罩之資料欄位中的元素需要被比較。指令1702也指定用來表示與第一複數個資料欄位對應之第三複數個資料欄位的第二向量暫存器1720或記憶體儲存器組,第三複數個分割成第二部分,每一個第二部分也具有該第二複數個資料欄位(例如,4個資料欄位)。在一些實施例中,封裝的元素可以是有符號或無符號的封裝位元組(8位元)、字(16位元)、雙倍字 (32位元)、或四倍字(64位元)。指令1702也指定即時位元組運算元1732來編碼特定的比較類型(例如,小於,<)和目的向量暫存器1772,其包含對應的第一複數個資料欄位(例如,n個資料欄位),其被分割成對應的第一部分,每一對應的第一部分具有第二複數個資料欄位(例如,4個資料欄位)。在一些實施例中,即時運算元1732可指示以下其中之一的比較類型:等於、小於、小於或等於、總是假、不等於、不小於、不小於或等於、及總是真。
關於儲存在第一向量暫存器1710中之第一複數n個資料欄位之第一部分(例如,4元組)之資料欄位中的每一個元素,指令1702比較該元素與表示第二向量暫存器1720或記憶體儲存器組之該第三複數n個資料欄位之對應部分(例如,4元組)的每一個元素。在目的向量暫存器1772中,指令1702按照對應的比較在與對應之第一暫存器1710部分的每一個未遮罩元素對應的位元遮罩中設定對應於第二向量1720部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與第一向量暫存器1710之元素對應的所有位元遮罩可儲存在目的向量暫存器1772中,與第一向量暫存器1710中之它們的對應元素的最低有效位元對齊。在一些替代的實施例中,與第一向量暫存器1710之元素對應的位元遮罩,可代之以儲存在源/目的向量暫存器1772中,按照儲存在源/目的向 量暫存器1772之對應元素中的移位計數重新對齊。
圖17C說明用於提供SIMD向量分組八倍交叉比較功能之指令1703的另一替代實施例。在一些實施例中,指令1703的編碼也記錄在一些用來記錄功能描述素材的一些機器可讀取媒體上,供專用機器或通用處理機器執行。在一些實施例中,指令1703之編碼可指定包含第一複數個資料欄位(例如,n個資料欄位)的第一向量暫存器1710,第一複數個分割成第一部分,每一個第一部分具有第二複數個資料欄位(例如,8個資料欄位),每一個資料欄位被遮罩或未遮罩。在一些實施例中,第一向量暫存器1710的資料欄位隱性地未遮罩,它們每一個都需要被比較。在一些替代的實施例中,第一向量暫存器1710的資料欄位顯性地被遮罩或未遮罩(例如,在指令1703所指定的遮罩暫存器中),僅未遮罩之資料欄位中的元素需要被比較。指令1703也指定用來表示與第一複數個資料欄位對應之第三複數個資料欄位的第二向量暫存器1720或記憶體儲存器組,第三複數個分割成第二部分,每一個第二部分也具有該第二複數個資料欄位(例如,8個資料欄位)。在一些實施例中,封裝的元素可以是有符號或無符號的封裝位元組(8位元)、字(16位元)、雙倍字(32位元)、或四倍字(64位元)。指令1703也指定即時位元組運算元1733來編碼的特定比較類型(例如,等於,=)和目的向量暫存器1773,其包含對應的第一複數個資料欄位(例如,n個資料欄位),其被分割成對應的 第一部分,每一對應的第一部分具有第二複數個資料欄位(例如,8個資料欄位)。在一些實施例中,即時運算元1733可指示以下其中之一的比較類型:等於、小於、小於或等於、總是假、不等於、不小於、不小於或等於、及總是真。
關於儲存在第一向量暫存器1710中第一複數n個資料欄位之第一部分(例如,8元組)之資料欄位中的每一個元素,指令1703比較該元素與表示第二向量暫存器1720或記憶體儲存器組之該第三複數n個資料欄位之對應部分(例如,8元組)的每一個元素。在目的向量暫存器1773中,指令1703按照對應的比較,在與對應之第一暫存器1710部分之每一個未遮罩元素對應的位元遮罩中,設定對應於第二向量1720部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與第一向量暫存器1710之元素對應的所有位元遮罩可儲存在目的向量暫存器1773中,與第一向量暫存器1710中它們的對應元素的最低有效位元對齊。在一些替代的實施例中,與第一向量暫存器1710之元素對應的位元遮罩,可代之以儲存在源/目的向量暫存器1773中,按照儲存在源/目的向量暫存器1773之對應元素中的移位計數重新對齊。
圖18說明例示方法1801的實施例,其將用於提供SIMD向量分組元組交叉比較功能之指令的結果組合,為 有效的向量位址衝突解法產生位址衝突遮罩(例如,諸如1420)。關於第一向量分組雙倍交叉比較1802,第一資料類型的元素儲存在向量暫存器1810之n個資料欄位的每一個中。第一資料類型的元素也儲存在向量1820之n個資料欄位的每一個中,其可儲存在向量暫存器中或代表向量1820的記憶體儲存器組中。在處理器中,用於向量分組雙倍交叉比較1802的SIMD指令被解碼。
回應用於向量分組雙倍交叉比較1802的SIMD指令,對於儲存在向量暫存器1810中之n個資料欄位之每一部分(例如,2元組)之資料欄位中的每一個元素,指令1802比較該元素與代表向量1820之n個資料欄位之向量暫存器或記憶體儲存器組之對應部分(例如,2元組)的每一個元素。在目的向量暫存器1830中,指令1802按照所實施之對應的比較(例如,相等),在與對應之暫存器1810部分的每一個未遮罩元素對應的位元遮罩中,設定對應於向量1820部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與向量暫存器1810之元素對應的所有位元遮罩可首先儲存在目的向量暫存器1830中,與第一向量暫存器1810中它們的對應元素的最低有效位元對齊,並接著按照個別的SIMD指令實施分組移位1812。在一些替代的實施例中,與第一向量暫存器1810之元素對應的位元遮罩,可代之以儲存在源/目的向量暫存器1830中,按照儲存在源/目的向量暫存器 1830之對應元素中的移位計數重新對齊。
關於第二向量分組雙倍交叉比較1803,第一資料類型的元素儲存在向量暫存器1815之n個資料欄位的每一個中。第一資料類型的元素也儲存在向量1825之n個資料欄位的每一個中,其可儲存在向量暫存器中或代表向量1825的記憶體儲存器組中。用於向量分組雙倍交叉比較1803的第二SIMD指令被解碼。回應用於向量分組雙倍交叉比較1803的第二SIMD指令,對於儲存在向量暫存器1815中之n個資料欄位之每一部分(例如,2元組)之資料欄位中的每一個元素,指令1803比較該元素與代表向量1825之n個資料欄位之向量暫存器或記憶體儲存器組之對應部分(例如,2元組)的每一個元素。在目的向量暫存器1835中,指令1803按照所實施之對應的比較(例如,相等),在與對應之暫存器1815部分的每一個未遮罩元素對應的位元遮罩中,設定對應於向量1825部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與向量暫存器1815之元素對應的所有位元遮罩可首先儲存在目的向量暫存器1835中,與第一向量暫存器1815中它們的對應元素的最低有效位元對齊,並接著按照個別的SIMD指令實施分組移位1813。在一些替代的實施例中,與第一向量暫存器1815之元素對應的位元遮罩,可代之以儲存在源/目的向量暫存器1835中,按照也儲存在源/目的向量暫存器1835之對應元素中的移位 計數重新對齊。接著,按照置換向量1840與個別的SIMD向量置換指令,對向量暫存器1835的位元遮罩元素實施向量置換,以產生暫時結果向量暫存器1845。
關於第三向量分組雙倍交叉比較1804,第一資料類型的元素儲存在向量1850之n個資料欄位的每一個中,其可儲存在向量暫存器中或代表向量1850的記憶體儲存器組中。用於向量分組雙倍交叉比較1804的第三SIMD指令被解碼。回應用於向量分組雙倍交叉比較1804的第三SIMD指令,對於儲存在向量暫存器1815中之n個資料欄位之每一部分(例如,2元組)之資料欄位中的每一個元素,指令1804比較該元素與代表向量1850之n個資料欄位之向量暫存器或記憶體儲存器組之對應部分(例如,2元組)的每一個元素。在目的向量暫存器1860中,指令1804按照所實施之對應的比較(例如,相等),在與對應之暫存器1815部分的每一個未遮罩元素對應的位元遮罩中,設定對應於向量1850部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與向量暫存器1815之元素對應的所有位元遮罩可首先儲存在目的向量暫存器1860中,與第一向量暫存器1815中它們的對應元素的最低有效位元對齊,並接著按照個別的SIMD指令實施分組移位1814。在一些替代的實施例中,與第一向量暫存器1815之元素對應的位元遮罩,可代之以儲存在源/目的向量暫存器1860中,按照也 儲存在源/目的向量暫存器1860之對應元素中的移位計數重新對齊。
儲存在源/目的向量暫存器1860中與向量暫存器1815之元素對應的位元遮罩,分別與儲存在暫時結果向量暫存器1845中的位元遮罩結合(例如,按照個別的SIMD向量封裝加法指令),以產生第二暫時結果向量暫存器1870。儲存在源/目的向量暫存器1835中與向量暫存器1815之元素對應的位元遮罩,分別與儲存在第二暫時結果向量暫存器1870中的位元遮罩結合(例如,按照另一個別的SIMD向量封裝加法指令),以產生第三暫時結果向量暫存器1880。儲存在源/目的向量暫存器1830中與向量暫存器1810之元素對應的位元遮罩,分別與儲存在第三暫時結果向量暫存器1880中的位元遮罩結合(例如,按照另一個別的SIMD向量封裝加法指令),以產生具有對應於向量暫存器1810之元素之位址衝突遮罩(例如,諸如1420)的結果向量暫存器1890。
可以理解,對於大小可變的元素與記憶體偏位,可使用本文所揭示的SIMD向量分組元組比較指令做為替代的解決方法,用以提供SIMD向量位址衝突偵測功能,並組合結果為有效的SIMD位址衝突解法產生衝突遮罩。亦可理解,SIMD向量分組元組比較指令具有更通用的適用性(例如,當各種不同的比較運算其中任一何一種有用時),且就面積與功耗而論,所需的實施成本低於交叉比較所有元素之指令。
圖19A說明用於執行提供SIMD向量分組元組交叉比較功能之指令之設備1901的實施例。設備1901的實施例可以是管線400的一部分(例如,執行級416)或核心490的一部分(例如,執行單元462),用於執行提供SIMD向量分組元組交叉比較功能的指令。設備1901的一些實施例包含分組元組比較設備1903,其包括控制邏輯1940與比較器陣列1942,及選用的移位設備1905,其包括移位器1950、1951、1952、及1953等。設備1901的實施例可與解碼級(例如,解碼級406)或解碼器(例如,解碼單元440)耦接,用以解碼用於SIMD向量分組元組交叉比較的指令,其允許有效的向量位址衝突解法。一或多個執行單元(例如,執行設備1901)回應被解碼的指令,為儲存在向量暫存器1910中之n個資料欄位之每一部分(例如,2元組)之資料欄位中的每一個元素,比較該元素與代表向量1920之n個資料欄位之向量暫存器或記憶體儲存器組之對應部分(例如,2元組)的每一個元素。設備1901的實施例可與包含可變之複數n個大小可變之資料欄位的向量暫存器(例如,實體暫存器檔案單元458)耦接,用以儲存可變之複數n個大小可變之資料元素的值。在目的向量暫存器1970中,設備1901按照所實施之對應的比較(例如,即時運算元1930所指定),在與對應之暫存器1910部分的每一個未遮罩元素對應的位元遮罩中,設定對應於向量1920部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例 如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與向量暫存器1910之元素對應的所有位元遮罩儲存在目的向量暫存器1970中,與向量暫存器1910中它們的對應元素的最低有效位元對齊。在一些替代的實施例中,與第一向量暫存器1910之元素對應的位元遮罩,可選用性地儲存在源/目的向量暫存器1970中,按照儲存在源/目的向量暫存器1970之對應元素中的移位計數重新對齊(例如,藉由移位設備1905)。
圖19B說明用於執行提供SIMD向量分組元組交叉比較功能之指令之設備1902的替代實施例。設備1902的實施例可以是管線400的一部分(例如,執行級416)或核心490的一部分(例如,執行單元462),用於執行提供SIMD向量分組元組交叉比較功能的指令。設備1902的一些實施例包含分組元組比較設備1904,其包括控制邏輯1940與比較器陣列1944,及選用的移位設備1906,其包括移位器1960、1961、1962、及1963等。設備1902的實施例可與解碼級(例如,解碼級406)或解碼器(例如,解碼單元440)耦接,用以解碼用於SIMD向量分組元組交叉比較的指令,其允許有效的向量位址衝突解法。一或多個執行單元(例如,執行設備1902)回應被解碼的指令,為儲存在向量暫存器1910中之n個資料欄位之每一部分(例如,4元組)之資料欄位中的每一個元素,比較該元素與代表向量1920之n個資料欄位之向量暫存器或記憶體儲存器組之對應部分(例如,4元組)的每一 個元素。設備1902的實施例可與包含可變之複數n個大小可變之資料欄位的向量暫存器(例如,實體暫存器檔案單元458)耦接,用以儲存可變之複數n個大小可變之資料元素的值。在目的向量暫存器1970中,設備1902按照所實施之對應的比較(例如,即時運算元1930所指定),在與對應之暫存器1910部分的每一個未遮罩元素對應的位元遮罩中,設定對應於向量1920部分之每一個元素的遮罩位元,並將目的暫存器中的任何其它位元(例如,位元遮罩中的較有效位元)設定成零值。在一些實施例中,與向量暫存器1910之元素對應的所有位元遮罩可儲存在目的向量暫存器1970中,與向量暫存器1910中它們的對應元素的最低有效位元對齊。在一些替代的實施例中,與第一向量暫存器1910之元素對應的位元遮罩,可選用性地儲存在源/目的向量暫存器1970中,按照儲存在源/目的向量暫存器1970之對應元素中的移位計數重新對齊(例如,藉由移位設備1906)。
使用SIMD向量分組元組比較指令允許可變之複數n個大小可變之資料元素包括有符號或無符號的封裝位元組(8位元)、字(16位元)、雙倍字(32位元)、或4倍字(64位元)。可以理解,SIMD向量分組元組比較指令比向量衝突指令具有更通用的適用性(例如,當各種不同的比較運算其中任一何一種有用時),且就面積與功耗而論,所需的實施成本低於交叉比較所有元素之指令。
本文所揭示之機制的實施例可在硬體、軟體、韌體、 或這些實施方法的組合中實施。本發明的實施例可用能在可程式系統上執行的電腦程式或程式碼來實施,該系統包含至少一個處理器、儲存系統(包括揮發性與非揮發性記憶體及/或儲存單元)、至少一個輸入裝置、及至少一個輸出裝置。
程式碼可施加於輸入指令以實施本文所描述的功能並產生輸出資訊。該輸出資訊可按已知的方式施加於一或多個輸出裝置。基於此應用之目的,處理系統包括具有處理器的任何系統,例如,諸如數位信號處理器(DSP)、微控制器、特殊用途積體電路(ASIC)、或微處理器。
程式碼可在高階程序或物件導向程式語言中實施,以與處理系統通訊。如有需要,程式碼也可在組合或機器語言中實施。事實上,本文所描述的機制並不限定於任何特定程式語言的範圍。無論如何,語言是經編譯或解譯的語言。
至少一實施例的一或多個態樣可藉由儲存在機器可讀取媒體中的代表指令來實施,其代表處理器內的各種邏輯,當被機器讀取時,致使機器製造用來實施本文所描述之技術的邏輯。此種表示法為習知的“IP核心”,可儲存在實體的機器可讀取媒體上,並供應給各不同之客戶或製造工廠,用以載入到實際製造邏輯或處理器的製造機具內。
此等機器可讀取儲存媒體可包括但不限於由機器或裝置所製造或形成之物件的非暫時性實體配置,包括諸如硬碟的儲存媒體;任何其它類型的碟片,包括軟碟、光碟、 唯讀光碟記憶體(CD-ROM)、可覆寫光碟(CD-RW)、及磁光碟;半導體裝置,諸如唯讀記憶體(ROM)、隨機存取記憶體(RAM),諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式唯讀記憶體(EPROM)、快閃記憶體、電可抹除可程式唯讀記憶體(EEPROM);磁或光卡;或適合儲存電子指令之任何其它類型的媒體。
因此,本發明的實施例也包括包含指令或包含設計資料的非暫時性實體機器可讀取媒體,諸如硬體描述語言(Hardware Description Language;HDL),其定義本文所描述的結構、電路、設備、處理器、及/或系統特徵。此等實施例也稱為程式產品。
在一些情況中,會使用指令轉換器將指令從源指令集轉換到目標指令集。例如,指令轉換器可轉譯(例如,使用靜態二元轉譯、包括動態編譯的動態二元轉譯)、變形、仿真、或以其它方式將指令轉換成可供核心處理的一或多個其它指令。指令轉換器可在軟體、硬體、韌體、或它們的組合中實施。指令轉換器可位在處理器上、處理器外部、或部分在處理器上部分在處理器外部。
因此,本文揭示了用於實施按照至少一實施例之一或多個指令的技術。雖然已描述了一些例示性實施例並顯示於附圖中,但須瞭解,此等實施例僅是說明本發明,並非對本發明的限制,且本發明並不限於本文所顯示與描述之特定的構造與配置,因為熟悉一般技藝者在研究了本揭示 之後,可做出各種其它的修改。諸如本發明之領域的技術,成長快速且未來的進步很難預見,隨著技術進步所帶來的助益,使得所揭示之實施例的配置與細節很容易修改,不會偏離本發明之原理或所附申請專利範圍的範圍。
100‧‧‧系統
102‧‧‧處理器
104‧‧‧內部快取記憶體
106‧‧‧暫存器檔案
108‧‧‧執行單元
109‧‧‧封裝的指令集
110‧‧‧處理器匯流排
112‧‧‧繪圖卡
114‧‧‧加速繪圖埠互連
116‧‧‧系統邏輯晶片
118‧‧‧高頻寬的記憶體路徑
120‧‧‧記憶體
122‧‧‧系統輸入/輸出
124‧‧‧資料儲存裝置
126‧‧‧無線收發器
128‧‧‧韌體集線器
130‧‧‧輸入/輸出控制器集線器
134‧‧‧網路控制器

Claims (28)

  1. 一種處理器,包含:第一向量暫存器,用以在第一複數n個資料欄位的每一個中儲存資料類型的元素;第二向量暫存器或記憶體儲存器組,用以在對應於該第一複數n個資料欄位的第二複數n個資料欄位的每一個中儲存該資料類型的元素;解碼級,用以解碼指定向量分組元組交叉比較運算及元組大小的指令,其中該第一向量暫存器包含第一複數元組大小部分,其中該第一複數元組大小部分的每一個包含該第一複數n個資料欄位中的多個,其中該第二向量暫存器或記憶體儲存器包含第二複數元組大小部分,其中該第二複數元組大小部分的每一個包含該第二複數n個資料欄位中的多個,並且其中該第一複數元組大小部分的每一個對應於該第二複數元組大小部分中的一個;以及一或多個執行單元,回應該解碼的指令與針對該第一複數元組大小部分之中的第一部分和對應於該第一部分的該第二複數元組大小部分之中的第二部分的每一個,用以:為該第一部分中的每一個資料欄位,將儲存在該資料欄位中的該元素與該第二部分的每一個元素進行比較,以及按照該對應的比較,在與該第一部分之該元素對應的位元遮罩中,設定與該第二部分之每一個元素對應的遮罩位元。
  2. 如申請專利範圍第1項之處理器,其中,用於該向量分組元組交叉比較運算之比較的類型係由該指令所指定的即時運算元所指示。
  3. 如申請專利範圍第2項之處理器,其中,用於該向量分組元組交叉比較運算之該比較的類型包含等於、小於、小於或等於、假、不等於、不小於、不小於或等於、或真。
  4. 如申請專利範圍第1項之處理器,其中,該元組大小為2,其中該第一複數元組大小部分包含該第一複數n個資料欄位的對,其中該第二複數元組大小部分包含該第二複數n個資料欄位的對,並且其中該向量分組元組交叉比較運算包含向量分組雙倍交叉比較運算,用於將該第一複數n個資料欄位的該對與該第二複數n個資料欄位的該對中之對應一個進行交叉比較。
  5. 如申請專利範圍第1項之處理器,其中,該元組大小為4,其中該第一複數元組大小部分包含該第一複數n個資料欄位中的4個元組,其中該第二複數元組大小部分包含該第二複數n個資料欄位中的4個元組,並且其中該向量分組元組交叉比較運算包含向量分組四倍交叉比較運算,用於將該第一複數n個資料欄位的該4個元組與該第二複數n個資料欄位的該4個元組中之對應一個進行交叉比較。
  6. 如申請專利範圍第1項之處理器,其中,該元組大小為8,其中該第一複數元組大小部分包含該第一複數 n個資料欄位中的8個元組,其中該第二複數元組大小部分包含該第二複數n個資料欄位中的8個元組,並且其中該向量分組元組交叉比較運算包含向量分組八倍交叉比較運算,用於將該第一複數n個資料欄位的該8個元組與該第二複數n個資料欄位的該8個元組中之對應一個進行交叉比較。
  7. 如申請專利範圍第1項之處理器,其中,n係64。
  8. 如申請專利範圍第1項之處理器,其中,n係32。
  9. 如申請專利範圍第1項之處理器,其中,n係16。
  10. 如申請專利範圍第1項之處理器,其中,n係8。
  11. 如申請專利範圍第1項之處理器,其中,該第一複數n個資料欄位的每一個係8位元。
  12. 如申請專利範圍第1項之處理器,其中,該第一複數n個資料欄位的每一個係16位元。
  13. 如申請專利範圍第1項之處理器,其中,對應於該第二部分之每一個元素的一些遮罩位元包含2個位元。
  14. 如申請專利範圍第1項之處理器,其中,對應於該第二部分之每一個元素的一些遮罩位元包含4個位元。
  15. 如申請專利範圍第1項之處理器,其中,對應於該第二部分之每一個元素的一些遮罩位元包含8個位元。
  16. 如申請專利範圍第1項之處理器,其中,該指令指定遮罩暫存器運算元,該運算元具有一位元用以分別指示該第一複數n個資料欄位之每一個資料欄位是被遮罩或未被遮罩。
  17. 一種用於提供向量分組元組交叉比較之方法,包含:將資料類型的元素儲存到第一向量暫存器之第一複數n個資料欄位的每一個中;將該資料類型的元素儲存到對應於該第一複數n個資料欄位的第二向量暫存器之第二複數n個資料欄位的每一個中;在處理器中執行用於向量分組元組交叉比較的單指令多資料(SIMD)指令,其中該第一向量暫存器包含第一複數元組大小部分,其中該第一複數元組大小部分的每一個包含該第一複數n個資料欄位中的多個,其中該第二向量暫存器或記憶體儲存器包含第二複數元組大小部分,其中該第二複數元組大小部分的每一個包含該第二複數n個資料欄位中的多個,並且其中該第一複數元組大小部分的每一個對應於該第二複數元組大小部分中的一個;以及針對該第一複數元組大小部分之中的第一部分和對應於該第一部分的該第二複數元組大小部分之中的第二部分的每一個:為該第一部分中的每一個資料欄位,將儲存在該資料欄位中的該元素與該第二部分的每一個元素進行比較,以 及按照該對應的比較,在與該第一部分之該元素對應的位元遮罩中,設定與該第二部分之每一個元素對應的遮罩位元。
  18. 如申請專利範圍第17項之方法,其中,該第一部分的每一個元素係隱性地未被遮罩以供比較。
  19. 如申請專利範圍第17項之方法,其中,遮罩暫存器的一些位元被設定成1或0,以分別地顯性指示該第一暫存器之對應元素係未被遮罩或被遮罩的以供比較。
  20. 如申請專利範圍第17項之方法,其中,該元組大小為2,並且其中該第一部分與該第二部分各包含2個資料欄位。
  21. 如申請專利範圍第17項之方法,其中,該元組大小為4,並且其中該第一部分與該第二部分各包含4個資料欄位。
  22. 如申請專利範圍第17項之方法,其中,該元組大小為8,並且其中該第一部分與該第二部分各包含8個資料欄位。
  23. 一種處理系統,包含:記憶體;以及複數個處理器,各包含:第一向量暫存器,用以在第一複數n個資料欄位的每一個中儲存資料類型的元素;第二向量暫存器或記憶體儲存器組,用以在對應於該第一複數n個資料欄位的第二複數n個資料欄位的每一個 中儲存該資料類型的元素;解碼級,用以解碼指定向量分組元組交叉比較運算及元組大小的指令,其中該第一向量暫存器包含第一複數元組大小部分,其中該第一複數元組大小部分的每一個包含該第一複數n個資料欄位中的多個,其中該第二向量暫存器或記憶體儲存器包含第二複數元組大小部分,其中該第二複數元組大小部分的每一個包含該第二複數n個資料欄位中的多個,並且其中該第一複數元組大小部分的每一個對應於該第二複數元組大小部分中的一個;以及一或多個執行單元,回應該解碼的指令與針對該第一複數元組大小部分之中的第一部分和對應於該第一部分的該第二複數元組大小部分之中的第二部分的每一個,用以:為該第一部分中的每一個資料欄位,將儲存在該資料欄位中的該元素與該第二部分的每一個元素進行比較,以及按照該對應的比較,在與該第一部分之該元素對應的位元遮罩中,設定與該第二部分之每一個元素對應的遮罩位元。
  24. 如申請專利範圍第23項之處理系統,其中,用於該向量分組元組交叉比較運算之比較的類型係由該指令所指定的即時運算元來指示。
  25. 如申請專利範圍第24項之處理系統,其中,用於該向量分組元組交叉比較運算之比較的類型包含等於、小於、小於或等於、假、不等於、不小於、不小於或等 於、或真。
  26. 如申請專利範圍第23項之處理系統,其中,該元組大小為2,其中該第一複數元組大小部分包含該第一複數n個資料欄位的對,其中該第二複數元組大小部分包含該第二複數n個資料欄位的對,並且其中該向量分組元組交叉比較運算包含向量分組雙倍交叉比較運算,用以將該第一複數n個資料欄位的該對與該第二複數n個資料欄位的該對中之對應一個進行交叉比較。
  27. 如申請專利範圍第23項之處理系統,其中,該元組大小為4,其中該第一複數元組大小部分包含該第一複數n個資料欄位中的4個元組,其中該第二複數元組大小部分包含該第二複數n個資料欄位中的4個元組,並且其中該向量分組元組交叉比較運算包含向量分組四倍交叉比較運算,用以將該第一複數n個資料欄位的該4個元組與該第二複數n個資料欄位的該4個元組中之對應一個進行交叉比較。
  28. 如申請專利範圍第23項之處理系統,其中,該元組大小為8,其中該第一複數元組大小部分包含該第一複數n個資料欄位中的8個元組,其中該第二複數元組大小部分包含該第二複數n個資料欄位中的8個元組,並且其中該向量分組元組交叉比較運算包含向量分組八倍交叉比較運算,用以將該第一複數n個資料欄位的該8個元組與該第二複數n個資料欄位的該8個元組中之對應一個進行交叉比較。
TW104139445A 2014-12-31 2015-11-26 用於提供向量分組元組交叉比較功能的方法、處理器和處理系統 TWI610233B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/588,247 US10203955B2 (en) 2014-12-31 2014-12-31 Methods, apparatus, instructions and logic to provide vector packed tuple cross-comparison functionality
US14/588,247 2014-12-31

Publications (2)

Publication Number Publication Date
TW201643707A TW201643707A (zh) 2016-12-16
TWI610233B true TWI610233B (zh) 2018-01-01

Family

ID=56164261

Family Applications (1)

Application Number Title Priority Date Filing Date
TW104139445A TWI610233B (zh) 2014-12-31 2015-11-26 用於提供向量分組元組交叉比較功能的方法、處理器和處理系統

Country Status (9)

Country Link
US (1) US10203955B2 (zh)
EP (1) EP3241120B1 (zh)
JP (1) JP6745022B2 (zh)
KR (1) KR102472894B1 (zh)
CN (1) CN107003854B (zh)
BR (1) BR112017011515A2 (zh)
SG (1) SG11201704466QA (zh)
TW (1) TWI610233B (zh)
WO (1) WO2016109170A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10228941B2 (en) * 2013-06-28 2019-03-12 Intel Corporation Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
CN111176608A (zh) * 2016-04-26 2020-05-19 中科寒武纪科技股份有限公司 一种用于执行向量比较运算的装置和方法
US20190155603A1 (en) * 2016-07-27 2019-05-23 Intel Corporation System and method for multiplexing vector compare
US10564964B2 (en) * 2016-08-23 2020-02-18 International Business Machines Corporation Vector cross-compare count and sequence instructions
WO2018182445A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements
TWI626548B (zh) * 2017-03-31 2018-06-11 東森信息科技股份有限公司 資料收集與儲存系統及其方法
US11442726B1 (en) 2021-02-26 2022-09-13 International Business Machines Corporation Vector pack and unpack instructions
KR102370851B1 (ko) * 2021-08-18 2022-03-07 주식회사 로그프레소 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200802083A (en) * 2005-11-22 2008-01-01 Intel Corp Technique for setting a vector mask
TW200805146A (en) * 2006-02-06 2008-01-16 Via Tech Inc Instruction set encoding in a dual-mode computer processing environment
US20080077773A1 (en) * 2006-09-22 2008-03-27 Julier Michael A Instruction and logic for processing text strings
US20110150501A1 (en) * 2009-12-23 2011-06-23 Syndiant, Inc. Spatial light modulator with masking-comparators

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100274988A1 (en) 2002-02-04 2010-10-28 Mimar Tibet Flexible vector modes of operation for SIMD processor
US7725687B2 (en) * 2006-06-27 2010-05-25 Texas Instruments Incorporated Register file bypass with optional results storage and separate predication register file in a VLIW processor
US8078847B2 (en) * 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US8984262B2 (en) * 2008-08-15 2015-03-17 Apple Inc. Generate predicates instruction for processing vectors
US8023299B1 (en) * 2009-04-09 2011-09-20 Netlogic Microsystems, Inc. Content addressable memory device having spin torque transfer memory cells
US8959270B2 (en) * 2010-12-07 2015-02-17 Apple Inc. Interrupt distribution scheme
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US8892622B2 (en) * 2011-04-07 2014-11-18 Oracle International Corporation Pipelined divide circuit for small operand sizes
CN103959237B (zh) 2011-11-30 2016-09-28 英特尔公司 用于提供向量横向比较功能的指令和逻辑
CN104011646B (zh) 2011-12-22 2018-03-27 英特尔公司 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
US10678541B2 (en) * 2011-12-29 2020-06-09 Intel Corporation Processors having fully-connected interconnects shared by vector conflict instructions and permute instructions
CN104011653B (zh) 2011-12-29 2017-09-15 英特尔公司 打包数据操作掩码比较处理器、方法、系统
US9459864B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US20140281418A1 (en) 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
CN105573962B (zh) 2013-03-15 2018-10-16 甲骨文国际公司 单指令多数据处理器与相关方法
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200802083A (en) * 2005-11-22 2008-01-01 Intel Corp Technique for setting a vector mask
TW200805146A (en) * 2006-02-06 2008-01-16 Via Tech Inc Instruction set encoding in a dual-mode computer processing environment
US20080077773A1 (en) * 2006-09-22 2008-03-27 Julier Michael A Instruction and logic for processing text strings
US20110150501A1 (en) * 2009-12-23 2011-06-23 Syndiant, Inc. Spatial light modulator with masking-comparators

Also Published As

Publication number Publication date
JP6745022B2 (ja) 2020-08-26
TW201643707A (zh) 2016-12-16
JP2018504667A (ja) 2018-02-15
WO2016109170A1 (en) 2016-07-07
EP3241120B1 (en) 2020-07-08
SG11201704466QA (en) 2017-07-28
KR102472894B1 (ko) 2022-12-02
KR20170102865A (ko) 2017-09-12
US20160188336A1 (en) 2016-06-30
BR112017011515A2 (pt) 2018-02-27
CN107003854B (zh) 2021-10-15
EP3241120A1 (en) 2017-11-08
US10203955B2 (en) 2019-02-12
EP3241120A4 (en) 2018-08-22
CN107003854A (zh) 2017-08-01

Similar Documents

Publication Publication Date Title
US10452398B2 (en) Methods, apparatus, instructions and logic to provide permute controls with leading zero count functionality
KR101790428B1 (ko) 조건부 루프들을 벡터화하기 위한 명령어들 및 로직
KR101555412B1 (ko) 벡터 압축 및 회전 기능 제공 명령어 및 로직
KR101767025B1 (ko) 벡터 어드레스 충돌 검출 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
US20170357514A1 (en) Instruction and logic to provide vector scatter-op and gather-op functionality
US10037205B2 (en) Instruction and logic to provide vector blend and permute functionality
TWI610233B (zh) 用於提供向量分組元組交叉比較功能的方法、處理器和處理系統
US10528345B2 (en) Instructions and logic to provide atomic range modification operations
WO2013048369A1 (en) Instruction and logic to provide vector load-op/store-op with stride functionality
WO2013048367A9 (en) Instruction and logic to provide vector loads and stores with strides and masking functionality

Legal Events

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