TW201732547A - 用於載入索引及預取散佈運算的邏輯和指令 - Google Patents

用於載入索引及預取散佈運算的邏輯和指令 Download PDF

Info

Publication number
TW201732547A
TW201732547A TW105137283A TW105137283A TW201732547A TW 201732547 A TW201732547 A TW 201732547A TW 105137283 A TW105137283 A TW 105137283A TW 105137283 A TW105137283 A TW 105137283A TW 201732547 A TW201732547 A TW 201732547A
Authority
TW
Taiwan
Prior art keywords
memory
instruction
index value
index
location
Prior art date
Application number
TW105137283A
Other languages
English (en)
Other versions
TWI725073B (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 TW201732547A publication Critical patent/TW201732547A/zh
Application granted granted Critical
Publication of TWI725073B publication Critical patent/TWI725073B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3555Indexed addressing using scaling, e.g. multiplication of index
    • 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/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

處理器包括執行單元用以執行指令以從索引陣列載入索引,可選地執行散佈,以及從記憶體中的任意位置預取(到特定的快取)用於未來散佈之目標位置的內容。執行單元包括邏輯,用以對於散佈或預取操作的每個目標位置,載入將被用於計算用於該操作的記憶體中的位址之索引值。索引值可以從用於指令所識別之索引陣列來檢索出。執行單元包括邏輯,用以基於用於指令指定的基底位址的總和來計算位址,對於所述位置檢索所述索引值,以及具有可選定標的預取偏移(用於預取操作)。執行單元包括邏輯,用以從將被散佈至記憶體的指令指定的來源向量暫存器中的連續位置來檢索資料元件。

Description

用於載入索引及預取散佈運算的邏輯和指令
本發明與處理邏輯、微處理器和相關聯的指令集體系結構的領域相關聯,當相關的指令由處理器或其它處理邏輯執行時,執行邏輯、數學或其他功能的運算。
多處理器系統將變得越來越普遍。多處理器系統的應用包括動態域名劃分一路至桌上型電腦計算。為了利用多處理器系統,將要執行的碼可藉由各種處理實體被分成用於執行的多個執行緒。每個執行緒可以彼此平行執行。在處理器上接收到的指令可能被解碼為術語或是本體的、或多個本體的指令字,用於在處理器上執行。處理器可以在一晶片上系統來實現。藉由儲存在陣列中的索引而對記憶體的間接讀寫存取可被用於密碼學、圖的遍歷、排序、以及稀疏矩陣應用。
100‧‧‧系統
102‧‧‧處理器
104‧‧‧快取
106‧‧‧暫存器檔
108‧‧‧執行單元
109‧‧‧緊縮指令集
110‧‧‧處理器匯流排
112‧‧‧圖形控制器
114‧‧‧互連
116‧‧‧記憶體控制器集線器
118‧‧‧高頻寬記憶體路徑
119‧‧‧指令
120‧‧‧記憶體
121‧‧‧資料
122‧‧‧系統I/O
123‧‧‧傳統的I/O控制器
124‧‧‧資料儲存
125‧‧‧使用者輸入介面
126‧‧‧無線收發器
127‧‧‧序列擴展埠
128‧‧‧韌體集線器(快閃BIOS)
129‧‧‧音頻控制器
130‧‧‧I/O控制器集線器(ICH)
134‧‧‧網路控制器
140‧‧‧資料處理系統
141‧‧‧匯流排
142‧‧‧執行單元
143‧‧‧緊縮指令集
144‧‧‧解碼器
145‧‧‧暫存器檔
146‧‧‧同步動態隨機存取記憶體(SDRAM)控制
147‧‧‧靜態隨機存取記憶體(SRAM)控制
148‧‧‧叢發快閃記憶體介面
149‧‧‧個人電腦記憶卡國際協會(PCMCIA)/緊密快閃 (CF)卡控制
150‧‧‧液晶顯示器(LCD)控制
151‧‧‧直接記憶體存取(DMA)控制器
152‧‧‧替代匯流排主介面
153‧‧‧I/O匯流排
154‧‧‧I/O橋
155‧‧‧通用異步接收器/傳輸器(UART)
156‧‧‧通用序列匯流排(USB)
157‧‧‧藍牙無線UART
158‧‧‧I/O擴充介面
159‧‧‧處理核心
160‧‧‧資料處理系統
161‧‧‧SIMD協同處理器
162‧‧‧執行單元
163‧‧‧指令集
164‧‧‧暫存器檔
165‧‧‧解碼器
166‧‧‧主要處理器
167‧‧‧快取記憶體
168‧‧‧輸入/輸出系統
169‧‧‧無線介面
170‧‧‧處理核心
200‧‧‧處理器
201‧‧‧前端
202‧‧‧快速排程器
203‧‧‧亂序執行引擎
204‧‧‧慢速/通用浮點排程器
205‧‧‧整數/浮點微運算佇列
206‧‧‧簡單浮點排程器
207‧‧‧記憶體微運算佇列
208‧‧‧整數暫存器檔
209‧‧‧記憶體排程器
210‧‧‧浮點暫存器檔
211‧‧‧執行方塊
212‧‧‧位址產生單元(AGU)
214‧‧‧AGU
216‧‧‧快速算術邏輯單元(ALU)
218‧‧‧快速ALU
220‧‧‧緩慢ALU
222‧‧‧浮點ALU
224‧‧‧浮點移動單元
226‧‧‧指令預取器
228‧‧‧指令解碼器
230‧‧‧跡線快取
232‧‧‧微碼ROM
234‧‧‧微運算佇列
310‧‧‧緊縮位元組
320‧‧‧緊縮字
330‧‧‧緊縮雙字(dword)
341‧‧‧緊縮半
342‧‧‧緊縮單
343‧‧‧緊縮雙
344‧‧‧無號緊縮位元組表示法
345‧‧‧有號緊縮位元組表示法
346‧‧‧無號緊縮字表示法
347‧‧‧有號緊縮字表示法
348‧‧‧無號緊縮雙字表示法
349‧‧‧有號緊縮雙元表示法
360‧‧‧格式
361、362‧‧‧欄位
363、373‧‧‧MOD欄位
364、365‧‧‧來源運算元識別符
366‧‧‧目的地運算元識別符
370‧‧‧格式
371、372、378‧‧‧欄位
374、375‧‧‧來源運算元識別符
376‧‧‧目的地運算元識別符
380‧‧‧格式
381‧‧‧條件欄位
382、389‧‧‧CDP運算碼欄位
383、384、387、388‧‧‧欄位
385、390‧‧‧來源運算元識別符
386‧‧‧目的地運算元識別符
400‧‧‧處理器管線
402‧‧‧擷取階段
404‧‧‧長度解碼階段
406‧‧‧解碼階段
408‧‧‧分配階段
410‧‧‧重新命名階段
412‧‧‧排程階段
414‧‧‧暫存器讀取/記憶體讀取階段
416‧‧‧執行階段
418‧‧‧寫回/記憶體寫入階段
422‧‧‧異常處理階段
424‧‧‧提交階段
430‧‧‧前端單元
432‧‧‧分支預測單元
434‧‧‧指令快取單元
436‧‧‧指令轉譯後備緩衝區(TLB)
438‧‧‧指令擷取單元
440‧‧‧解碼單元
450‧‧‧執行引擎單元
452‧‧‧重新命名/分配器單元
454‧‧‧退役單元
456‧‧‧排程器單元
458‧‧‧實體暫存器檔單元
460‧‧‧執行叢集
462‧‧‧執行單元
464‧‧‧記憶體存取單元
470‧‧‧記憶體單元
472‧‧‧資料TLB單元
474‧‧‧資料快取單元
476‧‧‧2階(L2)快取單元
490‧‧‧處理器核心
500‧‧‧處理器
502‧‧‧核心
506‧‧‧快取
508‧‧‧環式互連單元
510‧‧‧系統代理
512‧‧‧顯示引擎
514‧‧‧介面
516‧‧‧直接媒體介面(DMI)
518‧‧‧PICe橋
520‧‧‧記憶體控制器
522‧‧‧一致性邏輯
552‧‧‧記憶體控制單元
560‧‧‧圖形模組
565‧‧‧媒體引擎
570‧‧‧前端
572、574‧‧‧快取
580‧‧‧無序引擎
582‧‧‧分配模組
584‧‧‧資源排程器
586‧‧‧資源
588‧‧‧排序緩衝器
590‧‧‧模組
595‧‧‧LLC
599‧‧‧RAM
600‧‧‧系統
610、615‧‧‧處理器
620‧‧‧圖形記憶體控制器集線器(GMCH)
640‧‧‧記憶體
645‧‧‧顯示器
650‧‧‧輸入/輸出(I/O)控制器集線器(ICH)
660‧‧‧外部圖形裝置
670‧‧‧周邊裝置
700‧‧‧多處理器系統
714‧‧‧I/O裝置
716‧‧‧第一匯流排
718‧‧‧匯流排橋
720‧‧‧第二匯流排
722‧‧‧鍵盤及/或滑鼠
724‧‧‧音頻I/O
727‧‧‧通信裝置
728‧‧‧儲存單元
730‧‧‧指令/碼和資料
732‧‧‧記憶體
734‧‧‧記憶體
738‧‧‧高效能圖形電路
739‧‧‧高效能圖形介面
750‧‧‧點對點互連
752、754‧‧‧P-P介面
770、780‧‧‧處理器
772、782‧‧‧整合式記憶體控制器單元
776、778‧‧‧點對點(P-P)介面
786、788‧‧‧P-P介面
790‧‧‧晶片組
794、798‧‧‧點對點介面電路
796‧‧‧介面
800‧‧‧第三系統
814‧‧‧I/O裝置
815‧‧‧傳統I/O裝置
872、882‧‧‧控制邏輯
900‧‧‧SoC
902‧‧‧互連單元
908‧‧‧整合式圖形邏輯
910‧‧‧應用處理器
914‧‧‧整合式記憶體控制器單元
916‧‧‧匯流排控制器單元
920‧‧‧媒體處理器
924‧‧‧影像處理器
926‧‧‧音訊處理器
928‧‧‧視訊處理器
930‧‧‧靜態隨機存取記憶體(SRAM)單元
932‧‧‧直接記憶體存取(DMA)單元
940‧‧‧顯示單元
1000‧‧‧處理器
1005‧‧‧CPU
1010‧‧‧GPU
1015‧‧‧影像處理器
1020‧‧‧視訊處理器
1025‧‧‧USB控制器
1030‧‧‧UART控制器
1035‧‧‧SPI/SDIO控制器
1040‧‧‧顯示裝置
1045‧‧‧記憶體介面控制器
1050‧‧‧MIPI控制器
1055‧‧‧快閃記憶體控制器
1060‧‧‧雙資料率(DDR)控制器
1065‧‧‧安全引擎
1070‧‧‧I2S/I2C控制器
1100‧‧‧儲存器
1110‧‧‧硬體或軟體模型
1120‧‧‧模擬軟體
1140‧‧‧記憶體
1150‧‧‧有線連接
1160‧‧‧無線連接
1165‧‧‧製造工廠
1205‧‧‧程式
1210‧‧‧仿真邏輯
1215‧‧‧處理器
1302‧‧‧高階語言
1304‧‧‧x86編譯器
1306‧‧‧x86二進制碼
1308‧‧‧指令集編譯器
1310‧‧‧指令集二進制碼
1312‧‧‧指令轉換器
1314‧‧‧不含至少一個x86指令集核心的處理器
1316‧‧‧具有至少一個x86指令集核心的處理器
1400‧‧‧指令集架構
1406、1407‧‧‧核心
1408‧‧‧L2快取控制
1409‧‧‧匯流排介面單元
1410‧‧‧互連
1415‧‧‧圖形處理單元
1420‧‧‧視頻代碼
1425‧‧‧LCD視頻介面
1430‧‧‧訂戶介面模組(SIM)介面
1435‧‧‧開機ROM介面
1440‧‧‧同步動態隨機存取記憶體(SDRAM)控制器
1445‧‧‧快閃記憶體控制器
1450‧‧‧序列周邊介面(SPI)主單元
1460‧‧‧SDRAM晶片或模組
1465‧‧‧快閃記憶體
1470‧‧‧藍牙模組
1475‧‧‧高速3G數據機
1480‧‧‧全球定位系統模組
1485‧‧‧無線模組
1500‧‧‧指令集架構
1510‧‧‧單元
1511‧‧‧中斷控制和分配單元
1512‧‧‧偵聽控制單元
1513‧‧‧快取至快取轉移單元
1514‧‧‧偵聽器
1515‧‧‧定時器
1516‧‧‧AC埠
1520‧‧‧匯流排介面單元
1525‧‧‧快取
1530‧‧‧指令預取階段
1531‧‧‧選項
1532‧‧‧指令快取
1535‧‧‧分支預測單元
1536‧‧‧全域歷史
1537‧‧‧目標位址
1538‧‧‧返回堆疊
1540‧‧‧記憶體系統
1543‧‧‧預取器
1544‧‧‧記憶體管理單元(MMU)
1545‧‧‧轉譯後備緩衝器(TLB)
1546‧‧‧載入儲存單元
1550‧‧‧雙指令解碼階段
1555‧‧‧暫存器重新命名階段
1556‧‧‧暫存器池
1557‧‧‧分支
1560‧‧‧發行階段
1561‧‧‧指令佇列
1565‧‧‧執行實體
1566‧‧‧ALU/乘法單元(MUL)
1567‧‧‧ALU
1568‧‧‧浮點單位(FPU)
1569‧‧‧給定位址
1570‧‧‧寫回階段
1575‧‧‧追蹤單元
1580‧‧‧執行的指令指標
1582‧‧‧退役指標
1700‧‧‧電子裝置
1710‧‧‧處理器
1715‧‧‧記憶體單元
1720‧‧‧驅動器
1722‧‧‧BIOS/韌體/快閃記憶體
1724‧‧‧顯示器
1725‧‧‧觸控螢幕
1730‧‧‧觸控墊
1735‧‧‧高速晶片組(EC)
1736‧‧‧鍵盤
1737‧‧‧風扇
1738‧‧‧可信任平台模組(TPM)
1739‧‧‧熱感測器
1740‧‧‧感應器集線器
1741‧‧‧加速計
1742‧‧‧環境光感測器(ALS)
1743‧‧‧羅盤
1744‧‧‧陀螺儀
1745‧‧‧近場通訊(NFC)單元
1746‧‧‧熱感測器
1750‧‧‧無線區域網路(WLAN)單元
1752‧‧‧藍牙單元
1754‧‧‧照相機
1756‧‧‧無線廣域網路(WWAN)單元
1757‧‧‧SIM卡
1760‧‧‧數位信號處理器
1763‧‧‧揚聲器
1764‧‧‧耳機
1765‧‧‧麥克風
1800‧‧‧系統
1802‧‧‧指令串流
1804‧‧‧處理器
1806‧‧‧前端
1808‧‧‧指令擷取單元
1810‧‧‧解碼單元
1812‧‧‧核心
1814‧‧‧分配器
1816‧‧‧執行單元
1818‧‧‧退役單元
1820‧‧‧記憶體子系統
1822‧‧‧1階(L1)快取
1824‧‧‧2階(L2)快取
1830‧‧‧記憶體系統
1900‧‧‧處理器核心
1910‧‧‧SIMD協同處理器
1912‧‧‧SIMD執行單元
1914‧‧‧擴展向量暫存器檔
1915‧‧‧協同處理器匯流排
1916‧‧‧擴展SIMD指令集
1920‧‧‧主要處理器
1922‧‧‧解碼器
1924‧‧‧快取
1926‧‧‧暫存器檔
2102‧‧‧遮罩暫存器
2103‧‧‧資料元件位置
2104‧‧‧基底位址位置
2105‧‧‧索引陣列
2106‧‧‧第一索引值
2107‧‧‧第二索引值
2108‧‧‧最後索引值
2210、2211、2212、2213、2214、2215、2201、2202、 2203、2204、2205、2206‧‧‧列
2220‧‧‧遮罩暫存器
2101‧‧‧來源向量暫存器
2209‧‧‧位址
實施例是藉由示例的方式示出而並不限制在 附圖的圖式中:圖1A是根據本發明的實施例形成有處理器之示例性計算機系統的方框圖,其可包括執行單元用以執行指令;圖1B根據本發明的實施例示出資料處理系統;圖1C示出用於執行字串比較操作的資料處理系統的其它實施例;圖2是根據本發明的實施例之用於處理器的微架構方框圖,其可包括用以執行指令的邏輯電路;圖3A根據本發明的實施例示出在多媒體暫存器中的各種緊縮資料類型表示;圖3B根據本發明的實施例示出可能的暫存器內資料儲存格式;圖3C根據本發明的實施例示出在多媒體暫存器中的各種有號及無號的緊縮資料類型表示;圖3D示出運算編碼格式的實施例;圖3E根據本發明的實施例示出具有40或更多位元的另一種可能的運算編碼格式;圖3F根據本發明的實施例示出另一種可能的運算編碼格式;圖4A是根據本發明的實施例示出有序管線和暫存器重新命名階段、無序問題/執行管線的方框圖。
圖4B是根據本發明的實施例示出有序架構核 心和被包括在處理器中的暫存器重新命名邏輯、無序問題/執行邏輯的方框圖。
圖5A是根據本發明的實施例的處理器的方框圖;圖5B是根據本發明的實施例的核心的示例實施的方框圖;圖6是根據本發明的實施例的系統的方框圖;圖7是根據本發明的實施例的第二系統的方框圖;圖8是根據本發明的實施例的第三系統的方框圖;圖9示出根據本發明的實施例的片上系統的方框圖;圖10示出包含中央處理單元和圖形處理單元的處理器,其可執行至少一個指令;圖11是根據本發明的實施例的IP核心之展開的方框圖;圖12根據本發明的實施例示出第一類型的指令可藉由一不同類型的處理器進行仿真;圖13是根據本發明的實施例示出對比用以將在來源指令集中的二元指令轉換成在目標指令集中的二元指令的軟體轉換器之使用的方框圖;圖14是根據本發明的實施例的處理器之指令 集架構的方框圖;圖15是根據本發明的實施例的處理器之指令集架構的方框圖;圖16是根據本發明的實施例的用於處理器之指令集架構的執行管線的方框圖;圖17是根據本發明的實施例的用於利用處理器之電子裝置的方框圖;圖18是根據本發明實施例的用於指令和用於向量運算之邏輯的示例系統的說明,該向量運算用以從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權;圖19是根據本發明的實施例示出用以執行擴展的向量指令的處理器核心的方框圖;圖20是根據本發明的實施例示出示例擴展的向量暫存器檔的方框圖;圖21A是根據本發明實施例的用以執行從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權之運算的說明;圖21B是根據本發明實施例的用以執行從索引陣列載入索引、基於這些索引將元件散佈在稀疏記憶體、以及從記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權之運算的說明;圖22A是根據本發明的實施例示出示例 LoadIndicesandPrefetchScatter指令之運算的方框圖;圖22B是根據本發明的實施例示出示例LoadIndicesScatterandPrefetch指令之運算的方框圖;圖23是根據本發明實施例示出用於從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權之示例方法;圖24是根據本發明實施例的用以從索引陣列載入索引、基於這些索引將元件散佈在稀疏記憶體、以及從記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權之示例方法。
【發明內容與實施方式】
以下說明書內容描述在處理設備上用於執行從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權之指令和處理邏輯。這種處理設備可包括無序處理器。在下面的說明書內容中,許多具體的細節,例如處理邏輯、處理器類型、微架構的條件、事件、啟用機制等等是為了提供對本發明的實施例的更透徹理解所闡述。然而,對本發明領域中的通常知識者顯而易見的是本發明可在沒有這些具體細節的情況下實踐。此外,一些習知的結構、電路等等都沒有被詳細示出,以避免對本發明的實施例的不必要的混淆。
雖然下面的實施例是參照本發明的處理器描述的,其他實施例也適用於其他類型的積體電路和邏輯裝置。類似的技術和本發明的實施例的教示可被應用於其他類型的電路或半導體裝置,其可受益於較高的管線通量和增進的效能。本發明的實施例的教示可應用於執行資料操作的任何處理器或機器。然而,實施例不限於執行512位元、256位元、128位元、64位元、32位元、或16位元資料運算的處理器或機器,並且可以被應用於其中資料的操作或管理可被執行的任何處理器或機器。此外,下面的說明書內容提供了示例,並且附圖示出用於說明的目的的各種示例。然而,這些示例不應該被以限制性的意義解釋,因為它們僅旨在提供本發明內容的實施例的示例,而不是以提供對本發的實施例的所有可能的實施的詳盡的清單。
雖然以下示例描述在執行單元和邏輯電路的內文中指令處理和分配,本發明的其它實施例可以藉由儲存在機器可讀有形介質中的資料或指令來實現,當其藉由機器執行執行時,使機器執行與本發明的至少一個實施例一致的功能。在一個實施例中,與本發明的實施例相關聯的功能被體現在機器可執行指令中。此種指令可用於使可與指令編程之通用或專用處理器用以執行本發明的步驟。本發明內容的實施例可被提供作為電腦程式產品或軟體,其可以包括其上儲存有可用於編程電腦(或其它電子裝置)的指令之機器或電腦可讀介質,該些指令用以根據本 發明的實施例來執行一或多個運算。此外,本發明實施例的步驟可以由包含用於執行步驟之固定功能邏輯的特定硬體組件所執行,或由編程的電腦組件和固定功能之硬體組件的任何組合所執行。
用以執行本發明的實施例的用於編程邏輯的指令可以被儲存在系統中的記憶體內,例如DRAM、快取、快閃記憶體或其他儲存器。此外,指令可以經由網路或其他電腦可讀介質的方式進行分配。因此,機器可讀介質可包括用於以可由機器(例如電腦)讀取的形式儲存或傳送資訊的任何機構,但不限於,軟碟、光碟(optical disks)、唯讀記憶體光碟(CD-ROMs)、和磁光碟、唯讀記憶體(ROM)、隨機存取記憶體(RAM)、可擦除可編程唯讀記憶體(EPROM)、電可擦除可編程唯讀記憶體(EEPROM)、磁卡或光卡、快閃記憶體、或經由電、光、聲或其它形式的傳播信號(例如,載波、紅外線信號、數位信號等)在網際網路上的資訊傳送中使用的有形的、機器可讀的儲存器。因此,電腦可讀介質可包括適用於可由機器(例如電腦)可讀的形式儲存或傳送電子指令或資訊的任何類型的有形的機器可讀介質。
一個設計可能會經歷不同階段,從創造到模擬到製造。表示設計的資料可以以多種方式表示該設計。首先,如可能在模擬中有用的,硬體可使用硬體描述語言或另一種功能描述語言來表示。此外,具有邏輯及/或電晶體閘的電路級別模型可在設計過程的某些階段產生。此 外,在某些階段,設計可達到表示硬體模型中的各種裝置的物理置放的資料的級別。在一些半導體製造技術被使用的情況下,表示硬體模型的資料可以是指定被用於生產積體電路的遮罩的不同遮罩層上的各種特徵之存在或不存在的資料。在設計的任何表示中,資料可以以任何機器可讀介質的形式被儲存。如碟片的記憶體或者磁或光學的儲存器可以是用以儲存經由光或電波調變傳送的資訊或以其他方式被產生以傳送這樣的資訊。當指示或攜帶代碼或設計的電載波被傳輸以複製、緩衝或進行電信號的重發的程度,可以做出新的複製。因此,通訊提供商或網路提供商可以儲存在有形的、機器可讀介質上,至少是暫時的一種物品,像是編碼成載波、體現本發明的實施例的技術之資訊。
在現代的處理器中,可以使用多個不同的執行單元以處理和執行各種代碼和指令。有些指令可能會更快完成,有些可能需要一些時脈週期來完成。指令的通量越快,該處理器的整體校能越好。因此,越可能快速執行越多指令是有利的。然而,可能存在具有更大的複雜性且需要更多的執行時間和處理器資源的某些指令,諸如浮點指令、載入/儲存運算、資料移動等等。
隨著越來越多的電腦系統被用於網際網路、文字和多媒體應用,已經採用額外的處理器支持一段時間。在一個實施例中,指令集可與一或多個電腦架構相關,其包括本地資料類型、指令、暫存器架構、定址模 式、記憶體架構、中斷和異常處理以及外部輸入和輸出(I/O)。
在一個實施例中,指令集架構(ISA)可以由一或多個微架構實施,其可包括用於實現一或多個指令集的處理器邏輯和電路。因此,具有不同的微架構的處理器可以共享共同指令集的至少一部分。例如,Intel® Pentium 4處理器、Intel® CoreTM處理器、以及來自加州的桑尼維爾的進階微裝置(Advanced Micro Devices)的處理器,實施幾乎相同的版本的x86指令集(已經加入新版本的一些擴展),但有不同的內部設計。同樣地,由其它處理器發展公司,如ARM控股有限公司、MIPS或他們的被授權者或採用者,所設計的處理器可以共享共同指令集的至少一部分,但可包括不同的處理器設計。例如,ISA相同的暫存器架構可以使用新的或習知技術以不同的微架構、不同的方式來實施,包括專用的實體暫存器、使用暫存器重新命名機制的一或多個動態分配實體暫存器(例如,暫存器別名表(Register Alias Table,RAT)、重新排序緩衝器(Reorder Buffer,ROB)和退役暫存器檔)。在一個實施例中,暫存器可以包括一或多個暫存器、暫存器架構、暫存器檔、或者其他的暫存器集中,其可能或可能不是可由軟體編程定址的。
指令集可包括一或多個指令格式。在一個實施例中,指令格式可指示各種欄位(位元數、位元位置)以在其他事項之間指定將要被執行的運算和將要被執行的 運算上的運算元。在進一步的實施例中,一些指令格式可進一步藉由指令模板(或子格式)所定義。例如,給定的指令格式的指令模板可以被定義為具有指令格式的欄位的不同子集及/或定義為具有不同解譯的給定欄位。在一個實施例中,指令可使用指令格式(以及如果被定義,在該指令格式的指令模板中給定的一者之中)來表達,並指定或指示運算和將操作的運算之運算元。
科學、金融、自動向量通用、RMS(識別、挖掘和合成)以及視覺和多媒體應用(如2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻處理)可能需要要對大量的資料項執行相同的運算。在一個實施例中,單指令多資料(SIMD)指一種類型的指令,其使處理器對多個資料元件執行運算。SIMD技術可在處理器中使用,其可邏輯地將在暫存器中的位元劃分為多個固定大小或可變大小的資料元件,其每一個代表一個單獨的值。例如,在一個實施例中,64位元暫存器中的位元可被組織為包含四個獨立的16位元資料元件的來源運算元,其每一個代表一個單獨的16位元值。這種類型的資料可以被稱為"緊縮"資料類型或"向量"資料類型,且這種資料類型的運算元可以被稱為緊縮資料運算元或向量運算元。在一個實施例中,緊縮的資料項或向量可以是儲存在單一暫存器中的緊縮資料元件序列,且緊縮資料運算元或向量運算元可為SIMD指令的來源或目的地運算元(或"緊縮資料指令"或"向量指令")。在一個實施例中,SIMD 指令指定將在兩個來源向量運算元上執行的單一向量運算,用以利用相同或不同的資料元件,以及相同或不同的資料元件順序,產生相同或不同大小的目的地向量運算元(也可被稱為結果向量運算元)。
SIMD技術,如由具有包括x86、MMXTM、串流SIMD擴展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的Intel®CoreTM處理器、如具有包括包括向量浮點(VFP)及/或NEON指令的指令集ARM Cortex®系列的ARM處理器、和如由中國科學研究院的計算技術研組織(ICT)開發的Loongson系列處理器的MIPS處理器,已使應用效能顯著改善(CoreTM和MMXTM是加利福尼亞州聖克拉拉的英特爾公司的註冊商標或商標)。
在一個實施例中,目的地和來源暫存器/資料可以是通用術語,用以表示對應的資料或運算的來源和目的地。在一些實施例中,它們可藉由暫存器、記憶體或具有除了所描繪之外的其他名稱或功能的其他儲存區域。例如,在一個實施例中,“DEST1”可以是暫時的儲存暫存器或其他儲存區域,其中“SRC1”和“SRC2”可以是第一和第二來源儲存暫存器或其他儲存區域等等。在其他實施例中,兩個或更多的SRC和DEST儲存區域可對應於相同儲存區域內的不同資料儲存元件(例如SIMD暫存器)。在一個實施例中,來源暫存器中的一者也可作為目的地暫存器,其藉由例如寫回在第一和第二來源資料上執行的運算的結果至作為目的地暫存器的兩個來源暫存器的一者。
圖1A是根據本發明的實施例形成有處理器之示例性計算機系統的方框圖,其可包括執行單元用以執行指令。根據本發明實施例,像是此說明書中所描述的,系統100可包括組件,像是處理器102用以採用包括邏輯以執行用於處理資料之演算的邏輯的執行單元。系統100可基於來自加利福尼亞州聖克拉拉的英特爾公司的PENTIUM® III、PENTIUM® 4、XeonTM、Itanium®、XScaleTM及/或StrongARMTM微處理器的處理系統的代表,即使其他系統(包括具有其他微處理器、工程工作站、機上盒等的PC)也可被使用。在一個實施例中,樣本系統100可執行來自華盛頓州雷蒙德市的微軟公司的WINDOWSTM作業系統的版本,即使其他作業系統(例如UNIX和Linux)、嵌入式軟體及/或圖形使用者介面也可被使用。因此,本發明的實施例可不受限於硬體電路和軟體的任何特定組合。
實施例不限於電腦系統。本發明的實施例可以在其他裝置中使用,如手持設備和嵌入式應用。手持裝置的一些示例包括蜂窩電話、網路協議裝置、數位相機、個人數位助理(PDA)、和手持式個人電腦。根據至少一個實施例,嵌入式應用可以包括微控制器、數位信號處理器(DSP)、片上系統、網路電腦(NetPC)、機上盒、網路集線器、廣域網路(WAN)交換機、或者可以執行一個或多個指令的任何其他的系統。
根據本發明的一個實施例,電腦系統100可 包括處理器102,其可包括一或多個執行單元108用以執行演算法,用以執行至少一指令。一個實施例可以在單一處理器或台式機或伺服器系統的上下文中描述,但多處理器系統也可以包括其它實施例。系統100可以是"集線器"系統架構的示例。系統100可包括用於處理資料信號的處理器102。例如,處理器102可包括一個複雜指令集計算機(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實現指令集組合的處理器、或任何其它處理器裝置,如作為數位信號處理器。在一個實施例中,處理器102可以被耦合到處理器匯流排110,其可以在系統100中的處理器102和其他組件之間傳送資料信號。系統100的元件可以執行對於那些本發明領域的通常知識者習知的傳統功能。
在一個實施例中,處理器102可以包括1階(L1)的內部快取記憶體104。根據不同的架構中,處理器102可以具有單一內部快取或內部快取的多個級別。在另一個實施例中,快取記憶體可以位於處理器102的外部。根據特定的實施和需要,其它實施例還可以包括在內部和外部快取的組合。暫存器檔106可以儲存不同類型的各種暫存器,包括整數暫存器、浮點暫存器、狀態暫存器、和指令指標暫存器。
執行單元108包括邏輯用以實施整數和浮點樹運算,也存在於處理器102中。處理器102也可包括微碼(ucode)ROM,其儲存用於某些巨指令的微碼。在一 個實施例中,執行單元108可包括用以處理緊縮指令集109的邏輯。藉由將緊縮指令集109包括在通用處理器102中的指令集中,隨著用以執行該指令的相關聯電路,由許多多媒體應用使用的運算可在通用處理器102中使用緊縮資料來被執行。因此,多個多媒體應用可以藉由使用在緊縮資料上執行運算的處理器之資料匯流排的全寬度而被加速和更有效率的被執行。這可以消除需要跨處理器的資料匯流排傳輸的更小的資料單位以同時執行一或多個運算的一個資料元件。
執行單元108的實施例也可在微控制器、嵌入式處理器、圖形裝置、DSP和其他類型的邏輯電路中被使用。系統100也可包括記憶體120。記憶體120可以被實現為動態隨機存取記憶體(DRAM)裝置、靜態隨機存取記憶體(SRAM)裝置、快閃記憶體裝置、或其他記憶體裝置。記憶體120可以儲存可由處理器102所執行的指令119及/或由資料信號所表示的資料121。
系統邏輯晶片,116可以被耦接至處理器匯流排110和記憶體120。系統邏輯晶片116可包括記憶體控制器集線器(MCH)。處理器102可經由處理器匯流排110與MCH 116通訊。MCH 116可提供用於指令119和資料121之儲存和用於圖形、資料和紋理之儲存的至記憶體120的高頻寬記憶體路徑118。MCH 116可指示系統100中的處理器102、記憶體120和其他組件之間的資料信號以及用以橋接處理器匯流排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。示例可以包括音頻控制器129、韌體集線器(快閃BIOS)128、無線收發機126、資料儲存124、包含使用者輸入介面125(其可以包括鍵盤介面)、傳統的I/O控制器123、像是通用序列匯流排(USB)的序列擴展埠127和網路控制器134。資料儲存裝置124可包括硬碟驅動器、軟碟驅動器、CD-ROM裝置、快閃記憶體裝置、或其它大容量儲存裝置。
用於系統的另一個實施例,根據一個實施例的指令可以與片上系統使用。在片上系統的一個實施例包括處理器和記憶體。對於這樣的一個系統中的記憶體可以包括快閃記憶體。快閃記憶體可以與處理器和其他系統組件位於相同晶片上。此外,其他的邏輯區塊,例如記憶體控制器或圖形控制器也可以位於片上系統。
圖1B示出實施本發明的實施例的資料處理系 統140。本發明領域的通常知識者可以容易地理解本發明的實施例用替代的處理系統操作,而不背離本發明的實施例的範圍。
根據一個實施例,計算機系統140包括用於執行至少一個指令的處理核心159。在一個實施例中,處理核心159代表任意類型架構的處理單元,包括但不限於CISC、RIS或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匯流排153與各種I/O裝置通訊的I/O橋154。這樣的I/O裝置可以包括但不限於,例如,通用非同步接收器/發送器(UART)155、通用序列匯流排(USB)156、藍牙無線UART 157和I/O擴展介面158。
資料處理系統140的一個實施例提供用於手機的網路及/或無線通訊以及處理核心159,其可執行包括字串比較運算的SIMD運算。處理核心159可以與各種音頻、視頻、影像和包括如沃爾什-哈達瑪(Walsh-Hadamard)變換、快速傅立葉變換(fast Fourier transform,FFT)、離散餘弦變換(discrete cosine transform,DCT)、和它們各自的逆變換的各種離散變換之演算法來進行編程;例如色空間變換、視頻編碼的運動估計或視頻解碼的運動補償之壓縮/解壓縮技術;及例如脈衝編碼調變(PCM)之調變/解調變(MODEM)的功能。
圖1C示出執行字串比較運算的資料處理系統的其它實施例。在一個實施例中,資料處理系統160可包括主要處理器166、SIMD協同處理器161、快取記憶體167和輸入/輸出系統168。輸入/輸出系統168可選地可被耦接至無線介面169。根據一個實施例,SIMD協同處理器161可執行包括指令的運算。處理核心170適合以一或多種處理技術且藉由表示於機器可讀取媒體上的充分細節來製造,這些細節適合有助於製造包括處理核心170之所有或部分的資料處理系統160。
在一個實施例中,SIMD協同處理器161包含執行單元162與一組暫存器檔164。主處理器166的一實施例包含解碼器165,用以辨識指令集163之指令,其包括供執行單元162執行之按照一實施例的指令在其他實施例中,SIMD協同處理器161也包含解碼器165(如165B所示)的至少部分,用以解碼指令集163的指令。處理核心170也可包括額外電路(未示出)其對於本發明實施例的理解可能是不必要的。
運算時,主處理器166執行資料處理指令的串流,其控制一般類型的資料處理運算,包括與快取記憶體167、及輸入/輸出系統168的互動。SIMD協同處理器指令嵌入在資料處理指令的串流中。主處理器166的解碼器165辨識出這些SIMD協同處理器指令係應由附加的SIMD協同處理器161來執行的類型。因此,主處理器166在協同處理器匯流排171上發出這些SIMD協同處理 器指令(或代表SIMD協同處理器指令的控制信號)。從協同處理器匯流排171,這些指令可以通過任何附接的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處被準備供執行。亂序執行邏輯具有若干緩衝器用以平滑及重排序指令流,以最佳化當這些指令下到管線並取得供執行之排程時的性 能。配置器/暫存器重新命名器215中的配置器邏輯為每一個微運算配置為了執行所需的機器緩衝器與資源。配置器/暫存器重新命名器215中的暫存器重新命名邏輯將邏輯暫存器重新命名到暫存器檔中的登錄上。配置器215還對在兩個微運算佇列之一者中的每一個微運算分配一登錄,一個用於記憶體運算(記憶體微運算佇列207)和一個用於非記憶體運算(整數/浮點數微運算佇列205),在指令排程器之前:記憶體排程器209、快速排程器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。執行單元212、214、216、218、220、222、224可執行這些指令。執行方塊211可包括暫存器檔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也包括邏輯用來處置記憶體未命中。如果在資料快取中資料載入未命中,則有相關的運算以暫時的錯誤資料留置排程器在管線中運行。一重播機制追蹤並再執行使用錯誤資料的指令。僅相關的運算需要被重播且允許無關的運算完成。處理器之一實施例的排程器與重播機制也被設計來捕捉用於文字自字串比較運算的指令序列。
術語“暫存器”可意指機板上處理器的儲存位置,其被當成指令的一部分使用,用以識別運算元。換言之,暫存器是可從處理器外部使用的那些儲存位置(從程式設計者的觀點)。然而,在一些實施例中,暫存器不限於特定類型的電路。反之,暫存器可儲存資料、提供資料並實施本文所描述之功能。本文所描述的暫存器可藉由使用多種任何不同技術之處理器內的電路來實施,諸如專用的實體暫存器、使用暫存器重新命名之動態配置的實體暫存器、專用與動態配置之實體暫存器的組合等。在一實施 例中,整數暫存器儲存32位元的整數資料。一實施例的暫存器檔也包含用於緊縮資料的8個多媒體SIMD暫存器。一實施例的暫存器檔也包含用於封裝資料的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位元寬、或其它大小的運算元。本示例之緊縮字格式320係128位元長,且包含8個緊縮字資料元件。每一個緊縮字包含16位元的資訊。圖3A之緊縮雙字格式330係128位元長,且包含4個緊縮雙字資料元件。每一個緊縮雙字資料元件包含32位元的資訊。緊縮四字係128位元長,且包含2個緊縮四字資料元件。
圖3B根據本發明的實施例示出可能的暫存器內資料儲存格式。每一個緊縮資料可包括一個以上的獨立資料元件。在此說明3種緊縮的資料格式:緊縮半(packed half)341、緊縮單(packed single)342、及緊縮雙(packed double)343。緊縮半341、緊縮單342、及 緊縮雙343的一實施例包含固定點資料元件。一或多個緊縮半341、緊縮單342、及緊縮雙343的另一實施例可包含浮點資料元件。緊縮半341的一個實施例係128位元長,包含8個16位元的資料元件。緊縮單342的一個實施例係128位元長且包含4個32位元的資料元件。緊縮雙343的一實施例係128位元長且包含2個64位元的資料元件。可以理解的是,此緊縮資料格式可進一步擴展到其它的暫存器長度,例如,96位元、160位元、192位元、224位元、256位元或更多。
圖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包括暫存器/記憶體運算元定址模式,其對應於「IA-32英特爾架構軟體開發者手冊2A:指令集參考(IA-32 Intel Architecture Software Developer’s Manual Volume 2A:Instruction Set Reference)」中所描述之運算碼格式的類型,其可從全球通訊網(www)上之加州Santa Clara之英代爾公司的intel.com/design/litcentr處獲得。在一個實施例中,指令係由一或多個欄位361與362來編碼。每個指令多達兩個運算元位置可被識別,包括兩個來源運算元識別符364與365。在一個實施例中,目的地運算元識別符366與來源運算元識別符364相同,然而在其它實施例中它們則不相同。在另一個施例中,目的地運算元識別符366與來源運算元識別符365相同,然而在其它實施例中它們則不相同。在一個實施例中,被來源運算元識別符364與365識別的其中一個來源運算元被文字串流比較運算的結果覆寫,然而,在其他實施例中,識別符364對應於來源暫存器元件,及識別符365對應於目的地暫存器元件。在一個實施例中,運算元識別符364與365可用來識別32位元或64位元的來源與目的地運算元。
圖3E根據本發明的實施例示出具有40或更 多位元的另一種可能的運算編碼(運算碼,opcode)格式370。運算碼格式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根據本發明的實施例示出另一種可能的運算編碼(opcode)格式。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來編碼。
圖4A是根據本發明的實施例示出有序管線和暫存器重新命名階段、無序問題/執行管線的方框圖。圖4B是根據本發明的實施例示出有序架構核心和被包括在處理器中的暫存器重新命名邏輯、無序問題/執行邏輯的方框圖。圖4A中的實線方塊說明有序管線,而虛線方塊說明暫存器重新命名、亂序發出/執行管線。同樣地,圖4B中的實線方塊說明有序架構邏輯,而虛線方塊說明暫存器重新命名邏輯與亂序發出/執行邏輯。
在圖4A中,處理器管線400可包括擷取階段402、長度解碼階段404、解碼階段406、分配階段408、重新命名階段410、排程(也稱為調度或問題)階段 412、暫存器讀取/記憶體讀取階段414、執行階段416、寫回/記憶體寫入階段418、異常處理階段422、以及提交階段424。
在圖4B中,箭頭指示兩或多個單元之間的耦接,而箭頭方向指示這些單元之間資料流的方向。圖31B示出了包括耦合到執行引擎單元450的前端單元430之處理器核心490,並且兩個單元都可被耦接到記憶體單元470。
核心490可以是精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字組(VLIW)核心、或混合的或替代的核心類型。在一個實施例中,核心490可以是特殊用途核心,例如,諸如網路或通訊核心、壓縮引擎、繪圖核心、或類似物。
前端單元430包括耦接至指令快取單元434的分支預測單元432。指令快取單元434可被耦接至指令轉譯後備緩衝區(TLB)436。TLB 436可被耦接至指令擷取單元438,其耦接至解碼單元440。解碼單元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,它包括耦合到資料快取單元474的資料TLB單元472,該資料快取單元474耦合到2階(L2)快取單元474。在一個示例實施例中,記憶體存取單元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指令集(與已經添加較新的版本的一些擴展);加州桑尼維爾,MIPS科技的MIPS指令集;加州桑尼維爾,ARM控股的ARM指令集(具有可選的額外擴展像是NEON))。
須瞭解,核心可以各種方法支援多執行緒(執行兩或多個平行組的運算或執行緒)。多執行緒支援可藉由例如包括分時多執行緒、同時多執行緒(其中,單個實體核心提供邏輯核心給每一個執行緒,該實體核心係同時多執行緒)、或此兩者的組合來實施。這種組合可包括,例如,分時擷取與解碼,並於之後同時多執行緒,諸如Intel®的混合執行緒技術)
而暫存器重新命名可為描述在無序執行的上 下文中,但是應該理解的是,暫存器重新命名可以在有序結構中被使用。儘管所描述的處理器的實施例還包括分開的指令和資料快取單元43/474和共享的L2快取476,其他的實施例可具有用於指令和資料兩者的單一內部快取,像是,例如,1階(Level 1,L1)的內部快取,或多階的內部快取。在一些實施例中,系統可包括內部快取和對核心及/或處理器可為外部的外部快取的組合。在其他實施例中,所有的快取可以是對核心及/或處理器是外部的。
圖5A是根據本發明的實施例的處理器500的方框圖。在一個實施例中,處理器500可包括多核心處理器。處理器500可包括通訊地耦接至一或多個核心502的系統代理510。另外,核心502和系統代理510可以通訊地耦接到一個或多個快取506。核心502、系統代理510、和快取506可經由一個或多個記憶體控制單元552通訊地耦接。此外,核心502、系統代理510、和快取506可經由一個或多個記憶體控制單元552通訊地耦接至圖形模組552。
處理器500可以包括用於互連核心502、系統代理510、和快取506及圖形模組560的任何合適的機構。在一個實施例中,處理器500可包括環式互連單元508用以互連核心502、系統代理510、和快取506及圖形模組560。在其他實施例中,處理器500可包括任何數量之習知技術來互連這些單元環式互連單元508可利用記憶體控制單元552以便利互連。
處理器500可包括記憶階層,其包含核心內的一或多階快取、像是快取單元506的一或多個共享快取單元或耦接至一組整合式記憶體控制器單元552的外部記憶體(未顯示)。快取506可包括任何合適的快取。在一個實施例中,快取506可包括一或多個中階快取(例如,2階(L2)、3階(L3)、4階(L4)、或其他階的快取、最末階快取(LLC)、及/或它們的組合。
在各種不同的實施例中,一或多個核心502可實施多執行緒。系統代理510可包括用於協調和運行核心502的組件。系統代理單元510可包括例如電源控制單元(PCU)。PCU可以是或包括需要用於調節核心502的功率狀態的邏輯和組件。系統代理510可以包括用於驅動一或多個外部連接至顯示器或圖形模組560的顯示引擎512。系統代理510可以包括用於圖形之通訊匯流排的介面514。在一個實施方案中,介面514可藉由快速周邊組件互連(PCI Express,PCIe)來實現。在另一個實施方案中,介面514可藉由快速周邊組件互連圖形(PCI Express Graphic,PEG)來實現。系統代理510可以包括直接媒體介面(DMI)516。DMI 516可提供計算機系統的機板或其它部分上不同的橋之間的聯繫。系統代理510可包括用於提供到計算系統的其它元件的PCIe鏈接之PCIe橋518。PCIe橋518可以使用記憶體控制器520和一致性邏輯522來實施。
核心502可以以任何合適的方式來實現。核 心502可以對結構及/或指令集而言為同質或異質。在一個實施例中,一些核心502可以是按順序的,而其他可以是無序的。在另一個實施例中,兩個或多個核心502可以執行相同的指令集,而其他人可能僅執行該指令集或不同的指令集的一個子集。
處理器500可以是通用處理器,諸如可獲自加州Santa Clara之英代爾公司的CoreTM i3、i5、i7、2 Duo與Quad、XeonTM、ItaniumTM、XScaleTM、或StrongARMTM處理器。處理器500可被提供自其它公司,諸如ARM Holdings公司、MIPS等。處理器500可以是特殊用途處理器,例如,諸如網路或通訊處理器、壓縮引擎、圖形處理器、協同處理器、內嵌式處理器、或類似處理器。處理器500可以在一或多個晶片上實施。處理器500可以是一部分的及/或可以使用任意數量的製程技術而在一或多個基板上實施,像是,例如,BiCMOS、CMOS或NMOS。
在一個實施例中,快取506的給定的一者可由核心502的多者共享。在另一個實施例中,快取506的給定的一者可專用於核心502的一者。快取506對核心502的分配可以由快取控制器或其它合適的機構來處理。快取506的給定的一者可由兩個或多個核心502藉由實施一個給定的快取506的時間切割來共享。
圖形模組560可以實現一個整合的圖形處理子系統。在一個實施例中,圖形560可包括圖形處理器。 此外,圖形模組560可以包括媒體引擎565。媒體引擎565可提供媒體編碼和視頻解碼。
圖5B是根據本發明的實施例的核心502的示例實施的方框圖。核心502可以包括前端570通訊地耦接到無序的引擎580。核心502可以透過快取階層503通訊地耦接到處理器500的其它部分。
前端570可以以任何合適的方式來實現,如上所述的前端201之部分地或全部地。在一個實施例中,前端570可以透過快取503與處理器500的其它部分進行通訊。在進一步的實施例中,前端570可以擷取來自處理器500的部分的指令並且當它們被傳遞到無序執行引擎580時,準備稍後將在處理器管線中所使用的指令。
無序執行引擎580可以以任何合適的方式來實現,如上所述的無序執行引擎203之部分地或全部地。無序執行引擎580可準備從前端570所接收之指令以供執行。無序執行引擎580可包括分配模組。在一個實施例中,分配模組582可分配處理器500之資源或其它資源,例如,由暫存器或緩衝器,用以執行一個給定的指令。分配模組582可以在排程器中分配,比如記憶體排程器、快速排程器或浮點排程器。這樣的排程器可以藉由資源排程器584在圖5B中表示。分配模組582可以完全或部分藉由結合圖2所述的分配邏輯來實現。資源排程器584可基於給定的資源之來源準備就緒和執行所需資源的可用性來決定指令何時準備好執行。資源排程器584可以藉由,例 如,上述之排程器202、204、206來實現。資源排程器584可以依據一個或多個資源排程指令的執行。在一個實施例中,這種資源對於核心502為內部的,且可被說明,例如,作為資源586。在一個實施例中,這種資源對於核心502為內部的,且可為,例如快取階層503所存取。資源可以包括,例如,記憶體、快取、暫存器檔、或暫存器。對核心502的內部資源可由圖5B中的資源586所表示。如必要時,寫入或從資源586讀取的值可以透過例如,快取階層503,與處理器500的其他部分進行協調。當指令為被分配的資源,它們可以被放置到一重新排序緩衝器588中。排序緩衝器588可追蹤執行的指令,並可選擇性地基於處理器500的任何合適的標準來重新排序它們的執行。在一個實施例中,排序緩衝器588可識別的指令或一系列可獨立地執行的指令。這樣的指令或一系列指令可以與其他這樣的指令平行地執行。核心502中的平行執行可能是由任何合適數目之獨立的執行方塊或虛擬處理器的來執行。在一個實施例中,共享的資源,像是記憶體、暫存器、和快取,可以由給定的核心502內之多重虛擬處理器所存取。在其他實施例中,共享資源可對於處理器500內之多重處理實體是可存取的。
快取階層503可以以任何合適的方式來實現。例如,快取階層503可以包括一或多個低階或中階快取,例如快取572、574。在一個實施例中,快取階層503可以包括通訊地耦接到快取572、574的LLC 595。在另 一個實施例中,LLC 595可以在可存取處理器500的所有處理實體的模組590中所實現。在另一實施例中,模組590可以從英特爾公司的處理器的非核模組中實現。模組590可以包括處理器500的子系統或部分,為核心502的執行所必須,但可能不在核心502內被實施。此外,LLC 595、模組590可以包括,例如,硬體介面、記憶體一致性協調器、處理器間互連、指令管線、或記憶體控制器。對處理器500可用之RAM 599的存取可透過模組590以及,更具體地,LLC 595來達成。此外,核心502的其他實例可類似地存取模組590。芯502的實例的協調可部分透過模組590來促進。
圖6至8可示出適於包括處理器500的示例性系統,而圖9可示出一晶片上系統(SoC),其可以包括一或多個核心502。其他系統的設計和實施在本領域中習知為用於筆記型電腦、桌上型電腦、手持電腦、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位信號處理器(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。外部圖形裝置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。
而圖7可示出了兩個處理器770、780,但是應當理解,本發明的範圍並不限於此。在其他實施例中,一或多個額外處理器可存在於特定的處理器中。
所顯示的處理器770與780分別包括整合式記憶體控制器單元772與782。處理器770還包括作為其匯流排控制器單元點對點(P-P)介面776和778的一部分;同樣地,第二處理器780包括P-P介面786和788。處理器770和780可以經由點對點(P-P)介面750分別使用P-P介面電路778和788來交換資訊。如圖7所示,IMC 772與782將處理器耦接至各自的記憶體,即記憶體732與記憶體734,其可以是主記憶體之本地附接到各自處理器的一部分。
處理器770和780可各經由各別P-P介面752、754使用點對點介面電路776、794、786和798與晶片組790交換資訊。在一個實施例中,晶片組790也可經由高效能圖形介面739與高效能圖形電路738交換資訊。
共享快取(未示出)可以被包括在兩個處理器之外或任一處理器中,但未經由P-P互連與處理器連接,以使得如果處理器被置於低功率模式時,任一個或兩個處理器的本地快取資訊可被儲存在共享快取中。
晶片組790可以經由介面796耦合到第一匯流排716。在一個實施例中,第一匯流排716可以是周邊組件互連(PCI)匯流排、或像是PCI Express匯流排或另一種第三代I/O互連匯流排的匯流排,但是本發明的範圍並不局限於此。
如圖7所示,各種I/O裝置714可以被耦接到第一匯流排716,連同匯流排橋718,其耦接第一匯流排716到第二匯流排720。在一個實施例中,第二匯流排720可以是低針腳計數(low pin count,LPC)匯流排。在一個實施例中,各種裝備可以被耦合到第二匯流排720,其包括例如,鍵盤及/或滑鼠722、通信裝置727和像是硬碟或其它大容量儲存裝置的儲存單元728,其可以包括指令/碼和資料730。此外,音頻I/O 724可以被耦合到第二匯流排720。注意,其它架構也是可能的。例如,除了圖7的點對點架構,系統可以實現多點匯流排或其它這種架 構。
圖8示出根據本發明的實施例的第三系統800的方框圖。像在圖7和8中具有相似的附圖標記的元件,以及為了避免模糊圖8的其他方面而使圖7的某些方面已經從圖8中刪去。
圖8示出了處理器770、780可分別包括整合記憶體及I/O控制邏輯(“CL”)872和882。關於至少一實施例,CL872與882可包括整合式記憶體控制器單元,諸如以上與圖5及7有關的描述。此外,CL 872與882也可包括I/O控制邏輯。圖8中所說明的不僅是記憶體832、834耦接至CL872與882,而且I/O裝置814也耦接至CL872與882。傳統I/O裝置815可耦接至晶片組890。
圖9示出根據本發明的實施例的SoC 900的方框圖。與圖5中類似的元件具有類似的參考數字。此外,虛線方塊係更先進之SoC上選用的特徵。互連單元902可被耦接至:包括一組一或多個核心502A-N與共用快取單元506的應用處理器910;系統代理單元510;匯流排控制器單元916;整合式記憶體控制器單元914;一組一或多個媒體處理器920,其包括整合式圖形邏輯908、用於提供靜止及/或視訊攝影機功能的影像處理器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)所開發的龍芯(Loongson)IP核心,這些IP核心可授權或販售給各不同的客戶或被授權者,諸如德州儀器、高通、蘋果、或三星,並在這些客戶或被授權者所生產的處理器中實施。
圖11示出根據本發明的實施例的IP核心之展開的方框圖。儲存器1100包括模擬軟體1120及/或硬體或軟體模型1110。在一個實施例中,代表IP核心設計的資料可經由記憶體1140(例如,硬式磁碟機)、有線連接(例如,網際網路)1150、無線連接1160提供給儲存器1100。由模擬工具與模型所產生的IP核心資訊可接 著被傳送到製造工廠1165,第三方在工廠據以製造,以實施按照至少一實施例的至少一個指令。
在一些實施例中,對應於第一類型或架構(例如,x86)的一或多個指令,可在不同類型或架構(例如,ARM)的處理器上被轉譯或仿真。因此,按照一實施例,指令可在任何處理器或處理器類型上實施,包括ARM、x86、MIPS、GPU、或其它處理器類型或架構。
圖12根據本發明的實施例示出第一類型的指令可藉由一不同類型的處理器進行仿真。在圖12中,程式1205包含一些指令,其可實施與一實施例之指令相同或實質相同的功能。不過,程式1205的指令可以與處理器1215的類型及/或格式不相同或不相容,此表示程式1205之指令的類型無法被處理器1215原生地執行。不過,藉助於仿真邏輯1210,程式1205之指令被轉譯成能被處理器1215原生執行的指令。在一個實施例中,仿真邏輯係被具體化成硬體。在另一實施例中,仿真邏輯被具體化於包含軟體的有形機器可讀取媒體中,該軟體能將程式1205中之指令的類型轉譯成處理器1215可原生執行的類型。在其他實施例中,仿真邏輯係具有固定功能或可程式之硬體與儲存在實體機器可讀取媒體中之程式的組合。在一個實施例中,處理器包含仿真邏輯,然而,在其它實施例中,仿真邏輯存在於處理器的外部,且是由第三方提供。在一個實施例中,處理器可藉由執行包含在處理器中或與處理器相關聯之微碼或韌體而載入具體化於包含軟 體之有形機器可讀取媒體中的仿真邏輯。
圖13是根據本發明的實施例示出對比用以將在來源指令集中的二元指令轉換成在目標指令集中的二元指令的軟體轉換器之使用的方框圖。在所示實施例中,指令轉換器可為一個軟體指令轉換器,雖然可替代地,指令轉換器可以以軟體、韌體、硬體、或它們的各種組合來實現。圖13示出高階語言1302的程式可以使用x86編譯器1304,以產生x86的二進制碼1306,其可被具有至少一個x86指令集核心的處理器執行。具有至少一個x86指令集核心的處理器1316表示可以執行與具有至少一個x86指令集核心的Intel處理器的實質上相同功能的任何處理器,其藉由相容地執行或甚至處理(1)Intel x86指令集核心的指令集的實質部分或(2)目標在具有至少一個x86指令集核心的Intel處理器上運行的應用程式的物件碼版本或其他軟體,以實現實質上與具有至少一個x86指令集核心的Intel處理器相同的結果。在x86編譯器1304表示編譯器,其可操作以產生86的二進制碼1306(例如,物件碼),其可利用或不利用額外連結處理而在具有至少一個x86指令集核心的處理器1316上執行。類似地,圖13示出在高階語言1302中的程式可以使用替代的指令集編譯器1308來編譯,以產生替代的指令集編譯的二進制碼1310,其可以由不含至少一個x86指令集核心的處理器1314本身執行(例如,執行加州桑尼維爾的MIPS科技的MIPS指令集及/或其執行加州桑尼維爾的 ARM控股的ARM指令集)。指令轉換器1312可被用於轉換x86二進制碼1306成可由不具有x86指令集核心的處理器1314執行的碼。此經轉換的碼不太可能與替代的指令集二進制碼1310相同,原因是此指令轉換器的能力很難做到;不過,經轉換的碼將可完成一般的運算,並從替代的指令集組成指令。因此,指令轉換器1312代表軟體、韌體、硬體、或其組合,透過仿真、模擬或任何其他製程,允許不具有x86指令集處理器或核心的處理器或其他電子裝置來執行x86二進制代碼1306。
圖14是根據本發明的實施例的處理器之指令集架構1400的方框圖。指令集架構1400可以包括組件的任何合適數量或種類。
例如,指令集架構1400可以包括如一或多個核心1406、1407及圖形處理單元1415的處理實體。核心1406、1407可以透過任何合適的機制,像是透過匯流排或快取,通訊地耦合到指令集體架構1400的剩餘部分,。在一個實施例中,核心1406、1407可透過L2快取控制1408通訊地耦合,其可包括匯流排介面單元1409和L2快取1411。核心1406、1407和圖形處理單元1415可透過互連1410通訊地耦合到彼此和指令集架構1400的剩餘部分。在一個實施例中,圖形處理單元1415可以使用定義其中特定的視頻信號將被編碼和解碼的輸出的方式的視頻代碼1420。
指令集架構1400也可包括介面、控制器、或 其它機制的任何數目或種類,用於與電子裝置或系統的其它部分通訊或介面。這種機制可促進與例如周邊裝置、通訊裝置、其它處理器或記憶體相互作用。在圖14的示例中,指令集架構1400可以包括液晶顯示器(LCD)視頻介面1425、訂戶介面模組(SIM)介面1430、開機ROM介面1435、同步動態隨機存取記憶體(SDRAM)控制器1440、快閃記憶體控制器1445、及序列周邊介面(SPI)主單元1450。LCD視頻介面425可以從例如GPU 1145提供視頻信號之輸出並且透過例如行動產業處理器介面(MIPI)1490或高解析度多媒體介面(HDMI)1495到顯示器。這樣的顯示器可以包括例如LCD。SIM介面1430可以提供存取至SIM卡或裝置或從SIM卡或裝置存取。SDRAM控制器1440可提供存取至SDRAM晶片或模組1460或從SDRAM晶片或模組1460存取。快取控制器1445可提供存取至像是快閃記憶體1465的記憶體或RAM的其他實例或從快閃記憶體1465的記憶體或RAM的其他實例存取。SPI主單元1450可以提供至通訊模組的存取或從通訊模組存取,像是藍牙模組1470、高速3G數據機1475、全球定位系統模組1480或實現通信標準如802.11的無線模組1485。
圖15是根據本發明的實施例的處理器之指令集架構1500的方框圖。指令架構1500可以執行的指令集架構1400的一或多個方面。此外,指令集架構1500可以示出用於處理器內之指令的執行的模組和機制。
指令架構1500可包括通訊地耦接至一或多個執行實體1565的記憶體系統1540。此外,指令架構1500可以包括快取和匯流排介面單元,像是單元1510通訊地耦合到執行實體1565和記憶體系統1540。在一個實施例中,將指令載入執行實體1565可以由一或多個執行之階段來進行。這樣的階段可以包括例如指令預取階段1530、雙指令解碼階段1550、暫存器重新命名階段1555、發行階段1560、及寫回階段1570。
在一個實施例中,記憶體系統1540可以包括執行的指令指標1580。執行的指令指標1580可以儲存識別一批指令中最久、未分派指令的值。最久的指令可對應於最低的程式順序(Program Order,PO)值。PO可包括指令的唯一編號。這樣的指令可以是由多鏈表示的執行緒內的單一指令。PO可被用於排序指令以確保代碼的正確執行語義。PO可由像是評估對編碼在指令而非絕對值中的PO增量的機構來重建。這樣重建PO可以被稱為“RPO”。雖然PO可在本發明說明書中引用,例如PO可以與PRO交互地使用。鏈可以包括依賴於彼此之資料的指令序列。鏈可藉由在編譯時的二進制轉換來配置。執行鏈的硬體可以根據各種指令的PO,來依序執行一給定鏈的指令。一執行緒可以包括多鏈,使得不同鏈的指令可以彼此依據。一給定鏈的PO可以是鏈中最久的指令的PO,其還未從發行階段被分配執行。因此,多鏈的給定執行緒,包括由PO排序之指令的每個鏈,執行的指令指標1580 可儲存最久由最低數所示之PO於執行緒中。
在另一個實施例中,記憶體系統1540可以包括退役指標1582。退役指標1582可以儲存識別最後退役之指令的PO。退役指標1582可藉由例如退役單元454來設定。如果還沒有指令退役,退役指標1582可包含空值。
執行實體1565可包任何合適的數量和種類的機制,藉由此,處理器可執行指令。在圖15的示例中,執行實體1565可以包括ALU/乘法單元(MUL)1566、ALU 1567、和浮點單元(FPU)1568。在一個實施例中,這樣的實體可利用包含在一給定位址1569內的資訊。執行實體1565與階段1530、1550、1555、1560、1570組合可能會共同形成一執行單元。
單元1510可以以任何合適的方式來實現。在一個實施例中,單元1510可以執行快取控制。在這樣的實施例中,單元1510可因此包括快取1525。快取1525可以被實現在進一步的實例中作為具有任何合適尺寸的L2統一快取,像是0、128K、256K、512K、1M、或2M的記憶體位元組。在另一個進一步的實施例中,快取1525可在錯誤校正碼記憶體中來實現。在另一個實施例中,單元1510可以執行匯流排介面到處理器或電子裝置的其它部分。在這樣的實施例中,單元1510可因此包括用於在互連、處理器內匯流排、處理器匯流排或其他通訊匯流排、埠或線上通訊的匯流排介面單元1520。匯流排 介面單元1520可以提供介面至指令架構1500,以執行例如用於在執行實體1565和外部的系統的部分之間的資料之傳送,以指令架構1500。
為了進一步促進它的功能,匯流排介面單元1520可包括用於產生中斷和對處理器或電子裝置的其它部分之通訊的中斷控制和分配單元1511。在一個實施例中,匯流排介面單元1520可以包括處理用於多個處理核心的快取存取和一致性的偵聽控制單元1512。在進一步的實施例中,提供這樣的功能,偵聽控制單元1512可以包括用於處理不同的快取之間的資訊交換的快取對快取傳送單元。在另一個進一步的實施例中,偵聽控制單元1512可包括一或多個偵聽器1514其監視其它快取的一致性(未示出),使得快取控制器,像是單元1510,不必直接執行這種監視。單元1510可以包括用於同步指令架構1500的動作的任何合適的數目的定時器1515。此外,單元1510可以包括AC埠1516。
記憶體系統可以1540包括用於儲存指令架構1500的處理需求的儲存資訊之機制的任何合適的數量和種類。在一個實施例中,記憶體系統1540可以包括用於儲存資訊的載入儲存單元1546,像是寫入記憶體或暫存器或從記憶體或暫存器讀回之緩衝器。在另一個實施例中,記憶體系統1540可以包括轉譯後備緩衝器(TLB)1545,其提供實體和虛擬位址之間的位址值的查找。在又一個實施例中,記憶體系統1540可包括記憶體管理單元 (MMU)1544用於方便存取虛擬記憶體。在仍然另一個實施例中,記憶體系統1540可以包括用於在指令確實需要被執行之前從記憶體請求指令的預取器1543,以減少延遲。
透過不同的階段,可進行用以執行指令的指令架構1500之運算。例如,使用單元1510指令預取階段1530可以透過預取器1543存取指令。取出的指令可被儲存在指令快取1532中。預取階段1530可致能用於快速迴圈模式的選項1531,其中足夠小以適合給定的快取內之形成迴圈的一系列指令被執行。在一個實施方案中,可以進行這樣的執行而無需存取來例如指令快取1532的額外指令。將預取何種指令之決定可藉由例如分支預測單元1535來做成,分支預測單元1535可存取在全域歷史1536中執行的指示、目標位址1537的指示、或返回堆疊1538的內容來決定代碼的哪些分支1557的代碼將於下一個執行。這樣的分支可能可被預取作為一個結果。分支1557可透過如下所述之運算的其他階段來製造。指令預取階段1530可提供指令以及關於未來指令的任何預測至雙指令解碼階段1550。
雙指令解碼階段1550可將所接收的指令轉譯成可被執行的微碼式指令。雙指令解碼階段1550可以同時地解碼每時脈週期兩指令。此外,雙指令解碼階段1550可以將它的結果傳遞至暫存器重新命名階段1555。此外,雙指令解碼階段1550可從其解碼和微碼的最終執 行來決定任何產生的分支。這樣的結果可以被輸入到分支1557。
暫存器重新命名階段1555可將對虛擬暫存器或其他資源的參考轉譯成對實體暫存器或資源之參考。暫存器重新命名階段1555可以包括在暫存器池1556中的此種映射的指示。暫存器重新命名階段1555可將指令修改為所接收的和發送結果至發行階段1560。
發行階段1560可以發出或分配命令至執行實體1565。這樣的發行可以亂序的方式進行。在一個實施例中,多重指令可在執行之前被保持在發行階段1560。發行階段1560可以包括指令佇列1561用於保持這種多重命令。指令可藉由發行階段1560來發行特定處理實體1565根據任何可接受的標準,例如用於給定的指令之執行的資源的可用性或適合性。在一個實施例中,發行階段1560可以重新排序指令佇列1561中的指令,使得第一個接收的指令可能不是第一個執行的指令。根據指令佇列1561的排序,額外的分支資訊可被提供給分支1557。發行階段1560可以將指令傳遞至執行實體1565用於執行。
在執行時,寫回階段1570可以將資料寫入到暫存器、佇列,或者指令集架構1500的其它結構以通訊給定的命令之完成。取決於配置在發行階段1560之指令的順序,寫回階段1570的運算可致能將被執行的額外指令。指令集架構1500的效能可能會被追蹤單元1575監控或測錯。
圖16是根據本發明的實施例的用於處理器之指令集架構的執行管線1600的方框圖。執行管線1600可示出例如圖15的指令架構1500的運算。
執行管線1600可包括步驟或運算的任何合適的組合。在1605,可以預測下一個要被執行的分支。在一個實施例中,這樣的預測可以指令先前的執行及其結果為基礎。在1610中,對應於執行的預測分支之指令可被載入到指令快取中。在1615中,在指令快取中的一或多個這樣的指令可被擷取用於執行。在1620中,已被擷取的指令可以被解碼成微碼或更具體的機器語言。在一個實施例中,多個指令可以同時被解碼。在1625中,解碼指令內的暫存器或其他資源的參考可被重新分配。例如,虛擬暫存器之參考可被對應的實體暫存器的參考取代。在1630中,指令可被分配到佇列以供執行。在1640中,指令可以被執行。這種執行可以以任何合適的方式來進行。在1650中,指令可被發行到合適的執行實體。在其中執行指令的方式可以取決於執行所述指令的特定實體。例如,在1655中,一個ALU可以執行算術函數。ALU可以利用單一時脈週期用於其運算,以及兩個位移器。在一個實施例中,可以採用兩個ALU,且因此兩個指令可在1655被執行。在1660,結果分支的決定可以做成。程式計數器可被用於指定目的地給將要被做成的分支。1660可在單一時脈週期內執行。在1665,浮點運算可藉由一或更多的FPU執行。浮點運算可需要多個時脈週期來執 行,例如兩個至十個週期。在1670,乘法和除法運算可被執行。這種運算可以在四個時脈週期中執行。在1675,可以執行對暫存器或管線1600的其它部分的載入和儲存運算。運算可以包括載入和儲存位址。這種運算可以在四個時脈週期中執行。在1680,如1655至1675的結果運算所需,可以執行寫回運算。
圖17是根據本發明的實施例的用於利用處理器1710之電子裝置1700的方框圖;電子裝置1700可以包括,例如,筆記型電腦、超薄電腦、電腦、塔式伺服器、機架式伺服器、刀鋒型伺服器、膝上型電腦、台式電腦、平板電腦、行動裝置、電話、嵌入式計算機或任何其它合適的電子裝置。
電子裝置1700可以包括處理器1710通信地耦合到任何合適數量或種類之組件、周邊設備、模組或裝置。這種耦合可藉由任何合適種類的匯流排或介面,像是I2C匯流排、系統管理匯流排(SMBus)低針數(LPC)匯流排、SPI、高解析度音頻(HDA)匯流排、序列先進技術附接(SATA)匯流排、USB匯流排(版本1、2、3),或通用異步接收器/發送器(UART)匯流排。
這樣的組件可以包括,例如,顯示器1724、觸控螢幕1725、觸控墊1730、近場通訊(NFC)單元1745、感測器集線器1740、熱感測器1746、高速晶片組(EC)1735、可信任平台模組(TPM)1738、BIOS/韌體/快閃記憶體1722、數位信號處理器1760、像是固態硬碟 (SSD)或硬碟驅動器(HDD)的驅動器1720、無線區域網路(WLAN)單元1750、藍牙單元1752、無線廣域網路(WWAN)單元1756、全球定位系統(GPS)1775、像是USB 3.0相機的照相機1754、或以像是LPDDR3標準實現的低功率雙倍資料速率(LPDDR)記憶體單元1715。這些組件每一個可以以任何合適的方式來實現。
此外,在各種實施例中的其他組件可透過以上討論的組件被通訊地耦合到處理器1710。例如,加速計1741、環境光感測器(ALS)1742、羅盤1743、和陀螺儀1744可被通訊地耦接到感測器集線器1740。一台熱感測器1739、風扇1737、鍵盤1736和觸控板1730可被通訊地耦接到EC 1735。揚聲器1763、耳機1764、和麥克風1765可被通訊地耦接到一個音頻單元1762,其又可以通訊地被耦接到DSP 1760。音頻單元1762可以包括,例如,音頻編解碼器和D類放大器。SIM卡1757可被通訊地耦接到WWAN單元1756。像是WLAN單元1750和藍牙單元1752的組件,以及WWAN單元1756可以以下一代形式(NGFF)來實現。
本發明的實施例係關於指令和處理邏輯,用於執行目標向量暫存器的一或多個向量的運算,其中至少一些運算以使用從索引陣列中檢索的索引值的來存取記憶體位置。圖18是用於指令和用於向量運算之邏輯的示例系統1800的說明,該向量運算用以從索引陣列載入索引以及基於這些索引從記憶體中的位置預取、取得用於處理 設備上之隨後的散佈之記憶體中的位置的所有權。在一個實施例中,單一向量運算可以從索引陣列載入索引、依據這些索引來分散一或多個元件至記憶體中的位置、以及基於這些索引從記憶體中的其他位置預取、取得記憶體中其他位置的所有權用於隨後的散佈。
一般來講,散佈運算可能對根據基底位址暫存器、索引暫存器及/或由指令所指定(或被編碼的)標度因數之內容所計算的位址,執行一系列的記憶體寫入存取。例如,密碼系統、圖遍歷、排序或稀疏矩陣應用可包括用以載入具有一系列索引值的暫存器之一或多個指令以及用以執行散佈資料元件到使用這些索引值的間接定址的位置之一或多個指令。可以不規則的方式透過記憶體來運行散佈運算,散佈資料元件至非連續的那些位址的且不一定遵循一貫的樣式。例如,指令重複序列可以將資料元件寫入至位置0,然後將資料元件寫入至位置1000,然後將資料元件寫入至位置723,以及接著資料元件寫入至位置50000。在這種類型的應用中,為了取得記憶體位置的所有權而藉由傳統硬體擷取器來擷取內容的那些位置,如果它們所有都被存取,在他們以指令的順序來被存取時他們可能不再被保持在快取中。
在本發明內容的實施例中,本文所述的載入索引和預取散佈(Load-Indices-and-Prefetch-Scatters)指令可以載入後續運算所需的索引以及預取資料元件用於後續的散佈運算。這可以包括,對於將從記憶體中的位置預 取的每個資料元件、從基底位址被指定用於指令的記憶體中的索引陣列中的特定位置取出索引值、從資料元件將被預取的記憶體來計算記憶體位址、在該計算的位址預取出該位置的內容、以及將該預取的內容寫入至使用快取提示在指令中被識別的快取。預取可以使用讀取所有權之存取來執行。將被預取的資料元件的位址可基於指定給該指令的基底位址和從索引陣列取出的索引值來計算。某些Load-Indices-and-Prefetch-Scatters指令也可以從識別用於指令的來源向量暫存器檢索出的用於當前散佈運算的資料元件,並且將它們儲存在記憶體中的位置,其是基於從索引陣列檢索出之不同的索引值。例如,LoadIndicesScatterAndPrefetch指令可以-除預取用於資料元件用於隨後的散佈運算-基於依序儲存在索引陣列中的索引值來載入所引用於當前的散佈運算、從來源向量暫存器檢索將被散佈的資料元件、以及將這些資料元件儲存在使用這些索引值間接定址的記憶體中的位置。被預取用於隨後散佈運算的資料元件可間接地從索引元件以固定距離藉由索引陣列中的索引值存取,其間接定址用於當前散佈運算的資料元件。在本發明的實施例中,各種形式的Load-Indices-and-Prefetch-Scatters指令可被用於在應用中散佈及/或預取資料元件,其中資料元件以隨機順序儲存在記憶體中。例如,資料元件可被儲存為稀疏陣列的元件。
在本發明內容的實施例中,擴展向量指令的 編碼可以包括標度索引基底(scale-index-base,SIB)類型記憶體定址運算元,其間接識別記憶體中的多重索引的目的地位置。在一個實施例中,SIB類型記憶體運算元可以包括編碼識別一基底位址暫存器。基底位址暫存器的內容可以從所計算的記憶體中的特定位置的位址,表示在記憶體中的基底位址。例如,基底位址可以是將被散佈或預取之資料元件所儲存的一區塊位置中的第一位置之位址。在另一示例中,基底位址可以是將被預取之資料元件所儲存的一區塊位置中的第一位置之位址。在一個實施例中,SIB類型記憶體運算元可以包括編碼識別一記憶體中索引陣列。陣列的每個元件可指定索引或偏移值,其可被用以計算從該基底位址,資料元件將被散佈的區塊位置內的相應位置之位址。在一個實施例中,SIB類型記憶體運算元可包括編碼指定標度因數用以幫計算對應的目的地位址時,被應用到每個索引值。例如,如果四個標度因數被編碼在SIB類型記憶體運算元中,從索引陣列的元件得到的每個索引值可以被乘以4,然後加到基底位址以計算資料元件將被散佈的位址。
在一個實施例中,形式vm32{x,y,z}的SIB類型記憶體運算元可以識別使用SIB類型記憶體定址指定的記憶體運算元之向量陣列。在這個示例中,記憶體位址陣列使用共同基底暫存器、常數標度因數和含有單獨元件的向量暫存器來指定,其每一個是32位元索引值。向量索引暫存器可以是XMM暫存器(vm32x)、YMM暫存器 (vm32y)或ZMM暫存器(vm32z)。在另一個實施例中,形式vm64{x,y,z}的SIB類型記憶體運算元可以識別使用SIB類型記憶體定址指定的記憶體運算元之向量陣列。在這個示例中,記憶體位址陣列使用共同基底暫存器、常數標度因數和含有單獨元件的向量暫存器來指定,其每一個是64位元索引值。向量索引暫存器可以是XMM暫存器(vm64x)、YMM暫存器(vm64y)或ZMM暫存器(vm64z)。
系統1800可包括處理器、SoC、積體電路、或其它機構。例如,系統1800可包括處理器1804。雖然處理器1804被示出且描述為圖18的一個示例,可以使用任何合適的機構。處理器1804可包括任何合適的機構用於執行目標向量暫存器的向量的運算,包括那些運算以使用從索引陣列中檢索的索引值的來存取記憶體位置。在一個實施例中,這種機構以硬體來實現。處理器1804可以完全或部分藉由結合圖17所述的元件來實現。
將於處理器1804執行的指令可被包括在指令串流1802中。指令串流1802可以由例如編譯器、即時解釋器、或其它合適的機構(其可能或可能不被包括在系統1800中)來產生,或可以由產生於指令串流1802中的碼的描圖器所指定。例如,編譯器可以採取應用程式代碼,並在指令串流1802之形式中產生可執行碼。指令可以由處理器1804從指令串流1802接收。指令串流1802可以以任何合適的方式被加載到處理器1804例如,要由處理 器1804執行的指令可以從儲存器、從其它機器、或從其他記憶體像是記憶體系統1830載入。指令可以到達並於常駐記憶體中為可用的,像是RAM,其中指令可從儲存器中擷取以由處理器1804所執行。該指令可以由例如預取器或預取單元(像是指令擷取單元1808)從常駐記憶體所擷取。
在一個實施例中,指令串流1802可包括指令用以實施向量運算以從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權。例如,在一個實施例中,指令流1802可以包括一或多個“LoadIndicesAndPrefetchScatter”類型指令用以載入,對於可潛在地於隨後散佈運算其間被散佈的每個資料元件,索引值被用以計算將被散佈的資料元件的記憶體之位址,以及用以讀取所有權之存取來預取所計算之位址的內容至快取。無論有無定標,位址可基於被指定給指令的基底位址和從被識別用於指令之索引陣列的檢索出的索引值的總和來計算。
在一個實施例中,指令串流1802可以包括一或多個“LoadIndicesScatterAndPrefetch”類型指令用以載入,對於將被散佈的每個資料元件、被使用以計算將被散佈的資料元件於記憶體中的位址、用以從識別用於指令的來源向量暫存器檢索資料元件、以及用以將資料元件儲存在計算的位址的記憶體中。無論有無定標,位址可基於被指定給指令的基底位址和從被識別用於指令之索引陣列的 檢索出的索引值的總和來計算。由指令所散佈的資料元件可以儲存在來源向量暫存器之連續位置中。在一個實施例中,每個“LoadIndicesAndPrefetchScatter”類型指令可被使用以載入,對於可潛在地於隨後散佈運算其間被散佈的每個資料元件,索引值被用以計算將被預取的資料元件的記憶體之位址,以及用以讀取所有權之存取來預取所計算之位址的內容至快取。無論有無定標,位址可基於被指定給指令的基底位址和從被檢索用於被預取的資料元件的總和來計算。注意,指令串流1802可以除了那些執行向量運算的指令。
處理器1804可以包括前端1806,其可包括一個取指令流水線階段(例如取指令單元1808)和一個解碼流水線階段(如解碼單元1810)。前端1806可使用解碼單元1810從指令串流1802解碼和接收指令。解碼的指令可由管線的分配階段被調度、分配和排程用於執行(如分配器1814),且被分配給特定的執行單元1816用於執行。要由處理器1804執行的一或更多個特定的指令可以被包括在由處理器1804執行所定義的庫。在另一個實施例中,特定指令可由處理器1804的特定部分進行指定。例如,處理器1804可識別在指令串流1802中的嘗試用以在軟體中執行向量運算和可發出指令到執行單元1816的特定的一個。
在執行期間,對資料或額外指令(包括駐留在記憶體系統1830中駐留的資料或指令)之存取可以透 過記憶體子系統1820進行。而且,來自執行的結果可以被儲存在記憶體子系統1820且可隨後刷新到記憶體系統1830。記憶體子系統1820可包括例如記憶體、RAM或快取階層,其可包括一或多個1階(L1)快取1822或2階(L2)快取1824,其中的一些可以由多個核心1812或處理器1804共享。由執行單元1816執行後,指令可藉由寫回階段或在退役單元1818中的退役階段退役。這種執行管線的各部分可以由一或多個核心1812來執行。
執行向量指令的執行單元1816可以任何合適的方式來實施。在一個實施例中,執行單元1816可包括或可北通訊耦合到記憶體元件以儲存對於執行一或多個向量運算的必要之資訊。在一個實施例中,執行單元1816可包括電路,其用以實施向量運算以從索引陣列載入索引以及基於這些索引從記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權。在一個實施例中,執行單元1816可包括電路,其用以實施向量運算以從索引陣列載入索引、基於這些索引將元件散佈到記憶體中的元件、以及記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權。例如,執行單元1816可以包括用以實現向量LoadIndicesAndPrefetchScatter類型指令的一或多個形式之電路。另一示例中,執行單元1816可包括用以實現向量LoadIndicesScatterAndPrefetch類型指令的一或多個形式之電路。這些指令示例實施在下文中更詳細地被描述。
在本發明的實施例中,處理器1804的指令集架構可以實現被定義為英特爾高級向量擴展512(Intel® AVX-512)指令的一或多個擴展向量指令。處理器1804可認識到,隱喻或透過解碼和特定指令的執行,這些擴展向量運算中的一個將被執行。在這種情況下,擴展向量運算可被導向執行單元1816中的特定一個用於指令的執行。在一個實施例中,所述指令集架構可包括用於512位元SIMD運算的支持。例如,執行單元1816執行的指令集架構可以包括32個向量暫存器,其中每個512位元,向量的支持高達512位元寬。由執行單元1816執行的指令集架構可以包括用於條件式執行和目的地運算元的有效合併之8個專用遮罩暫存器。至少一些擴展向量指令可以包括對廣播的支持。至少一些擴展向量指令可以包括對用以致能預測的嵌入式遮罩的支持。
至少一些擴展向量指令可對在同一時間儲存在向量暫存器中的向量的每個元件應用相同的運算。其他擴展向量指令可對多個來源向量暫存器中相應的元件應用相同的運算。例如,相同的運算可由擴展的向量指令被應用到儲存在向量暫存器中的緊縮資料項的單獨資料元件每一者。在另一實例中,擴展的向量指令可以指定單一向量運算將於兩個來源向量運算元的個別資料元件上執行以產生目的地向量運算元。
在本發明的實施例中,至少一些擴展向量指令可以由處理器核心內之SIMD協同處理器來執行。例 如,核心1812內的一或多個執行單元1816可以實施SIMD協同處理器的功能。SIMD協同處理器可以完全或部分藉由圖17所述的元件來實現。在一個實施例中,由處理器1804所收到的指令串流1802的擴展向量指令可以被引導到實現SIMD協同處理器的功能性的執行單元1816。
如圖18所示,在一個實施例中,LoadIndicesAndPrefetchScatter指令可以包括指示將被預取資料元件的大小及/或類型之{size}參數。在一個實施例中,所有將被預取的資料元件可以是相同的大小和類型。
在一個實施例中,LoadIndicesAndPrefetchScatter指令可以包括兩個記憶體位址參數、其中之一識別用記憶體中的一組資料元件之基底位址,而另一個則識別記憶體中的索引陣列。在一個實施例中,這些記憶體位址參數中的一或兩個可被編碼於標度-索引-基底(scale-index-base,SIB)類型記憶體定址運算元中。在另一個實施例中,這些記憶體位址參數的一或兩個可以是指標。
在一個實施例中,LoadIndicesAndPrefetchScatter指令可以包括快取提示,其識別資料元件將被預取到的快取階層之階。
在一個實施例中,LoadIndicesAndPrefetchScatter類型指令可包括{kn}參數,其識別特定遮罩暫存器,如果要應用遮罩。
圖18中所示的LoadIndicesAndPrefetchScatter指令之一或多個以上參數可能是固有的指令。例如,在不同的實施例中,這些參數的任何組合可以被編碼在該指令的運算碼格式的位元或欄位中。在其他的實施例中,圖18中所示的LoadIndicesAndPrefetchScatter類型指令之一或多個以上參數可能是可選的指令。例如,在不同實施例中,當指令被呼叫時,可指定這些參數的任意組合。
如圖18所示,在一個實施例中,LoadIndicesAndPrefetch指令可以包括指示將由指令散佈和預取之資料元件的大小及/或類型之{size}參數。在一個實施例中,所有將被散佈和預取的資料元件可以是相同的大小和類型。
在一個實施方案中,LoadIndicesScatterAndPrefetch指令可以包括將被散佈的資料元件所儲存的來源向量暫存器的REG參數。
在一個實施例中,LoadIndicesScatterAndPrefetch指令可以包括兩個記憶體位址參數、其中之一識別用記憶體中的一組資料元件之基底位址,而另一個則識別記憶體中的索引陣列。在一個實施例中,這些記憶體位址參數中的一或兩個可被編碼於標度-索引-基底(scale-index-base,SIB)類型記憶體定址運算元中。在另一個實施例中,這些記憶體位址參數的一或兩個可以是指標。
在一個實施例中,LoadIndicesScatterAndPrefetch指令可以包括快取提示,其識別資料元件將被預取到的快取階層之階。
在一個實施例中,LoadIndicesScatterAndPrefetch可包括立即參數,其值表示儲存將由指令散佈之資料元件的索引值的索引陣列中的位置和儲存將由指令預取之資料元件的索引值的位置之間的距離。
在一個實施例中,LoadIndicesScatterAndPrefetch類型指令可包括{kn}參數,其識別特定遮罩暫存器,如果要應用遮罩。如果遮罩將被應用,則LoadIndicesScatterAndPrefetch類型的指令可以包括{z}參數,其指定遮罩類型。在一個實施例中,如果{z}參數被包括用於所述指令,這可以指示當資料元件儲存到記憶體時,將應用零遮罩。如果{z}參數未被包括用於所述指令,這可以指示當資料元件儲存到記憶體時,將應用合併遮罩。使用零遮罩和合併遮罩的示例在下面更詳細地描述。
圖18中所示的LoadIndicesScatterAndPrefetch指令之一或多個參數可能是固有的指令。例如,在不同的實施例中,這些參數的任何組合可以被編碼在該指令的運算碼格式的位元或欄位中。在其他的實施例中,圖18中所示的LoadIndicesScatterAndPrefetch類型指令之一或多個以上 參數可能是可選的指令。例如,在不同實施例中,當指令被呼叫時,可指定這些參數的任意組合。
圖19示出根據本發明的實施例之執行SIMD運算的資料處理系統的處理器核心1900。處理器1900可以完全或部分藉由結合圖1至18所述的元件來實現。在一個實施例中,處理器核心1900可以包括主要處理器1920和SIMD協同處理器1910。SIMD協同處理器1910可以完全或部分藉由結合圖1至17所述的元件來實現。在一個實施例中,SIMD協同處理器1910可實施圖18中所示的執行單元1816中的一者的至少一部分。在一個實施例中,SIMD協同處理器1910可包括SIMD執行單元1912和擴展向量暫存器檔1914。SIMD協同處理器1910可以執行擴展SIMD指令集1916之運算。擴展SIMD指令集1916可以包括一或更多個擴展向量指令。這些擴展的向量指令可以控制資料處理運算,其包括與駐留在擴展向量暫存器檔1914的相互作用。
在一個實施例中,主要處理器1920可以包括解碼器1922,其用以識別擴展SIMD指令集1916之指令用於藉由SIMD協同處理器1910來執行。在其他實施例中,SIMD協同處理器1910可包括解碼器(未示出)的至少部分,用以解碼SIMD指令集1916的指令。處理器核心1900也可包括額外電路(未示出)其對於本發明實施例的理解可能是不必要的。
在本發明的實施例中,主要處理器1920可執 行資料處理指令的串流,其控制一般類型的資料處理運算,包括與快取1924及/或暫存器檔1926的互動。擴展SIMD指令集1916的SIMD協同處理器指令嵌入在資料處理指令的串流內。主處理器1920的解碼器1922可辨識出這些SIMD協同處理器指令係應由附加的SIMD協同處理器1910來執行的類型。因此,主處理器1920在協同處理器匯流排171上發出這些SIMD協同處理器指令(或代表SIMD協同處理器指令的控制信號)。從協同處理器匯流排1915,這些指令可以藉由任何附接的SIMD協同處理器接收。在圖19所示的示例實施例中,SIMD協同處理器1910可接收並執行任何所接收意於在SIMD協同處理器1910上執行的SIMD協同處理器指令。
在一個實施例中,主要處理器1920及SIMD協同處理器192可整合到單一處理核心1900,其包含執行單元、一組暫存器檔、及用以辨識擴展SIMD指令集1916之指令的解碼器。
在圖18和19中描繪的示例實施方式僅是說明性的,並不意味著是限制用於執行擴展向量運算的本文所描述的機制的實施。
圖20是根據本發明的實施例示出示例擴展的向量暫存器檔1914的方框圖。擴展向量暫存器檔1914可以包括32個SIMD暫存器(ZMM0-ZMM31),其每一個是512位元寬。ZMM暫存器的每一個的較低256位元的別名為各別的256位元YMM暫存器。YMM暫存器 的每一個的較低128位元的別名為各別的128位元XMM暫存器。例如,暫存器ZMM(示出為2001)的位元255至0別名為暫存器YMM0,以及暫存器ZMM0的位元127至0別名為暫存器XMM0。同樣,暫存器ZMM1(示出為2002)的位元255至0別名為暫存器YMM1,暫存器ZMM1的位元127至0別名為暫存器XMM1,暫存器ZMM2(示出為2003)的位元255至0別名為暫存器YMM2,暫存器ZMM2的位元127至0別名為暫存器XMM1。
在一個實施例中,擴展SIMD指令集1916中的擴展向量指令可在擴展向量暫存器檔1914的任何暫存器上運算,該擴展向量暫存器檔1914包括暫存器ZMM0-ZMM31、暫存器YMM0-YMM15和暫存器XMM0-XMM7。在另一個實施例中,在Intel® AVX-512的指令集架構的部署之前實施的傳統SIMD指令可在擴展向量暫存器檔1914中之YMM或XMM暫存器的子集上運算。例如,在一些實施例中,由一些傳統的SIMD指令的存取可以被限制為暫存器YMM0-YMM15或暫存器XMM0-XMM7。
在本發明的實施例中,指令集架構可以支持存取多達四個指令運算元的擴展向量指令。例如,在至少一些實施例中,擴展向量指令可以存取示出於圖20中為來源或目的地運算元的32個擴展向量暫存器ZMM0-ZMM31的任一者。在一些實施例中,擴展向量指令可存 取8個專用遮罩暫存器的任何一個。在一些實施方案中,擴展向量指令可存取作為來源或目的地運算元的16個通用暫存器的任一個。
在本發明的實施例中,擴展向量指令的編碼可包括指定將要執行的特定向量運算的運算碼。擴展向量指令之編碼可包括編碼識別8個專用遮罩暫存器k0-k7的任一者。因為它被施加到相應來源向量元件或目的地向量元件,識別的遮罩暫存器的每一位元可管理向量運算的行為。例如,在一個實施例中,這些遮罩暫存器(k1-k7)的七個可用於有條件地管理擴展向量指令的每資料元件的計算運算。在本示例中,如果相應的遮罩位元未被設置,不會對給定的向量元件執行運算。在另一個實施例中,遮罩暫存器k1-k7可被用於有條件支配每元件更新至擴展向量指令的目的地運算元。在這個示例中,如果相應的遮罩位元未被設置,給定的目的地元件不以運算的結果來更新。
在一個實施例中,擴展向量指令的編碼可包括指定將被應用至擴展向量指令的目的地(結果)向量之遮罩的類型。例如,這種編碼可以指出合併遮罩或零遮罩是否被應用到一個向量運算的執行。如果這種編碼指定合併遮罩,任何其相應的位元在遮罩暫存器中未被設置的目的地向量元件之值可被保留在目的地向量中。如果這種編碼指定零遮罩,任何其相應的位元在遮罩暫存器中未被設置的目的地向量元件之值可與目的地向量中的零之值替 換。在一個示例實施例中,遮罩暫存器k0不被用作對向量運算的預測運算元。在這個示例中,否則將選擇遮罩k0的編碼值可替代選擇全部中的隱式遮罩值,從而有效地禁用遮罩。在這個示例中,遮罩暫存器k0可被用於採用一或多個遮罩暫存器作為來源或目的地運算元的任何指令。
在一個實施例中,擴展向量指令的編碼可包括編碼指定將被打包至來源向量暫存器或要被打包至目的地向量暫存器中的資料元件的大小。例如,編碼可以指定每一個資料元件是一個位元組、字、雙字、或四字等。在另一個實施例中,擴展向量指令的編碼可包括編碼指定將被打包至來源向量暫存器或要被打包至目的地向量暫存器中的資料元件的資料類型。例如,編碼可以指定該資料表示單或雙精度整數、或支持浮點資料類型的任何倍數。
在一個實施例中,擴展向量指令的編碼可包括編碼指定以其存取來源或目的地運算元的記憶體位址或記憶體定址模式。在另一個實施例中,擴展向量指令的編碼可包括編碼指定一個純量整數或純量浮點數字,其表示指令的運算元。儘管本發明描述了特定的擴展向量指令和他們的編碼,這些僅僅是可以在本發明的實施例中實現的擴展向量指令的示例。在其他實施例中,更多、更少或不同的擴展向量指令可以在指令集架構來實現,並且其編碼可以包括更多、更少或不同的資訊以控制它們的執行。
在一個實施例中,與執行散佈的其他序列的 指令比較,LoadIndicesAndPrefetchScatter指令或LoadIndicesScatterAndPrefetch之使用可以增進密碼術、圖遍歷、排序、以及以儲存在矩陣的索引之方式使用間接寫入存取至記憶體的疏矩陣應用(除了別的以外)之效能。
在一個實施方案,除了從用以載入索引的向量位址指定一組位址之外,這些位址可以替代地作為對LoadIndicesAndPrefetchScatter指令的索引陣列,其二者將陣列的每個元素見載入,然後用它作為提供預取運算的索引。將於預取運算中使用的索引之向量可被儲存在記憶體中的連續位置。例如,在一個實施例中,從陣列中的第一位置開始,可以存在四個位元組,其包含第一索引值、其次是包含第二索引值及依此類推的四個位元組。在一個實施例中,在預取將開始的索引陣列(在記憶體中)內的開始位址可以被提供給LoadIndicesAndPrefetchScatter指令,且非間接地將要預取的資料元件定址的索引值可被連續儲存在以該位址開始的記憶體中。在一個實施例中,LoadIndicesAndPrefetchScatter指令可從該位置開始載入64位元組,並使用它們(一次四個)來執行預取。
在一個實施例中,如下面更詳細地描述的,LoadIndicesAndPrefetchScatter指令的語義可以如下:LoadIndicesAndPrefetchScatterD kn (Addr A, Addr B, hint)
在本實施例中,運算是用以將32位元雙字元 件預取到由提示所識別的快取,在該地址,從記憶體中的索引陣列之開始檢索索引值的位址為Addr B,記憶體中的一群資料元件位置的起始位址(基底位址)為Addr A,而指定用於該指令的遮罩為遮罩暫存器kn。指令的運算可藉由下面的示例偽碼來說明。在這個示例中,VLEN(或向量長度)可以表示索引向量的長度,也就是,儲存在用於預取運算的索引陣列中的索引值的數量。
For (i = 0...VLEN) { If (kn [i] is true) then { idx = mem[B[i]]; load mem[A[idx]] into specified cache } } }
在這個示例中,對於每次迭代,索引值從索引陣列中的位置i檢索以及被載入至索引暫存器,並在記憶體中的該位置的內容使用索引被預取到藉由提示所指定之快取而間接地被存取。例如,提示可以指示將要預取到的1階(L1)快取或到2階(L2)快取的資料元件。在一些實施例中,資料元件可以利用讀取所有權(read-for-ownership)來預取。例如,將預取的資料元件導向快取的寫入請求包括用於獨佔所有權的請求。
在本發明的實施例中,LoadIndicesAndPrefetchScatter指令可被用於在呼叫目標 朝向那些資料元件的散佈運算、在希望散佈運算被呼叫之時取得記憶體中的位置之所有權之前,將記憶體中的特定位置之內容預取至指定的快取,並保持獨佔所有權。例如,執行散佈的向量指令的重複序列在每次迭代中可包括從來源向量暫存器將資料元件散佈(儲存)至記憶體中的位置的一個向量指令,該記憶體位置是基於索引陣列的一部份中的連續位置中的索引值來計算,以及用以預取其位置是基於與用於計算散佈的資料元件之位址的索引值距離固定距離d的索引值來計算的資料元件的另一指令。一個這樣的序列可以由下面的示例偽碼來說明。
Let d = prefetch_distance; for (i=1..N) { A[B[i]] = C[i]; Prefetch A[B[i+d]] into desired cache; }
在上面所示的指令序列中,預取指令可由LoadIndicesAndPrefetchScatter運算來實現,如下面的示例偽碼。在這個示例中,遮罩不指定給該指令。
Prefetch A[B[i+d]] into desired cache:{ LoadIndicesAndPrefetchScatter (addr (A[]), addr (B[i+d]), cache_hint); }
在一個實施方案中, LoadIndicesAndPrefetchScatter指令可以支持VLEN的像是8、16、32、或64的多個可能的值。在一個實施方案中,LoadIndicesAndPrefetchScatter指令可支持索引陣列B[i]中之元件的多個可能的大小,如32位元、或64位元值,其每一個可以表示一或多個索引值。在一個實施方案中,LoadIndicesAndPrefetchScatter指令可以支持在記憶體位置A[i]中的資料元件的於多個可能的類型和大小,包括單或雙精度浮點、64位整數等等。在一個實施例中,指令可以有條件地將記憶體中的一或多個位置的內容預取到用於該指令的預取位置的最大數目的所識別的快取。例如,如果遮罩被指定用於指令(如果遮罩暫存器被識別用於指令),記憶體中潛在的散佈目標位置的內容只在當相應的遮罩位被設置時被預取。內容將從其預取之位置的最大數目可取決於一或多個指令參數,像是將被預取的資料元件的大小或類型,或者索引向量的長度。
在一個實施例中,記憶體中預取指定的特定位置可能導致在多個相鄰位置的資料與指定目標位置的內容一起被預取和快取。例如,4、8、16或32個資料元件可以一次被預取至識別的快取中,依據該預取的目標的位置和大小以及快取線的長度。在各種實施例中,由指令定義的預取可能以任何順序發生,或根本不以任何順序發生。例如,指令可被認為是對處理器的提示,並且可以不保證完成。在一個實施例中,如果記憶體和目標快取之間存有高帶寬利用率,處理器硬體可決定該指令不應被執 行。在另一個實施例中,處理器可為任何數量的原因,在完成之前(例如,預取一些內容之後,但不是在記憶體中的所有目標位置)終止指令的執行。
在一個實施方案中,索引陣列可以被提供給LoadIndicesScatterAndPrefetch指令,其將載入陣列的每個元件(索引值),使用該值作為用於散佈運算的索引,並且提前預取用於隨後散佈運算。在一個實施例中,將於散佈運算中使用的索引之向量可被儲存在記憶體中的連續位置。例如,在一個實施例中,從陣列中的第一位置開始,可以存在四個位元組,其包含第一索引值、其次是包含第二索引值及依此類推的四個位元組。在一個實施例中,將在預取運算中使用的索引的向量可儲存在與用於散佈運算的索引的向量所儲存的位置距離一固定距離的記憶體中之連續的位置中。例如,在應開始預取的索引陣列(在記憶體中)內的開始位址可以被提供給LoadIndicesScatterAndPrefetch指令,且非間接地將要預取的資料元件定址的索引值可被連續儲存在以該位址開始的記憶體中。在一個實施例中,LoadIndicesScatterAndPrefetch指令可從該位置開始載入64位元組,並使用它們(一次四個)來執行預取。
在一個實施例中,如下面更詳細地描述的,LoadIndicesScatterAndPrefetch指令的語義可以如下:
LoadIndicesScatterAndPrefetchD kn (Addr A, Addr B, ZMMn, prefetch_distance, hint)
在這個示例中,運算是將儲存在標識為ZMMn的來源向量暫存器中的32位元雙字元件散佈至記憶體中的位置,以及預取32位元雙字元件到由提示所識別的快取。在本示例中,從記憶體中的索引陣列之開始檢索索引值的位址為Addr B,記憶體中的一群資料元件位置的起始位址(基底位址)為Addr A,用於散佈的索引值和用預取的索引值之間的距離是由整數“prefetch_distance”(預取_距離)所指定,以及指定用於該指令的遮罩為遮罩暫存器kn。指令的運算可藉由下面的示例偽碼來說明。在這個示例中,VLEN(或向量長度)可以表示索引向量的長度,也就是,儲存在用於運算的索引陣列中的索引值的數量。
For(i=1..VLEN) { If (kn [i] is true) then { idx1 = mem[B[i]]; mem[A[idx1]] = source[i]; } idx2 = mem[B[i+d]]; load mem[A[idx2]] into cache with read-for-ownership; } } }
在這個示例中,對於每次迭代,索引值是從索引陣列中的位置i檢索以及被載入至索引暫存器,並且 來源暫存器中的位置i的資料元件是被儲存在使用該索引值間接定址的記憶體中的位置。此外,第二索引值是從索引陣列中的位置(i+d)檢索以及被載入至索引暫存器,並在記憶體中的該位置的內容使用索引被預取到其是藉由提示所指定之快取而間接地被存取。例如,提示可以指示將要預取到的1階(L1)快取或到2階(L2)快取的內容。在一些實施例中,內容可以利用讀取所有權來預取。例如,將預取的資料元件導向快取的寫入請求包括用於獨佔所有權的請求。
在一個實施例中,當LoadIndicesScatterAndPrefetch指令將儲存在來源向量暫存器中的資料元件散佈到記憶體時,可應用可選的合併遮罩。在另一個實施例中,當LoadIndicesScatterAndPrefetch指令將儲存在來源向量暫存器中的資料元件散佈到記憶體時,可應用可選的零遮罩。在一個實施方案中,LoadIndicesScatterAndPrefetch指令可以支持VLEN的像是8、16、32、或64的多個可能的值。在一個實施方案中,該指令可支持索引陣列B[i]中之元件的多個可能的大小,如32位元、或64位元值,其每一個可以表示一或多個索引值。在一個實施方案中,LoadIndicesScatterAndPrefetch指令可以支持在記憶體位置A[i]中的資料元件的多個可能的類型和大小,包括單或雙精度浮點、64位整數等等。在一個實施例中,指令可以有條件地散佈用於該指令之最大數目的資料元件的一或 多個資料元件。例如,如果遮罩被指定用於指令(如果遮罩暫存器被識別用於指令),資料元件可以只在當相應的遮罩位被設置時被散佈。將被散佈之資料元件的最大數目可取決於一或多個指令參數,像是將被散佈的資料元件的大小或類型,或者來源向量暫存器的容量。在一個實施例中,指令可以有條件地預取用於該指令的最大數目的位置的記憶體中的一或多個位置的內容。例如,如果遮罩被指定用於指令(如果遮罩暫存器被識別用於指令),給定之位置的內容只在當其相應的遮罩位被設置時被預取。資料將從其被預取之位置的最大數目可取決於一或多個指令參數,像是將被預取的資料元件的大小或類型,或者索引向量的長度。
在一個實施例中,記憶體中預取指定的特定位置可能導致在多個相鄰位置的內容與指定目標位置的內容一起被預取和快取。例如,4、8、16或32個資料元件可以一次被預取至識別的快取中,依據該預取的目標的位置和大小以及快取線的長度。在各種實施例中,由指令定義的預取可能以任何順序發生,或根本不以任何順序發生。例如,指令可被認為是對處理器的提示,並且可以不保證完成。在一個實施例中,如果記憶體和目標快取之間存有高帶寬利用率,處理器硬體可決定該指令不應被執行。在另一個實施例中,處理器可為任何數量的原因,在完成之前(例如,預取一些內容之後,但不是在記憶體中的所有目標位置)終止指令的執行。
在上面的示例中的偽碼,存在識別用於指令的單一遮罩暫存器,並且遮罩僅應用於每迭代的載入索引和散佈(load-index-and-scatter)部分,如由遮罩暫存器所控制。例如,如果一個特定的遮罩位元未被設置,所述散佈的相應的一個將被省略。然而,在預取運算需要用於每個迭代。在另一個實施例中,遮罩可被應用於是迭代的散佈和預取部分,使得兩者都以相應的遮罩位元為條件。在這種情況下,這兩個運算無論哪一個都在給定的迭代期間被執行或均不被執行。在又一個實施例中,兩個獨立的遮罩暫存器可以被指定用於LoadIndicesScatterAndPrefetch指令,一個用以調節散佈運算,一個用以調節預取運算。在其他實施例中,用以控制任何被執行的散佈或預取的其他變化或組合是可能的。
在本發明的實施例中,用於執行由處理器核心(如在系統1800中的核心1812)或由SIMD協同處理器(如SIMD協同處理器1910)所實施的擴展向量運算之指令可包括用以執行向量運算之指令用以從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取,取得記憶體中的位置的所有權用於隨後的散佈。例如,這些指令可以包括一或多個“LoadIndicesAndPrefetchScatter”指令。在本發明的實施例中,LoadIndicesAndPrefetchScatter指令可被用以將每個索引值載入,該每個索引值用以計算執行預取的特定位置的記憶體中位址,以及用以將該位置的內容預取到指定的快取。無論有無定標,位址可基於被 指定給指令的基底位址和從被識別用於指令之索引陣列的檢索出的索引值的總和來計算。在另一示例中,用於執行由一個處理器核心所實施的擴展向量運算的指令可以包括一或多個“LoadIndicesScatterAndPrefetch”指令。在本發明的實施例中,LoadIndicesScatterAndPrefetch指令可被用來將將每個索引值載入,該每個索引值用以計算將被散佈的特定資料元件的記憶體中之位址、用以從指令的來源向量暫存器檢索該資料元件、用以將該資料元件儲存在所計算的位址之記憶體中、用以載入被用以計算執行預取的另一位置的位址之索引值、以及用以將其他位置的內容預取到指定的快取。無論有無定標,每一個位址可基於被指定給指令的基底位址和從被識別用於指令之索引陣列的檢索出的索引值的總和來計算。用於由指令所執行的散佈的索引值可以與用於由指令所執行的預取的索引值以指定用於該指令的預取距離在索引陣列中隔開。
圖21A是根據本發明實施例的用以執行從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權之運算的說明。在一個實施例中,系統1800可執行指令用以實施運算以從索引陣列載入索引以及基於這些索引從記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權。例如,LoadIndicesAndPrefetchScatter指令可被執行。指令可以包括運算元、位元、旗標、參數或其他元件的任何合適的數量和種類。 LoadIndicesAndPrefetchScatter指令的呼叫可以參照記憶體中的基底位址,從其用以計算執行預取之記憶體中的特定位置之位址。例如,LoadIndicesAndPrefetchScatter指令可參照一群資料元件位置中的第一位址,其中一些儲存將由指令所預取之內容。LoadIndicesAndPrefetchScatter指令的呼叫可參照記憶體中的索引陣列,其每一個可以指定索引值或從該基底位址之偏移,該基底位址可用來計算其內容將由指令所預取的位置之位址。在一個實施例中,LoadIndicesAndPrefetchScatter指令的呼叫可以參考,在標度索引基底(scale-index-base,SIB)類型記憶體尋址運算元中的記憶體中的索引陣列以及基底位址暫存器。基底位址暫存器可以識別記憶體中的基底位址,從其可計算將被預取內容之記憶體中的特定位置之位址。記憶體中的索引陣列可以指定索引或從該基底位址之偏移,該基底位址可用來計算針對由指令預取的每個位置的位址。例如,LoadIndicesAndPrefetchScatter指令執行可以,對於儲存在索引陣列中連續位置的索引陣列中的每個索引值,使索引值從索引陣列被檢索出、基於該索引值和該基底位址計算特定資料元件位置的位址、從所計算的位址之記憶體預取該位置之內容而所預取的內容將使用讀取所有權存取而被寫入至快取。
在一個實施例中,LoadIndicesAndPrefetchScatter指令的呼叫可以當計算由指令所針對之預取位置的相應位址時,指定要施加到每個 索引值的標度因數。在一個實施例中,標度因數可在SIB類型記憶體定址運算元中被編碼。在一個實施例中,標度因數可以是一個、兩個、四個或八個。指定的標度因數可以取決於將由指令預取的各個資料元件的大小。在一個實施例中,LoadIndicesAndPrefetchScatter指令可以包括快取提示參數,其值指示應由指令所預取資料的快取階層之階。例如,“T0”的快取提示可指示元件應被預取到的第1階(L1)快取,以及“T1”的快取提示可指示元件應該預取到第2階(L2)快取。
在一個實施例中,LoadIndicesAndPrefetchScatter指令的呼叫可指定將由指令預取的資料元件的大小。例如,大小參數可以指示該資料元件是位元組、字、雙或四字。在另一示例中,大小參數可以指示該資料元件表示有號或無號的浮點值數,如單或雙精度浮點數值。在另一實施例中,LoadIndicesAndPrefetchScatter指令的呼叫可指定將由指令預取之內容的位置的最大數目。在一個實施例中,LoadIndicesAndPrefetchScatter指令的呼叫可指定遮罩暫存器被應用以有條件執行指令的各個運算。例如,遮罩暫存器可包括用於對應於含有該位置的索引值之索引陣列中的位置之每個潛在預取位置的相應位元。在本示例中,如果用於給定的位置的相應位元被設置,其索引值可以被檢索、其位址可被計算,並且其內容可被預取到快取階層的被識別之階。如果對於一個給定資料元件的相應的位元沒 有被設置,這些運算對於該給定的資料元件可以被省略。在其他實施例中,更多、更少或不同的參數可在LoadIndicesAndPrefetchScatter指令的呼叫中參照。
在圖21A中所述之示例實施例中,在(1)LoadIndicesAndPrefetchScatter指令及其參數(其可以包括記憶體位址運算元、標度因數、在預取目標位置中的資料元件的大小的指示、在執行預取的位置的最大數目的指示、快取提示、識別特定遮罩暫存器的參數、或指定遮罩類型的參數的任何或全部)可以藉由SIMD執行單元1912所接收。在一個實施例中,例如,LoadIndicesAndPrefetchScatter指令可以藉由核心1812內的分配器1814被發給SIMD協同處理器1910內SIMD執行單元1912。在另一個實施例中,LoadIndicesAndPrefetchScatter指令可以藉由主要處理器1920內的解碼器1922被發給SIMD協同處理器1910內SIMD執行單元1912。該LoadIndicesAndPrefetchScatter指令可以藉由SIMD執行單元1912執行。
在這個示例中,LoadIndicesAndPrefetchScatter指令可以有條件地預取記憶體系統1803中資料元件位置2103的各種那些的當前內容。儲存在資料元件位置2103的資料元件可以全部是相同的大小,並且可以藉由LoadIndicesAndPrefetchScatter指令的參數指定的該大小。可潛在地預取的資料元件可以任何隨機或任意順序方式被儲存在資料元件位置2103 內。在這個示例中,圖21A示出資料元件可能被預取的資料元件位置內的第一可能位置2103作為基底位址位置2104。基底位址位置2104的位址可由LoadIndicesAndPrefetchScatter指令的參數來識別。在這個示例中,SIMD執行單元1912內的遮罩暫存器2102可以被識別為遮罩暫存器,其內容是被使用於應用到指令的遮罩運算中,如果被指定的話。在這個示例中,將由LoadIndicesAndPrefetchScatter指令使用的索引值當預取時被儲存在記憶體系統1830的索引陣列2105中。索引陣列2105包括,例如,在索引陣列(位置0)內的第一(最低階)位置中的第一索引值,在索引陣列(位置1)內的第二位置的第二索引值2107等等。最後索引值2108被儲存在索引陣列2105中的最後(最高階位置)。
由SIMD執行單元1912所執行的LoadIndicesAndPrefetchScatter指令可以包括,在(2)決定對應於下一個潛在載入索引和預取(load-index-and-prefetch)的遮罩位元為假,且如果這樣,跳過下一個潛在載入索引和預取。例如,如果位元0為假,SIMD執行單元可以限制執行步驟(3)至(7)中的一些或全部以預取資料元件位置2103內之位置的當前內容,其位址可使用下一個索引值來計算。然而,如果對應於第一潛在的載入索引和預取為真,下一個潛在的載入索引和預取可被執行。例如,如果位元1為真,或者如果遮罩未被應用到指令,所述SIMD執行單元可以執行所有的步驟(3)至 (7)的全部以預取資料元件位置2103內的位置的當前內容,其位址可使用第二索引值2107和基底位址位置2104來計算。
用於潛在的載入索引和預取,其相應的遮罩位元為真,或當沒有施加遮罩時,在(3)用於預取的下一個索引值可以被檢索。例如,在第一潛在的載入索引和預取期間,第一索引值2106可以被檢索,在第二潛在的載入索引和預取期間,第二索引值2106可以被檢索,並依此類推。在(4)用於下一個預取之位址可以基於檢索索引值和基底位址位置2104的位址來計算。例如,用於下一個預取的位址可以被計算為基底位址和所檢索的索引值之總和,無論有無定標。在(5)下一個預取位置可以使用所計算的位址於記憶體中進行存取,並在(6)預取位置的當前內容可以從該位置進行預取。在(7)預取的內容可以被寫入L1快取1822或L2快取1824,取決於被包括用於該指令的快取提示。
在一個實施方案中,LoadIndicesAndPrefetchScatter指令的執行可包括重複圖21A中示出之運算的任何或一些步驟用於資料元件位置2103的每一個位置,其內容將由指令所預取。例如,在該指令可被退役之後,取決於相應的遮罩位元(如果施加遮罩),步驟(2)或步驟(2)至(7)可以對每個潛在的載入索引和預取執行。在一個實施例中,當指令從資料元件位置2103內的特定位置預取當前內容,該預取可能 使多個相鄰位置的內容與目標位置的內容一起被預取且快取在L1快取1822或L2快取1824中。在這個示例中,遮罩暫存器2102在圖21A中示出作為SIMD執行單元1912內的一個專用暫存器。在另一個實施例中,遮罩暫存器2102可以藉由處理器中但在SIMD執行單元1912之外的通用或專用暫存器來實現。在又一個實施例中,遮罩暫存器2102可以藉由擴展向量暫存器檔1914中的向量暫存器來實現。
在本發明的實施例中,Load-Indices-and-Prefetch-Scatters類型運算的某些形式可以從索引陣列基於這些索引將資料散佈至稀疏記憶體中的位置,且預取資料元件稍後將被散佈的記憶體中的其他位置之內容。圖21B是根據本發明實施例的用以執行從索引陣列載入索引、基於這些索引將元件散佈在稀疏記憶體、以及從記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權之運算的說明。根據本發明的實施例,在一個實施例中,系統1800可執行指令用以實施從索引陣列載入索引、基於這些索引將元件散佈在稀疏記憶體、以及從記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權之運算的說明。例如,指令之向量LoadIndicesScatterAndPrefetch形式可以被執行。指令可以包括運算元、位元、旗標、參數或其他元件的任何合適的數量和種類。
在一個實施方案中, LoadIndicesScatterAndPrefetch指令的呼叫可以參照來源向量暫存器。來源向量暫存器可以是擴展向量暫存器,其中將由LoadIndicesScatterAndPrefetch指令散佈在稀疏記憶體中的位置之資料元件被儲存。LoadIndicesScatterAndPrefetch指令的呼叫可以參照記憶體中的基底位址,其用以計算執行預取和散佈資料元件之記憶體中的特定位置之位址。例如,LoadIndicesScatterAndPrefetch指令可參照指向一群資料元件位置中的第一位址之指標。一些資料元件位置可以儲存將由指令所預取的內容。一些資料元件位置可為由指令所執行之散佈的目標。LoadIndicesScatterAndPrefetch指令的呼叫可參照記憶體中的索引陣列,其中一些可以指定索引值或從該基底位址之偏移,該基底位址可用來計算潛在的散佈目標位置之位址。一些索引值可以被用來計算其內容將由指令所預取之位置的位址,以便取得它們的所有權。一些索引值可以被用來計算指令將資料元件儲存為當前散佈運算的一部分的位置之位址。
在一個實施例中,LoadIndicesScatterrAndPrefetch指令的呼叫可以參考,在標度索引基底(scale-index-base,SIB)類型記憶體尋址運算元中的記憶體中的索引陣列以及基底位址暫存器。基底位址暫存器可以識別記憶體中的基底位址,其可計算將被散佈之資料元件或其內容將由指令所預取之記憶體中的特定位置之位址。記憶體中的索引陣列可以指定索引或從 基底位址的偏移,該基底位址可用來計算由指令所預取的內容之記憶體中的特定位置之位址。例如,LoadIndicesScatterAndPrefetch指令執行可以,對於儲存在索引陣列中連續位置的索引陣列中的每個索引值,使索引值從索引陣列被檢索出、基於該索引值和該基底位址計算特定資料元件位置的位址、以及預期針對特定資料元件位置的後續散佈運算,使用讀取所有權存取而將特定資料元件位置之內容預取至指定的快取。在一個實施例中,對於儲存在索引陣列中的連續位置之索引陣列中的每個索引值,LoadIndicesScatterAndPrefetch指令的執行也可以(或替代),使第二索引值從與用於將被散佈的元件之索引值被檢索的位置距離一固定距離的索引陣列中的位置被檢索出、基於該第二索引值和該基底位址來計算記憶體中的第二資料元件位置之位址從識別用於該指令的來源向量暫存器檢索出資料元件、以及將資料元件儲存在所計算之位址作為當前散佈運算之部分。
在一個實施例中,LoadIndicesScatterAndPrefetch指令的呼叫可以當藉由指令計算資料元件位置的對應位址時,指定要施加到每個索引值的標度因數。在一個實施例中,標度因數可在SIB類型記憶體定址運算元中被編碼。在一個實施例中,標度因數可以是一個、兩個、四個或八個。指定的標度因數可以取決於將由指令所散佈和預取的各個資料元件的大小。在一個實施例中,LoadIndicesScatterAndPrefetch指令可以 包括快取提示參數,其值指示應由指令所預取的資料元件的快取階層之階。例如,“T0”的快取提示可指示元件應被預取到的第1階(L1)快取,以及“T1”的快取提示可指示元件應該預取到第2階(L2)快取。
在一個實施例中,LoadIndicesScatterAndPrefetch指令的呼叫可指定將由指令所散佈或預取的資料元件的大小。例如,大小參數可以指示該資料元件是位元組、字、雙或四字。在另一示例中,大小參數可以指示該資料元件表示有號或無號的浮點值數,如單或雙精度浮點數值。在另一個實施例中,LoadIndicesScatterAndPrefetch指令的呼叫可指定將由指令所散佈或預取的資料元件的最大數目。在一個實施例中,LoadIndicesScatterAndPrefetch指令的呼叫可以基於被用於計算散佈運算和預取運算的目標位址的索引值之相對位置,在將發生預取處指定與散佈運算的固定偏移距離。例如,在迭代期間,其中其位址是使用索引陣列中的第十位置中的索引值計算之資料元件是由LoadIndicesScatterAndPrefetch指令所散佈,用於指定其20的預取偏移,該指令可預取其位址是使用在索引陣列中的第三十位置的索引值計算之資料元件。
在一個實施例中,LoadIndicesScatterAndPrefetch指令的呼叫可指定遮罩暫存器被應用以有條件地執行指令的各個運算。例如,遮罩暫存器可包括用於對應於含有資料元件的索引值之索引陣 列中的位置之每個潛在的散佈的資料元件的相應位元。在本示例中,如果用於給定資料元件的相應的位元被設定,其索引值可以被檢索,其所散佈之位址可被計算、給定的資料元件可以從來源向量暫存器中檢索、以及該資料元件可以被儲存在所計算的位址於記憶體中。如果用於給定的資料元件中的相應的位元沒有被設定,這些運算的任何或全部可以針對給定的資料元件而被省略且給定的資料元件將不會被儲存在記憶體中。在一個實施例中,如果用於給定的資料元件的相應的位元被設定,可預取記憶體中的另一位置的內容,即其是基於與由指令所散佈的資料元件之索引值距離一固定距離的索引值所計算的一者。如果用於將被散佈的給定的資料元件的相應的位元沒有被設定,這些運算對於當前的迭代可以被省略。在另一個實施例中,LoadIndicesScatterAndPrefetch指令可預取記憶體中的位置之內容,其是基於與可能已經或可能沒有由指令所散佈的資料元件的索引值距離固定距離的索引值來計算,其取決於相應的遮罩位元。
在一個實施例中,如果LoadIndicesScatterAndPrefetch指令的呼叫於該運算的散佈部分之結果寫入記憶體時,指定將被應用的遮罩暫存器,它也可指定將要應用的遮罩類型,像是合併遮罩或零遮罩。例如,如果合併遮罩被應用且用於給定的資料元件的遮罩位元未被設定,儲存在LoadIndicesScatterAndPrefetch執行之前已經被儲存給定 的資料元件之記憶體中的位置之值可被保留。在另一個示例中,如果零遮罩被應用且對於給定的資料元件中的遮罩位元未設定,像是全零的NULL值,可以被寫入到否則已經儲存給定的資料元件(其已經被散佈)之記憶體中的位置。在其他實施例中,更多、更少或不同的參數可在LoadIndicesScatterAndPrefetch指令的呼叫中參照。
在圖21B所述之示例實施例中,在(1)LoadIndiceSScatterAndPrefetch指令及其參數(其可以包括暫存器和記憶體位址運算元、標度因數、在將被預取及/或散佈的資料元件之大小的指示、在將被預取及/或散佈的資料元件的最大數目的指示、快取提示、指定將發生預取處的固定偏移距離、識別特定遮罩暫存器的參數、或指定遮罩類型的參數的任何或全部)可以藉由SIMD執行單元1912所接收。在一個實施例中,例如,LoadIndicesScatterAndPrefetch指令可以藉由核心1812內的分配器1814被發給SIMD協同處理器1910內的SIMD執行單元1912。在另一個實施例中,LoadIndicesScatterAndPrefetch指令可以藉由主要處理器1920內的解碼器1922被發給SIMD協同處理器1910內SIMD執行單元1912。該LoadIndicesScatterAndPrefetch指令可以藉由SIMD執行單元1912執行。
在本示例中,用於LoadIndicesScatterAndPrefetch指令的參數可以識別擴展向量暫存器檔1914內的擴展向量暫存器ZMMn(2101) 作為用於由指令所執行的散佈之來源向量暫存器。在這個示例中,可能潛在地被散佈至記憶體系統1803中資料元件位置2103中的各者之資料元件可以被儲存在來源向量暫存器ZMMn(2101)中。此外,可潛在地被預取的資料元件被儲存在記憶體系統1803中的資料元件位置2103中的各者。儲存在來源向量暫存器ZMMn(2101)和資料元件位置2103的資料元件可以全部是相同的大小,並且可以藉由LoadIndicesScatterAndPrefetch指令的參數指定的該大小。可潛在地藉由指令之執行而預取的資料元件可以任何隨機或任意順序方式被儲存在資料元件位置2103內。可潛在的藉由指令之執行被散佈的資料元件可被以任何隨機或任意的順序散佈至資料元件位置2103內的位置。在這個示例中,如圖21B所示,從資料元件可被散佈或從內容可被預取的資料元件位置2103內的第一可能位置作為基底位址位置2104。基底位址位置2104的位址可由LoadIndicesScatterAndPrefetch指令的參數來識別。在這個示例中,SIMD執行單元1912內的遮罩暫存器2102可以被識別為遮罩暫存器,其內容是被使用於應用到指令的遮罩運算中,如果被指定的話。
在這個示例中,被用以計算將由LoadIndicesScatterAndPrefetch指令所散佈的元件之位址的索引值被儲存在記憶體系統1830的索引陣列2105中。此外,被用以計算將由LoadIndicesAndPrefetchScatter指令所預取的元件之位址的索引值被儲存在記憶體系統 1830的索引陣列2105中。索引陣列2105包括,例如,在索引陣列(位置0)內的第一(最低階)位置中的第一索引值,在索引陣列(位置1)內的第二位置的第二索引值2107等等。最後索引值2108被儲存在索引陣列2105中的最後(最高階位置)。在這個示例中,LoadIndicesScatterAndPrefetch指令可以包括快取提示參數,其識別在記憶體子系統1830中的L1快取1822或L2快取1824作為由指令預取元件的快取。例如,“T0”的快取提示可指示元件應被預取到的L1快取1822,以及“T1”的快取提示可指示元件應該預取到L2快取1824。
由SIMD執行單元1912所執行的LoadIndicesScatterAndPrefetch指令可以包括,在(2)決定對應於下一個潛在將被散佈的資料元件的遮罩位元為假,且如果這樣,跳過下一個潛在載入索引和散佈(load-index-and-scatter)。例如,如果位元0為假,SIMD執行單元可以限制執行步驟(3)至(6)中的一些或全部以散佈資料元件,其位址可使用第一索引值2016來計算。然而,如果對應於下一個潛在的散佈為真,下一個潛在的載入索引和散佈可被執行。例如,如果位元1為真,或者如果遮罩未被應用到指令,所述SIMD執行單元可以執行所有的步驟(3)至(6)的全部以散佈資料元件至資料元件位置2103內的位置,其位址可使用第二索引值2107和基底位址位置2104來計算。
用於潛在的載入索引和散佈,其相應的遮罩 位元為真,或當沒有施加遮罩時,在(3)用於散佈的索引值可以被檢索。例如,在第一潛在的載入索引和散佈期間,第一索引值2106可以被檢索,在第二潛在的載入索引和散佈期間,第二索引值2106可以被檢索,並依此類推。在(4)用於下一個散佈之位址可以基於檢索索引值和基底位址位置2104的位址來計算。例如,用於下一個散佈的位址可以被計算為基底位址和所檢索的索引值之總和,無論有無定標。在(5)下一個資料元件可以從來源向量暫存器ZMMn(2101)檢索,且在(6)資料元件可以使用所計算的位址將資料元件儲存到資料元件位置2103內的位置。
藉由SIMD執行單元1912所執行的LoadIndicesScatterAndPrefetch指令也可包括在(7)檢索用於預取的下一個索引值。例如,用於預取的下一個索引值可以從索引陣列2015檢索,其與用於散佈的索引值以指令所指定的固定偏移距離d中所檢索到的位置分開。例如,在第一迭代期間,第一索引值2106可以被檢索用於散佈運算以及在位置(0+d)的索引值可被檢索用於預取運算。在(8)用於下一個預取之位址可以基於檢索索引值和基底位址位置2104的位址來計算。例如,用於下一個預取的位址可以被計算為基底位址和所檢索的用於預取的索引值之總和,無論有無定標。在(9)下一個預取位置可以使用所計算用於預取的位址於記憶體中進行存取,並在(10)該位置的內容可以使用讀取所有權來預取。在 (11)預取的資料元件可以被寫入L1快取1822或L2快取1824,取決於指定用於該指令的快取提示。
在一個實施例中,LoadIndicesScatterAndPrefetch指令之執行可包括重複圖21B所述之運算的任何或所有步驟,用於將由指令潛在地散佈至資料元件2103的任一個的每一個資料元件及/或用於在相同迭代期間發生的對應之預取。例如,取決於相應的遮罩位元(如果施加遮罩),步驟(2)或步驟(2)至(6)可以對潛在的載入索引和散佈執行。例如,如果合併遮罩被施加到該指令,且如果對應於第一索引值2106的資料元件沒有被寫入到資料元件位置2103的位置,因為這個用於資料元件的遮罩位元為假,包含在資料元件已經被儲存之位置中的值在前LoadIndicesScatterAndPrefetch指令執行之前可被保留。例如,如果零遮罩被施加到該指令,且如果對應於第一索引值2106的資料元件沒有被寫入到資料元件位置2103的位置,因為這個用於資料元件的遮罩位元為假,像是全零的NULL值可被寫入至資料元件已經被儲存之位置。在一個實施例中,將由指令散佈的每個資料元件可被儲存在來源向量暫存器ZMMn(2101),其對應於用於資料元件的索引值的位置。例如,將使用第二索引值2107所計算的目標散佈位置的資料元件可被儲存在來源向量暫存器ZMMn(2101)內的第二位置(位置1)中。
在一個實施例中,步驟(7)至(11)可以在 每個迭代期間執行,以便從資料元件位置2103的最大數目預取,無論迭代的負載索引和散佈部分是否導致將資料元件散佈至資料元件位置2103內的位置。在另一個實施例中,當用於對應的潛在散佈元件的遮罩位元未被設定時,步驟(7)至(11)也可以被省略。在又一個實施例中,第二遮罩暫存器可以調節每個迭代中的步驟(7)至(11)中之指令預取部分之運算。例如,在第二個暫存器中每個位元可以調節步驟(7)至(11)的一次迭代的運算,使得,對於已設定的每一位元,資料元件可以從使用索引值間接定址的位置被預取,該索引值在索引陣列中以距離d與用於該迭代的散佈部分的索引值分開。在一個實施例中,資料元件是從資料元件位置2103內的特定位置所預取,該預取可使多個相鄰位置的元件與目標資料元件一起被預取且快取在L1快取1822或L2快取1824中。例如,4、8、16或32個資料元件可以一次被預取至識別的快取中,依據該預取的目標的位置和大小以及快取線的長度。
在這個示例中,遮罩暫存器2102在圖21B中示出作為SIMD執行單元1912內的一個專用暫存器。在另一個實施例中,遮罩暫存器2102可以藉由處理器中但在SIMD執行單元1912之外的通用或專用暫存器來實現。在又一個實施例中,遮罩暫存器2102可以藉由擴展向量暫存器檔1914中的向量暫存器來實現。
在一個實施例中,擴展的SIMD指令集架構 可實施向量運算的多個版本或形式,以從索引陣列載入索引以及從資料元件隨後將基於這些索引被散佈的稀疏記憶體中的位置來預取元件。這些指令形式可以包括,例如,下面所示的那些:LoadIndicesAndPrefetchScatter{size} {kn} (PTR, PTR, hint)
LoadIndicesAndPrefetchScatter{size} {kn} ([vm32], [vm32], hint)
在上面所示的LoadIndicesAndPrefetchScatter指令的示例形式中,第一PTR值或記憶體位址運算元可識別記憶體中的基底位址位置。第二PTR值或記憶體位址運算元可識別記憶體中的索引陣列。在這些LoadIndicesAndPrefetchScatter指令的示例形式中,“大小”修改器可以指定將從記憶體中的位置被預取的資料元件大小及/或類型。在一個實施例中,指定的大小/類型可以是{B/W/D/Q/PS/PD}中的一個。在上面所示的LoadIndicesAndPrefetchScatter指令的示例形式中,提示參數可以指示資料元件將被預取至的快取。例如,“T0”的提示可指示資料元件是由指令預取到的第1階(L1)快取,而“T1”的提示可指示資料元件是被預取到第2階(L2)快取。
在這些示例中,可選的指令參數“kn”可識別多個遮罩暫存器的特定一個。當遮罩被施加到LoadIndicesAndPrefetchScatter指令時,可指定此參數。 遮罩將被施加的實施例中,掩蔽是要施加(例如,如果該指令指定了遮罩暫存器)中,可選的指令參數“Z”可指示是否應該施加零遮罩。在一個實施例中,如果該可選的參數被設定,可以施加零遮罩,並且如果該可選的參數沒有被設定,或者如果該可選的參數被刪去,則可以施加合併遮罩。在其它實施例中(未示出),LoadIndicesAndPrefetchScatter指令可包括指示將被預取之資料元件的最大數量之參數。在另一個實施例中,將被預取之資料元件的最大數量可基於儲存索引值陣列中的索引值的數量由SIMD執行單元來決定。
在一個實施例中,擴展的SIMD指令集架構可實施向量運算的多個版本或形式,以從索引陣列載入索引、基於這些索引將一或多個元件散佈至記憶體中的位置、以及預取後資料元件將被散佈至的記憶體中的其他位置之內容。這些指令形式可以包括,例如,下面所示的那些:LoadIndicesScatterAndPrefetch{size} {kn} {z} (PTR, PTR, REG, hint, imm.)
LoadIndicesScatterAndPrefetch{size} {kn} {z} ([vm32], [vm32], REG, hint, imm.)
在上面所示的LoadIndicesScatterAndPrefetch指令的示例形式,REG參數可識別作為用於指令的來源向量暫存器之擴展向量暫存器。在這些示例中,第一PTR值或記憶體位址運算元可識別記憶體中的基底位址位置。 第二PTR值或記憶體位址運算元可識別記憶體中的索引陣列。在這些LoadIndicesScatterAndPrefetch指令的示例形式中,“大小”修改器可以指定被散佈到記憶體中的位置之儲存在來源向量暫存器中的資料元件的大小及/或類型,以及將被預取到由指令所識別的快取的資料元件的大小。在上面所示的LoadIndicesScatterAndPrefetch指令的示例形式中,提示參數可以指示資料元件將被預取至的快取。例如,“T0”的提示可指示資料元件是由指令預取到的第1階(L1)快取,而“T1”的提示可指示資料元件是被預取到第2階(L2)快取。在上面所示的LoadIndicesScatterAndPrefetch指令的示例形式,立即參數值可以指示前方多遠將發生預取。
在一個實施例中,指定的大小/類型可以是{B/W/D/Q/PS/PD}中的一個。在這些示例中,可選的指令參數“kn”可識別多個遮罩暫存器的特定一個。當遮罩被施加到LoadIndicesScatterAndPrefetch指令時,可指定此參數。遮罩將被施加的實施例中,掩蔽是要施加(例如,如果該指令指定了遮罩暫存器)中,可選的指令參數“Z”可指示是否應該施加零遮罩。在一個實施例中,如果該可選的參數被設定,可以施加零遮罩,並且如果該可選的參數沒有被設定,或者如果該可選的參數被刪去,則可以施加合併遮罩。在其它實施例中(未示出),LoadIndicesScatterAndPrefetch指令可包括指示將被散社之資料元件的最大數量或從用以預取之位置的最大數量之 參數。在一個實施例中,將被散佈或預取之資料元件的最大數量可基於儲存索引值陣列中的索引值的數量由SIMD執行單元來決定。在另一個實施例中,將被散佈之資料元件的最大數量可基於來源向量暫存器的容量由SIMD執行單元來決定。
圖22A和22B依據本發明實施例示出的負載指數和預取散佈(Load-Indices-and-Prefetch-Scatters)類型指令的各自的形式的運算。更具體地,圖22A示出LoadIndicesandPrefetchScatter指令的示例,其指定可選的遮罩暫存器,以及圖22B說明LoadIndicesScatterandPrefetch指令的示例的運算,其不指定可選的遮罩暫存器。
圖22A和22B都示出了索引陣列2105。在這些示例中,儲存在索引陣列2105的索引被組織在行中。而圖22A和22B沒有描繪所有相同行和索引值,在這兩個圖中具有類似的符號之行和索引值可以被認為是類似的。在這些示例中,對應於可潛在地藉由散佈運算被儲存到記憶體中的第一資料元件S0的索引值被儲存在索引陣列2105內的最低階位址中,如列2210中的位址B(2106)所示。在這些示例中,對應於可潛在地藉由散佈運算被儲存到記憶體中的第二資料元件S1的索引值被儲存在索引陣列2105內的第二低階位址中,如列2210中的位址(2107)所示。對應於可潛在地藉由散佈運算被儲存到記憶體中的第十六資料元件S15的索引值被儲存在列 2212中的最高階位置,在位址2108。在這些示例中,所有索引陣列2105(包括描繪於圖22A中的列2210至2214以及描繪於圖22B中的列2210至2215)的所有列,每一個都包含連續的八個索引值。
圖22A和22B兩者都示出了來源向量暫存器ZMMn(2101),其中,資料元件可潛在地藉由散佈運算被儲存到資料元件位置2103中的各者。在一個實施例中,儲存在來源向量暫存器ZMMn(2101)中的來源資料元件可以其對應的索引值的順序而被儲存在來源向量暫存器ZMMn(2101)內的連續位置中。
圖22A說明了“LoadIndicesAndPrefetchScatterD kn(Addr A,Addr B,ZMMn,T0)指令”的運算,其指定遮罩暫存器。在這個示例中,遮罩暫存器kn(2220)包括十六個位元,每一個對應於索引陣列2105中的一個索引值。在這個示例中,在位置5、10、11和16位置(位元4、9、10和15)之位元為假,而其餘的位元都為真。因此,如圖21A中之步驟(3)至(7)所示的運算可不被執行用於指令中的那些運算的第五、第十、第十一、或第十六個迭代。
在圖22A所示的示例中,向量指令“LoadIndicesAndPrefetchScatterD kn(Addr A,Addr B,ZMMn,T0)”的執行可能導致索引陣列2105中的前16個索引值(在位置0開始)被載入索引暫存器(未示出)且被用於計算在其執行預取的位置之位址,假定預期即將到 來的散佈運算之那些位置的所有權。在一個實施例中,這些預取可被平行或同時地執行。在此示例中,第五、第十、第十一、和第十六索引值將不被載入,且基於這些索引值間接定址的位置之內容也不會被預取。在這個示例中,在發生預取的固定偏移距離是24。
此指令的執行可能會導致使用開始於位置24的十六個索引值的十二個所間接定址的記憶體中之位置的當前內容被預取到第一階(L1)快取1822(其是由快取提示“T0”所識別)。在一個實施例中,這些預取可被平行或同時地執行。在一個實施例中,此固定偏移距離可以由系統自動決定。例如,固定偏移可由SIMD執行單元來計算。固定偏移可以基於當元件被預取及當它們可被使用時之間的延遲。固定偏移可以基於當值被預取時及當他們被預測可能是分散運算的目標時之間的期望時間。
此指令的執行可能會產生在圖22A的底部示出的結果。在此示例中,接著指令的執行之後,L1快取1822(其是由快取提示“T0”識別)包含由指令執行的預取運算的目標的十二個位置的內容。資料元件位置2103內的這些十二個位置的位址是基於基底位址2104和從索引陣列2105檢索用於預取運算的各索引值來計算。執行預取之資料元件位置2103內的特定位置,是任意的,沒有在圖中示出。在示例中,被預取到L1快取1822中的資料是任意的資料(指定為“Dn”),其被發生以被儲存在為後續的散佈運算之潛在目標的資料元件位置中。例如,被預 取到L1快取1822的資料包括任意資料元件D24至D27(在資料元件位置2103中的其位址是基於索引值24至27來計算)、D29至32(在資料元件位置2103中的其位址是基於索引值29至32來計算)、以及資料元件D35至D38(在資料元件位置2103中的其位址是基於索引值35至38來計算)。
在一個實施例中,資料元件是從資料元件位置2103內的特定位置所預取,該預取可使多個相鄰位置的元件與目標資料元件一起被預取且快取在L1快取1822中。例如,4、8、16或32個資料元件可以一次被預取至識別的快取中,依據該預取的目標的位置和大小以及快取線的長度。這在圖22A中由L1快取1822內的子區塊所示。在此示例中,每個被擷取至快取的子區塊包括由預取和與目標元件一起被預取的其他元件定位的位置的內容。在這個示例中,因為索引值28、33、34和39對應於未被設定的遮罩暫存器位元,使用這些索引值來間接定址的資料元件位置2103中的位置的當前內容沒有被預取到L1快取1822。
圖22B示出了不指定可選的遮罩暫存器的載入索引散佈和預取(Load-Indices-Scatter-and-Prefetch)指令的示例的運算。指令包括快取提示“T1”其指示任何預取的元件將被儲存到一第二階(L2)快取。指令亦明確指定在將發生預取的固定偏移距離(32)。在這示例中,指令可於儲存在來源向量暫存器ZMMn(2101)中的相同的 資料元件上運算,並且可以使用相同的索引陣列2105,如圖22A中示出其運算的指令,雖然不是所有包括在這兩個圖式中的這些結構之各別元件、索引值、列都是相同的。
圖22B還說明了一群資料元件位置2103。資料元件位置2103內的任何位置可以是將資料元件儲存到任意位置或稀疏記憶體(例如,稀疏陣列)中的位置之散佈運算的潛在目標。在這個示例中,資料元件位置2103內的位置中被組織在列中。例如,資料元件位置2103包括列2201至2206,其每一個包括資料元件可被散佈至的八個潛在目標位置。如圖22B中所示,而儲存在索引陣列2105中的索引值被依序儲存,其目標目的地位置由這些索引值間接定址的資料元件可以藉由散佈運算以任何順序被儲存在記憶體中。
在這個示例中,資料元件位置2103內的一些位置可包括由一個或多個先前的指令所儲存到記憶體的資料,其中一些可以包括向量指令。例如,資料元件S4790(在基底位址2104)及列2201中的S39,列2203中的資料元件S3218和S687,以及列2204中的資料元件S32和S289可能已被儲存在由一或多個先前散佈運算所示的位置中。多列2202(列2201和列2203之間)或列2206(超過列2204),也可包括藉由先前的指令儲存至這些列內之位置的資料元件。在一個實施例中,其內容在圖22B中以“U”指定的資料元件位置可以是未使用的。在這 個示例中,它們也可不受其運算為圖中所描繪的載入索引和散佈指令的示例形式之執行所影響。在一個示例中,它們可包含空(NULL)值。在另一示例中,它們可以是稀疏陣列內沒有被佔據的位置。
向量指令“LoadIndicesScatterAndPrefetchD(Addr A,Addr B,ZMMn,T1,32)”的執行可能會導致開始於索引陣列2105中位置0的十六個索引值被載入索引暫存器(未示出)用於即將到來的散佈運算。在這個示例中,沒有遮罩被指定給該指令。此指令的執行也可能會導致來源向量暫存器ZMMn(2101)中的十六個資料元件被儲存到資料元件位置2103中的位置,其是使用開始於索引陣列2105的位置0的十六個索引值所間接定址的。在一個實施例中,這些預取可被平行或同時地執行。此指令的執行也可能導致資料元件位置2105內的十六個位置的內容被預取到快取。尤其,此指令的執行可能會導致十六個預取目標位置的位址使用開始於索引陣列2105的位置32的十六個索引值所計算且那些預取目標位置的內容及將被預取至第二階(L2)快取1824(其是由快取提示“T1”所識別)。在這個示例中,在發生預取(32)的固定偏移距離是由指令的參數所明確指定。
LoadIndicesScatterAndPrefetchD(ZMMn,Addr A,Addr B,T1,32)指令的執行可產生在圖22B的底部中所示的結果。在此示例中,該指令的執行之後,儲存在ZMMn暫存器2101中的十六個資料元件S0至S15 可以被儲存在資料元件位置2103內的個別位置中,其位址是基於基底位址2104和從索引陣列2105內的前十六個位置檢索的個別檢索值所計算。被分散到記憶體中的每個資料元件被儲存在與索引陣列2105中的索引值的位置一致的位置中。例如,資料元件S0被儲存在ZMMn暫存器2101在第一位置(位置0),並索引陣列2105中的第一位置(當前位置0)的索引值被用於計算由散佈運算所儲存的位置之位址(位址2207)。同樣地,資料元件S1被儲存在ZMMn暫存器2101的第二位置,索引陣列2105內的第二位置中的索引值被用來計算由散佈運算所儲存的資料元件S1的位置之位址(位址2209),資料元件S5被儲存在ZMMn暫存器2101的第六位置,以及索引陣列2105內的第六位置中的索引值被用來計算由散佈運算所儲存的資料元件S5的位置之位址(位址2216),等等。
在本示例中,指令的執行之後,由指令所預取之十六個資料元件D32至D47示出於L2快取1824內。在示例中,被預取到L2快取1824中的資料是任意的資料(指定為“Dn”),其被發生以被儲存在為後續的散佈運算之潛在目標的資料元件位置中。這些資料元件從位置所預取,其位址基於從索引陣列2105內的十六個位置所檢索的個別索引值來計算,在與散佈的資料元件的索引值被檢索的位置距32的距離。在一個實施例中,資料元件是從資料元件位置2103內的特定位置所預取,該預取可使多個相鄰位置的元件與目標資料元件一起被預取且快取 在L2快取1824中。例如,4、8、16或32個資料元件可以一次被預取至識別的快取中,依據該預取的目標的位置和大小以及快取線的長度。然而,為簡單起見,這沒有在圖22B示出。
圖23是根據本發明實施例示出用於從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權之示例方法2300。方法2300可以由圖1至22所述的任何元件所實現。方法2300可以藉由任何合適的標準來啟動,並且可以在任何合適的點開始運算。在一個實施例中,方法2300可在2305開始運算。方法2300可以包括比示出的那些更多或更少的步驟。此外,方法2300可以與下面所描述不同的順序執行其步驟。方法2300可在任何合適的步驟終止。此外,方法2300可以以任何適當的步驟重複運算。方法2300可以平行於方法2300的其他步驟來執行其任何步驟,或與其它方法的步驟並行。此外,方法2300可被執行多次以執行從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權。
在2305,在一個實施例中,用以執行從索引陣列載入索引以及基於這些索引從稀疏記憶體中的位置預取、取得用於隨後的散佈之記憶體中的位置的所有權的指令可被接收和解碼。例如,LoadIndicesAndPrefetchScatter指令可被接收和解碼。在2310,指令和指令的一或多個 參數,可導向用於執行的SIMD執行單元。在一些實施例中,指令參數可包括記憶體中的索引陣列的識別符或指向記憶體中索引陣列的指標、用於記憶體中一群潛在的資料元件位置之基底位址的識別符或指向用於記憶體中一群潛在的資料元件位置之基底位址的指標,包括可為隨後散佈運算的目標之資料元件位置、將被預取之資料元件的大小的指示、將被預取之資料元件的最大數目的指示、指示資料元件應被預取至快取階層中的特定快取的快取提示、識別特定遮罩暫存器的參數、或指定遮罩類型的參數。
在2315,在一個實施例中,第一潛在的載入索引和預取(load-index-and-prefetch)的處理可以開始。例如,在2320至2355所示的步驟的第一迭代,其對應於識別用於指令的記憶體中索引陣列中的第一位置(位置i=0),可以開始。如果(在2320)其決定對應於索引陣列中的第一位置(位置0)遮罩位元未被設定,那麼在2320至2355中所示的步驟可以被省略用於此迭代。在這種情況下,使用索引陣列中的第一位置的索引值所間接定址的記憶體中的位置中的值將不被預取。
如果(在2320)其決定對應於索引陣列中的第一位置的遮罩位元被設定或沒有遮罩被指定用於LoadIndicesAndPrefetchScatter運算,則在2330,對於執行預取的第一位置的索引值可從索引陣列中的位置i(位置0)被檢索。在2335,目標預取位置的位址可以基於指定用於指令的基底位址及獲得用於第一預取的索引值的總 和來計算。在2340,在計算出的位址中的目標預取位置的內容可以被預取到由用於指令的快取提示參數所識別的快取中。在一個實施例中,目標預取位置的內容可以讀取所有權存取來預取。
如果(在2350),其決定有更多潛在的預取要被執行,則在下一個潛在的載入索引和預取的處理可開始。例如,在2320至2355所示的步驟的第二迭代,其對應於索引陣列中的第二位置(位置i=2),可以開始。直到迭代(i)的最大數目已經被執行,在2320至2355中所示的步驟可以被重複以i的下一個值用於每個額外迭代。用於每個額外迭代,如果(在2320)其決定對應於索引陣列中的下一個位置(位置0)遮罩位元未被設定,那麼在2320至2355中所示的步驟可以被省略用於此迭代。在這種情況下,在2325,使用索引陣列中的位置i的索引值所間接定址的記憶體中的位置中的當前內容將不被預取。然而,如果(在2320)其決定對應於索引陣列中的下一個位置的遮罩位元被設定或沒有遮罩被指定用於LoadIndicesAndPrefetchScatter運算,則在2330,索引值可從索引陣列中的下一個位置被檢索。在2335,當前內容將從其預取的記憶體中的下一個位置的位址可以基於指定用於指令的基底位址及獲得用於下一預取的索引值的總和來計算。在2340,在計算出的位址在記憶體中的位置的內容可以被預取到指定的快取。
在一個實施例中,迭代的次數可以取決於該 指令的參數。例如,該指令的參數可指定索引陣列中的索引值的數量。這可以表示為指令的最大迴圈索引值,並且因此,可以由指令執行之預取的最大數量。一旦迭代(i)的最大數量已經被預取,指令可(在2360)退役。
在一個實施例中,LoadIndicesAndPrefetchScatter類型的運算可從索引陣列載入索引、基於這些索引將元件散佈至稀疏記憶體中的位置、以及從之後可能是潛在的散佈運算的目標的位置預取其他元件。例如,形式LoadIndicesAndPrefetchScatter的LoadIndicesAndPrefetchScatter類型的運算可被執行以從索引陣列載入索引、基於這些索引將元件散佈至稀疏記憶體中的位置、以及從之後可能是潛在的散佈的目標的位置預取其他元件。圖24是根據本發明實施例的用以從索引陣列載入索引、基於這些索引將元件散佈在稀疏記憶體、以及從記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權之示例方法。
方法2400可以由圖1至22所述的任何元件所實現。方法2400可以藉由任何合適的標準來啟動,並且可以在任何合適的點開始運算。在一個實施例中,方法2400可在2405開始運算。方法2400可以包括比示出的那些更多或更少的步驟。此外,方法2400可以與下面所描述不同的順序執行其步驟。方法2400可在任何合適的步驟終止。此外,方法2400可以以任何適當的步驟重複運算。方法2400可以平行於方法2400的其他步驟來執行 其任何步驟,或與其它方法的步驟並行。此外,方法2400可被執行多次以執行從索引陣列載入索引以及基於這些索引將元件散佈至稀疏記憶體中的位置、以及從記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權。
在2405,在一個實施例中,指令用以執行從索引陣列載入索引以及基於這些索引將元件散佈至稀疏記憶體中的位置、以及從記憶體中的額外位置預取、取得用於隨後的散佈之記憶體中的額外位置的所有權。例如,LoadIndicesScatterAndPrefetch指令可被接收和解碼。在2410,指令和指令的一或多個參數,可導向用於執行的SIMD執行單元。在一些實施例中,指令參數可包括記憶體中的索引陣列的識別符或指向記憶體中索引陣列的指標、用於記憶體中一群潛在的資料元件位置之基底位址的識別符或指向用於記憶體中一群潛在的資料元件位置之基底位址的指標,包括可為隨後散佈運算的目標之資料元件位置,以及可為當前預取的目標之其他資料元件位置、來源暫存器的識別符(其可為擴展向量暫存器)、將被散佈及/或預取之資料元件的大小的指示、將被散佈及/或預取之資料元件的最大數目的指示、指示資料元件應被預取至快取階層中的特定快取的快取提示、指定固定距離的參數,該固定距離是在其係(潛在地)被用以在給定迭代期間散佈資料元件的索引陣列內的索引值位置和其係被用以從後散佈運算的目標之位置預取資料元件的索引陣列內的 索引值位置之間、識別特定遮罩暫存器的參數、或指定遮罩類型的參數。
在2415,在一個實施例中,第一潛在的載入索引散佈和預取(load-index-and-prefetch)的處理可以開始。例如,在2420至2455所示的步驟的第一迭代,其對應於識別用於指令的記憶體中索引陣列中的第一位置(位置i=0),可以開始。如果(在2420)其決定對應於索引陣列中的第一位置(位置0)遮罩位元未被設定,那麼在2430至2435中所示的步驟可以被省略用於此迭代。在這種情況下,儲存在來源暫存器中的第一位置(位置i=0)中的資料元件將不會被儲存到使用索引陣列中的第一位置的索引值由指令間接定址的記憶體中的位置。
如果(在2420)其決定對應於索引陣列中的第一位置的遮罩位元被設定或沒有遮罩被指定用於LoadIndicesScatterrAndPrefetch運算,則在2430,用於將被散佈的第一元件的索引值可從索引陣列中的位置i(位置0)被檢索,以及第一元件將散佈的位址可被計算。在一個實施例中,將被散佈的第一元件的位址可以基於指定用於指令的基底位址及獲得用於將被散佈的第一元件的索引值的總和來計算。在2435,將被散佈第一元件可以從由該指令的參數所識別的目的地暫存器的位置i(位置0)被檢索,並被儲存在所計算的位址之記憶體中的該位置。
在2440,在一個實施例中,不論在步驟2430 至2435中所示的運算是否在第一次迭代期間被執行,用於將被預取的元件的索引值可從與位置i偏移指定用於指令的預取偏移距離的索引陣列中的位置被檢索,以及用於將被預取的元件的位址可被計算。在一個實施例中,將被預取的元件的位址可以基於指定用於指令的基底位址及獲得用於將被散佈的第一元件的索引值的總和來計算。在2445,將被預取的元件之位址可從所計算的位址之記憶中的位置被預取,之後其可被儲存在由用於指令的快取提示參數所識別的快取中。在一個實施例中,預取目標位置的內容可以讀取所有權存取來預取。
如果(在2450),其決定有更多潛在的散佈和預取將要被執行,接著在2455,則在下一個潛在的載入索引散佈和預取(load-index-scatter-and-prefetch)的處理可開始。例如,在2420至2455所示的步驟的第二迭代,其對應於索引陣列中的第二位置(位置i=2),可以開始。直到迭代(i)的最大數目已經被執行,在2420至2455中所示的步驟可以被重複以i的下一個值用於每個額外迭代,假如適當的話。用於每個額外迭代,如果(在2420)其決定對應於索引陣列中的下一個位置(位置0)遮罩位元未被設定,那麼在2430至2435中所示的步驟可以被省略用於此迭代。在這種情況下,在2425,在LoadIndicesScatterAndPrefetch指令的執行之前儲存在來源暫存器中位置i的資料元件可以不被儲存到記憶體中。然而,如果(在2420)其決定對應於索引陣列中的 第一位置的遮罩位元被設定或沒有遮罩被指定用於LoadIndicesScatterAndPrefetch運算,則在2430,用於將執行預取的下一個位置的索引值將從索引陣列的位置i被檢索,以及用以散佈資料元件的記憶體中的位置之位址可被計算。在2435,被儲存在來源暫存器中的位置i的資料元件可以被儲存到所計算的位址之記憶體。在2440,對於每個額外的迭代,用於將被預取的元件的索引值可從索引陣列中的位置被檢索,其是與位置i偏移指定的距離,以及執行預取的位置之位址可被計算。在2445,在所計算的位址的位置的內容之位址可從所計算的位址之記憶體中的位置被預取到由用於指令的快取提示參數所識別的快取中。在一個實施例中,預取目標位置的內容可以讀取所有權存取來預取。
在一個實施例中,迭代的次數可以取決於該指令的參數。例如,該指令的參數可指定索引陣列中的索引值的數量。這可以表示用於指令的最大迴圈索引值,並且因此,可以由指令所散佈的資料元件的最大數量以及可以由指令所預取的資料元件的最大數量。一旦迭代(i)的最大數量已經被預取,指令可(在2460)退役。
雖然若干示例描述了LoadIndicesAndPrefetchScatter指令和LoadIndicesScatterAndPrefetch指令的形式儲存將被散佈至記憶體的資料元件到擴展向量暫存器(ZMM暫存器),在其他實施例中,這些指令可在少於512位元的向 量暫存器中儲存的來源資料元件上運算。例如,將被散佈的資料元件的最大數量可基於他們的大小被儲存在256位元或更少位元中,LoadIndicesAndPrefetchScatter指令可從YMM目的地暫存器或XMM目的地暫存器檢索將被散佈的資料元件。在幾個上述的示例中,將被散佈及/或預取的資料元件都相對較小(例如,32位元)以及有足夠多的數量使得它們都可以被儲存在單一ZMM暫存器中。在其他實施例中,可以有足夠的潛在的將被散佈的資料元件(取決於資料元件的大小),他們可填充多個ZMM來源暫存器。例如,可能有超過512位元的資料元件將由指令所散佈。
本文公開的機制的實施例可以以硬體、軟體、韌體或這些實施方式的組合來實現。本發明的實施例可以被實施為在可編程系統上執行的電腦程式或程式碼,系統包含至少一個處理器、儲存系統(包括易失性和非易失性記憶體及/或儲存元件)、至少一輸入裝置,以及至少一輸出裝置。
程式碼可應用於輸入指令以執行本文描述的功能和產生輸出資訊。輸出資訊可以被應用於一或多個輸出裝置,以習知的方式。對於本申請的目的,處理系統可包括任何系統,其具有處理器,像是,例如:數位信號處理器(DSP)、微控制器、應用特定積體電路(ASIC)、或微處理器。
程式碼可以以高階程序或物件導向編程語言 以與處理系統進行通信來實現。程式碼還可以以組合或機器語言來實現,如果需要的話。事實上,本文描述的機制並不限於任何特定的程式語言的範圍。在任何情況下,語言可以是編譯或解譯語言。
至少一個實施例的一或多個方面可以由儲存在機器可讀介質上代表的指令來實施,其表示處理器內的各種邏輯,其當由機器讀取時使機器製造邏輯以執行本文描述的技術。這樣的表示,習知為“IP核心”可以被儲存在有形的、機器可讀介質上和被供給到各種客戶或生產設施以載入到製造機器,其實際上製造邏輯或處理器。
這樣的機器可讀儲存介質可以包括,但不受限於,藉由機器或裝置所形成或製造的非揮發、實體配置的物體,其包括儲存媒體,例如硬碟或其他包括軟碟、光碟、唯讀光碟記憶體(CD-ROM)、可重寫光碟(CD-RW)和磁光碟的其他類型的硬碟、像是唯讀記憶體(ROM)的半導體裝置、像是動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)的隨機存取記憶體(RAM)、可擦除可編程唯讀記憶體(EPROM)、快閃記憶體、電可擦除可編程唯讀記憶體(EEPROM)、磁或光卡、或適用於儲存電子指令的任何其它類型的媒體
因此,本發明的實施例還可包括非暫態的、包含指令或包含設計資料的有形機器可讀媒體,像是硬體描述語言(HDL),其為本文所描述的限定的結構、電 路、設備、處理器及/或系統功能。這樣的實施例也可以被稱為程式產品。
在某些情況下,指令轉換器可用於將指令從源指令集轉換為目標指令集。例如,指令轉換器可轉譯(例如,使用靜態二進制轉譯、包括動態編譯的動態二進制轉譯)、變形、模擬、或以其他方式的指令轉換成一或多個指令以被核心所處理。指令轉換器可以以軟體、硬體、韌體,或其組合來實現。指令轉換可能是開啟處理器、關閉處理器、或部開啟和部分關閉處理器。
因此,根據至少一個實施例執行一或多個指令的技術被公開。雖然某些示例性實施例已被描述並在附圖中示出,但應該理解的是,這樣的實施例僅僅是說明性的而不是受限於其他實施例,並且這些實施例不局限於所示出和描述的特定的構造和配置,因為研究這揭示的通常知識者可能發生各種其他修改。在如本發明的技術領域中,其發展速度快並且不易預見更進一步的進步,因此在不脫離本發明內容或隨附申請專利範圍之範圍內所揭示的實施例可以在排列和細節上輕易修改以促進技術進步。
本發明的一些實施例包括處理器。在至少一些實施例中,處理器可包括用以接收指令的前端、用以解碼指令的解碼器、用以執行指令的核心、以及用以退役指令的退役單元。為了執行指令,核心可以包括第一邏輯。
本發明的一些實施例包括處理器。在至少一些實施例中,處理器可包括用以接收指令的前端、用以解 碼指令的解碼器、用以執行指令的核心、以及用以退役指令的退役單元。為了執行指令,核心,可包括第一邏輯,用以從索引陣列檢索第一索引值,其中基於用於該指令的第一參數,該索引陣列將被定位在記憶體中的索引基底位址、第二邏輯,用以計算第一元件位址,基於該第一索引值,該第一元件位址用以識別在散佈第一資料元件於該記憶體中的位置,以及資料基底位址,用於在該記憶體中的潛在資料元件位置的群組,該資料基底位址基於用於該指令的第二參數、以及第三邏輯,用以預取在該第一元件位址的該記憶體中的位置之該內容至快取,其包括第四邏輯,用以執行讀取所有權之存取。在任何上述實施例的組合中,該核心進一步包含第五邏輯用以從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰、第六邏輯,用以計算第二元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址用以與該第一元件位址不相鄰,基於該第二索引值及該資料基底位址、第七邏輯,用以預取在該第二元件位址的該記憶體中的位置之該內容至該快取,包括第八邏輯,用以執行讀取所有權之存取。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以於該第一索引值之該檢索的同時,從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰、第六邏輯,用以計算第二元件位址同時計算該第一元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體 中的位置,該第二元件位址用以與該第一元件位址不相鄰,基於該第二索引值以及該資料基底位址、第七邏輯用以預取在該第一元件位址的該位置之該內容的同時將在該第二元件位址的該記憶體中的位置之該內容預取至該快取,其包括第八邏輯,用以執行讀取所有權之存取。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以從該索引陣列檢索第二索引值,該第二索引值是將被定位在該索引陣列內的最低階位置以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值、第六邏輯,用以計算第二元件位址,該第二元件位址用以識別將被散佈之第二資料元件的位置,基於該第二索引值以及該資料基底位址以及、第七邏輯,用以從來源向量暫存器檢索該第二資料元件,該來源向量暫存器藉由用於該指令的第三參數所識別,其中該第二資料元件是用以從該來源向量暫存器中的該最低階位置被檢索、第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該記憶體中的位置以及第九邏輯,用以決定該固定的距離。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以從該索引陣列檢索第二索引值,該第二索引值是將被定位在該索引陣列內的最低階位置以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值、第六邏輯,用以計算第二元件位址,該第二元件位址用以識別將被散佈之第二資料元件的位置,基於該第二索引值以及該資料基底位址以及、第七邏輯,用以從來源向量暫存器檢索該第二資料元件, 該來源向量暫存器藉由用於該指令的第三參數所識別,其中該第二資料元件是用以從該來源向量暫存器中的該最低階位置被檢索、第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該記憶體中的位置、以及第九邏輯,用以基於用於該指令的第四參數決定該固定的距離。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以決定在用於第二索引值的遮罩暫存器中的位元未被設定,該遮罩暫存器基於用於該指令的第三參數被識別、以及第六邏輯,用於基於在遮罩中的位元沒有被設定的該決定來省略該第二索引值的檢索、識別在基於該第二索引值用以散佈第二資料元件的位置之第二元件位址的計算、從來源向量暫存器中的第二資料元件的檢索,該來源向量暫存器由用於該指令的第四參數識別、以及該第二資料元件至該第二元件位址的該記憶體中的位置的儲存、以及第七邏輯,用以基於在該遮罩中的該位元沒有被設定的該決定,將該值保存在該第二元件位址的該記憶體中的該位置。在任何上述實施例的組合中,該核心可包括第五邏輯,用以計算該第一元件位址作為該第一索引值和該資料基底位址的總和。在任何上述實施例的組合中,該核心可包括第五邏輯,用以在其已被決定該位元是否已經設定之後清除該遮罩暫存器中的每個位元。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以決定在用於額外的索引值的遮罩暫存器中的位元被設定,該遮罩暫存器基於用於該指令的第四參數被識別、以及第六邏 輯,用於基於在遮罩中的位元沒有被設定的該決定來省略該額外的索引值的檢索、基於該額外的索引值之額外元件位址的計算、識別散佈額外資料元件的位置之額外元件位址、從來源向量暫存器中的額外資料元件的檢索、以及該額外資料元件至以該額外元件位址的該記憶體中的位置的儲存、以及第七邏輯,用以基於在該遮罩中的該位元沒有被設定的該決定,將NULL值儲存在該額外元件位址的該記憶體中的該位置。在任何上述實施例中,該核心可包括第五邏輯用以基於用於該指令的參數來決定資料元件的大小。在任何上述實施例中,該核心可包括第五邏輯用以基於用於該指令的參數來決定資料元件的類。在任何上述實施例中,資料元件被預取的該快取可由用於該指令的第三參數所識別。在任何上述實施例中,用於指令的第一參數可以為指標。在任何上述實施例中,用於指令的第二參數可以為指標。在任何上述實施例中,該處理器可包括單指令多資料(SIMD)協同處理器用以實施該指令的執行。在任何上述實施例中,該處理器可包括向量暫存器檔,其包括目的地向量暫存器。
本發明的一些實施例包括方法。在至少一些這些實施例中,該方法可包括,在處理器中接收第一指令、解碼該第一指令、執行該第一指令和退役該第一指令。執行該指令可包括從索引陣列檢索第一索引值,其中基於用於該指令的第一參數,該索引陣列將被定位在記憶體中的索引基底位址、計算第一元件位址,基於該第一索 引值,識別在散佈第一資料元件於該記憶體中的位置之該第一元件位址,以及資料基底位址,用於在該記憶體中的潛在資料元件位置的群組,該基底位址基於用於該指令的第二參數、以及預取在該第一元件位址的該記憶體中的位置之該內容至快取,其包括執行讀取所有權之存取以及退役該指令。在任何上述實施例的組合中,該方法進一步包含從該索引陣列檢索第二索引值,該第二索引值在該陣列內與該第一索引值相鄰、計算第二元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址與該第一元件位址不相鄰,基於該第二索引值以及該資料基底位址、預取在該第一元件位址的該位置之該內容、在該第二元件位址的該記憶體中的位置之該內容至該快取,其包括執行讀取所有權之存取。在任何上述實施例的組合中,該方法進一步包含於檢索該第一索引值的同時,從該索引陣列檢索第二索引值,該第二索引值在該陣列內與該第一索引值相鄰、計算第二元件位址同時計算該第一元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址與該第一元件位址不相鄰,基於該第二索引值以及該資料基底位址、在預取在該第一元件位址的該位置之該內容的同時將在該第二元件位址的該記憶體中的位置之該內容預取至該快取,其包括執行讀取所有權之存取。在任何上述實施例的組合中,該方法可包括在檢索該第一索引值之前,決定在被用以散佈來自該記憶體的資料元件之該索引值的陣列 中的位置和被用以從該記憶體預取資料元件之該索引值的該陣列中的位置之間的固定距離、從該索引陣列檢索第二索引值,該第二索引值是位於該索引陣列內的最低階位置,以及該第二位置是以該固定的距離於該索引陣列內先於該第一索引值、計算第二元件位址,該第二元件位置識別在用以散佈第二資料元件的該記憶體中的第二位置,其係基於該第二索引值以及該資料基底位址、從來源向量暫存器中的該最低階位置檢索該第二資料元件,該來源向量暫存器由該指令的第三參數所識別、以及儲存該第二資料元件至該第二元件位址的該記憶體中的位置。在任何上述實施例的組合中,該方法可包括基於用於該指令的第三參數,決定在被用以散佈來自該記憶體的資料元件之該索引值的陣列中的位置和被用以從該記憶體預取資料元件之該索引值的該陣列中的位置之間的固定距離、從該索引陣列檢索第二索引值,該第二索引值是位於該索引陣列內的最低階位置,以及該第二位置是以該固定的距離於該索引陣列內先於該第一索引值、計算第二元件位址,該第二元件位置識別在用以散佈第二資料元件的該記憶體中的第二位置,其係基於該第二索引值以及該資料基底位址、從來源向量暫存器中的該最低階位置檢索該第二資料元件,該來源向量暫存器由該指令的第三參數所識別、以及儲存該第二資料元件至該第二元件位址的該記憶體中的位置。在任何上述實施例的組合中, 該方法可進一步包括決定在用於第二索引值的遮罩暫存器中的位元未被設定,該遮罩暫存器係基於用於該指令的第三參數被識別、基於決定在遮罩中的位元沒有被設定來省略、從來源向量暫存器中檢索該第二資料元件,該來源向量暫存器由用於該指令的第四參數識別、計算第二元件位址,該第二元件位址基於該第二索引值識別用以散佈第二資料元件的位置、從該來源向量暫存器檢索該第二資料元件、以及儲存該第二資料元件至該第二元件位址的該記憶體中的位置、以及基於決定在該遮罩中的該位元沒有被設定,將該值保存在該第二元件位址的該記憶體中的該位置。在任何上述實施例的組合中,該方法可包括計算該第一元件位址作為用於該記憶體中的該群組資料元件位置之該第一索引值和該資料基底位址的總和。在任何上述實施例的組合中,該方法可包括在其已被決定該位元是否已經設定之後清除該遮罩暫存器中的每個位元。在任何上述實施例的組合中,該方法進一步包含決定在用於額外的索引值的遮罩暫存器中的位元被設定,該遮罩暫存器基於用於該指令的第四參數被識別、以及回應於在遮罩中的位元沒有被設定的該決定來省略檢索額外的索引值、基於該額外的索引值計算額外元件位址、從來源向量暫存器檢索額外資料元件、以及以該額外元件位址將該額外資料元件儲存至該記憶體中的位置、以及將NULL值以該額外元件位址儲存在該記憶體中的該位置。在任何上述實施例中,該方法可包括基於用於 該指令的參數來決定資料元件的大小。在任何上述實施例中,該方法可包括基於用於該指令的參數來決定資料元件的類型。在任何上述實施例中,用於指令的第一參數可以為指標。在任何上述實施例中,用於指令的第二參數可以為指標。在任何上述實施例中,資料元件被預取的該快取可由用於該指令的第三參數所識別。
本發明的一些實施例包括系統。在至少一些實施例中,系統可包括用以接收指令的前端、用以解碼指令的解碼器、用以執行指令的核心、以及用以退役指令的退役單元。為了執行指令,核心,可包括第一邏輯,用以從索引陣列檢索第一索引值,其中基於用於該指令的第一參數,該索引陣列將被定位在記憶體中的索引基底位址、第二邏輯,用以計算第一元件位址,基於該第一索引值,該第一元件位址用以識別在散佈第一資料元件於該記憶體中的位置,以及資料基底位址,用於在該記憶體中的潛在資料元件位置的群組,該資料基底位址基於用於該指令的第二參數、以及第三邏輯,用以預取在該第一元件位址的該記憶體中的位置之該內容至快取,其包括第四邏輯,用以執行讀取所有權之存取。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰、第六邏輯,用以計算第二元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址用以與該第一元件位址不相鄰,基於該第二索 引值以及該資料基底位址、第七邏輯用以預取在該第一元件位址的該位置之該內容、在該第二元件位址的該記憶體中的位置之該內容至該快取,其包括第八邏輯,用以執行讀取所有權之存取。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以於該第一索引值之該檢索的同時,從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰、第六邏輯,用以計算第二元件位址同時計算該第一元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址用以與該第一元件位址不相鄰,基於該第二索引值以及該資料基底位址、第七邏輯用以預取在該第一元件位址的該位置之該內容、在該第二元件位址的該記憶體中的位置之該內容至該快取,其包括第八邏輯,用以執行讀取所有權之存取。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以從該索引陣列檢索第二索引值,該第二索引值是將被定位在該索引陣列內的最低階位置以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值、第六邏輯,用以計算第二元件位址,該第二元件位址用以識別將被散佈之第二資料元件的位置,基於該第二索引值以及該資料基底位址以及、第七邏輯,用以從來源向量暫存器檢索該第二資料元件,該來源向量暫存器藉由用於該指令的第三參數所識別,其中該第二資料元件是用以從該來源向量暫存器中的該最低階位置被檢索、第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該 記憶體中的位置以及第九邏輯,用以決定該固定的距離。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以從該索引陣列檢索第二索引值,該第二索引值是將被定位在該索引陣列內的最低階位置以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值、第六邏輯,用以計算第二元件位址,該第二元件位址用以識別將被散佈之第二資料元件的位置,基於該第二索引值以及該資料基底位址以及、第七邏輯,用以從來源向量暫存器檢索該第二資料元件,該來源向量暫存器藉由用於該指令的第三參數所識別,其中該第二資料元件是用以從該來源向量暫存器中的該最低階位置被檢索、第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該記憶體中的位置、以及第九邏輯,用以基於用於該指令的第四參數決定該固定的距離。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以決定在用於第二索引值的遮罩暫存器中的位元未被設定,該遮罩暫存器基於用於該指令的第三參數被識別、以及第六邏輯,用於基於在遮罩中的位元沒有被設定的該決定來省略該第二索引值的檢索、識別在基於該第二索引值用以散佈第二資料元件的位置之第二元件位址的計算、從來源向量暫存器中的第二資料元件的檢索,該來源向量暫存器由用於該指令的第四參數識別、以及該第二資料元件至該第二元件位址的該記憶體中的位置的儲存、以及第七邏輯,用以基於在該遮罩中的該位元沒有 被設定的該決定,將該值保存在該第二元件位址的該記憶體中的該位置。在任何上述實施例的組合中,該核心可包括第五邏輯,用以計算該第一元件位址作為該第一索引值和該資料基底位址的總和。在任何上述實施例的組合中,該核心可包括第五邏輯,用以在其已被決定該位元是否已經設定之後清除該遮罩暫存器中的每個位元。在任何上述實施例的組合中,該核心進一步包含第五邏輯,用以決定在用於額外的索引值的遮罩暫存器中的位元被設定,該遮罩暫存器基於用於該指令的第四參數被識別、以及第六邏輯,用於基於在遮罩中的位元沒有被設定的該決定來省略該額外的索引值的檢索、基於該額外的索引值之額外元件位址的計算、識別散佈額外資料元件的位置之額外元件位址、從來源向量暫存器中的額外資料元件的檢索、以及該額外資料元件至以該額外元件位址的該記憶體中的位置的儲存、以及第七邏輯,用以基於在該遮罩中的該位元沒有被設定的該決定,將NULL值儲存在該額外元件位址的該記憶體中的該位置。在任何上述實施例中,該核心可包括第五邏輯用以基於用於該指令的參數來決定資料元件的大小。在任何上述實施例中,該核心可包括第五邏輯用以基於用於該指令的參數來決定資料元件的類。在任何上述實施例中,資料元件被預取的該快取可由用於該指令的第三參數所識別。在任何上述實施例中,用於指令的第一參數可以為指標。在任何上述實施例中,用於指令的第二參數可以為指標。在任何上述實施例中,該系統可包括單指令 多資料(SIMD)協同處理器用以實施該指令的執行。在任何上述實施例中,該系統可包括向量暫存器檔,其包括目的地向量暫存器。
本發明的一些實施例包括用於執行指令的系統。在至少一些這些實施例中,該系統可包括,在處理器中接收第一指令、解碼該第一指令、執行該第一指令和退役該第一指令。執行該指令的機構可包括用從索引陣列檢索第一索引值,其中基於用於該指令的第一參數,該索引陣列將被定位在記憶體中的索引基底位址之機構、計算第一元件位址,基於該第一索引值,識別在散佈第一資料元件於該記憶體中的位置之該第一元件位址,以及資料基底位址,用於在該記憶體中的潛在資料元件位置的群組,該基底位址基於用於該指令的第二參數之機構、以及預取在該第一元件位址的該記憶體中的位置之該內容至快取之機構,其包括執行讀取所有權之存取之機構。在任何上述實施例的組合中,該系統進一步包含用於從該索引陣列檢索第二索引值,該第二索引值在該陣列內與該第一索引值相鄰之機構、計算第二元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址與該第一元件位址不相鄰,基於該第二索引值以及該資料基底位址之機構、用於預取在該第二元件位址的該記憶體中的位置之該內容至該快取之機構,其包括執行讀取所有權之存取。在任何上述實施例的組合中,該系統進一步包含用於檢索該第一索引值的同時,從該索引陣列檢索第 二索引值,該第二索引值在該陣列內與該第一索引值相鄰之機構、用於計算第二元件位址同時計算該第一元件位址,該第二元件位址用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址與該第一元件位址不相鄰,基於該第二索引值以及該資料基底位址之機構、用於預取在該第一元件位址的該位置之該內容的同時將在該第二元件位址的該記憶體中的位置之該內容預取至該快取之機構,其包括執行讀取所有權之存取之機構。在任何上述實施例的組合中,該系統可包括用於在檢索該第一索引值之前,決定在被用以散佈來自該記憶體的資料元件之該索引值的陣列中的位置和被用以從該記憶體預取資料元件之該索引值的該陣列中的位置之間的固定距離之機構、用於從該索引陣列檢索第二索引值,該第二索引值是位於該索引陣列內的最低階位置,以及該第二位置是以該固定的距離於該索引陣列內先於該第一索引值之機構、用於計算第二元件位址,該第二元件位置識別在用以散佈第二資料元件的該記憶體中的第二位置,其係基於該第二索引值以及該資料基底位址之機構、用於從來源向量暫存器中的該最低階位置檢索該第二資料元件,該來源向量暫存器由該指令的第三參數所識別之機構、以及用於儲存該第二資料元件至該第二元件位址的該記憶體中的位置之機構。在任何上述實施例的組合中,該系統可包括用於基於該指令的第三參數,決定在被用以散佈來自該記憶體的資料元件之該索引值的陣列中的位置和被用以從該記憶體預取資料元件 之該索引值的該陣列中的位置之間的固定距離之機構、用於從該索引陣列檢索第二索引值,該第二索引值是位於該索引陣列內的最低階位置,以及該第二位置是以該固定的距離於該索引陣列內先於該第一索引值之機構、用於計算第二元件位址,該第二元件位置識別在用以散佈第二資料元件的該記憶體中的第二位置,其係基於該第二索引值以及該資料基底位址之機構、用於從來源向量暫存器中的該最低階位置檢索該第二資料元件,該來源向量暫存器由該指令的第三參數所識別之機構、以及用於儲存該第二資料元件至該第二元件位址的該記憶體中的位置之機構。在任何上述實施例的組合中,該系統可進一步包括用於決定在用於第二索引值的遮罩暫存器中的位元未被設定,該遮罩暫存器係基於用於該指令的第三參數被識別之機構、用於基於決定在遮罩中的位元沒有被設定來省略從來源向量暫存器中檢索該第二資料元件,該來源向量暫存器由用於該指令的第四參數識別之機構、用於計算第二元件位址,該第二元件位址基於該第二索引值識別用以散佈第二資料元件的位置、從該來源向量暫存器檢索該第二資料元件、以及儲存該第二資料元件至該第二元件位址的該記憶體中的位置之機構、以及用於基於決定在該遮罩中的該位元沒有被設定,將該值保存在該第二元件位址的該記憶體中的該位置之機構。在任何上述實施例的組合中,該系統可包括用於計算該第一元件位址作為用於該記憶體中的該群組資料元件位置之該第一索引值和該資料基底位址的總和之機 構。在任何上述實施例的組合中,該系統可包括用於在其已被決定該位元是否已經設定之後清除該遮罩暫存器中的每個位元之機構。在任何上述實施例的組合中,該系統進一步包含決定在用於額外的索引值的遮罩暫存器中的位元被設定,該遮罩暫存器基於用於該指令的第四參數被識別之機構、以及回應於在遮罩中的位元沒有被設定的該決定來省略檢索額外的索引值、基於該額外的索引值計算額外元件位址、從來源向量暫存器檢索額外資料元件、以及以該額外元件位址將該額外資料元件儲存至該記憶體中的位置之機構、以及將NULL值以該額外元件位址儲存在該記憶體中的該位置之機構。在任何上述實施例中,該系統可包括基於用於該指令的參數來決定資料元件的大小之機構。在任何上述實施例中,該系統可包括基於用於該指令的參數來決定資料元件的類型之機構。在任何上述實施例中,用於指令的第一參數可以為指標。在任何上述實施例中,用於指令的第二參數可以為指標。在任何上述實施例中,資料元件被預取的該快取可由用於該指令的第三參數所識別。
1800‧‧‧系統
1802‧‧‧指令串流
1804‧‧‧處理器
1806‧‧‧前端
1808‧‧‧指令擷取單元
1810‧‧‧解碼單元
1812‧‧‧核心
1814‧‧‧分配器
1816‧‧‧執行單元
1818‧‧‧退役單元
1820‧‧‧記憶體子系統
1822‧‧‧1階(L1)快取
1824‧‧‧2階(L2)快取
1830‧‧‧記憶體系統

Claims (20)

  1. 一種處理器,包含:前端,用以接收指令;解碼器,用以解碼該指令;核心,用以執行該指令,包括:第一邏輯,用以從索引陣列檢索第一索引值,其中該索引陣列係用以基於用於該指令的第一參數被定位在記憶體中的索引基底位址;第二邏輯,用以計算第一元件位址,該第一元件位址用以識別在散佈第一資料元件於該記憶體中的位置,基於:該第一索引值;以及資料基底位址,用於在該記憶體中的潛在資料元件位置的群組,該資料基底位址基於用於該指令的第二參數;以及第三邏輯,用以預取在該第一元件位址的該記憶體中的位置之該內容至快取,包括:第四邏輯,用以執行讀取所有權之存取;以及退役單元,用以退役該指令。
  2. 如申請專利範圍第1項的處理器,其中該核心進一步包含:第五邏輯,用以從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰;第六邏輯,用以計算第二元件位址,該第二元件位址 基於該第二索引值以及該資料基底位址,用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址與該第一元件位址不相鄰;第七邏輯,用以預取在該第二元件位址的該記憶體中的位置之該內容至該快取,包括:第八邏輯,用以執行讀取所有權之存取。
  3. 如申請專利範圍第1項的處理器,其中該核心進一步包括:第五邏輯,用以於該第一索引值之該檢索的同時,從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰;第六邏輯,用以在計算該第一元件位址同時計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址用以與該第一元件位址不相鄰;第七邏輯,用以在預取該第一元件位址的該位置之該內容同時,預取在該第二元件位址的該記憶體中的位置之該內容至該快取,包括:第八邏輯,用以執行讀取所有權之存取。
  4. 如申請專利範圍第1項的處理器,其中該核心進一步包含:第五邏輯,用以從該索引陣列檢索第二索引值,其中:該第二索引值是用以被定位在該索引陣列內的最低階 位置;以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值;第六邏輯,用以計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別將被散佈之第二資料元件的位置;以及第七邏輯,用以從來源向量暫存器檢索該第二資料元件,該來源向量暫存器藉由用於該指令的第三參數所識別,其中該第二資料元件是用以從該來源向量暫存器中的該最低階位置被檢索;第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該記憶體中的位置;以及第九邏輯,用以決定該固定的距離。
  5. 如申請專利範圍第1項的處理器,其中該核心進一步包含:第五邏輯,用以從該索引陣列檢索第二索引值,其中:該第二索引值是用以被定位在該索引陣列內的最低階位置;以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值;第六邏輯,用以計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別將被散佈之第二資料元件的位置;以及 第七邏輯,用以從源向量暫存器檢索該第二資料元件,該來源向量暫存器藉由用於該指令的第三參數識別,其中該第二資料元件是將從該來源向量暫存器中的該最低階位置被檢索;第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該記憶體中的位置;以及第九邏輯,用以基於用於該指令的第四參數來決定該固定的距離。
  6. 如申請專利範圍第1項的處理器,其中該核心進一步包含:第五邏輯,用以決定在用於第二索引值的遮罩暫存器中的位元未設定,該遮罩暫存器基於用於該指令的第三參數被識別;以及第六邏輯,用於基於在遮罩中的位元沒有被設定的該決定來省略:該第二索引值的檢索;識別在基於該第二索引值用以散佈第二資料元件的位置之第二元件位址的計算;從來源向量暫存器中的該第二資料元件的檢索,該來源向量暫存器由用於該指令的第四參數識別;以及該第二資料元件至該第二元件位址的該記憶體中的位置的儲存;以及第七邏輯,用以基於在該遮罩中的該位元沒有被設定的該決定,將該值保存在該第二元件位址的該記憶體中的 該位置中。
  7. 如申請專利範圍第1項的處理器,其中該處理器包括實施該指令的執行之單指令多資料(SIMD)協同處理器。
  8. 一種方法,包含,在處理器中:接收指令;解碼該指令;執行該指令,包括:從索引陣列檢索第一索引值,其中基於用於該指令的第一參數,該索引陣列被定位在記憶體中的索引基底位址;以及計算第一元件位址,該第一元件位址基於該第一索引值以及資料基底位址,用於在該記憶體中的潛在資料元件位置的群組,該基底位址基於用於該指令的第二參數,用以識別在散佈第一資料元件於該記憶體中的位置;以及預取在該第一元件位址的該記憶體中的位置之該內容至快取,包括:執行讀取所有權之存取;以及退役該指令。
  9. 如申請專利範圍第8項的方法,進一步包含:從該索引陣列檢索第二索引值,該第二索引值係在該陣列內與該第一索引值相鄰;計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別在散佈第二資料元件於 該記憶體中的位置,該第二元件位址係與該第一元件位址不相鄰;預取在該第二元件位址的該記憶體中的位置之該內容至該快取,包括:執行讀取所有權之存取。
  10. 如申請專利範圍第8項的方法,進一步包含:於檢索該第一索引值的同時,從該索引陣列檢索第二索引值,該第二索引值係在該陣列內與該第一索引值相鄰;計算該第一元件位址同時計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址係與該第一元件位址不相鄰;在預取該第一元件位址的該位置之該內容同時,預取在該第二元件位址的該記憶體中的位置之該內容至該快取,包括:執行讀取所有權之存取。
  11. 如申請專利範圍第8項的方法,進一步包含:在檢索該第一索引值之前,決定在被用以散佈來自該記憶體的資料元件之該索引值的陣列中的位置,和被用以從該記憶體預取資料元件之該索引值的該陣列中的位置之間的固定距離;從該索引陣列檢索第二索引值,其中:該第二索引值是位於該索引陣列內的該最低階位置; 以及該第二位置是以該固定的距離於該索引陣列內先於該第一索引值;計算第二元件位址,該第二元件位置識別在用以散佈第二資料元件的該記憶體中的第二位置,其係基於:該第二索引值;以及該資料基底位址;以及從來源向量暫存器中的該最低階位置檢索該第二資料元件,該來源向量暫存器由該指令的第三參數所識別;以及儲存該第二資料元件至該第二元件位址的該記憶體中的位置。
  12. 如申請專利範圍第8項的方法,進一步包含:基於用於該指令的第三參數,決定在被用以散佈來自該記憶體的資料元件之該索引值的陣列中的位置,和被用以從該記憶體預取資料元件之該索引值的該陣列中的位置之間的固定距離;從該索引陣列檢索第二索引值,其中:該第二索引值是位於該索引陣列內的最低階位置;以及該第二位置是以該固定的距離於該索引陣列內先於該第一索引值;計算第二元件位址,該第二元件位置基於該第二索引值以及該資料基底位址,識別在用以散佈第二資料元件的 該記憶體中的第二位置;以及從來源向量暫存器中的該最低階位置檢索該第二資料元件,該來源向量暫存器由該指令的第三參數所識別;以及儲存該第二資料元件至該第二元件位址的該記憶體中的位置。
  13. 如申請專利範圍第8項的方法,進一步包含:決定在用於第二索引值的遮罩暫存器中的位元未被設定,該遮罩暫存器係基於用於該指令的第三參數被識別;基於在遮罩中的位元沒有被設定的決定來省略:從來源向量暫存器中檢索該第二索引值,該來源向量暫存器由用於該指令的第四參數所識別;計算第二元件位址,該第二元件位址基於該第二索引值識別用以散佈第二資料元件的位置;從該來源向量暫存器檢索該第二資料元件;以及將該第二資料元件儲存至該第二元件位址的該記憶體中的位置;以及基於在該遮罩中的該位元沒有被設定的決定,將該值保存在該第二元件位址的該記憶體中的該位置中。
  14. 一種系統,包含:前端,用以接收指令;解碼器,用以解碼該指令;核心,用以執行該指令,包括:第一邏輯,用以從索引陣列檢索第一索引值,其中基 於用於該指令的第一參數,該索引陣列將被定位在記憶體中的索引基底位址;第二邏輯,用以計算第一元件位址,該第一元件位址基於該第一索引值以及資料基底位址,用於在該記憶體中的潛在資料元件位置的群組,該資料基底位址基於用於該指令的第二參數,用以識別在散佈第一資料元件於該記憶體中的位置;以及第三邏輯,用以預取在該第一元件位址的該記憶體中的位置之該內容至快取,包括:第四邏輯,用以執行讀取所有權之存取;以及退役單元,用以退役指令。
  15. 如申請專利範圍第14項的系統,其中該核心進一步包含:第五邏輯,用以從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰;第六邏輯,用以計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址用以與該第一元件位址不相鄰;第七邏輯,用以預取在該第二元件位址的該記憶體中的位置之該內容至該快取,包括:第八邏輯,用以執行讀取所有權之存取。
  16. 如申請專利範圍第14項的系統,其中該核心進一步包括: 第五邏輯,用以於該第一索引值之該檢索的同時,從該索引陣列檢索第二索引值,該第二索引值用以在該陣列內與該第一索引值相鄰;第六邏輯,用以計算該第一元件位址同時計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別在散佈第二資料元件於該記憶體中的位置,該第二元件位址用以與該第一元件位址不相鄰;第七邏輯,用以在預取在該第一元件位址的該位置之該內容的同時,將在該第二元件位址的該記憶體中的位置之該內容預取至該快取,包括:第八邏輯,用以執行讀取所有權之存取。
  17. 如申請專利範圍第14項的系統,其中該核心進一步包含:第五邏輯,用以從該索引陣列檢索第二索引值,其中:該第二索引值是將被設在該索引陣列內的該最低階位置;以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值;第六邏輯,用以計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,以及用以識別將被散佈之第二資料元件的位置;第七邏輯,用以從源向量暫存器檢索該第二資料元件,該來源向量暫存器藉由用於該指令的第三參數所識 別,其中該第二資料元件是將從該來源向量暫存器中的該最低階位置被檢索;第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該記憶體中的位置;以及第九邏輯,用以決定該固定的距離。
  18. 如申請專利範圍第14項的系統,其中該核心進一步包含:第五邏輯,用以從該索引陣列檢索第二索引值,其中:該第二索引值是將被設在該索引陣列內的該最低階位置;以及該第二索引值是以固定的距離於該索引陣列內先於該第一索引值;第六邏輯,用以計算第二元件位址,該第二元件位址基於該第二索引值以及該資料基底位址,用以識別將被散佈之第二資料元件的位置;以及第七邏輯,用以從源向量暫存器檢索該第二資料元件,該來源向量暫存器藉由用於該指令的第三參數識別,其中該第二資料元件是將從該來源向量暫存器中的該最低階位置被檢索;第八邏輯,用以將該第二資料元件儲存在該第二元件位址的該記憶體中的位置;以及第九邏輯,用以基於用於該指令的第四參數來決定該固定的距離。
  19. 如申請專利範圍第14項的系統,其中該核心進一步包含:第五邏輯,用以決定在用於第二索引值的遮罩暫存器中的位元未設定,該遮罩暫存器基於用於該指令的第三參數所識別;以及第六邏輯,用於基於在遮罩中的位元沒有被設定的該決定來省略:該第二索引值的檢索;識別在基於該第二索引值用以散佈第二資料元件的位置之第二元件位址的計算;從來源向量暫存器中的第二資料元件的檢索,該來源向量暫存器由用於該指令的第四參數所識別;以及該第二資料元件至該第二元件位址的該記憶體中的位置的儲存;以及第七邏輯,用以基於在該遮罩中的該位元沒有被設定的該決定,將該值保存在該第二元件位址的該記憶體中的該位置。
  20. 如申請專利範圍第14項的系統,其中該處理器包括實施該指令的執行之單指令多資料(SIMD)協同處理器。
TW105137283A 2015-12-20 2016-11-15 用於載入索引及預取散佈運算的邏輯和指令 TWI725073B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/975,809 2015-12-20
US14/975,809 US10509726B2 (en) 2015-12-20 2015-12-20 Instructions and logic for load-indices-and-prefetch-scatters operations

Publications (2)

Publication Number Publication Date
TW201732547A true TW201732547A (zh) 2017-09-16
TWI725073B TWI725073B (zh) 2021-04-21

Family

ID=59065094

Family Applications (1)

Application Number Title Priority Date Filing Date
TW105137283A TWI725073B (zh) 2015-12-20 2016-11-15 用於載入索引及預取散佈運算的邏輯和指令

Country Status (5)

Country Link
US (1) US10509726B2 (zh)
EP (1) EP3391203B1 (zh)
CN (1) CN108369516B (zh)
TW (1) TWI725073B (zh)
WO (1) WO2017112171A1 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10509726B2 (en) 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US11360771B2 (en) 2017-06-30 2022-06-14 Intel Corporation Method and apparatus for data-ready memory operations
KR102453542B1 (ko) 2018-02-21 2022-10-12 삼성전자주식회사 스킵 연산 모드를 지원하는 메모리 장치 및 그 동작 방법
US10521207B2 (en) * 2018-05-30 2019-12-31 International Business Machines Corporation Compiler optimization for indirect array access operations
US10684858B2 (en) * 2018-06-01 2020-06-16 Intel Corporation Indirect memory fetcher
US11334547B2 (en) * 2018-08-20 2022-05-17 Koninklijke Philips N.V. Data-oblivious copying from a first array to a second array
KR102654297B1 (ko) * 2018-08-27 2024-04-04 에스케이하이닉스 주식회사 컨트롤러 및 컨트롤러의 동작방법
US11126575B1 (en) * 2019-03-05 2021-09-21 Amazon Technologies, Inc. Interrupt recovery management
US10929132B1 (en) * 2019-09-23 2021-02-23 Intel Corporation Systems and methods for ISA support for indirect loads and stores for efficiently accessing compressed lists in graph applications
US20210406016A1 (en) * 2020-06-27 2021-12-30 Intel Corporation Matrix data scatter and gather by row
KR20220049396A (ko) * 2020-10-14 2022-04-21 삼성전자주식회사 간접 어드레싱을 위한 시스템, 장치 및 방법
US20220197656A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Instruction and logic for code prefetching
CN112579607B (zh) * 2020-12-24 2023-05-16 网易(杭州)网络有限公司 数据访问方法和装置、存储介质、电子设备
CN116909755B (zh) * 2023-09-13 2023-12-22 北京开源芯片研究院 一种访存方法、处理器、电子设备及可读存储介质

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784711A (en) 1990-05-18 1998-07-21 Philips Electronics North America Corporation Data cache prefetching under control of instruction cache
US7080210B2 (en) * 2002-02-12 2006-07-18 Ip-First, Llc Microprocessor apparatus and method for exclusive prefetch of a cache line from memory
US6918010B1 (en) 2002-10-16 2005-07-12 Silicon Graphics, Inc. Method and system for prefetching data
KR100987832B1 (ko) 2004-08-17 2010-10-13 엔비디아 코포레이션 캐시 메모리에 연결된 메모리로의 다양한 액세스 유형의예측을 관리하는 시스템, 장치 및 방법
US20070011442A1 (en) 2005-07-06 2007-01-11 Via Technologies, Inc. Systems and methods of providing indexed load and store operations in a dual-mode computer processing environment
US20080091921A1 (en) * 2006-10-12 2008-04-17 Diab Abuaiadh Data prefetching in a microprocessing environment
US8191056B2 (en) 2006-10-13 2012-05-29 International Business Machines Corporation Sparse vectorization without hardware gather/scatter
JPWO2008087779A1 (ja) 2007-01-19 2010-05-06 日本電気株式会社 アレイ型プロセッサおよびデータ処理システム
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US10387151B2 (en) 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
US20100115233A1 (en) 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US20120060016A1 (en) 2010-09-07 2012-03-08 International Business Machines Corporation Vector Loads from Scattered Memory Locations
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
KR101804008B1 (ko) * 2011-09-26 2017-12-01 인텔 코포레이션 벡터 산개-op 및 집결-op 기능을 제공하는 명령어 및 로직
WO2013095555A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data rearrangement control indexes generation processors, methods, systems, and instructions
CN104126168B (zh) 2011-12-22 2019-01-08 英特尔公司 打包数据重新安排控制索引前体生成处理器、方法、系统及指令
WO2013095672A1 (en) 2011-12-23 2013-06-27 Intel Corporation Multi-register gather instruction
US8996840B2 (en) 2011-12-23 2015-03-31 International Business Machines Corporation I/O controller and method for operating an I/O controller
WO2013180738A1 (en) * 2012-06-02 2013-12-05 Intel Corporation Scatter using index array and finite state machine
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
GB2506902A (en) 2012-10-12 2014-04-16 Ibm Jump position and frame shifting in list based prefetching
US9501276B2 (en) 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9280474B2 (en) * 2013-01-03 2016-03-08 Intel Corporation Adaptive data prefetching
US9817762B2 (en) * 2014-05-20 2017-11-14 Oracle International Corporation Facilitating efficient prefetching for scatter/gather operations
JP6253514B2 (ja) 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
US10509726B2 (en) 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US20170177360A1 (en) 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Scatter Operations
US20170177349A1 (en) 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Prefetch-Gathers Operations
US20170177363A1 (en) 2015-12-22 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Gather Operations

Also Published As

Publication number Publication date
CN108369516A (zh) 2018-08-03
WO2017112171A1 (en) 2017-06-29
EP3391203A4 (en) 2019-08-21
TWI725073B (zh) 2021-04-21
EP3391203B1 (en) 2021-09-29
CN108369516B (zh) 2023-06-20
EP3391203A1 (en) 2018-10-24
US10509726B2 (en) 2019-12-17
US20170177346A1 (en) 2017-06-22

Similar Documents

Publication Publication Date Title
TWI725073B (zh) 用於載入索引及預取散佈運算的邏輯和指令
TWI731893B (zh) 具有載入索引和預提取聚集操作之處理器、方法及系統
TWI730016B (zh) 用於跨步分散運算的指令與邏輯的處理器、方法及系統
TWI733710B (zh) 用於重複發生相鄰聚集的處理器、方法和單元
TWI738682B (zh) 用於載入索引和散佈元件的處理器、方法及系統
US20170177352A1 (en) Instructions and Logic for Lane-Based Strided Store Operations
TW201727493A (zh) 從持續記憶體預取資訊的指令及邏輯
TW201732581A (zh) 用於載入索引與集中操作的指令及邏輯
EP3391236A1 (en) Instructions and logic for get-multiple-vector-elements operations
US20170177350A1 (en) Instructions and Logic for Set-Multiple-Vector-Elements Operations
TW201732619A (zh) 仿真的訊息通知中斷(msi)中斷處置
TW201729076A (zh) 用於合成與排列操作序列之指令及邏輯
TW201723810A (zh) 用於部分縮減操作之指令及邏輯
EP3391235A1 (en) Instructions and logic for even and odd vector get operations
TW201732548A (zh) 用於向量置換的指令和邏輯
TW201732555A (zh) 用於向量位元欄壓縮及擴展的指令及邏輯
US9928066B2 (en) Instruction and logic for encoded word instruction compression
US20160179540A1 (en) Instruction and logic for hardware support for execution of calculations
TW201732549A (zh) 用於壓縮與旋轉的指令和邏輯
TW201730754A (zh) 用以取得資料行的指令和邏輯
CN107408035B (zh) 用于缕程间通信的装置和方法
TW201729081A (zh) 用於以向量為基礎的位元操控之指令及邏輯

Legal Events

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