TWI567644B - 用以執行向量飽和雙字/四字加法的指令及邏輯 - Google Patents

用以執行向量飽和雙字/四字加法的指令及邏輯 Download PDF

Info

Publication number
TWI567644B
TWI567644B TW104141158A TW104141158A TWI567644B TW I567644 B TWI567644 B TW I567644B TW 104141158 A TW104141158 A TW 104141158A TW 104141158 A TW104141158 A TW 104141158A TW I567644 B TWI567644 B TW I567644B
Authority
TW
Taiwan
Prior art keywords
instruction
field
vector
register
data
Prior art date
Application number
TW104141158A
Other languages
English (en)
Other versions
TW201643709A (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 TW201643709A publication Critical patent/TW201643709A/zh
Application granted granted Critical
Publication of TWI567644B publication Critical patent/TWI567644B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

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

Description

用以執行向量飽和雙字/四字加法的指令及邏輯
本發明關於處理邏輯、微處理器、及相關聯指令集架構之領域,當其以處理器或其他處理邏輯實施時,即執行邏輯、數學、或其他的功能運算。
某些應用類型經常需要在大量資料項目上執行相同運算(稱為「資料平行性」)。單指令多資料(SIMD)即關於一指令類型,其令一處理器在多數個資料項目上執行一運算。SIMD技術特別適用於可將一暫存器中之位元邏輯式區分成多數個固定大小之資料元件,每一資料元件代表各別值。例如,在256位元暫存器中之位元可被指定成一欲在4個各別64位元緊縮資料元件(四字(Q)大小資料元件)、8個32位元緊縮資料元件(雙字(D)大小資料元件)、16個各別16位元緊縮資料元件(單字(W)大小資料元件)或32個各別8位元緊縮資料元件(位元組(B)大小資料元件)上運算之來源運算元。此資料類型稱為「緊縮」資料類型 或「向量」資料類型,且此資料類型之運算元稱為緊縮資料運算元或向量運算元。換句話說,一緊縮資料項目或向量稱為緊縮資料元件之一序列,且一緊縮資料運算元或向量運算元為一SIMD指令之來源或目的地運算元(亦習知為一緊縮資料指令或向量指令)。
100‧‧‧處理器管線
102‧‧‧擷取階段
104‧‧‧長度解碼階段
106‧‧‧解碼階段
108‧‧‧配置階段
110‧‧‧重新命名階段
112‧‧‧排程階段
114‧‧‧暫存器讀取/記憶體讀取階段
116‧‧‧執行階段
118‧‧‧寫回記憶體寫入階段
122‧‧‧異常處置階段
124‧‧‧確認階段
130‧‧‧前端單元
131‧‧‧指令擷取單元
132‧‧‧分支預測單元
134‧‧‧指令快取單元
136‧‧‧指令轉譯後備緩衝器
140‧‧‧解碼單元
150‧‧‧執行引擎單元
152‧‧‧重新命名/配置器單元
154‧‧‧引退單元
156‧‧‧排程器單元
158‧‧‧實體暫存器檔案單元
160‧‧‧執行叢集
162‧‧‧執行單元
164‧‧‧記憶體存取單元
170‧‧‧記憶體單元
172‧‧‧資料轉譯後備緩衝器單元
174‧‧‧資料快取單元
176‧‧‧L2快取單元
190‧‧‧處理器核心
200‧‧‧指令解碼器
202‧‧‧晶粒上互連網路
204‧‧‧L2快取之區域子集
206‧‧‧L1快取
206A‧‧‧L1資料快取
208‧‧‧純量單元
210‧‧‧向量單元
212‧‧‧純量暫存器
214‧‧‧向量暫存器
220‧‧‧拌和單元
222A,B‧‧‧數字轉換單元
224‧‧‧複製單元
226‧‧‧寫入遮罩暫存器
228‧‧‧16位寬算術邏輯單元
300‧‧‧處理器
302‧‧‧單一核心
304‧‧‧快取單元
306‧‧‧共用快取單元
308‧‧‧特殊用途邏輯
310‧‧‧系統代理單元
312‧‧‧環狀互連單元
314‧‧‧整合式記憶體控制器單元
316‧‧‧匯流排控制器單元
400‧‧‧系統
410‧‧‧處理器
415‧‧‧處理器
420‧‧‧控制器集線器
440‧‧‧記憶體
445‧‧‧共處理器
450‧‧‧輸入/輸出集線器
460‧‧‧輸入/輸出裝置
490‧‧‧圖形記憶體控制器集線器
495‧‧‧連接器
500‧‧‧多處理器系統
514‧‧‧輸入/輸出裝置
515‧‧‧處理器
516‧‧‧第一匯流排
518‧‧‧匯流排橋接器
520‧‧‧第二匯流排
522‧‧‧鍵盤/滑鼠
524‧‧‧音頻輸入/輸出裝置
527‧‧‧通信裝置
528‧‧‧儲存器單元
530‧‧‧指令/碼及資料
532‧‧‧記憶體
534‧‧‧記憶體
538‧‧‧共處理器
539‧‧‧高性能介面
550‧‧‧點對點介面
552‧‧‧點對點介面
554‧‧‧點對點介面
570‧‧‧處理器
572‧‧‧控制邏輯
576‧‧‧點對點介面
578‧‧‧點對點介面
580‧‧‧處理器
582‧‧‧控制邏輯
586‧‧‧點對點介面
588‧‧‧點對點介面
590‧‧‧晶片組
594‧‧‧點對點介面電路
592,596‧‧‧介面
598‧‧‧點對點介面電路
600‧‧‧系統
614‧‧‧輸入/輸出裝置
615‧‧‧舊輸入/輸出裝置
700‧‧‧系統晶片
702‧‧‧互連單元
710‧‧‧應用處理器
720‧‧‧共處理器
730‧‧‧靜態隨機存取記憶體單元
732‧‧‧直接記憶體存取單元
740‧‧‧顯示器單元
802‧‧‧高階語言
804‧‧‧x86編譯器
806‧‧‧x86二進制碼
808‧‧‧替代指令集編譯器
810‧‧‧替代指令集二進制碼
812‧‧‧指令轉換器
814‧‧‧處理器
816‧‧‧處理器
901‧‧‧第一來源運算元
902‧‧‧第二來源運算元
907‧‧‧目的地運算元
910‧‧‧寫入遮罩暫存器K1
910a‧‧‧目的地元件0
910b‧‧‧目的地元件1
1001‧‧‧第一來源運算元
1002‧‧‧第二來源運算元
1006‧‧‧向量加法邏輯
1007‧‧‧目的地暫存器
1008‧‧‧飽和邏輯
1010‧‧‧遮罩資料結構
1011‧‧‧多工器
1012‧‧‧多工器
A‧‧‧來源向量
B‧‧‧來源向量
C‧‧‧目的地向量
1100‧‧‧主記憶體
1101‧‧‧分支目標緩衝器
1102‧‧‧分支預測單元
1103‧‧‧下一指令指標
1104‧‧‧指令轉譯後備緩衝器
1105‧‧‧暫存器
1110‧‧‧指令擷取單元
1111‧‧‧第二階(L2)快取
1112‧‧‧第一階(L1)快取
1116‧‧‧第三階(L3)快取
1120‧‧‧指令快取
1121‧‧‧資料快取
1130‧‧‧解碼單元
1131‧‧‧解碼邏輯
1140‧‧‧處理器執行引擎單元
1141‧‧‧執行邏輯
1150‧‧‧寫回/引退單元
1155‧‧‧處理器
1300‧‧‧同屬向量友善指令格式
1305‧‧‧無記憶體存取
1310‧‧‧無記憶體存取、全捨入控制類型運算
1312‧‧‧無記憶體存取、寫入遮罩控制、部分捨入控制類型運算
1315‧‧‧無記憶體存取、資料變換類型運算
1317‧‧‧無記憶體存取、寫入遮罩控制、vsize類型運算
1320‧‧‧記憶體存取
1325‧‧‧記憶體存取、暫存
1327‧‧‧記憶體存取、寫入遮罩控制
1330‧‧‧記憶體存取、非暫存
1340‧‧‧格式欄位
1342‧‧‧基礎運算欄位
1344‧‧‧暫存器索引欄位
1346‧‧‧修改符欄位
1346A‧‧‧無記憶體存取
1346B‧‧‧記憶體存取
1350‧‧‧擴增運算欄位
1352‧‧‧阿爾發欄位
1352A‧‧‧RS欄位
1352A1‧‧‧捨入
1352A2‧‧‧資料變換
1352B‧‧‧驅逐提示欄位
1352B1‧‧‧暫存
1352B2‧‧‧非暫存
1352C‧‧‧寫入遮罩控制(Z)欄位
1354‧‧‧貝他欄位
1354A‧‧‧捨入控制欄位
1354B‧‧‧資料變換欄位
1354C‧‧‧資料處理欄位
1356‧‧‧抑制所有浮點異常欄位
1357A‧‧‧RL欄位
1357A1‧‧‧捨入
1357A2‧‧‧向量長度
1357B‧‧‧播送欄位
1358‧‧‧捨入運算控制欄位
1359A‧‧‧捨入運算控制欄位
1359B‧‧‧向量長度欄位
1360‧‧‧比例欄位
1362A‧‧‧位移欄位
1362B‧‧‧位移因數欄位
1364‧‧‧資料元件寬度欄位
1368‧‧‧類別欄位
1368A‧‧‧A類
1368B‧‧‧B類
1370‧‧‧寫入遮罩欄位
1372‧‧‧立即欄位
1374‧‧‧全運算碼欄位
1400‧‧‧特定向量友善指令格式
1402‧‧‧EVEX前置碼
1415‧‧‧運算碼映射欄位
1420‧‧‧EVEX.vvvv欄位
1425‧‧‧前置碼編碼欄位
1430‧‧‧實數運算碼欄位
1440‧‧‧MOD R/M欄位
1442‧‧‧MOD欄位
1444‧‧‧Reg欄位
1446‧‧‧R/M欄位
1454‧‧‧SIB.xxx欄位
1456‧‧‧SIB.bbb欄位
1500‧‧‧暫存器架構
1510‧‧‧向量暫存器
1515‧‧‧寫入遮罩暫存器
1525‧‧‧一般用途暫存器
1545‧‧‧純量浮點堆疊暫存器檔案
1550‧‧‧MMX緊縮整數平面暫存器檔案
諸實施例係藉由範例揭示且不限於附圖之圖式,其中:圖1A係方塊圖,揭示根據實施例之一示範性有序擷取、解碼、引退管線及一示範性暫存器重新命名、亂序發送/執行管線兩者;圖1B係方塊圖,揭示根據實施例之包括在一處理器中的一有序擷取、解碼、引退核心示範實施例及一示範性暫存器重新命名、亂序發送/執行架構核心兩者;圖2A-B係一較特定示範性有序核心架構之方塊圖;圖3係具有整合式記憶體控制器與特殊用途邏輯的一單核心處理器及一多核心處理器之方塊圖;圖4揭示根據一實施例之一系統之方塊圖;圖5揭示根據一實施例之第二系統之方塊圖;圖6揭示根據一實施例之第三系統之方塊圖;圖7揭示根據一實施例之一系統單晶片(SoC)之方塊圖;圖8揭示方塊圖,根據實施例對比使用一軟體指令轉 換器將一來源指令集中之二進制指令轉換成一目標指令集中之二進制指令;圖9係方塊圖,揭示根據一實施例之一寫入遮罩向量加法;圖10係根據本文內所述之實施例之用以執行指令之示範性處理器邏輯之方塊圖;圖11係根據一實施例之一處理系統之方塊圖,該處理系統用以執行一向量飽和加法之指令;圖12係根據實施例之用以執行指令的邏輯之流程圖;圖13A-B係方塊圖,揭示根據實施例之一同屬向量友善指令格式及其指令樣板;圖14A-D係方塊圖,揭示根據本發明之實施例之一示範性特定向量友善指令格式;及圖15係根據實施例之純量及向量暫存器架構之方塊圖。
【發明內容及實施方式】
SIMD技術,像是具有指令集包括x86、MMXTM、資料流SIMD延伸(SSE)、SSE2、SSE3、SSE4.1、及SSE4.2指令的Intel® CoreTM處理器所用者,其已在應用性能上達成重大改善。SIMD延伸之一附加組(稱為先進向量延伸(AVX)(AVX1及AVX2)且使用向量延伸(VEX)編碼方案)已經發表(例如,請參閱Intel® 64 and IA-32 Architectures Software Developers Manual,September 2014,及參閱Intel® Architecture Instruction Set Extensions Programming Reference,September 2014)。所揭述之架構延伸係延伸Intel Architecture(IA)。惟,在本發明下之原理並不限於任何特定ISA。
在一實施例中,一處理裝置實施一組指令,以執行一飽和雙字或四字加法運算。在一實施例中,一向量飽和加法指令對於由第一及第二運算元指示之兩向量暫存器之對應元件執行一平行加法,並將結果寫到由第三運算元指示之第三向量暫存器。在一實施例中,一純量雙字或四字資料元件可以加到一向量暫存器之各元件。在一實施例中,當一個別結果是在目標資料元件之範圍以外時,一飽和值即針對超出範圍之資料元件而寫到目的地運算元。
文後所述為處理器核心架構,接著是根據本文內所述實施例之示範性處理器及電腦架構的說明。許多特定細節被陳述用以提供對文後本發明之實施例的徹底瞭解。惟,對熟於此技者而言,諸實施例也可以在沒有這些特定細節下實施。在其他例子中,習知結構及裝置係以方塊圖形式揭示,以免模糊許多實施例下的原理。
處理器核心可依不同方式、針對不同用途、及在不同處理器中實施。例如,諸核心之實施方式包括:1)用於一般用途計算之一般用途有序核心;2)用於一般用途計算之高性能一般用途亂序核心;3)基本上用於圖形及/或科學(流通量)計算之特殊用途核心。處理器可以使用單一處理 器核心實施或者可包括一多處理器核心。就架構指令集而言,處理器內之處理器核心可以是同質或異質性。
不同處理器之實施方式包括:1)一中央處理器,包括一或多個用於一般用途計算之一般用途有序核心及/或一或多個用於一般用途計算之一般用途亂序核心;及2)一共處理器,包括一或多個用於圖形及/或科學(流通量)之特殊用途核心。這些不同處理器導致不同電腦系統架構,包括:1)共處理器,設在一來自中央系統處理器之個別晶片上;2)共處理器,設在一與中央系統處理器相同封裝中之個別晶粒上;3)共處理器,設在與其他處理器核心相同之晶粒上(在此情況中,此共處理器有時稱為特殊用途邏輯,例如整合式圖形及/或科學(流通量)邏輯,或特殊用途核心);及4)一系統單晶片,設在一包括相同晶粒上有上述處理器(有時稱為應用核心或應用處理器)、上述共處理器、及其他功能之晶片上。
示範性核心架構 有序及亂序核心方塊圖
圖1A係方塊圖,揭示根據一實施例之一示範性有序管線及一示範性暫存器重新命名亂序發送/執行管線。圖1B係方塊圖,揭示根據一實施例之包括在一處理器中的一有序架構核心示範實施例及一示範性暫存器重新命名亂序發送/執行架構核心兩者。圖1A-B中之實線框說明有序管線及有序核心,而虛線框之選項性附加則說明暫存器重 新命名亂序發送/執行管線及核心。已知有序態樣為亂序態樣之一子集,亂序態樣將揭述於後。
在圖1A中,一處理器管線100包括一擷取階段102、一長度解碼階段104、一解碼階段106、一配置階段108、一重新命名階段110、一排程(亦稱為配送或發送)階段112、一暫存器讀取/記憶體讀取階段114、一執行階段116、一寫回/記憶體寫入階段118、一異常處置階段122、及一確認階段124。
圖1B揭示處理器核心190包括一前端單元130耦合到一執行引擎單元150,且兩者皆耦合到一記憶體單元170。核心190可以是一精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字(VLIW)核心、或混合式或替代式核心類型。就另一選項而言,核心190可以是一特殊用途核心,例如像是一網路或通信核心、壓縮引擎、共處理器核心、一般用途計算圖形處理單元(GPGPU)核心、圖形核心、或類似者。
前端單元130包括一分支預測單元132耦合到一指令快取單元134,指令快取單元耦合到一指令轉譯後備緩衝器(TLB)136,指令轉譯後備緩衝器則耦合到一指令擷取單元138,指令擷取單元耦合到一解碼單元140。解碼單元140(或解碼器)可解碼指令,且產生作為一輸出一或多個微運算、微碼輸入點、微指令、其他指令、或其他控制信號,其係從原始指令解碼、或反映、或導出。解碼單元140可以使用許多不同機構實施。適合之機構範例包括但 是不限定的有查詢表、硬體實施方式、可編程邏輯陣列(PLA)、微碼唯讀記憶體(ROM)、等等。在一實施例中,核心190包括一微碼ROM或為了儲存特定巨集指令(例如,在解碼單元140中或在前端單元130中)用之微碼的其他媒體。解碼單元140耦合到執行引擎單元150中之一重新命名/配置器單元152。
執行引擎單元150包括重新命名/配置器單元152,重新命名/配置器單元耦合到一引退單元154及一組的一或多個排程器單元156。排程器單元156代表任意數量之不同排程器,包括保留站、中央指令窗、等等。排程器單元156耦合到實體暫存器檔案單元158。各實體暫存器檔案單元158代表一或多個實體暫存器檔案,不同之實體暫存器檔案儲存一或多個不同資料類型,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,一指令指標,即欲執行之下一指令之位元址)、等等。在一實施例中,實體暫存器檔案單元158包含一向量暫存器單元、一寫入遮罩暫存器單元、及一純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮罩暫存器、及一般用途暫存器。實體暫存器檔案單元158由引退單元154重疊,以便說明可以實施暫存器重新命名及亂序執行的不同方式(例如,使用重排序緩衝器及引退暫存器檔案;使用未來檔案、歷史緩衝器、及引退暫存器檔案;使用暫存器圖及暫存器庫、等等)。引退單元154及實體暫存器檔案單元158耦合到執行叢集160。執行叢集 160包括一組的一或多個執行單元162及一組的一或多個記憶體存取單元164。執行單元162可執行許多運算(例如,移位、加、減、乘)及在許多資料類型上執行(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。儘管一些實施例包括許多專用於特定功能或功能組之執行單元,其他實施例可以包括僅一執行單元或全執行所有功能之多數個執行單元。排程器單元156、實體暫存器檔案單元158、及執行叢集160揭示成可能呈複數,因為某些實施例係針對資料/運算之某些類型產生個別管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,各有自己的排程器單元、實體暫存器檔案單元、及/或執行叢集而且在個別記憶體存取管線之情況中,某些實施例僅在此管線之執行叢集具有記憶體存取單元164時實施)。亦應瞭解的是在使用個別管線之場合中,這些管線之一或多者可以是亂序發送/執行且其餘是有序。
該組記憶體存取單元164耦合到記憶體單元170,記憶體單元包括一資料TLB單元172,資料TLB單元耦合到一資料快取單元174,資料快取單元耦合到一第二階(L2)快取單元176。在一示範實施例中,記憶體存取單元164可包括一載入單元、一儲存位址單元、及一儲存資料單元,其各耦合到記憶體單元170中之資料TLB單元172。指令快取單元134進一步耦合到記憶體單元170中之第二階(L2)快取單元176。L2快取單元176耦合到快取 之其他一或多階且最後耦合到一主記憶體。
舉例而言,示範性暫存器重新命名、亂序發送/執行核心架構可實施管線100如下:1)指令擷取單元138執行擷取及長度解碼階段102及104;2)解碼單元140執行解碼階段106;3)重新命名/配置器單元152執行配置階段108及重新命名階段110;4)排程器單元156執行排程階段112;5)實體暫存器檔案單元158及記憶體單元170執行暫存器讀取/記憶體讀取階段114;執行叢集160執行執行階段116;6)記憶體單元170及實體暫存器檔案單元158執行寫回/記憶體寫入階段118;7)許多單元可介入異常處置階段122;及8)引退單元154及實體暫存器檔案單元158執行確認階段124。
核心190可支援一或多個指令集(例如,x86指令集(具有已加入較新版本的一些延伸);加州桑尼維爾市MIPS Technologies公司之MIPS指令集;英格蘭劍橋市ARM Holdings公司之ARM®指令集(具有選項性之其他延伸,例如NEON)),包括本文內所述之指令。在一實施例中,核心190包括邏輯,以支援一封包資料指令集延伸(例如,AVX1、AVX2),藉以容許由許多多媒體應用程式使用之運算可使用封包資料被執行。
應該瞭解的是核心可支援多線執行(執行二或多個平行組的運算或線),且可依許多方式進行,包括時間切割多線執行、同時多線執行(其中單一實體核心提供一邏輯核心給各線,實體核心係同時多線執行)、或其組合(例 如,時間切割擷取及解碼並且隨後同時多線執行,像是Intel® Hyper-Threading科技)。
儘管暫存器重新命名揭述於亂序執行之內文中,應該瞭解的是暫存器重新命名可用在有序架構。儘管處理器之揭示實施例亦包括個別指令與資料快取單元134/174及一共用L2快取單元176,替代實施例可具有一同時用於指令與資料之單一內部快取,例如第一階(L1)內部快取,或多階內部快取。在一些實施例中,系統可包括一內部快取與一設於核心及/或處理器外之外部快取的組合。或者,所有快取皆在核心及/或處理器外。
特定示範性有序核心架構
圖2A-B係一較特定示範性有序核心架構之方塊圖,核心為一晶片中之多數個邏輯方塊(包括同型及/或不同型之其他核心)的其中之一。邏輯方塊透過一高頻寬互連網路(例如,環狀網路)與一些固定功能邏輯、記憶體輸入/輸出(I/O)介面、及其他必要輸入/輸出(I/O)邏輯通信,此視應用而定。
圖2A係根據一實施例之一單一處理器核心之方塊圖,連同其連接之晶粒上互連網路202及其第二階(L2)快取204之區域子集。在一實施例中,一指令解碼器200以一緊縮資料指令集延伸支援x86指令集。一L1快取206容許低潛時存取,以快取記憶體至純量及向量單元。雖然在一實施例中(為了簡化設計),一純量單元208及一向量 單元210使用個別暫存器組(分別為純量暫存器212及向量暫存器214),且在其間轉移之資料寫入記憶體及隨後從第一階(L1)快取206讀回,替代實施例可使用不同方式(例如,使用單一暫存器組或包括一通信路徑,容許資料在兩暫存器檔案之間轉移而不需寫入及讀回)。
L2快取204之區域子集為一全域L2快取之一部分,全域L2快取分割成個別區域子集且每一處理器核心有一區域子集。各處理器核心具有一直接存取路徑通往其自身之L2快取204之區域子集。由一處理器核心讀取之資料儲存在L2快取204中且可快速存取,即與存取自身區域L2快取子集之其他處理器核心並行。由一處理器核心寫入之資料儲存在其自身之L2快取子集204中且必要時從其他子集清除。環狀網路可確保共用資料之一致性。環狀網路係雙向性的,以容許代理模組像是處理器核心、L2快取及其他邏輯方塊在晶片中彼此通信。各環狀資料路徑為每個方向有1012位元寬。
圖2B係根據一實施例之圖2A中之處理器核心的一部分之展開圖。圖2B包括L1資料快取206A,即L1快取206之一部分,以及關於向量單元210及向量暫存器214之較多細節。較明確說,向量單元210係16位寬向量處理單元(VPU)(參閱16位寬算術邏輯單元(ALU)228),其執行整數、單精度浮點數、及雙精度浮點數指令之一或多者。VPU以拌和單元220支援拌和暫存器輸入、以數字轉換單元222A-B支援數字轉換、及以記憶體輸入 端上之複製單元224複製。寫入遮罩暫存器226則容許預測之生成向量寫入。
具有整合式記憶體控制器及特殊用途邏輯之處理器
圖3係根據一實施例之一可能具有多核心、可能具有一整合式記憶體控制器、及可能具有整合圖形的處理器300之方塊圖。圖3中之實線框說明一具有單一核心302A、一系統代理單元310、一組的一或多個匯流排控制器單元316之處理器300,而虛線框之選項性附加則說明一具有多核心302A-N、系統代理單元310中之一組的一或多個整合式記憶體控制器單元314、及特殊用途邏輯308之替代性處理器300。
因此,處理器300之不同實施方式可包括:1)一CPU,具有特殊用途邏輯308,係整合式圖形及/或科學(流通量)邏輯(其可包括一或多個核心),及核心302A-N,係一或多個一般用途核心(例如,一般用途有序核心、一般用途亂序核心、兩者之組合);2)一共處理器,具有核心302A-N,係大量特殊用途核心,主要用於圖形及/或科學(流通量);及3)一共處理器,具有核心302A-N,係大量一般用途有序核心。因此,處理器300可以是一般用途處理器、共處理器或特殊用途處理器,例如像是網路或通信處理器、壓縮引擎、圖形處理器、GPGPU(一般用途計算圖形處理單元)、高通量多重整合核心(MIC)處理器(包括30或更多核心)、嵌入式處理器、或類似者。處理器可 在一或多個晶片上實施。處理器300可以是一或多個基板之一部分及/或使用許多製程技術之任一者實施於基板上,例如像是BiCMOS、CMOS、或NMOS。
記憶體階層包括核心內之一或多階快取、一組或一或多個共用快取單元306、及耦合到整合式記憶體控制器單元組314的外部記憶體(圖中未示)。共用快取單元組306可包括一或多個中階快取,例如第二階(L2)、第三階(L3)、第四階(L4),或其他階快取、最末階快取(LLC)、及/或其組合。儘管在一實施例中一環狀互連單元312將整合式圖形邏輯308、共用快取單元組306、及系統代理單元310/整合式記憶體控制器單元314互連,替代實施例可使用任意數量之習知技術將諸單元互連。在一實施例中,一致性(coherency)維持在一或多個快取單元306與核心302A-N之間。
在一些實施例中,核心302A-N之一或多者可以多線運算。系統代理單元310包括用以協調與運算核心302A-N之諸組件。系統代理單元310可包括例如一電力控制單元(PCU)及一顯示單元。PCU可以是或包括用以調節核心302A-N與整合式圖形邏輯308之電力狀態所需的邏輯及組件。顯示單元用以驅動一或多個外接顯示器。
依據架構指令集,核心302A-N可以是同質性或異質性;亦即,核心302A-N之二或多者可以執行同一指令集,而其他核心可以僅執行指令集之一子集或一不同指令集。
示範性電腦架構
圖4-7係示範性電腦架構之方塊圖。膝上型、桌上型、掌上型個人電腦、個人數位元化助理、工程工作站、伺服器、網路裝置、網路集線器、開關、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲機、機上盒、微控制器、行動電話、可攜式媒體播放器、掌上型裝置、及許多其他電子裝置及在技藝中習知之其他系統設計與構型亦適用。大抵上,可併入本文內所述之一處理器及/或其他執行邏輯的廣泛系統或電子裝置皆大致適用。
請參閱圖4,揭示根據一實施例之一系統400之方塊圖。系統400可包括一或多個處理器410、415,其耦合到一控制器集線器420。在一實施例中,控制器集線器420包括一圖形記憶體控制器集線器(GMCH)490及一輸入/輸出集線器(IOH)450(其可設在個別晶片上);GMCH 490包括記憶體及圖形控制器,供記憶體440及一共處理器445耦合到此;IOH 450將輸入/輸出(I/O)裝置460耦合到GMCH 490。或者,記憶體及圖形控制器的其中之一或兩者係在處理器內整合(如本文內所述),記憶體440及共處理器445直接耦合到處理器410,及控制器集線器420係與IOH 450設在單一晶片中。
附加處理器415之選項性性質係在圖4中以虛線表示。各處理器410、415可包括本文內所述處理器核心之一或多者及可以是處理器300之某些版本。
記憶體440例如可以是動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或兩者之組合。針對至少一實施例,控制器集線器420透過多點匯流排(例如,前側匯流排(FSB))、點對點介面(例如,快速通道互連(QPI))、或類似連接器495,以通信處理器410、415。
在一實施例中,共處理器445係特殊用途處理器,例如像是高通量MIC處理器、網路或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器、或類似者。在一實施例中,控制器集線器420可包括一整合式圖形加速器。
依據指標量度範圍,包括架構上、微架構上、溫度上、耗電特徵、及類似者,實體資源410、415之間可以有許多差異。
在一實施例中,處理器410執行控制一般類型資料處理運算之指令。嵌入於指令內者可以是共處理器指令。處理器410將這些共處理器指令辨識成一應該由附接共處理器445執行之類型。據此,處理器410在一共處理器匯流排或其他互連上發送這些共處理器指令(或代表共處理器指令之控制信號)到共處理器445。共處理器445接收及執行所收到之共處理器指令。
請即參閱圖5,揭示根據一實施例之第一較特定示範系統500之方塊圖。如圖5中所示,多處理器系統500係點對點互連系統,且包括透過一點對點互連550耦合之第一處理器570及第二處理器580。處理器570、580各為 處理器300之某些版本。在本發明之一實施例中,處理器570、580分別為處理器410、415,同時共處理器538為共處理器445。在另一實施例中,處理器570、580分別為處理器410、共處理器445。
處理器570、580揭示成分別包括整合式記憶體控制器(IMC)單元572、582。處理器570亦包括點對點(P-P)介面576、578,做為其匯流排控制器單元之一部分;相似地,第二處理器580包括P-P介面586、588。處理器570、580可以使用P-P介面電路578、588透過一點對點(P-P)介面550交換資訊。如圖5中所示,IMC 572、582將處理器耦合到個別記憶體,亦即一記憶體532及一記憶體534,其可以是區域性附接於個別處理器之主記憶體的部分。
處理器570、580可以個別使用點對點介面電路576、594、586、598透過個別P-P介面552、554,以與一晶片組590交換資訊。晶片組590可以透過一高性能介面539選項性地和共處理器538交換資訊。在一實施例中,共處理器538係一特殊用途處理器,例如像是高通量MIC處理器、網路或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器、或類似者。
一共用快取(圖中未示)可包括在兩處理器之任一者內或在其外,並且透過P-P互連與處理器連接,所以如果一處理器處於低電力模式,則任一或兩處理器之區域快取資訊可儲存於共用快取中。
晶片組590可以透過一介面596耦合到第一匯流排516。在一實施例中,第一匯流排516可以是周邊組件互連(PCI)匯流排,或是一例如PCI高速匯流排或另一第三代I/O互連匯流排,儘管本發明之範疇並非如此限制。
如圖5中所示,許多輸入/輸出(I/O)裝置514可以隨著一匯流排橋接器518耦合到第一匯流排516,匯流排橋接器則將第一匯流排516耦合到第二匯流排520。在一實施例中,一或多個附加處理器515,例如像是共處理器、高通量MIC處理器、GPGPU、加速器(例如像是圖形加速器或數位信號處理(DSP)單元)、場可編程閘陣列、或任意其他處理器,皆可耦合到第一匯流排516。在一實施例中,第二匯流排520可以是一低針腳數(LPC)匯流排。許多裝置可耦合到第二匯流排520,包括例如鍵盤及/或滑鼠522、通信裝置527及一儲存器單元528,像是磁碟驅動器或其他大容量儲存裝置,其在一實施例中可包括指令/碼及資料530。再者,一音頻輸入/輸出裝置(I/O)524可耦合到第二匯流排520。應該注意的是,其他架構亦可行。例如取代圖5之點對點架構,一系統可實施一多點匯流排或其他這類架構。
圖6揭示根據一實施例之第二較特定示範系統600之方塊圖。圖5及6中之相同元件使用相同參考編號,且圖5之某些態樣已從圖6省略,以避免模糊圖6之其他態樣。
圖6揭示處理器570、580各別包括整合式記憶體及 I/O控制邏輯(CL)572、582。因此,CL 572、582包括整合式記憶體控制器單元及包括I/O控制邏輯。圖6揭示不僅記憶體532、534耦合到CL 572、582,I/O裝置614亦耦合到CL 572、582。舊有I/O裝置615耦合到晶片組590。
圖7揭示根據一實施例之一系統晶片(SoC)700之方塊圖。圖3中之相同元件使用相同參考編號,再者,虛線框為較先進SoC上之選項性特徵。在圖7中,一互連單元702耦合到:一應用處理器710,其包括一組的一或多個核心302A-N及共用快取單元306;一系統代理單元310;一匯流排控制器單元316;一整合式記憶體控制器單元314;一組或一或多個共處理器720,其可包括整合式圖形邏輯、一影像處理器、一音頻處理器、及一視頻處理器;一靜態隨機存取記憶體(SRAM)單元730;一直接記憶體存取(DMA)單元732;及一顯示器單元740,用於耦合到一或多個外顯示器。在一實施例中,共處理器720包括一特殊用途處理器,例如像是網路或通信處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌入式處理器、或類似者。
本文內所揭露機構之實施例可實施於硬體、軟體、韌體、或諸實施方式之組合中。諸實施例可實施作為在含有至少一處理器、一儲存系統(包括揮發性及非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置之可編程系統上執行之電腦程式或程式碼。
程式碼(例如,圖5中所示之碼530)可施加於輸入指令,以執行本文內所述之功能且產生輸出資訊。輸出資訊可依習知方式施加於一或多個輸出裝置。針對此應用目的,一處理系統包括任意系統,其具有例如像是一數位信號處理器(DSP)、一微控制器、一專用積體電路(ASIC)、或一微處理器之一處理器。
程式碼可用一高階程序程式語言或物件導向編程語言實施,以利通信一處理系統。若有需要,程式碼也可用組合語言或機器語言實施。事實上,本文內所述之機構範疇並不限於任何特殊編程語言。在任意情況中,語言可以是編譯或解譯語言。
至少一實施例之一或多個態樣可以藉由儲存在一機器可讀取媒體上之代表資料實施,其代表處理器內之許多邏輯,當由一機器讀取時,其致使機器組合邏輯以執行本文內所述之技術。此代表性(俗稱為IP核心)可以儲存在一實體機器可讀取媒體上(磁帶)且供給至許多客戶或製造廠,以載入實際製成邏輯或處理器之製造機器內。例如,IP核心(像是由ARM Holdings,Ltd.及the Institute of Computing Technology(ICT)of the Chinese Academy of Sciences研發之處理器)可以授權或販售給許多客戶或獲得許可者並且在由這些客戶或獲得許可者生產之處理器中實施。
此種機器可讀取儲存媒體可包括但是不限定的有由一機器或裝置製造或形成之物件之非暫態、實體配置,包括 儲存媒體,像是硬碟、任意其他類型碟片(包括軟碟、光碟、光碟唯讀記憶體(CD-ROM)、可重寫光碟(CD-RW)、及磁光碟)、半導體裝置(像是唯讀記憶體(ROM)、隨機存取記憶體(RAM),像是動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM))、可抹除可編程唯讀記憶體(EPROM)、快閃記憶體、電可抹除可編程唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁性或光學性卡、或適用於儲存電子指令之任意其他類型媒體。
據此,一實施例亦包括非暫態、含有指令或含有設計資料之實體機器可讀取媒體,例如硬體說明語言(HDL),其界定本文內所述之結構、電路、裝置、處理器及/或系統特徵。諸實施例亦稱為程式產物。
仿真(包括二進制翻譯、碼轉譯、等等)
在一些情況中,一指令轉換器可用以將一來自一來源指令集之指令轉換成一目標指令集。例如,指令轉換器可以翻譯(例如,使用靜態二進制翻譯、包括有動態編譯之動態二進制翻譯)、轉譯、仿真、或者轉換一指令成一或多個欲供核心處理之其他指令。指令轉換器可實施於硬體、軟體、韌體、或其組合中。指令轉換器可以在處理器上、處理器外、或部分在處理器上且部分在處理器外。
圖8係方塊圖,根據一實施例對比使用一軟體指令轉換器將一來源指令集中之二進制指令轉換成一目標指令集中之二進制指令。在所示之實施例中,指令轉換器係一軟 體指令轉換器,儘管指令轉換器在替代型式上可實施於軟體、韌體、硬體、或其許多組合中。圖8揭示一高階語言802中之一程式可使用一x86編譯器804編譯,以產生x86二進制碼806,其原本即由一具有至少一x86指令集核心之處理器816執行。
具有至少一x86指令集核心之處理器816代表大致上可與具有至少一x86指令集核心之Intel®處理器執行相同的功能,即其藉由相容執行或處理(1)Intel®x86指令集核心之指令集之一相當大部分或(2)目標在一具有至少一x86指令集核心之Intel®處理器上運算的應用程式或共他軟體之目標碼版本,以利達成與具有至少一x86指令集核心之Intel®處理器大致相同的結果。x86編譯器804代表一編譯器,其可運算成產生x86二進制碼806(例如,目標碼),在有或無附加連結處理下可以在具有至少一x86指令集核心之處理器816上執行。相似地,圖8揭示高階語言802中之程式可使用一替代指令集編譯器808編譯,以產生替代指令集二進制碼810,其原本即由一未具有至少一x86指令集核心814之處理器執行(例如,一具有核心可執行加州桑尼維爾市MIPS Technologies公司之MIPS指令集及/或執行英格蘭劍橋市ARM Holdings公司之ARM指令集的處理器)。
指令轉換器812用以將x86二進制碼806轉換成原本即由未具有一x86指令集核心之處理器814執行的碼。此轉換碼不易與替代指令集二進制碼810相同,因為可達成 此目的之指令轉換器難以製造;惟,轉換碼可完成一般運算及由來自替代指令集之指令組成。因此,指令轉換器812代表軟體、韌體、硬體、或其組合,其透過仿真、模擬或任意其他程式而容許不具有一x86指令集處理器或核心之一處理器或其他電子裝置,用以執行x86二進制碼806。
向量飽和雙字/四字加法指令
飽和算術增進許多資料處理演算法之效率,特別是在數位信號處理之應用中。飽和加法在許多演算法中很普遍。惟,昂貴的指令序列係被需要以用以實作使用現有指令之飽和算術。在多數個實施例中,一指令集架構之向量延伸包括用於執行飽和之有符號及無符號整數加法的指令。在一實施例中,提供一具有符號飽和之向量符號整數加法。在一實施例中,提供一具有無符號飽和之向量無符號整數加法。在一實施例中,緊縮之雙字或四字整數支援於有符號及無符號指令兩者。
例如,一向量緊縮之加法有符號雙字(例如,VPADDSD)指令造成一處理器執行緊縮有符號雙字整數與來自第一來源運算元與第二來源運算元之飽和的SIMD加法。處理器接著儲存緊縮整數結果於一目的地運算元中。當個別之雙字結果是在一有符號雙字整數之範圍以外時(亦即,大於0x7FFFFFFF或小於0x80000000),飽和值0x7FFFFFFF或0x80000000各別寫到目的地運算元。四字 有符號指令(例如,VPADDSQ)及無符號版本(各別用於雙字及四字,例如,VPADDUSD及VPADDUSQ)係以相似方式和一無符號及/或四字飽和值工作。在一實施例中,128位元、256位元、及512位元之向量暫存器係以支援於雙字指令之4、8、或16向量元件及支援於四字指令之2、4、或8向量元件作支援。
圖9係方塊圖,揭示根據一實施例之一寫入遮罩向量加法。在一實施例中,一寫入遮罩暫存器K1 910是在每一資料元件位置之基礎上控制目的地向量運算元中之資料元件位置是否反映出指令運算之結果。基於寫入遮罩之組構,一目的地運算元(例如,DEST運算元907)中之各資料元件位置含有由第一來源運算元(例如,SRC1運算元901)及第二來源運算元(例如,SRC2運算元902)任一者識別之一向量暫存器之相對應資料元件之總和之輸出。例如,目的地元件0 910a具有一相關聯之寫入遮罩值1,並且接收SRC1運算元901之元件0(例如,0x9)及SRC2運算元902之元件0(例如,0x8)之總和之結果。目的地元件1910b具有一相關聯之寫入遮罩值0,並且基於寫入遮罩之組構而呈揭示之零遮罩,或是元件之原始值不變。儘管SRC1運算元901及SRC2運算元902揭示為向量,在一實施例中,指令之SRC2可以是一儲存一純量整數值之記憶體位置,純量整數值將被加到由SRC1運算元901指定之向量暫存器之各元件。
圖10係揭示本文內所述之實施例用以執行指令之示 範性處理器邏輯之方塊圖。根據實施例,向量加法邏輯1006包括第一來源暫存器(例如,SRC1暫存器1001)、第二來源暫存器(例如,SRC2暫存器1002)、及一目的地暫存器(例如,DEST暫存器1007)。在一實施例中,SRC1暫存器1001含有示範性來源向量A,而SRC2暫存器1002含有示範性來源向量B。對應向量元件之總和係經計算且諸元件至少一些可用以產生示範性向量C,其在一實施例中係輸出至DEST暫存器1007。在一實施例中,第一來源暫存器含有來源向量A,而第二來源暫存器含有一純量值B,其係從一指定之記憶體位置擷取(例如,由指令之SRC2指定的一位址)。根據實施例,純量值可以儲存在一般用途暫存器中或播送到一向量暫存器之多數個元件。飽和邏輯1008包括在向量加法邏輯1006中,用於以適當飽和值替代範圍以外之結果(例如,最小值或最大值,有符號或無符號)。
在圖10所示之特定範例中,SRC1暫存器1001、SRC2暫存器1002、及DEST暫存器1007各為128位元。惟,在本文內所述實施例下之原理並不限於此,且包括256及512位元之其他暫存器尺寸可用在變化之實施例中。在一實施例中,一遮罩位元也可以在一遮罩資料結構1010內指定用於各目的地暫存器資料元件。若與目的地暫存器中之一特定資料元件相關聯的遮罩位元設定為真(例如,1),則向量加法邏輯1006輸出相關聯資料元件之總和。若遮罩位元設定為偽(例如,0),則在一實施例 中,向量加法邏輯1006將0寫到相關聯目的地暫存器入口點。反應於一遮罩值而將0寫到一目的地資料元件之先前技術在此稱之為「零遮罩」。或者,一實施例使用「合併遮罩」,即維持儲存在目的地暫存器中之先前資料元件值。因此,若使用合併遮罩,目的地向量C之位元即維持其先前之值。習於此技者可以瞭解的是上述遮罩位元可以反向,同時仍符合本實施例下之原理(例如,真=遮罩;偽=無遮罩)。
運算時,若任何生成元件超過最大或最小資料元件值,飽和邏輯1008即(使用有符號或無符號之飽和)取代元件之最大或最小值。如上所述,在一實施例中,轉換邏輯1006存取暫存器1001、1002、1007,藉由控制多工器1010、1011及1012以執行上述運算。執行一多工器所需之邏輯已為習於此技者熟知,在此恕不予以贅述。
圖11係根據一實施例之一處理系統之方塊圖,處理系統包含用以執行一向量飽和加法之指令。示範性處理系統包括一耦合到主記憶體1100之處理器1155。處理器1155包括一解碼單元1130,具有用於解碼向量飽和加法指令之解碼邏輯1131。此外,一處理器執行引擎單元1140包括附加之執行邏輯1141,用於執行向量飽和加法指令。在執行單元1140執行指令流時,暫存器1105針對運算元、控制資料及資料之其他類型提供暫存器儲存。在一實施例中,暫存器1105亦包括用於實施本文內所述向量飽和加法指令之實體暫存器。
為了簡明起見,圖11中揭示單一處理器核心(核心0)之細部結構。惟,應該瞭解的是圖11中所示之各核心可以有和核心0相同之邏輯組。如圖所示,各核心也可以包括一專屬之第一階(L1)快取1112及第二階(L2)快取1111,用於根據一指定快取管理政策快取指令及資料。L1快取1112包括一用於儲存指令之各別指令快取1120及一用於儲存資料之各別資料快取1121。儲存於不同處理器快取內之指令及資料係以快取列之粒化管理,其可為固定大小(例如,64、128、512位元組之長度)。本示範性實施例之各核心具有一指令擷取單元1110,用於從主記憶體1100及/或一共用之第三階(L3)快取1116擷取指令;一解碼單元1130,用於解碼指令;一執行單元1140,用於執行指令;及一寫回/引退單元1150,用於引退指令及寫回結果到暫存器1105。
指令擷取單元1110包括許多習知組件,包括有下一指令指標1103,用於儲存下一待從主記憶體1100(或其中一快取)擷取之指令的位元址;一指令轉譯後備緩衝器(ITLB)1104,用於儲存近期使用虛擬一至一實體指令位元址之映射圖,用以改善位元址轉譯之速度;一分支預測單元1102,用於推測指令分支位元址;及分支目標緩衝器(BTB)1101,用於儲存分支位元址及目標位址。一旦擷取時,指令串流至指令管線之其餘階段,包括解碼單元1130、執行單元1140、及寫回/引退單元1150。
圖12係根據本文內所述實施例之用以執行指令的邏 輯之流程圖。在一實施例中,一處理器包括執行指令運算的邏輯,運算包括擷取一指令以執行向量飽和加法指令,如1202所示。如1204所示,解碼邏輯係組構成將擷取之指令解碼成解碼之指令。如1206所示,處理器執行邏輯執行解碼之指令,以執行向量加法運算。在1208,飽和邏輯使用適當飽和值(例如,有符號或無符號、雙字或四字)取代任意計算資料元件內之範圍以外的結果。在1210,執行邏輯基於處理器寫入遮罩組構及各資料元件之寫入遮罩值,將執行指令之一或多個結果寫到處理器暫存器檔案。在一實施例中,寫入執行指令之結果包括將飽和加法運算之結果確認於一由向量飽和加法運算之目的地運算元指示的位置,像是一架構暫存器。結果可包括一或多個向量資料元件,包括儲存在來源向量中之相關聯資料元件之總和,及一或多個資料元件,係基於和資料元件相關聯之寫入遮罩及寫入遮罩組構而儲存一零值。在一實施例中,結果包括一或多個向量資料元件,其未改變並含有一先前值或一先前運算之結果。
揭述在一實施例之實施方式中的偽碼係載明於以下之表1中:
表1中所示之示範性偽碼提供用於一向量處理器加法飽和信號雙字指令。在示範性偽碼中,128、256、及512位元之向量長度(VL)係分別以4、8、或16個雙字向量元件支援。惟,應該瞭解的是,本實施例下之原理並不限於表1的偽碼中所述之特定實施方式,因為諸實施例提供附加之指令,包括有符號之四字及無符號之雙字與四字指令。此外,當要執行向量加法運算時,在一實施例中, SRC2運算元可以是一記憶體位址,其儲存一被加到SRC1向量之各元件的雙字或四字資料元件。在此實施例中,一隱含載入運算是從指定之記憶體位址執行。在一實施例中,載入運算是在處理器執行單元執行加法運算之前,先將資料元件從記憶體播送到一SRC2向量暫存器之所有元件。
在一實施例中,可以執行一無寫入遮罩運算,或者,可以執行一寫入遮罩運算。若未使用寫入遮罩,相關聯來源資料元件之總和即寫至一目的地資料元件,或是針對目的地資料元件之資料類型範圍以外的結果而寫入一飽和值(例如,雙字或四字)。若使用寫入遮罩,各目的地元件將基於與一資料元件相關聯之寫入遮罩及指令之寫入遮罩組構而接收到一結果、一飽和值、一零值,或是維持不變。
示範性指令格式
本文內所述之指令實施例可依不同格式具體實施。一向量友善指令格式係一適用於向量指令之指令格式(例如,有特定用於向量運算的某些欄位)。儘管所揭述之實施例中兩向量及純量運算是透過向量友善指令格式支援,替代實施例僅使用向量運算向量友善指令格式。
圖13A-13B係方塊圖,揭示根據一實施例之一同屬向量友善指令格式及其指令樣板。圖13A係方塊圖,揭示根據一實施例之一同屬向量友善指令格式及其A類指令樣板;而圖13B係方塊圖,揭示根據一實施例之同屬向量友 善指令格式及其B類指令樣板。較明確說,一同屬向量友善指令格式1300用於界定A類及B類指令樣板,兩者皆包括無記憶體存取1305指令樣板及記憶體存取1320指令樣板。在向量友善指令格式之全文中的術語「同屬」是指無關於任意特定指令集之指令格式。
所揭述之實施例中向量友善指令格式支援如下:一64位元組向量運算元長度(或大小)乘以32位元(4位元組)或64位元(8位元組)資料元件寬度(或大小)(且因此,一64位元組向量是由16個雙字大小元件或者8個四字大小元件組成);一64位元組向量運算元長度(或大小)乘以16位元(2位元組)或8位元(1位元組)資料元件寬度(或大小);一32位元組向量運算元長度(或大小)乘以32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或大小);及一16位元組向量運算元長度(或大小)乘以32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或大小)。惟,替代實施例可支援較多、較少及/或不同向量運算元大小(例如,256位元組向量運算元)乘以較多、較少及/或不同資料元件寬度(例如,128位元(16位元組)資料元件寬度)。
圖13A中之A類指令樣板包括:1)在無記憶體存取1305指令樣板內揭示一無記憶體存取、全捨入控制類型運算1310指令樣板及一無記憶體存取、資料變換類型運算1315指令樣板;及2)在記憶體存取1320指令樣板內揭 示一記憶體存取、暫存1325指令樣板及一記憶體存取、非暫存1330指令樣板。圖13B中之B類指令樣板包括:1)在無記憶體存取1305指令樣板內揭示一無記憶體存取、寫入遮罩控制、部分捨入控制類型運算1312指令樣板及一無記憶體存取、寫入遮罩控制、向量長度(vsize)類型運算1317指令樣板;及2)在記憶體存取1320指令樣板內揭示一記憶體存取、寫入遮罩控制1327指令樣板。
同屬向量友善指令格式1300包括依圖13A-13B中所示順序列示於下之欄位。
格式欄位1340-此欄位中之一特定值(一指令格式識別符值)唯一識別向量友善指令格式,及向量友善指令格式中之指令在指令流中的出現。就此而言,此欄位選項性意味著其並不為一僅有同屬向量友善指令格式之指令集所需。
基礎運算欄位1342-其內容可區別不同基礎運算。
暫存器索引欄位1344-其內容可直接或透過位址產生來指定來源及目的地運算元在暫存器或記憶體中之位置。這些包括定量之位元,以供從一PxQ(例如,32x512、16x128、32x1024、64x1024)暫存器檔案中選擇N個暫存器。儘管在一實施例中N可以多達三來源及一目的地暫存器,替代實施例可支援較多或較少的來源及目的地暫存器(例如,可支援多達二來源且其中一來源也作為目的地,可支援多達三來源且其中一來源也作為目的地,可支援多達二來源及一目的地)。
修改符欄位1346-其內容可將指令在指定記憶體存取之同屬向量指令格式中的出現區別於未指定者,亦即,在無記憶體存取1305指令樣板與記憶體存取1320指令樣板之間。記憶體存取運算讀取及/或寫入於記憶體階層(在一些情況中,指定來源及/或目的地位址是使用暫存器中之值),而無記憶體存取運算則否(例如,來源及目的地為暫存器)。儘管在一實施例中此欄位也在三個不同方式之間選擇,以執行記憶體位址計算,替代實施例則可支援較多、較少、或不同方式,以執行記憶體位址計算。
擴增運算欄位1350-其內容可區別除了基礎運算外,欲執行諸多不同運算的哪一個。此欄位係上下文特定。在一實施例中,此欄位分成一類別欄位1368、一阿爾發欄位1352、及一貝他欄位1354。擴增運算欄位1350容許共同之運算群組在單一指令中執行,而不是2、3、或4個指令。
比例欄位1360-其內容容許索引欄位之內容對於記憶體位址產生成比例(例如,對於使用2比例*索引+基礎之位元址產生)。
位移欄位1362A-其內容使用作為記憶體位址產生之一部分(例如,對於使用2比例*索引+基礎+位移之位址產生)。
位移因數欄位1362B(請注意,位移欄位1362A直接在位移因數欄位1362B上方並列表示使用其一或另一個)-其內容使用作為位址產生之一部分;其指定一欲由記憶 體存取之大小(N)定比例的位移因數,此處N為記憶體存取中之位元組數(例如,對於使用2比例*索引+基礎+比例位移之位址產生)。冗餘之低階位元可忽略不計且因此,位移因數欄位之內容乘以記憶體運算元全部大小(N),以利產生用於計算一有效位址之最終位移。N值係基於全運算碼欄位1374(如本文內所述)及資料處理欄位1354C而由處理器硬體在運行時間決定。位移欄位1362A及位移因數欄位1362B選項性意味著其並不使用於無記憶體存取1305指令樣板及/或不同實施例可以僅實施兩者之一或都不實施。
資料元件寬度欄位1364-其內容可區別欲使用許多資料元件寬度的哪一個(在一些實施例中是針對所有指令;在其他實施例中則僅針對一些指令)。此欄位選項性意味著若僅一資料元件寬度受到支援及/或資料元件寬度係使用全運算碼之一些態樣支援,則此欄位即不需要。
寫入遮罩欄位1370-其內容可在一每資料元件位置之基礎上控制目的地向量運算元中之資料元件位置是否反映基礎運算及擴增運算的結果。A類指令樣板支援合併遮罩,而B類指令樣板兼具支援合併及歸零遮罩。當合併時,向量遮罩容許目的地中之元件之任意組免於在(由基礎運算及擴增運算指定之)任何運算執行期間更新;在另一實施例中,保留目的地之各元件之舊值,此處之對應遮罩位元具有0值。對比之下,當歸零向量遮罩容許目的地中之元件之任意組在(由基礎運算及擴增運算指定之)任何 運算執行期間歸零時;在一實施例中,當對應遮罩位元具有0值時,目的地之一元件設定於0。此功能性之一子集為控制被執行之運算的向量長度的能力(亦即,被修改之元件的跨距,從第一個到最後一個);惟,非必要的是被修改之元件呈連續狀。因此,寫入遮罩欄位1370容許部分的向量運算,包括載入、儲存、算術、邏輯、等等。儘管實施例中寫入遮罩欄位1370之內容選擇含有被使用之寫入遮罩的多數個寫入遮罩暫存器的其中之一(且因此寫入遮罩欄位1370之內容間接識別被執行之遮罩),替代實施例改為或另外容許寫入遮罩欄位1370之內容直接指定被執行之遮罩。
立即欄位1372-其內容容許即時規格。此欄位選項性意味著其並不出現在不支援即時的同屬向量友善格式的執行中且不出現在不使用即時的指令中。
類別欄位1368-其內容在指令的不同類別之間辨別。參考圖13A-B,此欄位之內容在A類與B類指令之間選擇。在圖13A-B中,圓角方形係用以表示一出現在一欄位中之特定值(例如,分別用於圖13A-B中之類別欄位1368的A類1368A及B類1368B)。
A類指令樣板
在A類無記憶體存取1305指令樣板之情況中,阿爾發欄位1352被解譯成一RS欄位1352A,其內容可區別不同擴增運算類型的哪一個應被執行(例如,捨入1352A1及 資料變換1352A2各指定用於無記憶體存取、全捨入類型運算1310及無記憶體存取、資料變換類型運算1315指令樣板),而貝他欄位1354可區別指定類型的哪一運算應被執行。在無記憶體存取1305指令樣板中,比例欄位1360、位移欄位1362A、及位移比例欄位1362B並未出現。
無記憶體存取指令樣板-全捨入控制類型運算
在無記憶體存取、全捨入控制類型運算1310指令樣板中,貝他欄位1354被解譯成一捨入控制欄位1354A,其內容提供靜態捨入。儘管在揭述之實施例中捨入控制欄位1354A包括一抑制所有浮點異常(SAE)欄位1356及一捨入運算控制欄位1358,替代實施例則可支援將這些概念編碼成相同欄位或者僅有這些概念/欄位的其中之一或其中之另一者(例如,可以僅有捨入運算控制欄位1358)。
SAE欄位1356-其內容可區別是否停止異常事件報告;當SAE欄位1356之內容表示抑制被允許時,一給定之指令不報告任意類型之浮點異常旗標且不引發任何浮點異常處置器。
捨入運算控制欄位1358-其內容可區別一捨入運算群組中的哪一個應執行(例如,捨進、捨去、小數部分直接捨去、捨入至最接近數值)。因此,捨入運算控制欄位1358在每一指令之基礎上容許捨入模式改變。在一實施例中,一處理器包括一用於指定捨入模式之控制暫存器, 捨入運算控制欄位1358之內容則可置換該暫存器值。
無記憶體存取指令樣板-資料變換類型運算
在無記憶體存取、資料變換類型運算1315指令樣板中,貝他欄位1354被解譯成一資料變換欄位1354B,其內容可區別多數資料變換的哪一個被執行(例如,無資料變換、拌和、播放)。
在A類記憶體存取1320指令樣板之情況中,阿爾發欄位1352被解譯成一驅逐提示欄位1352B,其內容可區別驅逐提示的哪一個應被使用(在圖13A中,暫存1352B1及非暫存1352B2各指定用於記憶體存取、暫存1325指令樣板及記憶體存取、非暫存1330指令樣板),而貝他欄位1354被解譯成一資料處理欄位1354C,其內容可區別多數資料處理運算(亦稱為基元)的哪一個應被執行(例如,無處理;播放;來源之上轉換;及目的地之下轉換)。記憶體存取1320指令樣板包括比例欄位1360及選項性地包括位移欄位1362A或位移比例欄位1362B。
向量記憶體指令使用轉換支援執行自記憶體的向量載入及至記憶體的向量儲存。如同正常向量指令,向量記憶體指令以資料元件方式轉移資料往返於記憶體,且實際轉移之元件係由被選作寫入遮罩之向量遮罩的內容指定。
記憶體存取指令樣板-暫存
暫存資料係得利於快取而可能很快被再用的資料。 惟,此為一提示且不同處理器可用不同方式執行,包括完全忽略提示。
記憶體存取指令樣板-非暫存
非暫存資料係得利於第一階快取中之快取而不大可能很快被再用的資料,並應該給予優先驅逐。惟,此為一提示且不同處理器可用不同方式執行,包括完全忽略提示。
B類指令樣板
在B類指令樣板之情況中,阿爾發欄位1352被解譯成一寫入遮罩控制(Z)欄位1352C,其內容可區別由寫入遮罩欄位1370控制之寫入遮罩是否應該是合併或歸零。
在B類無記憶體存取1305指令樣板之情況中,貝他欄位1354之一部分被解譯成一RL欄位1357A,其內容可區別不同擴增運算類型的哪一個應被執行(例如,捨入1357A.1及向量長度(VSIZE)1357A.2各指定用於無記憶體存取、寫入遮罩控制、部分捨入控制類型運算1312指令樣板及無記憶體存取、寫入遮罩控制、向量長度(VSIZE)類型運算1317指令樣板),而貝他欄位1354之其餘部分可區別指定類型運算的哪一個應被執行。在無記憶體存取1305指令樣板中,比例欄位1360、位移欄位1362A、及位移比例欄位1362B並未出現。
在無記憶體存取、寫入遮罩控制、部分捨入控制類型運算1312指令樣板中,貝他欄位1354之其餘部分被解譯 成一捨入運算欄位1359A且異常事件報告停止(一給定之指令不報告任意類型之浮點異常旗標且不引發任何浮點異常處置器)。
捨入運算控制欄位1359A-如同捨入運算控制欄位1358,其內容可區別一捨入運算群組中的哪一個應執行(例如,捨進、捨去、小數部分直接捨去、捨入至最接近數值)。因此,捨入運算控制欄位1359A在每一指令之基礎上容許捨入模式改變。在一實施例中,一處理器包括一用於指定捨入模式之控制暫存器,並且捨入運算控制欄位1359A之內容則可置換該暫存器值。
在無記憶體存取、寫入遮罩控制、VSIZE類型運算1317指令樣板中,貝他欄位1354之其餘部分被解譯成一向量長度欄位1359B,其內容可區別多數資料向量長度的哪一個應執行(例如,128、256、或512位元組)。
在B類記憶體存取1320指令樣板之情況中,貝他欄位1354之一部分被解譯成一播送欄位1357B,其內容可區別播送類型資料處理運算是否被執行,而貝他欄位1354之其餘部分被解譯成向量長度欄位1359B。記憶體存取1320指令樣板包括比例欄位1360及選項性地包括位移欄位1362A或位移比例欄位1362B。
關於同屬向量友善指令格式1300,所揭示之一全運算碼欄位1374包括格式欄位1340、基礎運算欄位1342、及資料元件寬度欄位1364。儘管所示之實施例中全運算碼欄位1374包括所有這些欄位,但是在未支援全部的實 施例中,全運算碼欄位1374包括較少於所有這些欄位。全運算碼欄位1374提供運算碼(全運算碼)。
擴增運算欄位1350、資料元件寬度欄位1364、及寫入遮罩欄位1370在每一指令之基礎上容許這些特徵被指定於同屬向量友善指令格式中。
寫入遮罩欄位與資料元件寬度欄位之組合產生類型指令,即其基於不同資料元件寬度而容許施加遮罩。
在A類及B類內發現之許多指令樣板有利於不同狀況。在一些實施例中,不同處理器或一處理器內之不同核心可以僅支援A類、B類、或兩類皆支援。例如,一用於一般用途計算之高性能一般用途亂序核心可以僅支援B類,一主要用於圖形及/或科學(流通量)計算之核心可以僅支援A類,及一用於兩者之核心可以兩類皆支援(當然,具有來自兩類之樣板與指令的某些混合,但是並非來自兩類之所有樣板與指令的核心也在本發明之範圍內)。再者,單一處理器可包括多核心,所有核心支援同一類或其中不同核心支援不同類。例如,在一具有各別圖形與一般用途核心之處理器中,主要用於圖形及/或科學計算之其中一圖形核心可以僅支援A類,同時一或多個一般用途核心可以是具有亂序執行與暫存器重新命名以用於一般用途計算的高性能一般用途核心,其僅支援B類。另一沒有各別圖形核心之處理器可包括一或多個一般用途有序或亂序核心,其支援A類及B類。當然,在不同實施例中,來自一類之特徵也可以在另一類中執行。以高階語言寫入之 程式可置入(例如,及時編譯或靜態編譯)成許多不同之可執行形式,包括:1)一形式僅有由目標處理器支援執行之類別指令;或2)一形式具有使用所有類例指令之不同組合寫入之替代常式,且具有控制流動碼,其可基於由目前執行碼之處理器支援的指令來選擇常式來執行。
示範性特定向量友善指令格式
圖14係方塊圖,揭示根據一實施例之一示範性特定向量友善指令格式。圖14揭示一特定向量友善指令格式1400,特定之意味在於其指定位置、大小、解讀、及欄位順序,以及一些欄位的值。特定向量友善指令格式1400可用以延伸x86指令集,因此一些欄位相似或相同於現有x86指令集與其延伸(例如,AVX)中所用者。此格式仍與具有延伸的現有x86指令集之前置編碼欄位、實數運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位、及立即欄位一致。文後說明供圖13之欄位映射其中的圖14之欄位。
應該注意的是,儘管實施例為了說明而揭述參考於同屬向量友善指令格式1300全文中之特定向量友善指令格式1400,除了申請專利範圍,本發明並不限於特定向量友善指令格式1400。例如,同屬向量友善指令格式1300針對許多欄位而考量到許多可行之大小,而特定向量友善指令格式1400則揭示成具有特定大小之欄位。舉特定範例而言,儘管資料元件寬度欄位1364揭示成特定向量友 善指令格式1400中之一位元欄位,本發明並不限於此(亦即,同屬向量友善指令格式1300考慮到其他大小之資料元件寬度欄位1364)。
同屬向量友善指令格式1300包括依圖14A中所示順序排列之以下欄位。
EVEX前置碼(位元組0-3)1402-係以四位元組形式編碼。
格式欄位1340(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)為格式欄位1340且其含有0x62(在本發明之一實施例中用於區別向量友善指令格式的唯一值)。
第二至第四位元組(EVEX位元組1-3)包括多數個提供特定能力之位元欄位。
REX欄位1405(EVEX位元組1,位元[7-5])-由一EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及1357BEX位元組1,位元[5]-B)組成。EVEX.R、EVEX.X、及EVEX.B位元欄位提供與相對應VEX位元欄位相同功能性,並且使用一之補碼形式編碼,亦即,ZMM0編碼成1111B,ZMM15編碼成0000B。指令之其他欄位將暫存器索引之下三位元編碼已屬習知技術(rrr、xxx、及bbb),所以Rrrr、Xxxx、及Bbbb可藉由附加EVEX.R、EVEX.X、及EVEX.B形成。
REX’欄位1310-這是REX’欄位1310的第一部分, 並且是EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’),用以編碼延伸32暫存器組之上16個或下16個。在一實施例中,此位元伴隨著文後所述之其他位元係以位元反格式儲存,以區別於(習知x86 32位元模式)BOUND指令,其實數運算碼位元組為62,但是在MOD R/M欄位(容後詳述)中不接受MOD欄位中之11值;替代實施例則不以反格式儲存此位元及後續其他位元。1值用以編碼下16暫存器。換言之,R’Rrrr係藉由組合EVEX.R’、EVEX.R、及來自其他欄位的其他RRR形成。
運算碼映射欄位1415(EVEX位元組1,位元[3:0]-mmmm)-其內容可編碼一隱含之前導運算碼位元組(0F、0F38、或0F3)。
資料元件寬度欄位1364(EVEX位元組2,位元[7]-W)-係以記號EVEX.W代表。EVEX.W用以界定資料類型(32位元資料元件或64位元資料元件)之粒化(大小)。
EVEX.vvvv欄位1420(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv之角色可包括如下:1)EVEX.vvvv編碼以反(一之補碼)形式指定的第一來源暫存器運算碼且其對於具有2或多個來源運算元之指令有效;2)EVEX.vvvv編碼以一之補碼形式作某些向量移動指定的目的地暫存器運算碼;或3)EVEX.vvvv不編碼任何欄位,欄位保留且應該含有1111b。因此,EVEX.vvvv欄位1420編碼以反(一之補碼)形式儲存之第一來源暫存器區分符之4低階位元。依據指令,一額外之不同EVEX位元欄位用以延伸區 分符大小至32暫存器。
EVEX.U 1368類別欄位(EVEX位元組2,位元[2]-U)-若EVEX.U=0,表示A類或EVEX.U0;若EVEX.U=1,表示B類或EVEX.U1。
前置碼編碼欄位1425(EVEX位元組2,位元[1:0]-pp)-其對基礎運算欄位提供附加位元。除了對EVEX前置碼格式中之舊有SSE指令提供支援外,此亦有緊密SIMD前置碼之效益(反而不需要用一位元組來表示SIMD前置碼,EVEX前置碼僅需要2位元)。在一實施例中,欲支援在舊有格式中及在EVEX前置碼格式中皆使用SIMD前置碼(66H、F2H、F3H)之舊有SSE指令時,這些舊有SIMD前置碼係編碼成SIMD前置碼編碼欄位;且在運行時間在提供至解碼器之PLA前擴充到舊有SIMD前置碼(所以PLA可以兼具執行這些舊有指令之舊有及EVEX格式而不修改)。儘管較新的指令可以直接使用EVEX前置碼編碼欄位之內容作為一運算碼延伸,某些實施例則為了一致性而以相似方式擴充,但是容許由這些舊有SIMD前置碼指定不同含義。替代實施例可重新設計PLA,以支援2位元SIMD前置碼編碼,且因此不需要擴充。
阿爾發欄位1352(EVEX位元組3,位元[7]-EH;亦稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;亦以α說明)-如上所述,此欄位係上下文指定。
貝他欄位1354(EVEX位元組3,位元[6:4]-SSS;亦 稱為EVEX.s2-0,EVEX.r2-0,EVEX.rr1,EVEX.LL0,EVEX.LLB;亦以βββ說明)-如上所述,此欄位係上下文指定。
REX’欄位1310-這是REX’欄位的其餘部分,並且是EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’),用以編碼延伸32暫存器組之上16個或下16個。此位元係以位元反格式儲存。1值用以編碼下16個暫存器。換句話說,V’VVVV係藉由組合EVEX.V’、EVEX.vvvv而形成。
寫入遮罩欄位1370(EVEX位元組3,位元[2:0]-kkk)-其內容可在寫入遮罩暫存器中指定一暫存器之索引。在一實施例中,指定值EVEX.kkk=000有一特殊行為,暗示未使用寫入遮罩於特定指令(此可依多樣方式實施,包括使用一硬連線於全體之寫入遮罩或繞過遮罩硬體之硬體)。
實數運算碼欄位1430(位元組4)亦稱為運算碼位元組。運算碼的一部分係在此欄位中指定。
MOD R/M欄位1440(位元組5)包括MOD欄位1442、Reg欄位1444、及R/M欄位1446。如上所述,MOD欄位1442之內容可在記憶體存取與無記憶體存取運算之間區別。Reg欄位1444之角色可以總結成兩個狀況:編碼目的地暫存器運算元或來源暫存器運算元,或當作一運算碼延伸來處理且不用於編碼任何指令運算元。R/M欄位1446之角色可包括如下:編碼參考於一記憶體位元址之指令運算元、或編碼目的地暫存器運算元或一來 源暫存器運算元的任一者。
比例、索引、基礎(SIB)位元組(位元組6)-如上所述,比例欄位1360之內容係用於記憶體位址產生。SIB.xxx 1454及SIB.bbb 1456-這些欄位的內容已參考相關於暫存器索引Xxxx及Bbbb。
位移欄位1362A(位元組7-10)-當MOD欄位1442含有10時,位元組7-10即位移欄位1362A,且其工作係與舊有32位元位移(disp32)相同及以位元組粒化工作。
位移因數欄位1362B(位元組7)-當MOD欄位1442含有01時,位元組7即位移因數欄位1362B。此欄位之位置係與舊有x86指令集8位元位移(disp8)相同,即以位元組粒化工作。由於disp8經符號延伸,其僅能定址於-128與127位元組偏置之間;依據64位元組快取列,disp8使用僅可設定於四個實際有效值-128、-64、0、及64之8位元;由於經常需要較大範圍,故使用disp32;惟,disp32需要4位元組。對比於disp8及disp32,位移因數欄位1362B係disp8之重新解釋;當使用位移因數欄位1362B時,實際位移係由位移因數欄位之內容乘以記憶體運算元存取之大小(N)來決定。此位移類型稱為disp8*N。這減少了平均指令長度(單一位元組用於位移,但是有更大範圍)。此壓縮位移是基於有效位移為記憶體存取粒化之倍數的假設上,且因此,定址位移之冗餘低階位元即不需要編碼。換句話說,位移因數欄位1362B取代舊有x86指令集8位元位移。因此,位移因數欄位1362B 係以和x86指令集8位元位移相同方式編碼(所以ModRM/SIB編碼規則不變),例外的是disp8過載成disp8*N。換句話說,編碼規則或編碼長度並未改變,只有硬體在解釋位移值時不同(必須以記憶體運算元之大小標示位移,以取得一位元組定址位移)。
立即欄位1372係依上述運算。
全運算碼欄位
圖14B係方塊圖,揭示根據一實施例之構成全運算碼欄位1374的特定向量友善指令格式1400之欄位。較明確說,全運算碼欄位1374包括格式欄位1340、基礎運算欄位1342、及資料元件寬度(W)欄位1364。基礎運算欄位1342包括前置碼編碼欄位1425、運算碼映射欄位1415、及實數運算碼欄位1430。
暫存器索引欄位
圖14C係方塊圖,揭示根據一實施例之構成暫存器索引欄位1344的特定向量友善指令格式1400之欄位。較明確說,暫存器索引欄位1344包括REX欄位1405、REX’欄位1410、MODR/M.reg欄位1444、MODR/M.r/m欄位1446、VVVV欄位1420、xxx欄位1454、及bbb欄位1456。
擴增運算欄位
圖14D係方塊圖,揭示根據一實施例之構成擴增運算欄位1350的特定向量友善指令格式1400之欄位。當類別(U)欄位1368含有0時,其表示EVEX.U0(A類1368A);當其含有1時,其表示EVEX.U1(B類1368B),當U=0且MOD欄位1442含有11時(表示一無記憶體存取運算),阿爾發欄位1352(EVEX位元組3,位元[7]-EH)係解譯成rs欄位1352A。當rs欄位1352A含有1(捨入1352A1)時,貝他欄位1354(EVEX位元組3,位元[6:4]-SSS)解譯成捨入控制欄位1354A。捨入控制欄位1354A包括一個一位元SAE欄位1356及一個兩位元捨入運算控制欄位1358。當rs欄位1352A含有o(資料變換1352A.2)時,貝他欄位1354(EVEX位元組3,位元[6:4]-SSS)係解譯成一個三位元資料變換欄位1354B。當U=0且MOD欄位1442含有00、01、或10時(表示一記憶體存取運算),阿爾發欄位1352(EVEX位元組3,位元[7]-EH)係解譯成驅逐提示(eviction hint,EH)欄位1352B且貝他欄位1354(EVEX位元組3,位元[6:4]-SSS)解譯成一個三位元資料處理欄位1354C。
當U=1時,阿爾發欄位1352(EVEX位元組3,位元[7]-EH)係解譯成寫入遮罩控制(Z)欄位1352C。當U=1且MOD欄位1442含有11時(表示一無記憶體存取運算),貝他欄位1354之一部分(EVEX位元組3,位元[4]-S0)解譯成RL欄位1357A;當其含有1(捨入1357A1)時,貝他欄位1354之其餘部分(EVEX位元組3,位元[6-5]-S2-1) 被解譯成捨入運算控制欄位1359A,而當RL欄位1357A含有0(VSIZE 1357A2)時,貝他欄位1354之其餘部份(EVEX位元組3,位元[6-5]-S2-1)被解譯成向量長度欄位1359B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位1442含有00、01、或10時(表示一記憶體存取運算),貝他欄位1354(EVEX位元組3,位元[6:4]-SSS)解譯成向量長度欄位1359B(EVEX位元組3,位元[6-5]-L1-0)及播送欄位1357B(EVEX位元組3,位元[4]-B)。
示範性暫存器架構
圖15係根據本發明之實施例之一暫存器架構1500之方塊圖。在所示之實施例中有512位元寬之32個向量暫存器1510;這些暫存器被引用為zmm0至zmm31。下16zmm暫存器之低階256位元覆蓋在暫存器ymm0-16上。下16zmm暫存器之低階128位元(ymm暫存器之低階128位元)覆蓋在暫存器xmm0-15上。特定向量友善指令格式1400係依下表2內所示運算於這些覆蓋暫存器上。
換句話說,向量長度欄位1359B在一最大長度與一或多個其他較短長度之間選擇,而各較短長度為前一長度的一半;且無向量長度欄位1359B之指令樣板是以最大向量長度運算。再者,在一實施例中,特定向量友善指令格式1400之B類指令樣板是在緊縮或純量單/雙精度浮點資料及緊縮或純量整數資料上運算。純量運算係在一個zmm/ymm/xmm暫存器中之最低階資料元件位置上執行;較高階資料元件位置則和其在指令之前或歸零時相同,此依據實施例而定。
寫入遮罩暫存器1515-在揭示之實施例中,有8個寫入遮罩暫存器(k0至k7),各為64位元之大小。在一替代實施例中,寫入遮罩暫存器1515為16位元之大小。如上所述,在一實施例中,向量遮罩暫存器k0無法使用作為一寫入遮罩;當正常情況下表示k0之編碼被使用於一寫入遮罩時,其選擇一硬連線之寫入遮罩0xFFFF,有效 地停止對於該指令之寫入遮罩。
一般用途暫存器1525-在所示之實施例中有16個64位元一般用途暫存器,其伴隨著現有之x86定址模式使用,以便定址記憶體運算元。這些暫存器稱為RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15。
純量浮點堆疊暫存器檔案(x87堆疊)1545,其別名為MMX緊縮整數平面暫存器檔案1550-在所示之實施例中,x87堆疊係八元件堆疊,用以對使用x87指令集延伸之32/64/80位元浮點資料執行純量浮點運算;同時MMX暫存器用以對64位元緊縮整數資料執行運算,以及為在MMX與XMM暫存器之間執行的一些運算保留運算元。
替代實施例可使用較寬或較窄之暫存器。此外,替代實施例可使用較多、較少、或不同暫存器檔案及暫存器。
在前面的說明書中,本發明已揭述參考於其特定示範實施例。惟,顯然在不悖離文後申請專利範圍中載述之本發明廣義精神及範疇下,仍可達成許多修改及變化。據此,說明書及圖式應以揭示意味而非限制意味視之。
本文中所述之指令可視為硬體之特定組構,像是專用積體電路(ASIC),其組構成執行某些運算或具有一預定功能性。此電子裝置典型上包括一組的一或多個處理器,耦合到一或多個其他組件,像是一或多個儲存裝置(非暫態機器可讀取儲存媒體)、使用者輸入/輸出裝置(例如,鍵盤、觸控螢幕、及/或顯示器)、及網路連接。處理器組及 其他組件之耦合典型上是經過一或多個匯流排及橋接器(亦稱為匯流排控制器)。載有網路流量之儲存裝置及信號各代表一或多個機器可讀取儲存媒體及機器可讀取通信媒體。因此,一給定電子裝置之儲存裝置典型上儲存用以在該電子裝置之該組一或多個處理器上執行的碼及/或資料。
當然,本發明之一實施例之一或多部分可以使用軟體、韌體、及/或硬體之不同組合實施。在本詳細說明之全文中,為了闡釋而載述許多特定細節,以提供對本發明之徹底瞭解。惟,習於此技者應該瞭解的是,本發明可以在沒有一些諸特定細節情況下實施。在某些情況中,習知結構及功能並未適度地詳述,以免模糊本發明之標的。據此,本發明之範疇及精神應該以文後之申請專利範圍判定。
400‧‧‧系統
410‧‧‧處理器
415‧‧‧處理器
420‧‧‧控制器集線器
440‧‧‧記憶體
445‧‧‧共處理器
450‧‧‧輸入/輸出集線器
460‧‧‧輸入/輸出裝置
490‧‧‧圖形記憶體控制器集線器
495‧‧‧連接器

Claims (20)

  1. 一種處理裝置,包含:解碼邏輯,用以將第一指令解碼成解碼第一指令,該解碼第一指令包括第一運算元及第二運算元;及執行單元,用以執行該第一解碼指令,以便對該第一運算元及該第二運算元執行向量飽和加法運算。
  2. 如申請專利範圍第1項之處理裝置,進一步包含指令擷取單元,用以擷取該第一指令,其中,該指令係單一機器等級指令。
  3. 如申請專利範圍第1項之處理裝置,進一步包含暫存器檔案單元,用以確認該飽和加法運算之結果至由目的地運算元指定之位置。
  4. 如申請專利範圍第3項之處理裝置,其中,該暫存器檔案單元進一步用以儲存暫存器組,包含:第一暫存器,用以儲存第一來源運算元值;第二暫存器,用以儲存第二來源運算元值;及第三暫存器,用以基於和至少一資料元件相關聯之遮罩值而有條件地儲存該飽和加法運算之該結果之該至少一資料元件。
  5. 如申請專利範圍第4項之處理裝置,其中,該第一暫存器或該第二暫存器係向量暫存器。
  6. 如申請專利範圍第5項之處理裝置,其中,該暫存器檔案單元進一步用以基於和該至少一資料元件相關聯之遮罩值而不確認該飽和加法運算之該結果。
  7. 如申請專利範圍第6項之處理裝置,其中,該第二暫存器係向量暫存器,該第二運算元指示儲存純量資料元件之記憶體位址,及該純量資料元件播送至該第二暫存器之各元件。
  8. 如申請專利範圍第6項之處理裝置,其中,該向量暫存器係128位元或256位元向量暫存器。
  9. 如申請專利範圍第6項之處理裝置,其中,該向量暫存器係512位元向量暫存器。
  10. 如申請專利範圍第6項之處理裝置,其中,該向量暫存器儲存緊縮之雙字資料元件。
  11. 如申請專利範圍第6項之處理裝置,其中,該向量暫存器儲存緊縮之四字資料元件。
  12. 如申請專利範圍第1項之處理裝置,其中,用於資料元件組之該飽和加法運算之結果係在目的地資料元件之資料類型之範圍以外,且飽和值係被寫入為該結果。
  13. 如申請專利範圍第12項之處理裝置,其中,該飽和值係無符號值。
  14. 如申請專利範圍第12項之處理裝置,其中,該飽和值係有符號值。
  15. 一種機器可讀取媒體,具有儲存於其上之資料,該媒體若由至少一機器執行時可致使該至少一機器用以建構至少一積體電路,用以執行運算,包括:擷取單一指令,用以執行向量飽和加法運算,該指令具有兩來源運算元及一目的地運算元; 將該單一指令解碼成解碼之指令;擷取和該兩來源運算元相關聯之來源運算元值,該來源運算元值包括多數個緊縮之資料元件;及執行該解碼之指令以計算該來源運算元值之該相關聯資料元件之總和。
  16. 如申請專利範圍第15項之媒體,其中,該積體電路用以執行進一步之運算,包括基於和第一資料元件相關聯之寫入遮罩而將總和寫至向量暫存器檔案之該第一資料元件。
  17. 如申請專利範圍第16項之媒體,其中,該積體電路用以執行進一步之運算,包括基於和資料元件相關聯之寫入遮罩而將零寫至該資料元件。
  18. 如申請專利範圍第16項之媒體,其中,擷取和該兩來源運算元相關聯之該來源運算元值包括從由該來源運算元指示之向量暫存器中擷取緊縮之資料元件。
  19. 如申請專利範圍第16項之媒體,其中,該積體電路用以執行進一步之運算,包括從由來源運算元指定之記憶體位址載入資料元件。
  20. 如申請專利範圍第19項之媒體,其中,從該記憶體位址載入該資料元件包括將該資料元件播送至來源向量暫存器之各元件。
TW104141158A 2014-12-23 2015-12-08 用以執行向量飽和雙字/四字加法的指令及邏輯 TWI567644B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/582,007 US20160179530A1 (en) 2014-12-23 2014-12-23 Instruction and logic to perform a vector saturated doubleword/quadword add

Publications (2)

Publication Number Publication Date
TW201643709A TW201643709A (zh) 2016-12-16
TWI567644B true TWI567644B (zh) 2017-01-21

Family

ID=56129471

Family Applications (2)

Application Number Title Priority Date Filing Date
TW104141158A TWI567644B (zh) 2014-12-23 2015-12-08 用以執行向量飽和雙字/四字加法的指令及邏輯
TW105139721A TWI644256B (zh) 2014-12-23 2015-12-08 用以執行向量飽和雙字/四字加法的指令及邏輯

Family Applications After (1)

Application Number Title Priority Date Filing Date
TW105139721A TWI644256B (zh) 2014-12-23 2015-12-08 用以執行向量飽和雙字/四字加法的指令及邏輯

Country Status (9)

Country Link
US (1) US20160179530A1 (zh)
EP (1) EP3238031A4 (zh)
JP (1) JP2017539010A (zh)
KR (1) KR20170099860A (zh)
CN (1) CN107077332A (zh)
BR (1) BR112017010988A2 (zh)
SG (1) SG11201704251RA (zh)
TW (2) TWI567644B (zh)
WO (1) WO2016105771A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
US10761850B2 (en) * 2017-12-28 2020-09-01 Texas Instruments Incorporated Look up table with data element promotion
CN111813447B (zh) * 2019-04-12 2022-11-08 杭州中天微系统有限公司 一种数据拼接指令的处理方法和处理装置
CN115098165B (zh) * 2022-06-13 2023-09-08 昆仑芯(北京)科技有限公司 数据处理方法、装置、芯片、设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6178500B1 (en) * 1998-06-25 2001-01-23 International Business Machines Corporation Vector packing and saturation detection in the vector permute unit
TW200523798A (en) * 2004-01-13 2005-07-16 Advanced Risc Mach Ltd A data processing apparatus and method for performing data processing operations on floating point data elements

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6327651B1 (en) * 1998-09-08 2001-12-04 International Business Machines Corporation Wide shifting in the vector permute unit
US7020873B2 (en) * 2002-06-21 2006-03-28 Intel Corporation Apparatus and method for vectorization of detected saturation and clipping operations in serial code loops of a source program
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
JP2006171827A (ja) * 2004-12-13 2006-06-29 Seiko Epson Corp 演算処理装置および演算処理プログラム
US20070011441A1 (en) * 2005-07-08 2007-01-11 International Business Machines Corporation Method and system for data-driven runtime alignment operation
US8380966B2 (en) * 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
GB2475653B (en) * 2007-03-12 2011-07-13 Advanced Risc Mach Ltd Select and insert instructions within data processing systems
US8135941B2 (en) * 2008-09-19 2012-03-13 International Business Machines Corporation Vector morphing mechanism for multiple processor cores
US7814303B2 (en) * 2008-10-23 2010-10-12 International Business Machines Corporation Execution of a sequence of vector instructions preceded by a swizzle sequence instruction specifying data element shuffle orders respectively
US8316071B2 (en) * 2009-05-27 2012-11-20 Advanced Micro Devices, Inc. Arithmetic processing unit that performs multiply and multiply-add operations with saturation and method therefor
US20110072236A1 (en) * 2009-09-20 2011-03-24 Mimar Tibet Method for efficient and parallel color space conversion in a programmable processor
US8549264B2 (en) * 2009-12-22 2013-10-01 Intel Corporation Add instructions to add three source operands
US9600285B2 (en) * 2011-12-22 2017-03-21 Intel Corporation Packed data operation mask concatenation processors, methods, systems and instructions
WO2013095601A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
WO2013095603A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for down conversion of data types
CN103092571B (zh) * 2013-01-10 2016-06-22 浙江大学 支持多种数据类型的单指令多数据算术单元
US20150052330A1 (en) * 2013-08-14 2015-02-19 Qualcomm Incorporated Vector arithmetic reduction
US9916130B2 (en) * 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6178500B1 (en) * 1998-06-25 2001-01-23 International Business Machines Corporation Vector packing and saturation detection in the vector permute unit
TW200523798A (en) * 2004-01-13 2005-07-16 Advanced Risc Mach Ltd A data processing apparatus and method for performing data processing operations on floating point data elements

Also Published As

Publication number Publication date
TWI644256B (zh) 2018-12-11
KR20170099860A (ko) 2017-09-01
BR112017010988A2 (pt) 2018-02-14
US20160179530A1 (en) 2016-06-23
EP3238031A4 (en) 2018-06-27
TW201643709A (zh) 2016-12-16
WO2016105771A1 (en) 2016-06-30
JP2017539010A (ja) 2017-12-28
CN107077332A (zh) 2017-08-18
SG11201704251RA (en) 2017-07-28
EP3238031A1 (en) 2017-11-01
TW201732575A (zh) 2017-09-16

Similar Documents

Publication Publication Date Title
JP5986688B2 (ja) Sha256アルゴリズムのメッセージスケジューリングのための命令セット
TWI512616B (zh) 用於緊縮資料運算遮罩之序連的方法、設備、系統及製品
TWI518590B (zh) 多暫存器聚集指令
KR101926241B1 (ko) 레지스터 정렬을 위한 시스템, 장치 및 방법
TWI489381B (zh) 多暫存器散布指令
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
TWI499976B (zh) 用以產生整數序列的方法、設備、系統及製造物品
TWI501147B (zh) 用於從通用暫存器至向量暫存器的廣播之裝置及方法
TWI489383B (zh) 遮蔽排列指令的裝置及方法
KR20170033890A (ko) 비트 셔플 프로세서, 방법, 시스템, 및 명령어
TWI599952B (zh) 用於執行衝突檢測的方法及裝置
TWI473015B (zh) 執行向量頻率擴展指令之方法、處理器核心以及製品
US11347502B2 (en) Apparatus and method of improved insert instructions
WO2013095581A1 (en) Apparatus and method for sliding window data access
TWI526930B (zh) 用以複製及遮蔽資料結構之設備及方法
TWI567644B (zh) 用以執行向量飽和雙字/四字加法的指令及邏輯
TWI567640B (zh) 用於不引發算術旗標的三輸入運算元加法指令之方法及處理器
TWI564733B (zh) 快速向量動態記憶衝突檢測
TWI715672B (zh) 用於保留位元的強制執行的裝置及方法
TW201643693A (zh) 用以執行離心操作的指令及邏輯
TWI628595B (zh) 用以執行反離心操作之處理設備和非暫態機器可讀取媒體
TWI610234B (zh) 用於壓縮遮罩值的方法及裝置
WO2013095605A1 (en) Apparatus and method for sliding window data gather
TWI610231B (zh) 用於向量水平邏輯指令的裝置及方法
TW201730756A (zh) 用於從鏈結結構取回元件的設備和方法

Legal Events

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