TWI502499B - 執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法 - Google Patents
執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法 Download PDFInfo
- Publication number
- TWI502499B TWI502499B TW101145629A TW101145629A TWI502499B TW I502499 B TWI502499 B TW I502499B TW 101145629 A TW101145629 A TW 101145629A TW 101145629 A TW101145629 A TW 101145629A TW I502499 B TWI502499 B TW I502499B
- Authority
- TW
- Taiwan
- Prior art keywords
- register
- bit
- field
- instruction
- source
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 22
- 238000006243 chemical reaction Methods 0.000 title description 17
- 230000015654 memory Effects 0.000 claims description 137
- 238000003860 storage Methods 0.000 claims description 11
- 238000004519 manufacturing process Methods 0.000 claims description 9
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 74
- 238000006073 displacement reaction Methods 0.000 description 41
- 238000010586 diagram Methods 0.000 description 31
- 238000007667 floating Methods 0.000 description 22
- 238000012545 processing Methods 0.000 description 15
- 230000000873 masking effect Effects 0.000 description 12
- 230000003416 augmentation Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 235000012431 wafers Nutrition 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000013519 translation Methods 0.000 description 7
- 239000000872 buffer Substances 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 6
- 230000000295 complement effect Effects 0.000 description 6
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000004907 flux Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000036961 partial effect Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 238000003672 processing method Methods 0.000 description 4
- 238000000605 extraction Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000001052 transient effect Effects 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000011068 loading method Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003750 conditioning effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
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)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
Description
本發明的領域一般而言關於電腦處理器架構,特別關於當執行時造成特定結果的指令。
指令集、或是指令集架構(ISA)是與程式化有關的電腦架構的一部份,以及包含本機資料型式、指令、暫存器架構、定址模式、記憶體架構、中斷及例外處理、以及外部輸入及輸出(I/O)。指令一詞於此大致上意指巨集指令,其是提供給處理器(或是可以將指令轉譯、(例如,使用靜態二進位轉譯、包含動態編譯之動態二進位轉譯)、變體、模仿、或其它方式轉換成為一或更多要由處理器處理的其它指令之指令轉換器)用於執行的指令,巨集指令係與微指令或微作業(微op)相反的,微指令或微作業是將巨集指令解碼之處理器的解碼器的結果。
ISA與實施指令集的處理器的內部設計之微架構有所區別。設有不同微架構的處理器共用共同的指令集。舉例而言,Intel®
Pentium 4處理器、Intel®
CoreTM
處理器、及來自加州太陽谷的超微公司的處理器實施幾乎相同版本的x86指令集(其一些擴充已經增加更新的版本),但具有不同的內部設計。舉例而言,在使用習知的技術之不同微架構中,以不同方式實施相同的ISA暫存器架構,其包含專用的實體暫存器、使用暫存器重命令機制(例如使用
暫存器別名表(RAT)、重排序緩衝器(ROB)及退出暫存器檔案;使用多映射及暫存器池)之一或更多動態分配實體暫存器、等等。除非另外指明,否則,此處使用暫存器架構、暫存器檔案、及暫存器之文句以表示軟體/程式人員可看到的及指令指明暫存器的方式。在需要明確性的情形中,將使用形容詞的邏輯、架構、或軟體可見來表示暫存器架構中的暫存器/檔案,而使用不同的形容詞以指明給定的微架構中的目的地暫存器(例如,實體暫存器、重排序緩衝器、退出暫存器、暫存器池)。
指令集包含一或更多指令格式。給定的指令格式界定不同的欄位(位元數目、位元位置)以特別指明要被執行的作業(作業碼)以及作業要於其上執行的運算元。某些指令格式可以經由指令樣板(或副子令格式)的界定而進一步斷開。舉例而言,給定的指令格式的指令樣板可以被界定為具有不同子集合的指令格式欄位(所包含的多個欄位典型上是相同次序,但是,因為有較少的欄位被包含,所以,至少某些欄位具有不同的位元位置)及/或被界定為具有被不同解譯的給定欄位。因此,使用給定的指令格式(以及,假使被界定時,在該指令格式的多個指令樣板中的給定之一中)以表示ISA的各指令,以及,包含用於指明作業及運算元之欄位。舉例而言,舉例說明的ADD指令具有特定作業碼及指令格式,特定作業碼及指令格式包含用以指定該作業碼的作業碼欄位、以及用以選取運算元的運算元欄位(源1/目的地及源2);以及,在指令
串中此ADD指令的發生將在選取特定運算元的運算元欄位中具有特定內容。
科學的、財務的、自動向量化的一般目的、RMS(辨識、開發及合成)、以及影像和多媒體應用(例如,2D/3D圖形、影像處理、影像壓縮/解壓縮、語音辨識演繹法及音頻操作)通常要求對大量的資料項執行相同的作業(稱為「資料平行性」)。單一指令多資料(SIMD)意指促使處理器對多資料項執行作業之指令型式。SIMD技術特別適合某些處理器,這些處理器能將暫存器中的多個位元邏輯上分成一些固定大小的資料元,各資料元代表分別的值。舉例而言,在256位元暫存器中的位元被指定為作為對四個分別的64位元緊縮資料元(四倍字(Q)尺寸資料元)、八個分別的32位元緊縮資料元(二倍字(D)尺寸資料元)、十六個分別的16位元緊縮資料元(字(W)尺寸資料元)、或是三十二個分別的8位元資料元(位元組(B)尺寸資料元)作業之源運算元。此型式的資料被稱為「緊縮」資料型式或是「向量」資料型式,以及,此資料型式的運算元被稱為緊縮資料運算元或是向量運算元。換言之,緊縮資料項或向量意指緊縮資料元的序列,且緊縮資料運算元或向量運算元可以是SIMD指令的源或目的地運算元(也稱為緊縮資料指令或向量指令)。
舉例而言,一型式的SIMD指令指明以垂直方式對二源向量運算元執行單一向量作業,以便以相同目的資料元、以及依相同資料元次序,產生相同大小的目的地向量
運算元(也稱為結果向量運算元)。舉例而言,源向量運算元中的資料元稱為源資料元,而目的地向量運算元中的資料元稱為目的地或結果資料元。這些源向量運算元具有相同的尺寸以及含有相同寬度的資料元,因此,它們含有相同數目的資料元。在二源向量運算元中相同的位元位置中的源資料元形成資料元對(也稱為對應的資料元;亦即,在各源運算元的資料元位置0中的資料元對應的,在各源運算元的資料元位置1中的資料元對應的,等等)。對這些源資料元對中的各對分別地執行該SIMD指令指明的作業以產生結果資料元的比對數目,因此,各對源資料元具有對應的結果資料元。由於作業是垂直的且由於結果向量運算元是相同尺寸、具有相同數目的資料元、及結果資料元以與源向量運算元相同的資料元次序儲存,所以,結果資料元與源向量運算元中它們對應的成對的的源資料元位於相同的結果向量運算元的位元位置。除了此舉例說明的型式的SIMD指令之外,有各種其它型式的SIMD指令(例如,僅具有一或具有二以上的源向量運算元、以水平方式操作、產生具有不同大小的結果向量運算元、具有不同尺寸的資料元、及/或具有不同的資料元次序)。應瞭解,目的地向量運算元(或目的地運算元)一詞定義為執行指令指定的作業之直接結果,包含目的地運算元儲存在位置(其可為該指令指定的暫存器或記憶體位址),以致於其可由另一指令存取作為源運算元(由另一指令的相同位置指定)。
例如具有包含x86的指令集、MMXTM
、串流SIMD擴充(SSE)、SSE2、SSE3、SSE4.1、及SSE4.2指令之Intel®
CoreTM
處理器採用的SIMD技術能夠顯著增進應用性能。稱為先進向量擴充(AVX)(AVX1及AVX2)以及使用向量延伸(VEX)碼化設計的其它SIMD擴充集已經公告(舉例而言,請參照2011年10月之Intel®
64和IA-32架構軟體開發者手冊;以及,2011年6月之Intel®
先進向量擴充程式參考)。
在下述說明中,揭示眾多特定細節。但是,可瞭解的是,沒有這些特定細節,仍可實施本發明的實施例。在其它情形中,未詳細顯示習知的電路、結構及技術,以免模糊本說明的瞭解。
在本說明書中述及「一實施例」、「實施例」、「舉例說明的實施例」等等意指所述實施例包含特定的特點、結構、或特徵,但是,每一實施例並非一定包含特點特點、結構、或特徵。此外,這些文句不一定意指相同的實施例。此外,當配合實施例而說明特定點、結構、或特徵時,可知習於此技藝知道配合無論是否明確說明的實施例而變更這些特點、結構、或特徵。
在下述說明中,在說明指令集結構中的此特定指令的
作業之前,有些項目需要說明。一個此項目稱為「寫入罩暫存器」,其一般用以預測運算元有條件地控制每一元計算作業(於下,也使用罩暫存器一詞且其意指例如下述的「k」暫存器等寫入罩暫存器)。如同下述所使用般,寫入罩暫存器儲存眾多位元(16、32、64、等等),其中,寫入罩暫存器的各主動位元在SIMD處理期間管理向量暫存器的緊縮資料元的作業/更新。典型地,有多於一的寫入罩暫存器可由處理器核心使用。
指令集架構包含至少某些SIMD指令,指定向量作業及具有用以從這些向量暫存器中選取源暫存器及/或目的地暫存器的欄位(舉例說明的SIMD指令指明對向量暫存器中之一或更多向量暫存器的內容執行的向量作業、以及該向量作業的結果要儲存於向量暫存器中之一中)。本發明的不同實施例具有不同尺寸的向量暫存器及支援更大/更小/不同尺寸資料元件。
由SIMD指令指明的多位元資料元的尺寸(例如,位元組、字、雙倍字、四倍字)決定向量暫存器內「資料元位置」的位元區,以及,向量運算元的尺寸決定資料元的數目。緊縮資料元意指儲存在特定位置中的資料。換言之,取決於目的地運算元中的資料元的尺寸以及目的地運算的尺寸(在目的地運算元中的總位元數)(或是依另一方式,取決於目的地運算元的尺寸及目的地運算元內的資料元的數目),在造成的向量運算元之內的多位元資料元位置的位元區改變(例如,假使用於造成的向量運算元的
目的地是向量暫存器時,則在目的地向量暫存器內的多位元資料元位置的位元區改變)。舉例而言,在對32位元資料元(資料元位置0佔據位元區31:0,資料元位置1佔據位元區63:32,等等)作業的向量作業與對64位元資料元(資料元位置0佔據位元區63:0,資料元位置1佔據位元區127:64、等等)作業的向量作業之間,多位元資料元的位元區是不同的。
此外,如圖5所示,根據本發明的一實施例,在一主動位元向量寫入罩元的數目與向量尺寸及資料元尺寸之間有相關性。雖然顯示128位元、256位元、及512位元的向量尺寸,但是,其它寬度也是可能的。考慮8位元位元組的資料元尺寸(B)、16位元字(W)、32位元雙倍字(D)、或單精準浮點、及64位元四倍字(Q)或倍精準度浮點,但是,其它寬度也是可能的。如同所示,當向量尺寸是128位元時,當向量資料元尺寸是8位元時16位元用於遮罩,當向量資料元尺寸是16位元時8位元用於遮罩,當向量資料元尺寸是32位元時4位元用於遮罩,以及,當向量資料元尺寸是64位元時2位元用於遮罩。當向量尺寸是256位元時,當緊縮資料元寬度是8位元時32位元用於遮罩,當向量資料元尺寸是16位元時16位元用於遮罩,當向量資料元尺寸是32位元時8位元用於遮罩,以及,當向量資料元尺寸是64位元時4位元用於遮罩。當向量尺寸是512位元時,當向量資料元尺寸是8位元時64位元用於遮罩,當向量資料元尺寸是16位元時32
位元用於遮罩,當向量資料元尺寸是32位元時16位元用於遮罩,以及,當向量資料元尺寸是64位元時8位元用於遮罩。
取決於向量尺寸與資料元尺寸的組合,所有64位元、或僅是64位元的子集合可以作為寫入罩。一般而言,當使用單一、每一元遮罩控制位元時,用於遮罩之向量寫入罩暫存器中的位元(主動位元)數目等於以位元為單位之向量尺寸除以以位元為單位之向量的資料元尺寸。
下述是一般稱為轉換寫入罩暫存器至向量暫存器(「VPMOVM2INDEXX」」指令的指令實施例、以及在多個不同領域中有利的被用以執行此指令之系統、架構、指令格式、等等的實施例。能夠將遮罩位元值轉換成含有對應的索引值清單之向量暫存器,在某些應用中是有利的。用於值的集合之結果的條件表示式的集合通常被儲存作為索引清單,其中,條件為真。由於比較指令將其結果提供至罩暫存器中,所以,結果是從罩暫存器轉換。
VPMOVM2INDEXX的執行造成索引值的儲存被儲存至目的地向量暫存器中,其中,每一目的地向量暫存器的緊縮資料元儲存單一索引值,以及,索引值對應於源寫入罩暫存器中的遮罩的位元位置。此指令在端部使用「x」以表示其對不同的緊縮資料元尺寸作業(亦即,X意指位元組、字、雙倍字、四倍字、等等)。由於在某些實施例中,在源寫入罩暫存器中有比用於指令還多的位元位置,所以,使用「主動位元位置」之文句。但是,這些位元不
一定用於指令的作業,因而不是主動地參與指令的執行結果。
圖1顯示舉例說明的VPMOVM2INDEXX指令的作業之舉例說明。在此顯示中,在源寫入罩暫存器101中有8個主動位元,而在目的地暫存器103中有8個緊縮資料元。但是,這僅為實例。緊縮資料元的尺寸及數目以及主動位元的數目可以不同。如同下述將說明般,由於各遮罩位元對應於向量暫存器的單一緊縮資料元,所以,在寫入罩暫存器中的主動位元的數目取決於向量暫存器的尺寸(以位元計)及緊縮資料元的尺寸。
在此實例中,源寫入罩暫存器的位元位置1、3、4、及6都設定為1,以及,其餘的位元位置(0、2、5、及7)為0。因此,這些位元位置作為索引值分別寫入於目的地向量暫存器的緊縮資料元位置中。在此特定實例中,未具有索引值寫入之目的地向量的緊縮資料元位置都設定為全部是1。
此指令的舉例說明的格式是「VPMOVM2INDEXX{B/W/D/Q}XMM1/YMM1/ZMM1,K1」,其中,運算元K1是源寫入罩暫存器(例如16-位元或64-位元暫存器)及目的地XMM1/YMM1/ZMM1,目的地XMM1/YMM1/ZMM1是向量暫存器(例如128-、256-、512-位元暫存器、等等),以及,VPMOVM2INDEXX{B/W/D/Q}是指令的作
業碼。例如經由使用資料粒度位元的標示,在源暫存器中的資料元的尺寸定義於指令的「前置」中。在大部份的實施例中,此位元表示各資料元是32或64位元,但是,可以使用其它變異。在其它實施例中,資料元的尺寸由作業碼本身定義。舉例而言,{B/W/D/Q}識別符分別表示位元組、字、雙倍字、或四倍字。
圖2顯示在處理器中用VPMOVM2INDEXX指令的實施例。在201,提取設有源寫入罩暫存器運算元及目的地向量暫存器運算元之VPMOVM2INDEXX指令。
在203,由解碼邏輯,將VPMOVM2INDEXX指令解碼。取決於指令的格式,在此階段解譯各式各樣的資料,例如是否有資料轉換、要對那些暫存器寫入及取出、要存取那些記憶體位址、等等。
在205,取出/讀取源運算元值。舉例而言,讀取源暫存器。
在207,VPMOVM2INDEXX指令(或是例如微作業等包括此指令之作業)由例如一或更多功能單元等執行資源執行,以識別源寫入罩暫存器的那些主動位元位置要被儲存作為目的地向量暫存器中的索引值。在大部份的實施例中,位元位置是那些在它們中具有「1」的值之位元位置。
在209,將索引值儲存在目的地向量暫存器中,每一
緊縮資料元位置僅有一索引值。
雖然已分別地說明207及209,但是,在某些實施例中,它們被一起執行作為指令的執行之一部份。
圖3(A)顯示VPMOVM2INDEXX指令的處理方法之實施例。在本實施例中,假定假使不是全部而是作業201-205中的某些作業已較早地被執行,但是,它們未被依序地顯示以免模糊下述呈現的細節。舉例而言,未顯示提取及解碼,也未顯示運算元取出。
在某些實施例中,在301決定用於寫入罩源暫存器的主動位元的數目。
在303,決定源寫入罩暫存器的最低效主動位元位置中的值是否為「1」。必要地,此決定也決定此位元位置是否為「0」。在圖1中,此值為「0」。
假使此位元位置為「1」時,則在305,主動位置數目作為索引值寫入至目的地暫存器的未被使用的最低效資料元位置。換言之,索引值被寫入至從最低效位置開始之目的地暫存器。
假使此位元位置為「0」時或是在304的寫入之後,則在307決定最近被評估的活動位元位置是否為源寫入罩暫存器的最高效活動位元位置。假使為是,則方法完成。
假使為否,則在311,決定源的次最低效主動位元位置中的值是否為「1」。假使值為「0」時,方法返回至步驟303,假使其為「1」時,方法返回至步驟305。
當然,可以想到上述的變異。舉例而言,在某些實施
例中,方法始於最高效資料元位置以及一路對其工作。
圖3(B)顯示VPMOVM2INDEXX指令的處理方法之另一實施例。在本實施例中,假定假使不是全部而是作業201-205中的某些作業已較早地被執行,但是,它們未被依序地顯示以免模糊下述呈現的細節。舉例而言,未顯示提取及解碼,也未顯示運算元取出。
在某些實施例中,在301決定主動位元的數目。
在313,平行地決定源寫入罩暫存器的那些活動位元位置是要被寫入目的地暫存器中作為索引值。
平行地,在315,決定的索引值個別地儲存於目的地暫存器的最低效資料元位置中。
圖4顯示舉例說明的此指令的虛擬碼。
此處所述的指令實施例可以以不同格式具體實施。舉例而言,此處所述的指令可以具體實施為VEX、同屬向量友善、或是其它格式。於下說明VEX及同屬向量友善格式的細節。此外,於下詳述舉例說明的系統、架構、及管線。對這些系統、架構、及管線執行指令的實施例,但是不限於詳述的實施例。
VEX編碼允許指令具有二個以上的運算元,以及允許SIMD向量暫存器長於128位元。使用VEX前置以規定三
運算元(或更多)語法。舉例而言,先前的二運算元指令執行例如A=A+B等改寫源運算元的作業。使用VEX前置使得運算元能夠執行例如A=B+C等非破壞性作業。
圖6A顯示舉例說明的AVX指令格式,其包含VEX前置602、實數作業碼欄位630、Mod R/M位元組640、SIB位元組650、位移欄位662、及IMM8 672。圖6B顯示那些來自圖6A的欄位構成全作業碼欄位674及基本作業欄位642。圖6C顯示那些來自圖6A的欄位構成暫存器索引欄位644。
VEX前置(位元組0-2)602以三位元組形式編碼。第一位元組是格式欄位640(VEX位元組0,位元[7:0]),其含有明確的C4位元組值(用於區別C4指令格式的獨特值)。第二至第三位元組(VEX位元組1-2)包含提供特定能力之多個位元欄位。具體而言,REX欄位605(VEX位元組1,位元[7-5])由VEX.R位元欄位(VEX位元組1,位元[7]-R)、VEX.X位元欄位(VEX位元組1,位元[6]-X)、及VEX.B位元欄位(VEX位元組1,位元[5]-B)組成。如同此技藝中所知般,指令的其它欄位將暫存器索引的下三個位元編碼(rrr、xxx、及bbb),以致於將VEX.R、VEX.X、及VEX.B相加而形成Rrrr、Xxxx、及Bbbb。作業碼映射欄615(VEX位元組1、位元[4:0]-mmmmm)包含用以將暗示的領先作業碼位元組之內容。W欄位664(VEX位元組2,位元[7]-W)-由標示VEX.W表示,以及視指令而提供不同的功能。
VEX.vvvv 620(VEX位元組2,位元[6:3]-vvvv)的角色包含下述:1)VEX.vvvv將相反(1的補數)形式指定之第一源暫存器運算元編碼且對於具有2或更多源運算元的指令是有效的;2)VEX.vvvv將用於某些向量偏移的1的補數形式所指定的目的地暫存器運算元編碼;或是,3)VEX.vvvv未將任何運算元編碼,欄位被保留以及應含有1111b。假使VEX.L 668尺寸欄位(VEX位元組2,位元[2]-L)=0,則其表示128位元向量;假使VEX.L=1,則其表示256位元向量。前置編碼欄位625(VEX位元組2,位元[1:0]-pp)提供增加的位元給基本作業欄位。
實數作業碼欄位630(位元組3)也稱為是作業碼位元組。在此欄位中指定作業碼的一部份。
MOD R/M欄位640(位元組4)包含MOD欄位642(位元[7-6]、Reg欄位644(位元[5-3])、及R/M欄位646(位元[2-0])。Reg欄644的角色包含下述:將目的地暫存器運算元或是源暫存器運算元(Rrrr的rrr)編碼,或是被作為作業碼擴充處理且未被用以將任何指令運算元編碼。R/M欄位646的角色包含下述:將參照記憶體位址的指令運算元編碼,或是將目的地暫存器運算元或是源暫存器運算元編碼。
比例、索引、基礎(SIB)-比例欄位650的內容(位元組5)包含用於記憶體位址產生的SS652(位元[7-6])。SIB.xxx 654的內容(位元[5:3])及SIB.xxx 656的內容(位元[2-0])先前已被述及與暫存器索引Xxxx及
Bbbb有關。
位移欄位662及立即欄位(IMM8)672含有位址資料。
向量友善指令格式是適用於向量指令的指令格式(例如,有某些欄位特定用於向量運算)。雖然說明經由向量友善指令格式而支援向量及純量運算之實施例,但是,替代的實施例可以僅使用向量友善指令格式向量運算。
圖7A-7B是方塊圖,顯示根據本發明的實施例之同屬向量友善指令格式及其指令樣板。圖7A是方塊圖,顯示根據本發明的實施例之同屬向量友善指令格式及其等級A指令樣板;而圖7B是方塊圖,顯示根據本發明的實施例之同屬向量友善指令格式及其等級B指令樣板。具體而言,等級A及等級B指令樣板被界定用於同屬向量友善指令格式700,等級A及等級B指令樣板都未包含記憶體存取705指令樣板及記憶體存取720指令樣板。在向量友善指令格式中同屬一詞係指指令格式未受限於任何特定的指令集。
將說明本發明的實施例,其中,向量友善指令格式支援下述:具有32位元(4位元組)或是64位元(8位元組)資料元寬度(或尺寸)之64位元組向量運算元長度(或尺寸)(因此,64位元組向量由16個雙倍字尺寸元或是替代地由8個四倍字尺寸元組成);具有16位元(2
位元組)或是8位元(1位元組)資料元寬度(或尺寸)之64位元組向量運算元長度(或尺寸);具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)或是8位元(1位元組)資料元寬度(或尺寸)之32位元組向量運算元長度(或尺寸);以及,具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)或是8位元(1位元組)資料元寬度(或尺寸)之16位元組向量運算元長度(或尺寸);替代實施例以更多、更少或是不同的資料元寬度(例如,128位元(16位元組)資料元寬度)來支援更多、更少及/或不同的向量運算元尺寸(例如,256位元組向量運算元)。
在圖7A中的等級A指令樣板包含:1)在無記憶體存取705指令樣板之內,顯示無記憶體存取、完全捨入控制型作業710指令樣板及無記憶體存取、資料轉換型式作業715指令樣板;以及,2)在記憶體存取720指令樣板之內,有顯示記憶體存取、暫時725指令樣板及記憶體存取、非暫時730指令樣板。圖7B中的等級B指令樣板包含:1)在無記憶體存取705指令樣板之內,顯示無記憶體存取、寫入遮罩控制、部份捨入控制型作業712指令樣板及無記憶體存取、寫入遮罩控制、向量長度型式作業717指令樣板;以及,2)在記憶體存取720指令樣板之內,顯示有記憶體存取、寫入遮罩控制727指令樣板。
同屬向量友善指令格式700包含以圖7A-7B中所示的次序列出的下述欄位。
格式欄位740-在此欄位中的特定值(指令格式識別符值)獨特地識別向量友善指令格式,並因而識別指令串中向量友善指令格式的指令發生。確切而言,以此欄位對於僅有同屬向量友善指令格式之指令集並非所需的觀點而言,此欄位是選加的。
基礎作業欄位742-其內容區別不同的基礎作業。
暫存器索引欄位744-其內容直接或是經由位址產生而指明源及目的地運算元的區塊是在暫存器或在記憶體中。這些包含足夠數目的位元以從PxQ(例如32x512、16x128、32x1024、64x1024)暫存器檔案中選取N個暫存器。雖然在一實施例中,N可以高達三個源及一個目的地暫存器,但是,替代實施例可以支援更多或是更少的源及目的地暫存器(例如,可以支援高達二個源,其中,這些源中之一也作為目的地,可以支援高達三個源,其中,這些源中之一也作為目的地,可以支援高達二個源及一個目的地)。
修飾符欄位746-其內容區別指定及未指定記憶體存取的同屬向量指令格式中指令的發生;亦即,在無記憶體存取705指令樣板與記憶體存取720指令樣板之間作區分。記憶體存取作業對記憶體層級結構讀取及/或寫入(在某些情形中,使用暫存器中的值指定源及/或目的地位址),而非記憶體存取作業未如此作(例如,源及目的地是暫存器)。雖然在一實施例中,此欄位也在三不同方式之間選取以執行記憶體位址計算,但是,替代的實施例
可以支援更多、更少、或是不同的方式以執行記憶體位址計算。
擴增作業欄位750-其內容區別多種不同作業中那一作業除了基礎作業之外要被執行。此欄位是內容特定的。
在本發明的一實施例中,此欄位分成等級欄位768、阿爾發欄位752、貝它欄位754。擴增作業欄位750允許共同的作業組以單一指令而非2、3或4指令執行。
比例欄位760-其內容允許索引欄位的內容的比例用於記憶體位址產生(例如,用於使用2scale*
索引+基礎之位址產生)。
位移欄位762A-其內容作為記憶體位址產生的一部份(例如,用於使用2scale*
索引+基礎+位移之位址產生)。
位移因數欄位762B(注意,直接在位移因數欄位762B上方的位移欄位762A的並列係表示一或另一者被使用)-其內容作為位址產生的一部份;其指明要依記憶體存取(N)的尺寸而比例化之位移因數,其中,N是記憶體存取中的位元組數目(例如,用於使用2scale
*索引+基礎+比例化位移的位址產生)。冗餘的低階位元被忽略,因此,位移因數欄的內容乘以記憶體運算元全部尺寸(N)以產生計算有效位址時使用的最後位移。根據全作業碼欄位774(稍後說明)及資料操縱欄位754C,在運行時間時由處理器硬體決定N的值。在位移欄位762A及位移因數欄位762B不用於無記憶體存取705指令樣板及/
或不同實施例僅實施二者中之一或不實施二者的情形中,它們是選加的。
資料元寬度欄位764-其內容區別一些資料元寬度中的那一寬度是要被使用(在某些實施例中對所有指令;在其它實施例中僅對某些指令)。在假使使用作業碼的某些態樣而僅有一資料元寬度被支援及/或資料元寬度被支援時不需要此欄位的情形中,此欄位是選加的。
寫入遮罩欄位770-其內容以每一資料元位置為基礎而控制目的地向量運算元中的資料元位置是否反應基礎作業及擴增作業的結果。等級A指令樣板支援合併寫入遮罩,而等級B指令樣板支撐合併及零化寫入遮罩。當合併時,向量遮罩允許目的地中任何組的元在任何作業的執行期間受保護(由基礎作業及擴增作業指明)而免於更新;在其它的一實施例中,保留對應的遮罩位元具有0之目的地的每一元的舊值。相反地,當零化向量遮罩允許目的地中的任何組的元在任何作業(由基礎作業及擴增作業指定)執行期間零化時;在一實施例中,當對應的遮罩位元具有0值時,目的地的元被設定為0。此功能的子集合是控制執行的作業的向量長度之能力(亦即,被修改的元的跨幅,從第一至最後一個);但是,被修改的元件不一定是連續的。如此,寫入遮罩欄770允許部份向量操作,包含載入、儲存、算術、邏輯、等等。雖然說明本發明的實施例,其中,寫入遮罩欄位770的內容選取一些含有要被使用的寫入遮罩之寫入遮罩暫存器中之一(因此,寫入遮
罩欄位770的內容間接地識別要被執行的遮罩),但是,替代實施例取代地或增加地允許遮罩寫入欄位770的內容直接指定要被執行的遮罩。
立即欄位772-其內容允許立即性的規格。在此欄位未出現在未支援立即性的同屬向量友善格式實施中以及其未出現在未使用立即性的指令中之情形中,此欄位是選加的。
等級欄位768-其內容區別不同等級的指令。參考圖7A-B,此欄位的內容在等級A與等級B指令之間選取。在圖7A-B中,四角圓化的方形被用以標示特定值存在於欄位中(例如,分別在圖7A-B中用於等級欄位768的等級A 768A及等級B 768B)。
在等級A的非記憶體存取705指令樣板的情形中,阿爾發欄位752被解譯為RS欄位752A,其內容區別不同的擴增作業型式中那一型式是要被執行(例如,捨入752A.1及資料轉換752A.2分別被指定用於無記憶體存取、捨入型式作業710及無記憶體存取、資料轉換型式作業715指令樣板),而貝他欄位754區別被指定的型式的作業中那一作業是要被執行。在無記憶體存取705指令樣板中,比例欄位760、位移比例欄位762A、及位移比例欄位762B不存在。
無記憶體存取指令樣板-完全捨入控制型作業
在無記憶體存取完全捨入控制型作業710指令樣板中,貝他欄位754被解譯為捨入控制欄位754A,其內容提供靜態捨入。雖然在上述的發明實施例中,捨入控制欄位754A包含抑制所有浮點例外(SAE)欄位756及捨入操作控制欄位758,但是,替代實施例可以支援將這二概念編碼成相同欄位或是僅具有這些概念/欄位中之一或另一者(例如,可以僅具有捨入操作控制欄位758)。
SAE欄位756-其內容區別是否將例外事件報告禁能;當SAE欄位的756內容標示抑制被賦能時,給定的指令不報告任何種類的浮點例外旗標及不喚起任何浮點例外處理器。
捨入作業控制欄位758-其內容區別捨入作業組中何者要執行(例如,捨進、捨去、捨入至零、及捨入至最接近的)。因此,捨入作業控制欄位758允許以每一指令為基礎之捨入模式的改變。在處理器包含用於指明捨入模式的控制暫存器之發明的一實施例中,捨入作業控制欄位750的內容置換該暫存器值。
無記憶體存取指令樣板-資料轉換型式作業
在無記憶體存取資料轉換型式作業715指令樣板中,貝他欄位754被解譯為資料轉換欄位754B,其內容區別一些資料轉換中何者要被執行(例如,無資料轉換、調和、廣播)。
在等級A的記憶體存取720指令樣板的情形中,阿爾發欄位752被解譯為逐出暗示欄位752B,其內容區別逐
出暗示中那一者是要被使用(在圖7A中,暫時752B.1及非暫時752B.2分別被指定用於記憶體存取、暫時725指令樣板以及記憶體存取、非暫時730指令樣板),而貝他欄位754被解譯為資料操縱欄位754C,其內容區別一些資料操縱作業(也稱為基元)中何者是要被執行(例如,無操縱;廣播;源的上轉;及目的地的下轉)。記憶體存取720指令樣板包含比例欄位760,且選加地包含位移欄位762A或位移比例欄位762B。
藉由轉換支援,向量記憶體指令對記憶體執行向量載入及向量儲存。與正常的向量指令一般,向量記憶體指令以資料元方式對記憶體傳輸資料,而真正被傳送的元是由被選為寫入遮罩的向量遮罩的內容所指定。
暫時資料是容易足夠快再被使用而從快取獲利之資料。但是,這是暗示,以及,不同的處理器可以以不同方式實施它,包含完全忽略暗示。
非暫時資料是不容易足夠快再被使用以從第一層快取記憶體中的快取獲利之資料,且應被授予逐出優先權。但是,這是暗示,以及,不同的處理器可以以不同方式實施它,包含完全忽略暗示。
在等級B的指令樣板的情形中,阿爾發欄位752被解譯為寫入遮罩控制(Z)欄位752C,其內容區別由寫入遮罩欄位770控制的寫入遮罩是否應為合併或零化。
在等級B的非記憶體存取705指令樣板的情形中,部份貝他欄位754是被解譯為RL欄位757A,其內容區別不同的擴增作業型式中那一作業型式是要被執行(例如,拾入757A.1以及向量長度(VSIZE)757A.2分別被指定用於無記憶體存取、寫入遮罩控制、部份捨入控制型式作業712指令樣板以及無記憶體存取、寫入遮罩控制、VSIZE型式作業717指令樣板),而貝他欄位754的其餘部份區別具有指定型式的作業中何者是要被執行。在無記憶體存取705指令樣板中,比例欄位760、位移欄位762A、及位移比例欄位762B不存在。
在無記憶體存取中,寫入遮罩控制、部份捨入控制型作業710指令樣板、貝他欄位754的其它部份被解譯為捨入作業欄位759A且例外事件報告被禁能(被給定的指令不報告任何種類的浮點例外旗標及不喚起任何浮點例外處理器)。
捨入作業控制欄位759A-正如同捨入作業控制欄位758般,其內容區別捨入作業組中何者要執行(例如,捨進、捨去、捨入至零、及捨入至最接近的)。因此,捨入作業控制欄位759A允許以每一指令為基礎之捨入模式的改變。在處理器包含用於指明捨入模式的控制暫存器之發
明的一實施例中,捨入作業控制欄750的內容置換該暫存器值。
在無記憶體存取、寫入遮罩控制,VSIZE型式作業717指令樣板中,貝他欄位754的其餘部份被解譯為向量長度欄位759B,其內容區別要對一些資料向量長度中的那一資料向量長度執行(例如,128、256、或512位元組)。
在等級B的記憶體存取720指令樣板的情形中,部份貝它欄位754被解譯為廣播欄位757B,其內容區別廣播型資料操縱作業是否要被執行,而貝它欄位754中的其它部份被解譯為向量長度欄位759B。記憶體存取720指令樣板包含比例欄位760,以及,選加地包含位移欄位762A或是位移比例欄位762B。
關於同屬向量友善指令格式700,完全作業碼欄位774顯示為包含格式欄位740、基礎作業欄位742、及資料元件寬度欄位764。雖然顯示完全作業碼欄位774包含所有這些欄位的一實施例,但是,在未支援所有它們的實施例中,完全作業碼欄位774包含小於所有這些欄位的欄位。完全作業碼欄位774提供作業碼(opcode)。
擴增作業欄位750、資料元寬度欄位764、及寫入遮罩欄位770允許根據同屬向量友善指令格式的指令為基礎來指定這些特點。
寫入遮罩欄位及資料元寬度欄位的結合會產生型式化的指令,其中,它們允許根據不同的資料元寬度來施加遮
罩。
等級A及等級B之內發現的各種指令樣板在不同的情形中是有利的。在本發明的某些實施例中,不同的處理器或是處理器之內不同的核心可以僅支援等級A、僅支援等級B、或支援這二等級。舉例而言,要用於一般目的之計算的高性能目的之亂序核心僅支援等級B,主要用於圖形及/或科學(通量)計算的核心僅支援等級A,以及用於支援二等級的核心可以支援二等級(當然,核心具有來自二等級的樣板及指令的某些混合,但非來自二等級的所有樣板及指令是在本發明的範圍之內)。而且,單一處理器包含多核心,所有這些核心支援相同等級,或者,其中,不同的核心支援不同的等級。舉例而言,在設有分別的圖形及一般用途核心的處理器中,主要用於圖形及/或科學計算的複數個圖形核心中之一僅支援等級A,而一或更多一般用途核心可為具有用於僅支援等級B的一般用途計算之亂序執行及暫存器重命名之高性能一般用途核心。不具有分別的圖形核心之另一處理器可以包含支援等級A和等級B的一或更多一般用途有序或亂序核心。當然,在本發明的不同實施例中,來自一等級的特點也可在其它等級中實施。以高階語言撰寫的程式將被置於(舉例而言,僅即時被編譯或是靜態地被編譯成)各式各樣之不同的可執行形式中,包含:1)僅具有由用於執行的標的處理器所支援的等級的指令之形式;或是,2)具有使用所有等級的指令之不同組合撰寫的替代常式以及具有控制流程碼之形
式,控制流程碼係根據由目前正執行碼的處理器所支援的指令而選取要執行的常式。
圖8顯示根據本發明的實施例之舉例說明的特定向量友善指令格式。圖8顯示特定向量友善指令格式800,其在指定欄位的位置、大小、解譯、及次序、以及用於那些欄位中的某些欄位之值的情形中是特定的。特定向量友善指令格式800可以被用以延伸x86指令集,因而某些欄位類似於或同於現有的x86指令集中使用的欄位以及其延伸(例如,AVX)。此格式維持與具有延伸的現有x86指令集的前置編碼欄位、實數運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位、及立即欄位一致。顯示來自圖8的欄位映射至來自圖7的欄位。
應瞭解,雖然為了說明而在同屬向量友善指令格式700的環境中參考特定向量友善指令格式800,以說明本發明的實施例,但是,除非特別申明,否則本發明不侷限於特定向量友善指令格式800。舉例而言,同屬向量友善指令格式700慮及用於各種欄位的各種可能大小,而特定向量友善指令格式800顯示為具有特定大小的欄位。具體舉例而言,雖然資料元寬度欄位764顯示為特定向量友善指令格式800中的一位元欄位,但是,本發明不限於此(亦即,同屬向量友善指令格式700慮及資料元寬度欄位764的其它大小)。
同屬向量友善指令格式700包含依圖8A中所示的次序而於下列出的下述欄位。
EVEX前置(位元組0-3)802-以四位元組形式編碼。
格式欄位740(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)是格式欄位740以及其含有0x62(用於區別發明的一實施例中向量友善指令格式的獨特值)。
第二-第四位元組(EVEX位元組1-3)包含提供特定能力的一些位元欄位。
REX欄位805(EVEX位元組1,位元[7-5])由EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及757BEX位元組1,位元[5]-B)組成。EVEX.R、EVEX.X及EVEX.B位元欄位提供與對應的VEX位元欄位相同的功能性,且使用1s互補形式來編碼,亦即,ZMMO被編碼為1111B,ZMM15被編碼為0000B。如同此技藝中所知般,指令的其它欄位將暫存器索引的較低的三個位元編碼(rrr,xxx,及bbb),以致於藉由加上EVEX.R、EVEX.X、及EVEX.B,可以形成Rrrr、Xxxx、及Bbbb。
REX’欄位710-這是REX’欄位710的第一部份且是用以將延伸的32暫存器組的上16或下16編碼之EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’)。在本發明的一實施例中,此位元與如下標示的其它位元以位
元反轉格式儲存,以與BOUND指令區別(在已知的x86 32位元模式中),BOUND指令的實數作業碼位元組是62,但是,在MOD R/M欄位(下述)中未接受MOD欄位中11的值;本發明的替代實施例未以反轉格式儲存此位元及下述其它標示的位元。1的值用以將下16暫存器編碼。換言之,藉由結合來自其它欄位的EVEX.R’、EVEX.R、及其它RRR以形成R’Rrrr。
作業碼映射欄位815(EVEX位元組1,位元[3:0]-mmmm)-它的內容將暗指的領先作業碼位元組(0F,0F 38,或0F 3)編碼。
資料元寬度欄位764(EVEX位元組2,位元[7]-W)-由記號EVEX.W表示。EVEX.W用以界定資料型式(32位元資料元或64位元資料元)的粒度(尺寸)。
EVEX.vvvv 820(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的角色可以包含下述:1)EVEX.vvvv將以反轉(1s互補)形式指定的第一源暫存器運算元編碼,且對於具有2或更多源運算元的指令是有效的;2)EVEX.vvvv將對某些向量偏移以1s互補形式指定的目的地暫存器運算元編碼;或者3)EVEX.vvvv未將任何運算元編碼,欄位被保留且應含有1111b。因此,EVEX.vvvv欄位820將依反轉(1s互補)形式儲存的第一源暫存器指定符的4低階位元編碼。取決於指令,額外的不同EVEX位元欄位被用以延伸指定符尺寸至32暫存器。
EVEX.U 768等級欄位(EVEX位元組2,位元[2]-U)-假使EVEX.U=0,則其標示等級A或EVEX.U0;假使EVEX.U=1,則其標示等級B或EVEX.U1。
前置編碼欄位825(EVEX位元組2,位元[1:0]-pp)-提供增加的位元用於基礎作業欄位。除了提供支援給EVEX前置格式的舊有SSE指令,這也具有使SIMD前置小巧化(而非要求位元組來表示SIMD前置,EVEX前置僅要求2位元)的優點。在一實施例中,為了支援以舊有格式及EVEX前置格式等二各式使用SIMD前置(66H、F2H、F3H)之舊有SSE指令,這些舊有SIMD前置被編碼成SIMD前置編碼欄位;以及,在被提供給解碼器的PLA(以致於PLA可以執行這些舊有指令的舊有及EVEX等二格式而不用修改)之前,在運行時間時被擴展成舊有SIMD前置。雖然較新的指令可以直接使用EVEX前置編碼欄位的內容作為運算碼延伸,但是,某些實施例為了一致性而以類似方式擴展但允許不同的意義由這些舊有SIMD前置規定。替代實施例可以重新設計PLA以支援2位元SIMD前置編碼,因而不要求擴展。
阿爾發欄位752(EVEX位元組3,位元[7])-EH;也稱為EVEX.EH、EXEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;也以α顯示)-如以往所述般,此欄位是內容特定的。
貝他欄位754(EVEX位元組3,位元[6:4])-SSS;也稱為EVEX.Es2-0
、EVEX.r2-0
、EVEX.rr1、EVEX.LL0、
EVEX.LLB;也以β β β顯示)-如以往所述般,此欄位是內容特定的。
REX’欄位710-這是REX’欄位的餘部且是可被用以將延伸的32暫存器組的上16或下16編碼之EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’)。此位元以位元反轉格式儲存。1的值被用以將下16暫存器編碼。換言之,藉由結合EVEX.V’、EVEX.vvvv以形成V’VVVV。
寫入遮罩欄位770(EVEX位元組3,位元[2:0]-kkk)如同先前所述般,其內容指定寫入罩暫存器中的暫存器索引。在發明的一實施例中,特定值EVEX.kkk=000具有特別的表現,暗指無寫入遮罩用於特定的指令(這可以以各種方式實施,包含使用實體接線至所有或硬體之寫入遮罩,所述硬體是使遮罩硬體旁通)。
實數作業碼欄位830(位元組4)也稱為作業碼位元組。在此欄位中指定作業碼的一部份。
MOD R/M欄位840(位元組5)包含MOD欄位842、Reg欄位844、及R/M欄位846。如同先前所述般,MOD欄位842的內容區別記憶體存取與非記憶體存取作業。Reg欄位844的角色可以總合為二情形:將目的地暫存器運算元或源暫存器運算元編碼,或是被當作作業碼延伸來處理且不被用以將任何指令運算元編碼。R/M欄位846的角色可以包含下述:將參考記憶體位址的指令運算元編碼,或者,將目的地暫存器運算元或源暫存器運算元編碼。
比例、索引、基礎(SIB)位元組(位元組6)-如同先前所述般,比例欄位750的內容是用於記憶體位址產生。SIB.xxx 854及SIB.bbb 856-這些欄位的內容先前已被述及與暫存器索引Xxxx及Bbbb有關。
位移欄位762A(位元組7-10)-當MOD欄位842含有10時,位元組7-10是位移欄位762A,且其與舊有32位元位移(disp32)相同工作並以位元組粒度工作。
位移因數欄位762B(位元組7)-當MOD欄位842含有01時,位元組7是位移因數欄位762B。此欄位的位置與以位元組粒度工作的舊有x86指令集8位元位移(disp8)的位置相同。由於disp8是正負號延伸,所以,其僅可以在-128與127位元組差距之間定址;以64位元組快取線的觀點而言,disp8使用可以被設定為僅四個真正有用的值-128、-64、0、及64之8位元;由於通常需要更大的範圍,所以,使用disp32;但是,disp32要求4位元組。與disp8和disp32相反,位移因數欄位762B是disp8的再解譯;當使用位移因數欄位762B時,實數的位移由位移因數欄位的內容乘以記憶體運算元存取(N)所決定。此型式的位移被稱為disp8*N。這降低平均的指令長度(用於位移但是具有更大範圍的單一位元組)。此被壓縮的位移是根據有效的位移是記憶體存取的粒度之倍數的假設,因此,位址差距的冗餘低階位元不需被編碼。換言之,位移因數欄位762B替代舊有x86指令集8位元位移。因此,位移因數欄位762B以同於x86指令集8位元
位移的方式編碼(以致於ModRM/SIB編碼規則不變),僅有的例外是disp8被過載至disp8*N。換言之,編碼規則或編碼長度沒有變化,但是僅有硬體對位移值的解譯有變化(這需要將位移依記憶體運算元的大小來比例化以取得位元組方式的位址差距)。
圖8B是方塊圖,顯示根據本發明的一實施例之構成完全作業碼欄位774之特定的向量友善指令格式800的欄位。具體而言,完全作業碼欄位774包含格式欄位740、基礎作業欄位742、及資料元寬度(W)欄位764。基礎作業欄位742包含前置編碼欄位825、作業碼映射欄位815、及實數作業碼欄位830。
圖8C是方塊圖,顯示根據本發明的一實施例之構成暫存器索引欄位744之特定的向量友善指令格式800的欄位。具體而言,暫存器索引欄位744包含REX欄位805、REX’欄位810、MODR/M.reg欄位844、MODR/M.r/m欄位846、VVVV欄位820、xxx欄位854、及bbb欄位856。
圖8D是方塊圖,顯示根據本發明的一實施例之構成
擴增作業欄位750之特定向量友善指令格式800的欄位。當等級(U)欄位768含有0時,其表示EVEX.U0(等級A 768A);當其含有1時,其表示EVEX.U1(等級B 768B)。當U=0及MOD欄位842含有11時(表示無記憶體存取作業),阿爾發欄位752(EVEX位元組3,位元[7]-EH)被解譯為rs欄位752A。當rs欄位752A含有1(捨入752A.1)時,貝它欄位754(EVEX位元組3,位元[6:4]-SSS)被解譯為捨入控制欄位754A。捨入控制欄位754A包含一位元SAE欄位756及二位元捨入作業欄位758。當rs欄位752A含有0(資料轉換752A.2)時,貝它欄位754(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料轉換欄位754B。當U=0及MOD欄位842含有00、01、或10(表示記憶體存取作業)時,阿爾發欄位752(EVEX位元組3,位元[7]-EH)被解譯為逐出暗示(EH)欄位752B及貝它欄位754(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料操縱欄位754C。
當U=1時,阿爾發欄位752(EVEX位元組3,位元[7]-EH)被解譯為寫入遮罩控制(Z)欄位752C。當U=1及MOD欄位842含有11(表示無記憶體存取作業)時,貝它欄位754(EVEX位元組3,位元[4]-S0
)的一部份被解譯為RL欄位757A;當其含有1(捨入757A.1)時,貝它欄位754(EVEX位元組3,位元[6-5]-S2-1
)的其餘部份被解譯為捨入作業欄位759A,而當RL欄位757A含有0(VSIZE 757.A2)時,貝它欄位754(EVEX位元組3,
位元[6-5]-S2-1
)的其餘部份被解譯為向量長度欄位759B(EVEX位元組3,位元[6-5]-L1-0
)。當U=1及MOD欄位842含有00、01或10(表示記憶體存取作業)時,貝它欄位754(EVEX位元組3,位元[6:4]-SSS)被解譯為向量長度欄位759B(EVEX位元組3,位元[6-5]-L1-0
)及廣播欄位757B(EVEX位元組3,位元[4]-B)。
圖9是根據本發明的一實施例之暫存器架構900的方塊圖。在所示的實施例中,有512位元寬的32個向量暫存器910;這些暫存器稱為zmm0至zmm31。較低的16 zmm暫存器的低階256位元覆蓋於暫存器ymm0-16之上。較低的16-zmm暫存器的低階128位元(ymm暫存器的低階128位元)覆蓋於暫存器xmm0-15之上。如下述表格中所示般,特定向量友善指令格式800對這些被覆蓋的暫存器檔案作用。
換言之,向量長度欄位759B在最大長度與一或更多其它較短的長度之間選取,其中,每一此較短長度是先前長度的長度之一半;以及,不具向量長度欄位759B的指令樣板對最大向量長度作業。此外,在一實施例中,特定向量友善指令格式800的等級B指令樣板對緊縮的或純量的單一/雙倍精度浮點資料及緊縮的或純量的整數資料作業。純量操作是對zmm/ymm/xmm暫存器中最低階資料元位置執行的作業;更高階的資料元位置視實施例而保留成與它們在指令之前相同或者零化。
寫入罩暫存器915-在所示的實施例中,有8個大小均為64位元之寫入罩暫存器(k0至k7)。在替代實施例中,寫入罩暫存器915大小為16位元。如同先前所述般,在本發明的一實施例中,向量罩暫存器k0無法作為寫入遮罩;當正常標示k0的編碼用於寫入遮罩時,其選取0xFFFF的實體接線的寫入遮罩,有效地使用於該指令
的寫入遮罩禁能。
一般用途暫存器925-在所示的實施例中,有十六個64位元一般用途暫存器,它們與現有的x86定址模式一起用以將記憶體運算元定址。這些暫存器以名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15表示。
純量浮點堆疊暫存器檔案(x87堆疊)945,MMX緊縮整數平坦暫存器檔案950重疊於其上-在所示的實施例中,x87堆疊是八元堆疊,用以使用x87指令集延伸,對32/64/80位元浮點資料執行純量浮點作業;而MMX暫存器被用以對64位元緊縮暫存器資料執行作業,以及為了某些在MMX及XMM暫存器之間執行的作業而固持運算元。
本發明的替代實施例可以使用更寬或更窄的暫存器。此外,本發明的替代實施例可以使用更多、更少、或不同的暫存器檔案及暫存器。
為了不同目的而以不同方式、及在不同處理器中,實施處理器核心。舉例而言,這些核心的實施包含:1)要用於一般用途計算的一般用途有序核心;2)要用於一般用途計算的高性能一般用途亂序核心;3)主要用於圖形及/或科學(通量)計算的特定用途的核心。不同處理器的實施包含:1)CPU,包含要用於一般用途計算的一或
更多一般用途有序核心及/或要用於一般用途計算的一或更多一般用途亂序核心;及2)共同處理器,包含主要用於圖形及/或科學(通量)計算的一或更多特定用途核心。這些不同的處理器導致不同的電腦系統架構,包含:1)在與CPU分別的晶片上的共同處理器;2)在與CPU相同的封裝中在分別的晶粒上的共同處理器;3)在與CPU相同的晶粒上的共同處理器(在此情形中,此共同處理器有時被稱為特定用途邏輯,例如集成的圖形及/或科學(通量)邏輯,或是作為特定用途核心);及4)系統晶片,在相同晶粒上包含所述CPU(有時稱為應用核心或應用處理器)、上述共同處理器、及其它功能。於下說明舉例說明的核心架構,接著是舉例說明的處理器及電腦架構的說明。
圖10A是方塊圖,顯示根據本發明的實施例之舉例說明的有序管線及舉例說明的暫存器重命名、亂序議題/執行管線。圖10B是方塊圖,顯示根據本發明的實施例之要包含於處理器中舉例說明的亂序議題/執行架構核心以及有序架構核心之舉例說明的實施例。圖10A-B中的實線方塊顯示有序管線及有序核心,而選加的虛線方塊顯示暫存器重命名、亂序議題/執行管線及核心。在有序態樣是亂序態樣的子集合之假設下,說明亂序態樣。
在圖10A中,處理器管線1000包含提取級1002、長度解碼級1004、解碼級1006、分配級1008、重命名級1010、排程(也稱為派遣或核發)級1012、暫存器讀取/記憶體讀取級1014、執行級1016、寫回/記憶體寫入級1018、例外處理級1022、及委託級1024。
圖10B顯示處理器核心1090,處理器核心1090包含耦合至執行引擎單元1050之前端單元1130,引擎單元1050及前端單元1030都耦合至記憶體單元1070。核心1090可為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、很長指令字(VLIW)核心、或是混合或替代核心型式。關於又另一選項,核心1090可為特別用途的核心,舉例而言,例如網路或通訊核心、壓縮引擎、共同處理器核心、一般用途計算圖形處理單元(GPGPU)核心、圖形核心、等等。
前端單元1030包含分支預測單元1032,分支預測單元1032耦合至指令快取單元1034,指令快取單元1034耦合至指令轉譯旁看緩衝器(TLB)1036,指令轉譯旁看緩衝器(TLB)1036耦合至指令提取單元1038,指令提取單元1038耦合至解碼單元1040。解碼單元1040(或解碼器)將指令解碼,以及產生微碼進入點、微指令、其它指令、或是從原始指令解碼、或是從原始指令以其它方式反應、或是從原始指令導出的其它控制訊號,以作為輸出的一或更多微作業。使用各種不同的機構,以實施解碼單元1040。適當的機構實例包含但不限於查詢表、硬體實施、
可編程邏輯陣列(PLA)、微碼唯讀記憶體(ROM)、等等。在一實施例中,核心1090包含儲存用於某些巨集指令的微碼(例如,在解碼單元1040中或是在前端單元1030之內)之微碼ROM或是其它媒體。解碼單元1040耦合至執行引擎單元1050中的重命名/分配器單元1052。
執行引擎單元1050包含重命名/分配器單元1052,命名/分配器單元1052耦合至退出單元1054及一或更多排程器單元1056的集合。排程器單元1056代表任何數目的不同排程器,包含保留站、中央指令窗、等等。排程器單元1056耦合至實體暫存器檔案單元1058。各實體暫存器檔案單元1058代表一或更多實體暫存器檔案,不同的實體暫存器檔案儲存例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、等等一或更多不同的資料型式、狀態(例如,指令指標,指令指標是要被執行的下一指令的位址)、等等。在一實施例中,實體暫存器檔案單元1058包括向量暫存器單元、寫入罩暫存器單元、及純量暫存器單元。這些暫存器單元提供架構向量暫存器、向量罩暫存器、及一般用途暫存器。實體暫存器檔案單元1058由退出單元1054重疊,以顯示實施暫存器重命名及失序執行的各種方式(例如,使用重排序緩衝器及退出暫存器檔案;使用未來檔案、歷史緩衝器、及退出暫存器檔案;使用暫存器映射及暫存器池;等等)。退出單元1054及實體暫存器檔案單元1058耦合至執行叢集1060。執行叢集1060包含一或更多執行單元1062的集合以及一
或更多記憶體存取單元1064的集合。執行單元1062執行不同的作業(例如,偏移、加法、減法、乘法)以及對不同型式的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)執行作業。雖然某些實施例包含專用於特定功能或功能集的一些執行單元,但是,其它實施例可以僅包含一執行單元或是多個都執行所有功能的執行單元。由於某些實施例產生用於某些型式的資料/作業之分別的管線,所以,排程器單元1056、實體暫存器檔案1058、及執行叢集1060顯示為可能為複數的(例如,均具有它們自己的排程器單元、實體暫存器檔案單元、及/或執行叢集的純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線及/或記憶體存取管線,以及,在分別的記憶體存取管線的情形中,實施某些實施例,其中,僅有此管線的執行叢集具有記憶體存取單元1064)。也應瞭解,在使用分別的管線時,這些管線中之一或更多可以是亂序核發/執行,而其它是有序的。
記憶體存取單元1064的集合耦合至記憶體單元1070,記憶體單元1070包含耦合至資料快取單元1074的資料TLB單元1072,資料快取單元1074耦合至階層2(L2)快取單元1076。在一舉例說明的實施例中,記憶體存取單元1064包含載入單元、儲存位址單元、及儲存資料單元,各單元耦合至記憶體單元1070中的資料TLB單元1072。指令快取單元1034又耦合至記憶體單元1070中的階層2(L2)快取單元1076。L2快取單元1076耦合
至一或更多其它階層的快取記憶體以及最後耦合至主記憶體。
舉例而言,舉例說明的暫存器重命名、亂序議題/執行核心架構如下所述地實施管線1000:1)指令提取1038執行提取及長度解碼級1002和1004;2)解碼單元1040執行解碼級1006;3)重命名/分配器單元1052執行分配級1108及重命名級1010;4)排程器單元1056執行排程級1012;5)實體暫存器檔案單元1058及記憶體單元1070執行暫存器讀取/記憶體讀取級1014;執行叢集1060執行執行級1016;6)記憶體單元1070及實體暫存器檔案單元1058執行寫回/記憶體寫入級1018;7)各種單元涉及例外處理級1022;以及,8)退出單元1054及實體暫存器檔案單元1058執行委託級1024。
核心1090支援一或更多指令集(例如,x86指令集(增加較新版本的某些擴充);加州太陽谷的MIPS Technologies的MIPS指令集;加州太陽谷的ARM Holdings的ARM指令集(加上選加的例如NEON等增加擴充),包含此處所述的指令。在一實施例中,核心1090包含邏輯以支援緊縮資料指令集擴充(例如,先前所述之AVX1、AVX2、及/或某些形式的同屬向量友善指令格式(U=0及/或U=1)),藉以允許由很多多媒體應用所使用的作業使用緊縮資料而執行。
應瞭解,核心支援多緒(執行二或更多平行集合的作業或緒),以及,以各種方式如此執行,這些方式包含時
間切割多緒、同時多緒(其中,單一實體核心提供用於實體核心同時正多緒化的多個緒中的各線之邏輯核心)、或是其組合(例如,時間切割提取及解碼以及其後的同時多緒,例如Intel®
Hyperthreading技術中所示)。
雖然在亂序執行的環境中說明暫存器重命名,但是,應瞭解,暫存器重命名可用於有序架構中。雖然所示的處理器的實施例也包含分別的指令及資料快取單元1034/1074以及共用的L2快取單元1076,替代實施例具有用於指令及資料之單一內部快取,例如階層1(L1)內部快取、或是多階層的內部快取。在某些實施例中,系統包含內部快取及外部快取的組合,外部快取是核心及/或處理器的外部。替代地,所有的快取可以是核心及/或處理器的外部。
圖11A-B顯示更特定之舉例說明的有序核心架構的方塊圖,其中,核心將是晶片中數個邏輯區塊(包含相同型式及/或不同型式的其它核心)中之一。這些邏輯區塊視應用而經由設有某些固定功能邏輯之高頻寬互連網路(例如,環式網路)、記憶體I/O介面、及其它所需I/O邏輯而通訊。
圖11A是根據本發明的實施例之單一處理器核心、以及其對晶粒上互連網路1102的連接及其本地子集合階級2(L2)快取記憶體1104之方塊圖。在一實施例中,指令
解碼器1100支援設有緊縮資料指令集延伸的x86指令集。L1快取記憶體1106允許對快取記憶體低潛時存取至純量及向量單元。雖然在一實施例中(為了簡化設計),純量單元1108和向量單元1110使用分開的暫存器集(分別為純量暫存器1112和向量暫存器1114)及在它們之間傳送的資料被寫至記憶體,然後從階層1(L1)快取記憶體1106讀回,但是,本發明的替代實施例可以使用不同的方式(例如,使用單一暫存器集或是包含通訊路徑,允許資料在二暫存器檔案之間傳送而不用寫入及讀回)。
L2快取記憶體1104的本地子集合是被分割成多個分別的本地子集合之通用L2快取的部份,每一CPU核心有一集合。各CPU對於它自己的L2快取記憶體1104的本地子集合具有直接存取路徑。與存取它們自己的本地L2快取記憶體子集合之其它處理器核心相平行地,由處理器核心讀取的資料被儲存在L2快取子集合1104中且可以被快速地存取。由處理器核心寫入的資料儲存在它自己的L2快取子集合1104中,且假使需要時從其它子集合湧入。環式網路確保共用資料的同調性。環式網路是雙向的以允許例如處理器核心、L2快取記憶體及其它邏輯區塊以在晶片之內彼此通訊。各環式資料路徑是每一方向1012位元寬。
圖11B是根據本發明的實施例的圖11A中的處理器核心的部份之放大視圖。圖11B包含L1快取記憶體1404的L1資料快取記憶體1106A部份、以及關於向量單元1110
和向量暫存器1114的更多細節。具體而言,向量單元1110是16-寬的向量處理單元(VPU)(請參見16-寬的ALU 1128),其執行整數、單精準浮點、及雙倍精準浮點指令中之一或更多。VPU以調和單元1120支援調和記憶體輸入、以數字轉換單元1122A-B支援數字轉換、以及以記憶體輸入上的複製單元1124支援複製。寫入遮罩暫存器1126允許預測造成的向量寫入。
圖12是根據本發明的實施例之具有多於一核心、具有集成的記憶體控制器、及具有集成的圖形的處理器1200的方塊圖。圖12中的粗線框顯示具有單核心1202A、系統代理器1210、一或更多匯流排控制器單元1216的處理器1200,而選加的虛線框顯示設有多核心1202A-N、系統代理器單元1210中一或更多整合的記憶體控制器元1214的組、以及特定用途邏輯1208的替代處理器1200。
因此,處理器1200的不同實施包含:1)CPU,設有特定用途邏輯1208及核心1202A-N,特定用途邏輯1208是集成的圖形及/或科學(通量)邏輯(包含一或更多核心),核心1202A-N是一或更多一般用途核心(例如,一般用途有序核心、一般用途亂序核心、二者之組合),2)共同處理器,設有核心1202A-N,核心1302A-N是大量主要用於圖形及/或科學(通量)的特定用途核心;以及,3)共同處理器,設有核心1202A-N,核心1202A-N
是大量一般用途的有序核心。因此,處理器1200可為一般用途處理器、共同處理器或特定用途處理,舉例而言,網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(一般用途圖形處理單元),高通量多集成核心(MIC)共同處理器(包含30或更多核心)、嵌入式處理器、等等。處理器可以在一或更多晶片上實施。使用例如BiCMOS、CMOS、或NMOS等多種製程技術,處理器1200可以是部份的及/或實施在一或更多基底上。
記憶體階層架構包含在核心內的一或更多階層的快取記憶體、一組或一或更多共用快取單元1206、及耦合至集成的記憶體控制器單元1214組之外部記憶體(未顯示)。共用快取單元1206組可以包含例如階層2(L2)、階層3(L3)、階層4(L4)、或其它階層快取記憶體等一或更多中級快取、最後階層快取記憶體(LLC)、及/或其組合。雖然在一實施例中,環式基礎互連單元1212將整合圖形邏輯1208、共用快取單元1206的組、及系統代理器單元1210/集成的記憶體控制器單元1214互連,但是,替代實施例可以使用任何數目的已知技術來互連這些單元。在一實施例中,在一或更多快取單元1206與核心1202-A-N之間維持同調性。
在某些實施例中,核心1202A-N中之一或更多核心能夠多緒化。系統代理器1210包含那些組件協調及操作核心1202A-N。系統代理器單元1210可以包含例如電力控制單元(PCU)及顯示單元。PCU可以是或包含調節核心
1202A-N及集成的圖形邏輯1208的電力狀態所需的邏輯及組件。顯示單元是用於驅動一或更多外部連接的顯示器。
以架構指令集的觀點而言,核心1202A-N可以是同質的或異質的;亦即,核心1202A-N中之二或更多能夠執行相同的指令集,而其它核心能夠僅執行該指令集的子集合或不同的指令集。
圖13-16是舉例說明的電腦架構的方塊圖。用於膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位訊號處理器(DSP)、圖形裝置、電動遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持裝置、及各式各樣的其它電子裝置之此領域中熟知的其它系統設計及配置也是適合的。一般而言,能夠併有此處所揭示的處理器及/或其它執行邏輯的眾多種類的系統或電子裝置通常是適合的。
現在回至圖13,其顯示根據本發明的一實施例之系統1300的方塊圖。系統1300可以包含耦合至控制器集線器1320之一或更多處理器1310、1315。在一實施例中,控制器集線器1320包含圖形記憶體控制器集線器(GMCH)1390及輸入/輸出集線器(IOH)1350(可以在分別的晶片上);GMCH 1390包含記憶體及圖形控制器,記憶體
1340及共同處理器1345耦合至記憶體及圖形控制器;IOH 1350將輸入/輸出(I/O)裝置1360耦合至GMCH 1390。替代地,記憶體及圖形控制器中之一或二者集成於處理器之內(如上所述),記憶體1340及共同處理器1345直接耦合至處理器1310、及設有IOH 1350之單晶片中的控制器集線器1320。
在圖13中以虛線標示增加的處理器1315的選加本質。每一處理器1310、1315包含此處所述的一或更多處理核心以及可以是某些版本的處理器1200。
舉例而言,記憶體1340可以是動態隨機存取記憶體(DRAM)、相位改變記憶體(PCM)、或是二者的組合。對於至少一實施例,控制器集線器1320經由多接點匯流排而與處理器1310、1315通訊,多接點匯流排為例如前側匯流排(FSB)、例如快速路徑互連(QPI)等點對點介面、或是類似連接1395。
在一實施例中,共同處理器1345是特定用途處理器,例如高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器、等等。在一實施例中,控制器集線器1320包含集成的圖形加速器。
以包含架構、微架構、熱、耗電特徵、等等準則計量光譜的觀點而言,實體資源1310、1315之間有各種差異。
在一實施例中,處理器1310執行控制一般型式的資料處理作業之指令。處理器指令可以嵌入在指令之內。處
理器1310將這些共同處理器指令視為應由附加的共同處理器1345執行的型式。因此,處理器1310在共同處理器匯流排上或其它互連上核發這些共同處理器指令(或是代表共同處理器指令的控制訊號)給共同處理器1345。共同處理器1345接受及執行收到的處理器指令。
現在參考圖14,其顯示根據本發明的實施例之第一更特定舉例說明的系統1400的方塊圖。如圖14中所示般,多處理器系統1400是點對點互連系統,以及包含經由點對點互連1450耦合的第一處理器1470和第二處理器1480。各處理器1470及1480可以是某版本的處理器1200。在本發明的一實施例中,處理器1470和1480分別是處理器1310和1315,而共同處理器1438是共同處理器1345。在另一實施例中,處理器1470及1480分別是處理器1310和共同處理器1345。
處理器1470及1480顯示為分別包含集成的記憶體控制器(IMC)單元1472和1482。處理器1470也包含點對點(P-P)介面1476和1478作為它的匯流排控制器單元的一部份;類似地,第二處理器1480包含P-P介面1486和1488。處理器1470、1480可以使用P-P介面電路1478、1488而經由點對點(P-P)介面1450來交換資訊。如同圖14中所示般,IMC 1472和1482將處理器耦合至各別記憶體,亦即記憶體1432和記憶體1434,它們可以是本地附著至各別處理器的主記憶體的部份。
處理器1470、1480使用點對點介面1476、1494、
1486、1498,經由個別的P-P介面1452、1454而均可以與晶片組1490交換資訊。晶片組1490經由高性能介面1439,而與共同處理器1438選加地交換資訊。在一實施例中,共同處理器1438是特別用途處理器,例如高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器、等等。
共用的快取記憶體(未顯示)可以包含在任一處理器中或是二處理器的外部,但尚未經由P-P互連與處理器連接,以致於假使處理器置於低電力模式中時,任一或二處理器的本地快取資訊可以儲存在共用的快取記憶體中。
晶片組1490可以經由介面1496而耦合至第一匯流排1416。在一實施例中,第一匯流排1416可以是週邊元件互連(PCI)匯流排,或是例如PCI快速匯流排或其它第三代I/O互連匯流排等匯流排,但是,本發明的範圍不侷限於此。
如圖14中所示般,各式各樣的I/O裝置1414與匯流排橋接器1418耦合至第一匯流排1416,匯流排橋接器1418耦合第一匯流排1416至第二匯流排1420。在一實施例中,例如共同處理器、高通量MIC處理器、GPGPU、加速器(例如,圖形加速器或是數位訊號處理(DSP)單元)、現場可編程閘陣列、或是任何其它處理器等一或更多增加的處理器1415耦合至第一匯流排1416。在一實施例中,第二匯流排1420可以是低接腳數(LPC)匯流排。在一實施例中,各種裝置可以耦合至第二匯流排1420,舉
例而言,包含鍵盤及/或滑鼠1422、通訊裝置1427及例如包含指令/碼及資料1430的碟片驅動器或其它大量儲存裝置的儲存單元1428。此外,音頻I/O 1424可以耦合至第二匯流排1420。注意,其它架構是可能的。舉例而言,取代圖14的點對點架構,系統可以實施多接點匯流排或其它此類架構。
現在參考圖15,其顯示根據本發明的實施例之第二更特定的舉例說明的系統1500之方塊圖。圖14及15中類似的元件帶有類似的代號,以及,圖14的某些態樣在圖15中被省略,以免模糊圖15的其它態樣。
圖15顯示處理器1470、1480分別包含集成的記憶體及I/O控制邏輯(CL)1472和1482。因此,CL 1472、1482包含集成的記憶體控制器單元及包含I/O控制邏輯。圖15顯示不僅記憶體1432、1434耦合至CL 1472、1482,但是,I/O裝置1514也耦合至控制邏輯1472、1482。舊有I/O裝置1515耦合至晶片組1490。
現在參考圖16,其顯示根據本發明的實施例之系統晶片(SoC)1600的方塊圖。圖12中類似的元件帶有類似的代號。而且,虛線框關於更多先進的SoC的選加特點。在圖16中,互連單元1602耦合至:應用處理器1610,包含一或更多核心202A-N的集合及共用快取單元1206;系統代理器單元1210;匯流排控制器單元1216;整合記憶體控制器單元1214;一組或一或更多共同處理器1620,包含集成的圖形邏輯、影像處理器、音頻處理器、以及視
頻處理器;靜態隨機存取記憶體(SRAM)單元1630;直接記憶體存取(DMA)單元1632;以及用於耦合至一或更多外部顯示器的顯示單元1640。在一實施例中,共同處理器1620包含特定用途處理器,舉例而言,例如網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌入式處理器、等等。
此處揭示的機制實施例可以以硬體、軟體、韌體或這些實施方式的結合來實施。本發明的實施例可以實施成在可編程系統上執行的電腦程式或程式碼,可編程系統包括至少一處理器、儲存系統(包含依電性及非依電性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
例如圖14中所示的程式碼1430可以應用至輸入指令以執行此處所述的功能和產生輸出資訊。輸出資訊可以以已知方式應用至一或更多輸出裝置。為了此應用,處理系統包含具有例如數位訊號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器等處理器之任何系統。
程式碼可以以高階程式或物件導向的程式語言實施,以與處理系統通訊。假使需要時,程式碼也可以以組合或機器語言來實施。事實上,此處所述的機製在範圍上不侷限於任何特定的程式語言。在任何情形中,語言可以是經過編譯或解譯的語言。
至少一實施例的一或更多態樣可以由儲存在機器可讀
取的媒體上之代表指令實施,代表指令代表處理器內各種邏輯,代表指令由機器讀取時促使機器製造邏輯以執行此處所述的技術。稱為「IP核心」的這些代表可以儲存在實體的、機器可讀取的媒體並供應至各式各樣的客戶或製造設施,而載入至真正地產生邏輯的製造機器或處理器。
此機器可讀取的媒體包含但不限於由機器或裝置製造或形成的物件之非暫時、實體配置,包括例如硬碟等儲存媒體、包含軟碟、光碟、光碟唯讀記憶體(CD-ROM)、光碟可重寫記憶體(CD-RW)、及磁光碟等任何其它型式的碟片、例如唯讀記憶體(ROM)、例如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)等隨機存取記憶體(RAM)、可抹拭可編程唯讀記憶體(EPPROM)、快閃記憶體、電可抹拭可編程唯讀記憶體(EEPROM)等半導體裝置、相位改變記憶體(PCM)、磁性或光學卡、或適用於儲存電子指令的任何其它型式的媒體。
因此,本發明的實施例也包含含有指令或含有設計資料之非暫時、實體的機器可讀取的媒體,所述設計資料是例如硬體說明語言(HDL),其界定此處所述的結構、電路、裝置、處理器及/或系統特點。這些實施例也稱為程式產品。
在某些情形中,指令轉換器可以用以將指令從源指令
集轉換至標的指令集。舉例而言,指令轉換器可以將指令轉譯(例如,使用靜態二進位轉譯、包含動態編譯的動態二進位轉譯)、變體、模仿、或其它轉換至由核心處理的一或更多其它指令。指令轉換器可以以軟體、硬體、韌體、或其結合來實施。指令轉換器可以是在處理器上、不在處理器上、或部份在處理器上及部份離開處理器。
圖17是方塊圖,將根據本發明的實施例之使用軟體指令轉換器以將源指令集中的二進位指令轉換成標的指令集中的二進位指令作對比。在顯示的實施例中,指令轉換器是軟體指令轉換器,但是,指令轉換器可以替代地以軟體、韌體、硬體、或其各種結合來實施。圖17顯示高階語言1702的程式,其可以由x86編譯器1704編譯以產生x86二進位碼1706,二進位碼1706可以由具有至少一x86指令集核心1716的處理器原地執行。具有至少一x86指令集核心1716的處理器代表藉由共容地執行或其它方式地處理下述,而能夠執行與具有至少一x86指令集核心的英特爾處理器實質上相同功能的任何處理器:(1)英特爾x86指令集核心的指令集的實質部份,或是(2)以在具有至少一x86指令集核心的英特爾處理器上執行為目標之應用程式或其它軟體的物件碼版本,以便取得與具有至少一x86指令集核心的英特爾處理器實質上相同的結果。x86編譯器1704代表可以操作以產生x86二進位碼1706(例如,物件碼)之編譯器,x86二進位碼1706藉由或不藉由增加的鏈結處理,都可以在具有至少一x86指令集核
心1716的處理器上執行。類似地,圖17顯示高階語言1702的程式,使用替代指令集編譯器1708,可以將其編譯以產生替代指令集二進位碼1710,替代指令集二進位碼1710可以由不具有至少一x86指令集核心1714的處理器(例如,具有執行例如加州Sunnyvale的MIPS Technologies公司的MIPS指令集及/或加州Sunnyvale的ARM Holdings公司的ARM指令集之核心的處理器)原地執行。指令轉換器1712用以將x86二進位碼1706轉換成可以由不具有x86指令集核心1714的處理器原地執行的碼。由於能夠如此執行的指令轉換器難以製作,所以,此轉換的碼不易與替代指令集二進位碼1710相同;但是,所述轉換的碼將完成一般作業及由來自替代指令集的指令組成。因此,指令轉換器1712代表軟體、韌體、硬體或其組合,其經由模仿、模擬或任何其它處理而允許不具有x86指令集處理器或核心的處理器或其它電子裝置執行x86二進位碼1706。
101‧‧‧源寫入罩暫存器
103‧‧‧目的地暫存器
900‧‧‧暫存器架構
910‧‧‧向量暫存器
915‧‧‧寫入罩暫存器
945‧‧‧純量浮點堆疊暫存器檔案
950‧‧‧MMX緊縮整數平坦暫存器檔案
1000‧‧‧管線
1090‧‧‧核心
1200‧‧‧處理器
1300‧‧‧系統
1400‧‧‧系統
1500‧‧‧系統
1600‧‧‧系統晶片
將以舉例方式而非限定方式,於附圖的圖式中顯示本發明,其中,類似代號表示類似元件,以及,其中
圖1顯示舉例說明的VPMOVM2INDEXX指令的作業之舉例說明。
圖2顯示在處理器中使用VPMOVM2INDEXX指令的實施例。
圖3(A)顯示VPMOVM2INDEXX指令的處理方法之實施例。
圖3(B)顯示VPMOVM2INDEXX指令的處理方法之另一實施例。
圖4顯示舉例說明之本指令的虛擬碼。
圖5顯示根據本發明的一實施例之一主動位元向量寫入罩元的數目與向量尺寸和資料元尺寸之間的相關性。
圖6A顯示舉例說明的AVX指令格式。
圖6B顯示來自圖6A之哪些欄位構成完全作業碼及基礎作業欄位。
圖6C顯示來自圖6A之哪些欄位構成暫存器索引欄位。
圖7A-7B是方塊圖,顯示根據本發明的實施例之同屬向量友善指令格式及其指令樣板。
圖8A-D是方塊圖,顯示根據本發明的實施例之舉例說明的特定向量友善指令格式。
圖9是根據本發明的一實施例之暫存器架構的方塊圖。
圖10A是方塊圖,顯示根據本發明的實施例之舉例說明的有序管線及舉例說明的暫存器重命名、亂序議題/執行管線。
圖10B是方塊圖,顯示根據本發明的實施例之包含在處理器中的有序架構核心的舉例說明的實施例及舉例說明的暫存器重命名、亂序議題/執行架構核心。
圖11A-B是方塊圖,顯示更具體的舉例說明之有序核心架構,其核心是晶片中數個邏輯區(包含相同型式及/或不同型式的其它核心)中之一。
圖12是方塊圖,顯示根據本發明的實施例之具有一個以上的核心、具有集成的記憶體控制器、及具有集成的圖形之處理器。
圖13是根據本發明的實施例之舉例說明的系統的方塊圖。
圖14是根據本發明的實施例之第一更具體的舉例說明的系統的方塊圖。
圖15是根據本發明的實施例之第二更具體的舉例說明的系統的方塊圖。
圖16是根據本發明的實施例之系統晶片的方塊圖。
圖17是方塊圖,對比根據本發明的實施例之將源指令集中的二進位指令轉換成標的指令集中的二進位指令之軟體指令轉換器的使用。
101‧‧‧源寫入罩暫存器
103‧‧‧目的地暫存器
Claims (20)
- 一種在電腦處理器中執行罩暫存器轉換成索引值清單之方法,以回應包含目的地向量暫存器運算元、源寫入罩暫存器運算元、以及作業碼之單一指令,該方法包括下述步驟:解碼該單一指令;執行被解碼之該單一指令,以識別源寫入罩暫存器的哪些主動位元位置要被儲存在該目的地向量暫存器中作為索引值;以及將作為索引值之被識別之該位元位置儲存在該目的地向量暫存器中,每一緊縮資料元位置僅一索引值。
- 如申請專利範圍第1項之方法,其中,要被儲存作為索引值的該位元位置具有1的值。
- 如申請專利範圍第1項之方法,其中,該作業碼界定該目的地向量暫存器的緊縮資料元尺寸。
- 如申請專利範圍第3項之方法,其中,該源寫入罩暫存器中的主動位元的數目是以位元為單位之該目的地向量暫存器的尺寸除以該目的地向量暫存器的該緊縮資料元尺寸。
- 如申請專利範圍第1項之方法,其中,平行地識別儲存在各主動位元位置中的該值。
- 如申請專利範圍第1項之方法,其中,該源寫入罩暫存器是16位元或64位元。
- 如申請專利範圍第1項之方法,其中,該目的地向 量暫存器是128位元、256位元、或512位元的尺寸。
- 如申請專利範圍第1項之方法,其中,執行包括:決定該源寫入罩暫存器的若干主動位元;以及對該源寫入罩暫存器的各主動位元位置,決定該源寫入罩暫存器的主動位元位置中的值是否為1,當該源寫入罩暫存器的主動位元位置的值為1,則將該位元位置作為索引寫入至該目的地向量暫存器的未使用的緊縮資料元位置中。
- 如申請專利範圍第1項之方法,又包括:將該目的地向量暫存器的所有未使用的緊縮資料元位置設定為全部是1。
- 一種製造物件,包括:實體的機器可讀取的儲存媒體,儲存有指令的發生,其中,該指令的格式指明寫入罩暫器作為它的源運算元以及指明單一目的地向量暫存器作為它的目的地,以及,其中,該指令格式包含作業碼,為回應該單一指令的單一發生,該作業碼指令機器以識別該源寫入罩暫存器的哪些主動位元位置要被儲存在該目的地向量暫存器中作為索引值,以及將該索引值儲存在該目的地向量暫存器中,每一緊縮資料元位置僅一索引值。
- 如申請專利範圍第10項之製造物件,其中,該作業碼界定該目的地向量暫存器的緊縮資料元尺寸。
- 如申請專利範圍第11項之製造物件,其中,該源 寫入罩暫存器中的主動寫入罩位元的數目是以位元為單位之該目的地向量暫存器的尺寸除以該目的地向量暫存器的該緊縮資料元尺寸。
- 如申請專利範圍第10項之製造物件,其中,平行地執行儲存在各主動位元位置中的該值之識別。
- 如申請專利範圍第10項之製造物件,其中,該源寫入罩暫存器是16位元或64位元。
- 如申請專利範圍第10項之製造物件,其中,該目的地向量暫存器是128位元、256位元、或512位元的尺寸。
- 如申請專利範圍第10項之製造物件,其中,該識別及該儲存包括:決定該源寫入罩暫存器的若干主動位元;以及對該源寫入罩暫存器的各主動位元位置,決定該源寫入罩暫存器的主動位元位置中的值是否為1,當該源寫入罩暫存器的主動位元位置的值為1,則將該位元位置作為索引寫入至該目的地向量暫存器的未使用的緊縮資料元位置中。
- 如申請專利範圍第10項之製造物件,又包括:將該目的地向量暫存器的所有未使用的緊縮資料元位置設定為全部是1。
- 一種裝置,包括:硬體解碼器,用以解碼包含目的地向量暫存器運算 元、源寫入罩暫存器運算元、以及作業碼之單一指令;執行邏輯電路,用以決定該源寫入罩暫存器的哪些主動位元位置要被儲存在該目的地向量暫存器中作為索引值,以及將該索引值儲存在該目的地向量暫存器中,每一緊縮資料元位置僅一索引值。
- 如申請專利範圍第18項之裝置,其中,該源寫入罩暫存器中的主動寫入罩位元的數目是以位元為單位之該目的地暫存器的尺寸除以該目的地暫存器的該緊縮資料元尺寸。
- 如申請專利範圍第18項之裝置,其中,該決定及該儲存包括:決定該源寫入罩暫存器的若干主動位元;以及對該源寫入罩暫存器的各主動位元位置,決定該源寫入罩暫存器的主動位元位置中的值是否為1,當該源寫入罩暫存器的主動位元位置的值為1,則將該位元位置作為索引寫入至該目的地向量暫存器的未使用的緊縮資料元位置中。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2011/067238 WO2013095653A1 (en) | 2011-12-23 | 2011-12-23 | Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201346754A TW201346754A (zh) | 2013-11-16 |
TWI502499B true TWI502499B (zh) | 2015-10-01 |
Family
ID=48669291
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW101145629A TWI502499B (zh) | 2011-12-23 | 2012-12-05 | 執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US9454507B2 (zh) |
CN (1) | CN104094218B (zh) |
TW (1) | TWI502499B (zh) |
WO (1) | WO2013095653A1 (zh) |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10534606B2 (en) | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
US9342314B2 (en) | 2011-12-08 | 2016-05-17 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors |
EP2788901A1 (en) | 2011-12-08 | 2014-10-15 | Oracle International Corporation | Techniques for maintaining column vectors of relational data within volatile memory |
US9792117B2 (en) | 2011-12-08 | 2017-10-17 | Oracle International Corporation | Loading values from a value vector into subregisters of a single instruction multiple data register |
US9697174B2 (en) | 2011-12-08 | 2017-07-04 | Oracle International Corporation | Efficient hardware instructions for processing bit vectors for single instruction multiple data processors |
CN104011649B (zh) * | 2011-12-23 | 2018-10-09 | 英特尔公司 | 用于在simd/向量执行中传播有条件估算值的装置和方法 |
WO2013095653A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register |
US9292569B2 (en) | 2012-10-02 | 2016-03-22 | Oracle International Corporation | Semi-join acceleration |
EP2972788B1 (en) * | 2013-03-15 | 2019-08-21 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors |
US9430390B2 (en) | 2013-09-21 | 2016-08-30 | Oracle International Corporation | Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications |
TWI489279B (zh) | 2013-11-27 | 2015-06-21 | Realtek Semiconductor Corp | 虛擬實體位址轉換系統以及虛擬實體位址轉換系統的管理方法 |
US20160179521A1 (en) * | 2014-12-23 | 2016-06-23 | Intel Corporation | Method and apparatus for expanding a mask to a vector of mask values |
US20160179520A1 (en) * | 2014-12-23 | 2016-06-23 | Intel Corporation | Method and apparatus for variably expanding between mask and vector registers |
US9830151B2 (en) * | 2014-12-23 | 2017-11-28 | Intel Corporation | Method and apparatus for vector index load and store |
US20160283242A1 (en) * | 2014-12-23 | 2016-09-29 | Intel Corporation | Apparatus and method for vector horizontal logical instruction |
US10025822B2 (en) | 2015-05-29 | 2018-07-17 | Oracle International Corporation | Optimizing execution plans for in-memory-aware joins |
US9990308B2 (en) | 2015-08-31 | 2018-06-05 | Oracle International Corporation | Selective data compression for in-memory databases |
US10503502B2 (en) * | 2015-09-25 | 2019-12-10 | Intel Corporation | Data element rearrangement, processors, methods, systems, and instructions |
US9946541B2 (en) * | 2015-12-18 | 2018-04-17 | Intel Corporation | Systems, apparatuses, and method for strided access |
US10289416B2 (en) * | 2015-12-30 | 2019-05-14 | Intel Corporation | Systems, apparatuses, and methods for lane-based strided gather |
US20170192789A1 (en) * | 2015-12-30 | 2017-07-06 | Rama Kishnan V. Malladi | Systems, Methods, and Apparatuses for Improving Vector Throughput |
US20170192783A1 (en) * | 2015-12-30 | 2017-07-06 | Elmoustapha Ould-Ahmed-Vall | Systems, Apparatuses, and Methods for Stride Load |
US10055358B2 (en) | 2016-03-18 | 2018-08-21 | Oracle International Corporation | Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors |
US10402425B2 (en) | 2016-03-18 | 2019-09-03 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors |
US10061832B2 (en) | 2016-11-28 | 2018-08-28 | Oracle International Corporation | Database tuple-encoding-aware data partitioning in a direct memory access engine |
CN107315715B (zh) * | 2016-04-26 | 2020-11-03 | 中科寒武纪科技股份有限公司 | 一种用于执行矩阵加/减运算的装置和方法 |
US10599488B2 (en) | 2016-06-29 | 2020-03-24 | Oracle International Corporation | Multi-purpose events for notification and sequence control in multi-core processor systems |
US10380058B2 (en) | 2016-09-06 | 2019-08-13 | Oracle International Corporation | Processor core to coprocessor interface with FIFO semantics |
US10783102B2 (en) | 2016-10-11 | 2020-09-22 | Oracle International Corporation | Dynamically configurable high performance database-aware hash engine |
US10176114B2 (en) | 2016-11-28 | 2019-01-08 | Oracle International Corporation | Row identification number generation in database direct memory access engine |
US10459859B2 (en) | 2016-11-28 | 2019-10-29 | Oracle International Corporation | Multicast copy ring for database direct memory access filtering engine |
US10725947B2 (en) | 2016-11-29 | 2020-07-28 | Oracle International Corporation | Bit vector gather row count calculation and handling in direct memory access engine |
US11340904B2 (en) | 2019-05-20 | 2022-05-24 | Micron Technology, Inc. | Vector index registers |
US11327862B2 (en) | 2019-05-20 | 2022-05-10 | Micron Technology, Inc. | Multi-lane solutions for addressing vector elements using vector index registers |
US11507374B2 (en) * | 2019-05-20 | 2022-11-22 | Micron Technology, Inc. | True/false vector index registers and methods of populating thereof |
US11403256B2 (en) | 2019-05-20 | 2022-08-02 | Micron Technology, Inc. | Conditional operations in a vector processor having true and false vector index registers |
US11442726B1 (en) | 2021-02-26 | 2022-09-13 | International Business Machines Corporation | Vector pack and unpack instructions |
US12086595B2 (en) * | 2021-03-27 | 2024-09-10 | Intel Corporation | Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511210A (en) * | 1992-06-18 | 1996-04-23 | Nec Corporation | Vector processing device using address data and mask information to generate signal that indicates which addresses are to be accessed from the main memory |
US6088782A (en) * | 1997-07-10 | 2000-07-11 | Motorola Inc. | Method and apparatus for moving data in a parallel processor using source and destination vector registers |
TW487854B (en) * | 1999-10-19 | 2002-05-21 | Pulsar Dna Inc | Data file processing method |
US20060149938A1 (en) * | 2004-12-29 | 2006-07-06 | Hong Jiang | Determining a register file region based at least in part on a value in an index register |
TW200839780A (en) * | 2007-03-29 | 2008-10-01 | Montage Technology Usa Inc | Register read mechanism |
CN101488083A (zh) * | 2007-12-26 | 2009-07-22 | 英特尔公司 | 用于转换向量数据的方法、装置和指令 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7302557B1 (en) * | 1999-12-27 | 2007-11-27 | Impact Technologies, Inc. | Method and apparatus for modulo scheduled loop execution in a processor architecture |
US20030105945A1 (en) * | 2001-11-01 | 2003-06-05 | Bops, Inc. | Methods and apparatus for a bit rake instruction |
US8239659B2 (en) * | 2006-09-29 | 2012-08-07 | Intel Corporation | Vector completion mask handling |
US7984273B2 (en) * | 2007-12-31 | 2011-07-19 | Intel Corporation | System and method for using a mask register to track progress of gathering elements from memory |
US8959316B2 (en) * | 2008-08-15 | 2015-02-17 | Apple Inc. | Actual instruction and actual-fault instructions for processing vectors |
US8418154B2 (en) * | 2009-02-10 | 2013-04-09 | International Business Machines Corporation | Fast vector masking algorithm for conditional data selection in SIMD architectures |
WO2013095653A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register |
-
2011
- 2011-12-23 WO PCT/US2011/067238 patent/WO2013095653A1/en active Application Filing
- 2011-12-23 CN CN201180076290.2A patent/CN104094218B/zh active Active
- 2011-12-23 US US13/992,394 patent/US9454507B2/en active Active
-
2012
- 2012-12-05 TW TW101145629A patent/TWI502499B/zh not_active IP Right Cessation
-
2016
- 2016-09-27 US US15/277,702 patent/US9921840B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511210A (en) * | 1992-06-18 | 1996-04-23 | Nec Corporation | Vector processing device using address data and mask information to generate signal that indicates which addresses are to be accessed from the main memory |
US6088782A (en) * | 1997-07-10 | 2000-07-11 | Motorola Inc. | Method and apparatus for moving data in a parallel processor using source and destination vector registers |
TW487854B (en) * | 1999-10-19 | 2002-05-21 | Pulsar Dna Inc | Data file processing method |
US20060149938A1 (en) * | 2004-12-29 | 2006-07-06 | Hong Jiang | Determining a register file region based at least in part on a value in an index register |
TW200839780A (en) * | 2007-03-29 | 2008-10-01 | Montage Technology Usa Inc | Register read mechanism |
CN101488083A (zh) * | 2007-12-26 | 2009-07-22 | 英特尔公司 | 用于转换向量数据的方法、装置和指令 |
Also Published As
Publication number | Publication date |
---|---|
CN104094218B (zh) | 2017-08-29 |
US9921840B2 (en) | 2018-03-20 |
US20140019715A1 (en) | 2014-01-16 |
US9454507B2 (en) | 2016-09-27 |
CN104094218A (zh) | 2014-10-08 |
TW201346754A (zh) | 2013-11-16 |
WO2013095653A1 (en) | 2013-06-27 |
US20170083317A1 (en) | 2017-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI502499B (zh) | 執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法 | |
TWI743058B (zh) | 硬體處理器、用於融合指令之方法及非暫時性機器可讀媒體 | |
TWI470544B (zh) | 用以響應於單一指令而執行橫向加法或減法之系統、裝置及方法 | |
TWI517031B (zh) | 用於呈現各別複數之複數共軛根之向量指令 | |
TWI502491B (zh) | 用於將一表列索引值轉換成為遮罩值之方法、製造物品及處理器 | |
TWI617978B (zh) | 用於向量索引載入和儲存之方法和設備 | |
TWI498815B (zh) | 用以響應於單一指令而執行橫向部分和之系統、裝置及方法 | |
TWI578230B (zh) | 用於執行複數個乘法運算的方法和設備 | |
TWI473015B (zh) | 執行向量頻率擴展指令之方法、處理器核心以及製品 | |
TWI489383B (zh) | 遮蔽排列指令的裝置及方法 | |
TWI486872B (zh) | 向量緊縮壓縮及重複之實施系統、設備和方法 | |
TWI610228B (zh) | 用於執行向量位元反轉和交叉的方法和設備 | |
TWI493449B (zh) | 用於使用遮罩以執行向量緊縮一元解碼的系統、裝置及方法 | |
JP2018500658A (ja) | インデックスおよび即値を用いてベクトル置換を実行するための方法および装置 | |
JP2018506096A (ja) | ベクトルビットシャッフルを実行するための方法および装置 | |
TW201738733A (zh) | 執行指令以排列遮罩的系統及方法 | |
JP2018506094A (ja) | 多倍長整数(big integer)の算術演算を実行するための方法および装置 | |
TWI482086B (zh) | 用以於緊縮資料元件上執行差分編碼之系統、裝置及方法 | |
CN107003848B (zh) | 用于融合乘法-乘法指令的装置和方法 | |
TW201732568A (zh) | 用於巷道為主的跨類收集的系統、設備與方法 | |
CN111831335A (zh) | 经改进的插入指令的装置和方法 | |
TWI559219B (zh) | 用於選擇向量運算之元素的裝置及方法(二) | |
TW201810034A (zh) | 用於累和的系統、設備及方法 | |
TWI464676B (zh) | 映射源運算元至不同範圍的系統、設備及方法 | |
TW201732574A (zh) | 用於改善向量通量的系統、方法及設備 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |