TWI817926B - 用於執行指令的設備、方法及非暫態機器可讀媒體 - Google Patents
用於執行指令的設備、方法及非暫態機器可讀媒體 Download PDFInfo
- Publication number
- TWI817926B TWI817926B TW106117443A TW106117443A TWI817926B TW I817926 B TWI817926 B TW I817926B TW 106117443 A TW106117443 A TW 106117443A TW 106117443 A TW106117443 A TW 106117443A TW I817926 B TWI817926 B TW I817926B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- field
- operand
- data element
- destination
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000003860 storage Methods 0.000 claims description 13
- 230000015654 memory Effects 0.000 description 176
- 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 76
- 238000006073 displacement reaction Methods 0.000 description 43
- 238000010586 diagram Methods 0.000 description 31
- 238000007667 floating Methods 0.000 description 24
- 238000012545 processing Methods 0.000 description 19
- 238000013501 data transformation Methods 0.000 description 11
- 230000000873 masking effect Effects 0.000 description 9
- 239000000872 buffer Substances 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 8
- 238000004891 communication Methods 0.000 description 8
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 230000036961 partial effect Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000000605 extraction Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000002156 mixing Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000003066 decision tree Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000003416 augmentation Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 239000003607 modifier Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000006698 induction Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 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
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 235000012431 wafers Nutrition 0.000 description 1
Images
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/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
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- 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/3001—Arithmetic 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/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/30098—Register arrangements
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Magnetic Resonance Imaging Apparatus (AREA)
- Measuring Pulse, Heart Rate, Blood Pressure Or Blood Flow (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
說明了用於執行指令的系統、方法及設備。在一些實施例中,該指令包括至少運算碼、用於緊縮資料來源運算元的欄位以及用於緊縮資料目的地運算元的欄位。當執行時,該指令造成針對該來源運算元之各個資料元件位置,對在該資料元件位置中儲存的值與在該緊縮資料來源運算元之先前資料元件位置中儲存的所有值作乘法,並且將該乘法的結果儲存到該緊縮資料目的地運算元之對應的資料元件位置中。
Description
發明之技術領域一般係關於電腦處理器架構,且更特別的是關於一種指令,其當執行時導致特定的結果。
指令集或指令集架構(ISA;instruction set architecture)為部分的關於編程的電腦架構,且可包括原生資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷及例外處置以及外部輸入及輸出(I/O)。應注意的是,術語指令於此一般指的是巨集指令(macro-instruction)-其為提供給處理器以用於執行的指令-相反於微指令或微運算-其從解碼巨集指令的處理器之解碼器造成。
指令集架構係與微架構有所區別,微架構為實行ISA之處理器的內部設計。具有不同微架構的處理器
能共用通用指令集(common instruction set)。例如,英特爾奔騰4代(Pentium 4)處理器、英特爾核心處理器以及加州桑尼維爾之先進微型裝置公司(AMD Inc)處理器實行x86指令集的接近相同版本(具有已增加到較新版本的一些延伸),但具有不同內部設計。舉例來說,ISA之相同暫存器架構可使用周知的技術以不同的方式在不同的微架構中實行,包括專用實體暫存器、使用暫存器更名機制的一或多個動態分配的實體暫存器(例如,如美國專利第5,446,912號所述之暫存器別名表(RAT;Register Alias Table)、重排序緩衝器(ROB;Reorder Buffer)以及引退暫存器檔案(retirement register file)的使用;如美國專利第5,207,132號中所述的多個映射及暫存器池的使用)等。除非另以明定,詞彙暫存器架構、暫存器檔案以及暫存器指的是對軟體/程式設計者以及指令以之明定暫存器的方式為可見的該者。在特定性(specificity)為期望的時,將使用形容詞邏輯的、架構的或軟體可見的來指示在暫存器架構中的暫存器/檔案,同時將使用不同的形容詞來在給定微架構中指明暫存器(例如,實體暫存器、重排序緩衝器、引退暫存器、暫存器池)。
指令集包括一或多個指令格式。給定的指令格式定義各種欄位(若干個位元、位元之位置)用以明定用以進行的運算和運算要用以在其上進行的運算元,以及其它者。給定的指令係使用給定指令格式來表述,並且明定運算和運算元。指令流為指令之特定序列,其中在序列中
的各個指令為在指令格式中的指令之發生。
科學的、金融的、自動向量化的一般目的、RMS(辨識、探勘及合成)/視覺及多媒體應用(例如,2D/3D圖形、影像處理、視訊壓縮/解壓縮、語音辨識演算法以及音訊操控)常需要用以在大數目的資料項目上進行的相同運算(稱為「資料平行(data parallelism)」)。單一指令多重資料(SIMD;Single Instruction Multiple Data)指的是導致處理器在多個資料項目上進行相同運算的指令之類型。SIMD技術特別合適於能邏輯地將在暫存器中的位元分成若干個固定尺寸的資料元件(data element)的處理器,其各者代表分開的值。例如,在64位元暫存器中的位元可被明定為來源運算元,用以在如四個分開的16位元資料元件上運算,其各者代表分開的16位元值。如另一範例,在256位元暫存器中的位元可被明定為來源運算元,用以運算在如四個分開的64位元緊縮資料元件(四倍字(Q)大小資料元件)、八個分開的32位元緊縮資料元件(雙倍(D)大小資料元件)、十六個分開的16位元緊縮資料元件(字組(W)大小資料元件)或三十二個分開的8位元資料元件(位元組(B)大小資料元件)。此類型的資料稱為緊縮資料類型或向量資料類型,並且此資料類型的運算元稱為緊縮資料運算元或向量運算元。換言之,緊縮資料項目或向量指的是緊縮資料元件之序列,並且緊縮資料運算元或向量運算元為SIMD指令之來源或目的地運算元(亦已知為緊縮資料指令或向量指令)。
藉範例的方式,一種類型的SIMD指令明定用以在以垂直方式在兩個來源向量運算元上進行的單一向量運算來產生相同大小的目的地向量運算元(亦稱為結果向量運算元(result vector operand)),其具有相同數目的資料元件,並且在相同的資料元件次序上。在來源向量運算元中的資料元件被稱為來源資料元件,同時在目的地向量運算元中的資料元件稱為目的地或結果資料元件。這些來源向量運算元為相同大小的且包含相同寬度的資料元件,因而他們包含相同數目的資料元件。在該兩個來源向量運算元中於相同位元位置中的來源資料元件形成成對的資料元件(亦稱為對應的資料元件;亦即,各個來源運算元的資料元件位置0中的資料元件對應,各個來源運算元的資料元件位置1中的資料元件對應等等)。由SIMD指令明定的運算係在該些對來源資料元件之各者上分開地執行,用以產生匹配數目的結果資料元件,因而來源資料元件之各對具有對應的結果資料元件。由於該運算為垂直的且該結果向量運算元為相同大小、具有相同數目的資料元件以及結果資料元件以與來源向量運算元相同的資料元件次序來儲存,故結果資料元件在與在來源向量運算元中他們的對應的來源資料元件之對相同的結果向量運算元之位元位置。在對此示範性類型的SIMD指令的倍增中,有著各種不同其它類型的SIMD指令(例如,其具有僅一或具有多於兩個來源向量運算元;其以水平方式來運算;其產生不同大小的結果向量運算元、具有不同的資料元件之大小,及/或
其具有不同資料元件次序)。應了解的是,術語目的地向量運算元(或目的地運算元)被定義為進行由指令所明定之運算的直接結果,包括在一位置之目的地運算元之儲存(其為暫存器或在由指令明定的記憶體位址處)使得其可被另一個指令存取為來源運算元(藉由被另一個指令明定該相同位置)。
101:解碼電路
103:排程電路
105:暫存器
107:記憶體
109:執行電路
111:引退電路
201:來源
203:算術電路
205:目的地
301:來源
303:算術電路
305:目的地
307:遮罩
700:一般性向量親和指令格式
705:指令模板
710:指令模板
712:指令模板
715:指令模板
717:指令模板
720:指令模板
725:指令模板
727:指令模板
730:指令模板
740:格式欄位
742:基底運算欄位
744:暫存器索引欄位
746:修正器欄位
750:擴充運算欄位
752:阿爾發欄位
752A:欄位
752A.1:欄位
752A.2:欄位
752B:收回提示欄位
752B.1:欄位
752B.2:欄位
752C:寫入遮罩控制欄位
754:欄位
754A:捨入控制欄位
754B:資料變換欄位
754C:資料操控欄位
756:浮點異常欄位
757A:欄位
757A.1:欄位
757A.2:欄位
757B:廣播欄位
758:捨入運算控制欄位
759A:捨入運算控制欄位
759B:向量長度欄位
760:比例欄位
762A:位移欄位
762B:位移因子欄位
764:資料元件寬度欄位
768:級別欄位
768A:欄位
768B:欄位
770:寫入遮罩欄位
772:立即值欄位
774:全運算碼欄位
800:特定向量親和指令格式
802:前置
805:欄位
810:欄位
815:運算碼映射欄位
820:欄位
825:前置編碼欄位
830:真實運算碼欄位
840:欄位
842:欄位
844:欄位
846:欄位
850:比例、索引、基底(SIB)位元組
852:欄位
854:欄位
856:欄位
900:暫存器架構
910:向量暫存器
915:寫入遮罩暫存器
925:通用暫存器
945:純量浮點堆疊暫存器檔案
950:MMX緊縮整數平面暫存器檔案
1000:處理器管線
1002:提取級
1004:長度解碼級
1006:解碼級
1008:分配級
1010:更名級
1012:排程級
1014:暫存器讀取/記憶體讀取級
1016:執行級
1018:寫回/記憶體寫入級
1022:執行處置級
1024:提交級
1030:前端單元
1032:分支預測單元
1034:指令快取單元
1036:轉譯後備緩衝器
1038:指令提取單元
1040:解碼單元
1050:執行引擎單元
1052:更名/分配器單元
1054:引退單元
1056:排程器
1058:實體暫存器檔案單元
1060:執行叢集
1062:執行單元
1064:記憶體存取單元
1070:記憶體單元
1072:資料後備緩衝器(TLB)單元
1074:資料快取單元
1076:2級快取單元
1090:核心
1100:指令解碼器
1102:晶粒上互連網路
1104:2級(L2)快取
1106:1級(L1)快取
1108:純量單元
1110:向量單元
1112:純量暫存器
1114:向量暫存器
1106A:1級(L1)資料快取
1122A:數值轉換單元
1122B:數值轉換單元
1120:拌和單元
1124:複製單元
1126:寫入遮罩暫存器
1128:16寬算術邏輯單元(ALU)
1200:處理器
1202A~N:核心
1204A~N:快取
1206:共用快取單元
1208:積體圖形邏輯
1210:系統代理單元
1212:環狀的互連單元
1214:積體記憶體控制器單元
1216:匯流排控制器單元
1300:系統
1310:處理器
1315:處理器
1320:控制器集線器
1340:記憶體
1345:共處理器
1350:輸入/輸出集線器
1360:輸入/輸出(I/O)裝置
1390:圖形記憶體控制器集線器
1395:連接
1400:系統
1414:輸入/輸出(I/O)裝置
1415:處理器
1416:第一匯流排
1418:匯流排橋
1420:第二匯流排
1422:鍵盤及/或滑鼠
1424:音訊輸入/輸出(I/O)
1427:通訊裝置
1428:儲存單元
1430:指令/碼及資料
1432:記憶體
1434:記憶體
1438:共處理器
1450:點對點互連
1452:點對點(P-P)介面
1454:點對點(P-P)介面
1470:處理器
1472:積體記憶體控制器邏輯
1476:點對點介面電路
1478:點對點介面電路
1480:處理器
1482:積體記憶體控制器邏輯
1486:點對點介面電路
1488:點對點介面電路
1490:晶片組
1492:高效能介面
1494:點對點介面電路
1496:介面
1498:點對點介面電路
1500:系統
1514:輸入/輸出(I/O)裝置
1515:舊有的輸入/輸出(I/O)裝置
1600:晶片上系統
1602:互連單元
1610:應用處理器
1620:共處理器
1630:靜態隨機存取記憶體(SRAM)單元
1632:直接記憶體存取(DMA)單元
1640:顯示單元
1702:高階語言
1704:x86編譯器
1706:x86二進位碼
1708:替代的指令集二進位碼
1710:替代的指令集二進位碼
1712:指令轉換器
1714:x86指令集核心
1716:x86指令集核心
本發明係藉由範例的方法來闡述而非以附加的圖式的圖來限制,其中相似的參考指的是類似的元件,並且其中:圖1闡述用以處理累乘指令的硬體之實施例;圖2闡述依據實施例執行累乘指令的範例;圖3闡述依據實施例執行累乘指令的範例;圖4闡述累乘指令之實施例;圖5闡述由用以處理累乘指令的處理器所進行的方法之實施例;圖6闡述由用以處理累乘指令的處理器所進行的方法之執行部分的實施例;圖7A~7B為依據本發明之實施例闡述一般性向量親和指令格式及其指令模板的方塊圖;圖8A~D為依據本發明之實施例闡述示範性特定向量親和指令格式的方塊圖;圖9為依據本發明之一實施例的暫存器架構之方塊
圖;圖10A為依據本發明之實施例闡述示範性循序管線和示範性暫存器更名、亂序派發/執行管線兩者的方塊圖;圖10B為依據本發明之實施例闡述用以被包括在處理器中的示範性循序架構核心和示範性暫存器更名、亂序派發/執行架構核心兩者的方塊圖;圖11A~B闡述更特定的示範性循序核心架構之方塊圖,其核心會為在晶片中幾個邏輯方塊之其中一者(包括相同類型及/或不同類型的其它核心);圖12為依據本發明之實施例可具有多於一個核心、可具有積體記憶體控制器以及可具有積體圖形的處理器1200之方塊圖;圖13~16為示範性電腦架構之方塊圖;以及圖17為依據本發明之實施例對比用以將在來源指令集中的二進位指令變換成在目標指令集中的二進位指令的軟體指令變換器的使用之方塊圖。
在下列發明說明中,提出了眾多的特定細節。然而,了解的是,本發明之實施例可不以這些特定細節來實踐。在其它實例中,周知的電路、結構及技術已被詳細地繪示以為了不去模糊本發明說明的了解。
在說明書中對「一實施例」、「實施例」、「範例實施例」等的參考指示所述的實施例可包括特定特
徵、結構或特性,但每一個實施例可不必然包括該特定特徵、結構或特性。再者,這類詞彙不必然指的是相同的實施例。進一步,當特定特徵、結構或特性關連於實施例來說明時,要提出的是,影響與其它實施例關連的這類特徵、結構或特性是否被明白的說明是在於本領域具有通常知識者的知識內。
累乘為給定序列之部分乘積的序列。例如,序列{a,b,c,...}之累乘為a*b、a*b*c等。對於其中目前迭代之值相依於先前迭代的迴圈,有效的水平累和及乘能潛在地允許有益的向量化,儘管迴圈帶有相依性。如簡單的範例,考慮下列迴圈:int v=0;for(int i=0;i<8;++i){a[i]=v+fun(i);v=a[i];}
其中fun(i)代表某個可向量化的函數,用以基於迴圈索引(loop index)來計算值。在此範例中,用於由i進行索引的a之值相依於在先前迭代中創建使有效向量化困難的相依性的值。
此問題之更實際的範例發生在用於決策樹推導(induction of decision tree)之機器學習演算法。此決策樹演算法針對最佳分類輸出資料的特徵遞迴地搜尋分割點(split point)。例如,串流視訊服務可預測唯若在年紀輕於13歲下一者將享受電影。在訓練過程中,評估用於此特徵
(例如,年紀)的各個分割點(對於N個記錄至多N-1個分割點)。對於各個分割點,某個度量(例如,基於夏儂熵(Shannon entropy)、GINI等的資訊增益)係基於如何分割輸出類別來計算(例如<25歲、43%享受此電影)。為了有效地評估許多可能的分割點,各個特徵由值來排序(sort)。在經排序的資料之上的迴圈允許在分割度量中使用的類別計數之快速的更新,但亦導入多個迴圈承載相依性(loop-carried dependency)。下面繪示在NU-Minebench 2.0中從ScalParC決策樹演算法傾聽GINI計算的代碼。在列表中,j將用於該記錄的類別標籤編入索引(index)。存在有對於Cabove、Cbelow、split_above以及split_below的迴圈相依性。
於此所詳述者為使用累乘(「cumprod」)指令的實施例設備、系統及方法,其當由硬體處理器執行時,引起累乘對於緊縮資料來源運算元之各個資料元件位置來計算並且儲存於緊縮資料目的地運算元之對應的資料元件位置中。
圖1闡述用以處理累乘(cumprod)指令的硬體之實施例。闡述的硬體典型地為部分的硬體處理器或像是部分的中央處理單元、加速器等的核心。
累乘(cumprod)指令係由解碼電路101所接收。例如,解碼電路101從提取邏輯/電路接收此資訊。累乘(cumprod)指令包括用於來源運算元的欄位(例如,緊縮資料暫存器(有時稱向量暫存器)或記憶體位置)和目的地運算
元(例如,緊縮資料暫存器(有時稱向量暫存器)或記憶體位置)。指令格式之更詳細的實施例將在之後詳述。
解碼電路101將累乘(cumprod)指令解碼成一或多個運算。在一些實施例中,此解碼包括產生複數個微運算,用以由執行電路(像是執行電路109)所進行。解碼電路101亦解碼指令前置(instruction prefix)。
在一些實施例中,暫存器更名、暫存器配置及/或排程電路103提供用於下列一或多者的功能特性:1)將邏輯運算元值更名至實體運算元值(例如,在一些實施例中的暫存器別名表),2)將狀態位元和旗標配置到解碼指令,及/或3)針對出於指令池的執行電路上的執行排程解碼指令(例如,在一些實施例中使用保留站(reservation station))。
暫存器(暫存器檔案)105和記憶體107將資料儲存為cumprod指令的運算元,用以在執行電路109上由其運算。示範性暫存器類型包括緊縮資料暫存器、通用暫存器和浮點暫存器。如於此所詳述的,暫存器105亦可包括寫入遮罩暫存器。
執行電路109執行解碼cumprod指令的運算元,引起累乘對於緊縮資料來源運算元之各個資料元件位置來計算並且儲存於緊縮資料目的地運算元之對應的資料元件位置中。
在一些實施例中,引退電路111架構地提交結果(例如,將目的地暫存器提交到暫存器105中)並且將指
令引退。
圖2闡述依據實施例執行累乘指令的範例。此範例並非意味者限制。例如,在此範例使用小在前排列法(little endian format)的同時,於此的技術允許大在前排列法(big endian format)執行。
典型地,用以萃取的緊縮資料元件之數目及其大小取決於指令編碼(資料元件大小)。如此,不同數目的緊縮資料元件,像是2、4、8、16、32或64,可在緊縮資料來源中。緊縮資料目的地暫存器大小包括64位元、128位元、256位元及512位元。
在此範例中,來源201(例如,緊縮資料暫存器或記憶體位置)包括四個緊縮資料元件。最低有效資料元件位置儲存「2」為其值而最高有效資料元件位置儲存「10」為其值。這些值顯示為十進位,然而,他們典型地儲存為二進位或十六進位值。
算術電路203(在說明中稱為「MUL電路」以強調正進行乘法),像是算術邏輯單元,係用以進行乘法。特別是,來自來源201之各個資料元件位置的值對先前資料元件位置之值的所有者作乘法。例如,在最低中為有效資料元件位置,當沒有先前資料元件位置時,不需要乘法。然而,對於第二最低有效資料元件位置,該位置的值(在此範例中為1)對先於其的資料元件位置中儲存的值作乘法(在此範例中,2對1作乘法)。在一些實施例中,獨立的算術電路被使用於乘法。在其它實施例中,相同的算
術電路被使用於乘法。
各個乘法之結果(或在最低有效資料元件位置沒有乘法的情形中)係儲存於在目的地205中對應的資料元件位置(例如,緊縮資料暫存器或記憶體位置)。
圖3闡述依據實施例執行累乘指令的範例。此範例並非意味者限制。例如,在此範例使用小在前排列法(little endian format)的同時,於此的技術允許大在前排列法(big endian format)執行。
典型地,用以萃取的緊縮資料元件之數目及其大小取決於指令編碼(資料元件大小)。如此,不同數目的緊縮資料元件,像是2、4、8、16、32或64,可在緊縮資料來源中。緊縮資料目的地暫存器大小包括64位元、128位元、256位元及512位元。
在此範例中,來源301(例如,緊縮資料暫存器或記憶體位置)包括四個緊縮資料元件。最低有效位元資料元件位置儲存「2」為其值而最高有效資料元件位置儲存「10」為其值。這些值顯示為十進位,然而,他們典型地儲存為二進位或十六進位值。
算術電路303(在說明中稱為「MUL電路」以強調正進行乘法),像是算術邏輯單元,係用以進行乘法。特別是,來自來源301之各個資料元件位置的值對先前資料元件位置之值的所有者作乘法。例如,在最低中為有效資料元件位置,當沒有先前資料元件位置時,不需要乘法。然而,對於第二最低有效資料元件位置,該位置的
值(在此範例中為1)對先於其的資料元件位置中儲存的值作乘法(在此範例中,2對1作乘法)。在一些實施例中,獨立的算術電路被使用於乘法。在其它實施例中,相同的算術電路被使用於乘法。
各個乘法之結果(或在最低有效資料元件位置沒有乘法的情形中)係依據遮罩307之值(像是於此詳述的寫入遮罩暫存器)儲存於在目的地305中對應的資料元件位置(例如,緊縮資料暫存器或記憶體位置)。例如,當遮罩307之對應的資料元件位置為「1」時,則接著結果被寫到目的地中。當遮罩307的對應的資料元件位置為「0」時,則接著結果未寫到目的地中。當然,傳統使用「0」作為使用作成寫入的指令。
用於累乘(cumprod)指令的格式(包括欄位)之實施例為cumprod{B/W/D/Q}{k}DST/SRC。在一些實施例中,cumprod{B/W/D/Q}為指令之運算碼(opcode)。B/W/D/Q指示來源/目的地之資料元件大小為位元組、字、雙字以及四倍字。DST/SRC為緊縮資料來源和目的地暫存器。K為寫入遮罩,其如於此詳述在一些實施例中使用。
用於累乘(cumprod)指令的格式(包括欄位)之另一實施例為cumprod{B/W/D/Q}{k}DST、SRC。在一些實施例中,cumprod{B/W/D/Q}為指令之運算碼(opcodc)。B/W/D/Q指示來源/目的地之資料元件大小為位元組、字、雙字以及四倍字。DST為緊縮資料目的地暫存器且
SRC為緊縮資料來源暫存器。K為寫入遮罩,其如於此詳述在一些實施例中使用。
用於累乘(cumprod)指令的格式(包括欄位)之另一實施例為cumprod{B/W/D/Q}{k}DST、SRCMEM。在一些實施例中,cumprod{B/W/D/Q}為指令之運算碼(opcode)。B/W/D/Q指示來源/目的地之資料元件大小為位元組、字、雙字以及四倍字。DTS為緊縮資料目的地暫存器且SRCMEM為來源記憶體位置。K為寫入遮罩,其如於此詳述在一些實施例中使用。
用於累乘(cumprod)指令的格式(包括欄位)之另一實施例為cumprod{B/W/D/Q}{k}DSTMEM、SRCMEM。在一些實施例中,cumprod{B/W/D/Q}為指令之運算碼。B/W/D/Q指示來源/目的地之資料元件大小為位元組、字、雙字以及四倍字。DTSMEM為目的地記憶體位置且SRCMEM為來源記憶體位置。K為寫入遮罩,其如於此詳述在一些實施例中使用。
用於累乘(cumprod)指令的格式(包括欄位)之另一實施例為cumprod{B/W/D/Q}{k}DSTMEM、SRC。在一些實施例中,cumprod{B/W/D/Q}為指令之運算碼。B/W/D/Q指示來源/目的地之資料元件大小為位元組、字、雙字以及四倍字。DTSMEM為目的地記憶體位置且SRC為來源緊縮資料暫存器。K為寫入遮罩,其如於此詳述在一些實施例中使用。
在實施例中,指令之編碼包括比例-索引-基底
(SIB;scale-index-base)類型記憶體定址運算元,其間接地識別在記憶體中多個編入索引的目的地位置。在一實施例中,SIB類型記憶體運算元包括編碼、識別基底(base)位址暫存器。基底位址暫存器之內容代表在記憶體中的基底位址,在記憶體中的特定目的地位置之位址從其來計算。例如,基底位址為在用於延伸向量指令之潛在目的地區域之區塊中第一位置之位址。在一實施例中,SIB類型記憶體運算元包括編碼、識別索引暫存器。索引暫存器之各個元件明定索引或偏移值,其可使用來從基底位址計算在潛在目的地位置之區域內分別目的地位置之位址。在一實施例中,SIB類型記憶體運算元包括編碼、明定比例因子(scaling factor),用以當計算分別的目的地位址時被應用到各個索引值。例如,若4的比例因子值在SIB類型記憶體運算元中編碥,則從索引暫存器之元件獲得的各個索引值乘以4而接著對基底位址作乘法以計算目的地位址。
在一實施例中,形式vm32{x,y,z}之SIB類型記憶體運算元使用SIB類型記憶體定址來識別記憶體運算元之向量陣列。在此範例中,記憶體位址之陣列係使用共同基底暫存器(common base register)、恆定比例因子以及包含個別元件的向量索引暫存器來明定,其之各者為32位元索引值。向量索引暫存器可為XMM暫存器(vm32x)、YMM暫存器(vm32y)或ZMM暫存器(vm32z)。在另一實施例中,形式vm64{x,y,z}之SIB類型記憶體運算元使用SIB類型記憶體定址來識別記憶體運算元之向量陣列。在
此範例中,記憶體位址之陣列係使用共同基底暫存器(common base register)、恆定比例因子以及包含個別元件的向量索引暫存器來明定,其之各者為64位元索引值。向量索引暫存器可為XMM暫存器(vm64x)、YMM暫存器(vm64y)或ZMM暫存器(vm64z)。
在一些實施例中,累乘(cumprod)指令包括寫入遮罩暫存器運算元。寫入遮罩係使用來有條件地控制每元件運算(per-element operation)且更新結果。取決於實行,寫入遮罩使用併入或歸零遮蔽(zeroing masking)。以述詞(寫入遮罩(writemask)、寫入的遮罩(write mask)或k暫存器)運算元編碼的指令使用該運算元來有條件地控制每元件計算的運算且更新結果至目的地運算元。述詞運算元(predicate operand)已知為運算遮罩(opmask)(寫入遮罩)暫存器。運算遮罩為一組大小為MAX_KL(64位元)的8架構暫存器。要注意的是,此組8架構暫存器,僅k1到k7能被定址為述詞運算元。k0能被使用為正規的來源或目的地,但不能被編碼為述詞運算元。亦要注意的是,述詞運算元能被使用來對於具有記憶體運算元(來源或目的地)的一些指令致能記憶體錯誤抑制(memory fault-suppression)。作為述詞運算元,運算遮罩暫存器包含一位元以對向量暫存器之各個資料元件操縱運算/更新。一般而言,運算遮罩能支援具有下列元件大小的指令:單精度浮點(float32)、整數雙字(int32)、雙倍精度浮點(float64)、整數四倍字(int64)。運算遮罩暫存器之長度(MAX_KL)足以處置具有
每元件一位元的至多64個元件,亦即64位元。對於給定的向量長度,各個指令僅存取基於其資料類型而被需要的最低有效遮罩位元之數目。運算遮罩暫存器在每元件粒度上影響指令。所以,各個資料元件之任何數值或非數值運算和對目的地運算元之立即值結果的每元件更新被預測於運算遮罩暫存器之對應的位元上。在大多數的實施例中,作為述詞運算元的運算遮罩遵守下列性質:1)若未設定對應的運算遮罩位元,則對於一元件不進行指令的運算(此暗示沒有例外或違反能由在屏蔽的元件上的運算造成,沒有例外旗標被更新為屏蔽運算之結果);2)若未設定對應的寫入遮罩位元,則目的地元件不以運算之結果來更新。反之,必需保存目的地元件值(併入遮罩)或是其必需被清零(zero out)(歸零遮罩);3)對於具有記憶體運算元的一些指令,針對具有0之遮罩位元的元件,抑制記憶體錯誤。要注意的是,此特徵提供了多方面的建構,用以當遮罩在效果上對於向量暫存器目的地提供併入行為時實行控制流程預測。作為替代,遮蔽能被使用於歸零來取代併入,使得屏蔽元件以0來更新取代保留舊的值。提供歸零行為以在舊的值上移除隱含相依性(implicit dependency)(當其不被需要時)。
圖4闡述累乘(cumprod)指令之實施例,包括用於運算碼401、目的地運算元403、來源運算元405(當需要時)以及在一些實施例中的寫入遮罩運算元407的欄位。
圖5闡述由用以處理累乘(cumprod)指令的處理
器所進行的方法之實施例。
在501處,提取指令。例如,提取累乘(cumprod)指令。累乘(cumprod)指令包括用於運算碼和緊縮資料來源及目的地運算元的欄位。在一些實施例中,累乘(cumprod)指令包括用於寫入遮罩運算元的欄位。在一些實施例中,指令係從指令快取來提取。
提取指令在503處解碼。例如,經提取的累乘(cumprod)指令係由像是於此詳述的解碼電路所解碼。在一些實施例中,指令被解碼成一或多個微運算(micro-operation)。
與解碼的指令之來源運算元關聯的資料係在505處檢索。例如,從記憶體相連的元件在來源位址處開始被存取或來源及/或目的地緊縮資料暫存器被存取。
在507處,解碼的指令係由像是於此詳述的執行電路(硬體)執行。對於累乘(cumprod)指令,針對緊縮的資料來源運算元之各個資料元件位置,執行將對在該資料元件位置中儲存的值、在緊縮資料來源運算元之先前資料元件位置中儲存的所有值作乘法,並且將乘法的結果儲存到緊縮資料目的地運算元之對應的資料元件位置中。在一些實施例中,各個結果之儲存係取決於在寫入遮罩中對應位置處的寫入遮罩值。取決於實施例,可連續地或並行地完成乘法。
在一些實施例中,指令在509處提交或引退。
圖6闡述由用以處理累乘(cumprod)指令的處理
器所進行的方法之執行部分的實施例。
在601處,來源運算元之第一資料元件位置的值儲存在對應於來源運算元之第一資料元件位置的資料元件位置處的目的地運算元中。例如,來自來源運算元(像是緊縮資料暫存器或記憶體位置)之最低有效資料元件位置的值被儲存到目的地運算元(像是緊縮資料暫存器或記憶體位置)之最低有效資料元件位置。如「2」從來源201之最低有效資料元件位置被儲存到目的地205中之圖2中所繪示的此之範例。
在603,來自來源之第一資料元件位置的值係對來自緊臨且大於來源之第一資料元件位置的來源之第二(後續)資料元件位置的值作乘法。例如,來源之下一個最低有效資料元件的值係對來源之最低有效資料元件位置之值作乘法。如「2」對來自來源201的「1」作乘法之圖2中所繪示的此之範例。
儲存603之乘法的結果並且被儲存到在對應於較大資料元件位置205的資料元件位置處的目的地中。如「2」對來自來源201的「1」作乘法且儲存為「3」進入到對應於來源之下一個最低有效資料元件的目的地之資料元件位置中之在圖2中所繪示的此之範例。在一些實施例中,此儲存係受到如較早詳述的寫入遮罩。
在607作成在來源中所有資料元件位置是否已被評估(已受到乘法,若需要的話)之判定。
當資料元件位置之所有已被評估,則接著已
完成執行。在609,當並非資料元件位置之所有已被評估時,來自603之乘法的值係對來自緊臨且大於603之後續資料元件位置的來源之下一個資料元件位置的值作乘法。
儲存609之乘法的結果並且被儲存到在對應於較大資料元件位置的資料元件位置處的目的地中。在一些實施例中,此儲存係受到如較早詳述的寫入遮罩。在607作成在來源中所有資料元件位置是否已被評估(已受到乘法,若需要的話)之判定。
下面的圖詳述用以實行上述之實施例之示範性架構及系統。在一些實施例中,上面說明的一或多個硬體組件及/或指令係如下面詳述的仿真或實行為軟體模組。
體現上面詳述的指令之實施例,可在「一般性向量親和指令格式」中體現,其係詳述於下。在其它實施例中,並未利用這樣的格式而使用另一種指令格式,然而,下面寫入遮罩暫存器之說明,各種變換(拌和(swizzle)、廣播等)、定址等係一般可應用至上述指令之實施例的說明。此外,下面詳述示範性系統、架構以及管線。上述指令之實施例可在這樣的系統、架構以及管線上執行,但不限於該些詳述者。
指令集可包括一或多個指令格式。給定的指令格式可定義各種欄位(例如,若干個位元、位元之位置)用以明定用以進行的運算(例如,運算碼)和運算要用以在其上進行的運算元及/或其它資料欄位(例如,遮罩),以及
其它者。一些指令格式更透過指令模板(或子格式(subformat))之定義來劃分。例如,給定的指令格式之指令模板可被定義以具有指令格式的欄位之不同的子集(所包括的欄位典型地在同樣的次序中,但至少一些具有不同位元位置,因為包括有較少的欄位)及/或被定義以具有不同解譯之給定的欄位。因此,ISA之各個指令係使用給定指令格式來表達(並且若定義的話,在指令格式之指令模板之給定者中)並且包括用於明定運算及運算元的欄位。例如,示範性ADD指令具有特定運算碼和包括運算欄位的指令格式,以指明運算碼及運算元欄位用以選擇運算元(來源1/目的地以及來源2);並且在指令串流中此ADD指令之發生將在選擇特定運算元的運算元欄位中將具有特定內容。稱為先進向量延伸(AVX;Advanced Vector Extension)(AVX1和AVX2)及使用向量延伸(VEX;ector Extension)譯碼方案的一組SIMD延伸已被釋出及/或公開(例如,請見2014年9月的英特爾(Intel®)64及IA-32架構軟體開發者的手冊,以及請見2014年10月的英特爾先進向量延伸程式參考)。
示範性指令格式
於此說明的指令之實施例可以不用的格式來體現。此外,下面詳述示範性系統、架構以及管線。指令之實施例可在這樣的系統、架構以及管線上執行,但不限於該些詳述者。
一般性向量親和指令格式
向量親和指令格式為指令格式,其合適於向量指令(例如,具有特定於向量運算的某些欄位)。在說明在其中向量及純量運算兩者係透過向量親和指令格式支援的實施例的同時,替代的實施例僅使用向量運算向量親和指令格式。
圖7A~7B為依據本發明之實施例闡述一般性向量親和指令格式及其指令模板的方塊圖。圖7A為依據本發明之實施例闡述一般性向量親和指令格式及其類別A(class A)指令模板的方塊圖;同時圖7B為依據本發明之實施例闡述一般性向量親和指令格式及其類別B(class B)指令模板的方塊圖。具體而言,一般性向量親和指令格式700,類別A及類別B指令模板係針對其來定義,其之兩者沒有包括記憶體存取705指令模板和包括記憶體存取720指令模板。在向量親和指令格式之內文中的術語一般性(generic)指的是指令格式未被綁定到任何特定的指令集。
在當將說明本發明之實施例,其中向量親和指令格式支援下列: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位元組)資料元件寬度)。
在圖7A中類別A指令模板包括:1)在沒有記憶體存取705指令模板內,有繪示著沒有記憶體存取、全捨入控制類型運算(full round control type operation)710指令模板,和沒有記憶體存取、資料變換類型運算715指令模板;以及2)在記憶體存取720指令模板內,有繪示著記憶體存取、時序725指令模板,和記憶體存取、非時序730指令模板。在圖7B中類別B指令模板包括:1)在沒有記憶體存取705指令模板內,有繪示著沒有記憶體存取、寫入遮罩控制、部分捨入控制類型運算(partial round control type operation)712指令模板,和沒有記憶體存取、寫入遮罩控制、vsize類型運算717指令模板;以及2)在記憶體存取720指令模板內,有繪示著記憶體存取、寫入遮罩控制727指令模板。
一般性向量親和指令格式700包括以在圖7A~7B中闡述的次序列示於下方的下列欄位。
格式欄位740-在此欄位中的特定值(指令格式
識別符值)獨一地識別向量親和指令格式,因而發生在向量親和指令格式中的指令在指令串流中。如此,在不需要僅具有一般性向量親和指令格式的指令集的含意上此欄位是可選的。
基底運算欄位742-其內容判別不同基底運算。
暫存器索引欄位744-其內容直接或透過位址產生指明來源和目的地運算元之位置,他們是否在暫存器中或在記憶體中。這些包括足夠數目的位元,用以從PxQ(例如,32x512、16x128、32x1024、64x1024)暫存器檔案選擇N個暫存器。在當於一實施例中N可至多三個來源和一個目的地暫存器的同時,替代的實施例可支援更多或更少來源和目的地暫存器(例如,可支援至多兩個來源其中該些來源之一者亦作動為目的地,可支援至多三個來源其中該些來源之一者亦作動為目的地,可支援至多兩個來源和一個目的地)。
修正器欄位746-其內容對在明定記憶體存取的一般性向量指令格式的指令與未進行之該些者之發生進行判別;亦即,在沒有記憶體存取705指令模板(746A)與記憶體存取720指令模板之間。記憶體存取對記憶體階層的讀取及/或寫入的運算(在一些情形中使用在暫存器中的值明定來源及/或目的地位址),同時非記憶體位址運算則未進行(例如,來源和目的地為暫存器)。在當於一實施例中此欄位亦在用以進行記憶體位址計算的三個不同方式之
間選擇的同時,替代的實施例可支援更多、更少或不同的方式來進行記憶體位址計算。
擴充運算欄位750-其內容判別除了基底運算以外各種不同運算中的何者用來被進行。此欄位為特定情境。在本發明之一實施例中,此欄位被分成類別欄位768、阿爾發欄位752、貝他欄位754。擴充運算欄位750允許運算之共同群組在單一指令中進行而非在2、3或4個指令中。
比例(scale)欄位760-其內容允許定比索引欄位的內容以用於記憶體位址產生(例如,用於使用2scale*index+base的位址產生)。
位移(displacement)欄位762A-其內容係使用為部分的記憶體位址產生(例如,用於使用2scale*index+base+displacement的位址產生)。
位移因子欄位762B(注意,位移欄位762A直接在位移因子欄位762B之上並置指示一者或其餘者被使用)-其內容被使用為部分的位址產生;其明定用以由記憶體存取(N)之大小來定比的位移因子-其中N為在記憶體存取中的位元組之數目(例如,用於使用2scale*index+base+scaled displacement(經定比的位移)的位址產生)。忽略冗餘低階位元,因而位移因子欄位的內容乘以記憶體運算元總大小(N)以為了產生用以在計算有效位址中使用的最終位移。N之值係基於全運算碼欄位774(於此之後說明)及資料操控欄位754C在運行時間由處理器硬體來決定。位移
欄位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之指令模板
在級別A之非記憶體存取705指令模板的情形中,阿爾發欄位752被解譯為RS欄位752A,其內容辨別不同擴充運算類型之何者要被進行(例如,捨入752A.1和資料變換752A.2係分別對於沒有記憶體存取、捨入類型運算710以及沒有記憶體存取、資料變換類型運算715指令模板來明定),同時貝他欄位754辨別明定的類型之運算的何者要被進行。在沒有記憶體存取705指令模板中,比例欄位760、位移欄位762A以及位移比例欄位762B未出現。
沒有記憶體存取指令模板-全捨入控制類型運算
在沒有記憶體存取全捨入控制類型運算710指令模板中,貝他欄位754被解譯為捨入控制欄位754A,其內容提供靜態捨入(static rounding)。在本發明之說明的實施例中捨入控制欄位754A包括抑制所有浮點異常(SAE;floating point exception)欄位756和捨入運算控制欄位758的同時,替代的實施例可支援將兩者的該些概念編碼成相同的欄位或僅具有這些概念/欄位之一者或其餘者(例如,可僅具有捨入運算控制欄位758)。
SAE欄位756-其內容辨別是否要禁能例外事件報告;當SAE欄位756的內容指示致能抑制時,給定的指令不會報告任何種類的浮點異常旗標且不會提出任何浮點異常處置器。
捨入運算控制欄位758-其內容辨別成群的捨入運算之何者要進行(例如,捨進(Round-up)、捨去(Round-down)、向零的方向捨入(Round-towards-zero)以及捨入至最接近值(Round-to-nearest))。因此,捨入運算控制欄位758允許在每指令基礎上改變捨入模式。在其中處理器包括控制暫存器以用於明定捨入模式的本發明之一實施例中,捨入運算控制欄位750的內容置換該暫存器值。
沒有記憶體存取指令模板-資料變換類型運算
在沒有記憶體存取資料變換類型運算715指令模板中,貝他欄位754被解譯為資料變換欄位754B,其內
容辨別若干個資料變換之何者要被進行(例如,沒有資料變換、拌和、廣播)。
在級別A之記憶體存取720指令模板的情形中,阿爾發欄位752被解譯為收回提示(eviction hint)欄位752B,其內容辨別收回提示之何者要被使用(在圖7A、時序752B.1和非時序752B.2分別針對記憶體存取、時序725指令模板,和記憶體存取、非時序730指令模板來明定),同時貝他欄位754被解譯為資料操控欄位754C,其內容辨別若干個資料操控運算(亦已知為基元(primitive))之何者要被進行(例如,沒有操控;廣播;來源之上轉換(up conversion);以及目的地之下轉換(down conversion))。記憶體存取720指令模板包括比例欄位760,且可選地包括位移欄位762A或位移比例欄位762B。
向量記憶體指令以轉換支援來進行自記憶體的向量載入和向量儲存到記憶體。如同正規的向量指令,向量記憶體指令將資料以資料元件方面的方式自記憶體傳輸/傳輸到記憶體,隨同實際傳輸的元件由選定為寫入遮罩的向量遮罩之內容所支配。
記憶體存取指令模板-時序
時序資料為傾向於夠快的再用以自快取受益的資料。亦即,然而,提示和不同的處理器可將其以不同的方式實行,包括完全地忽略提示。
記憶體存取指令模板-非時序
非時序資料為傾向於在第1階快取中夠快的再用以自快取受益且應對於收回給予優先權的資料。亦即,然而,提示和不同的處理器可將其以不同的方式實行,包括完全地忽略提示。
級別B之指令模板
在級別B之指令模板的情形中,阿爾發欄位752被解譯為寫入遮罩控制(Z)欄位752C,其內容辨別由寫入遮罩欄位770所控制的寫入遮蔽是否應正進行併入或歸零。
在級別B之非記憶體存取705指令模板的情形中,部分的貝他欄位754被解譯為RL欄位757A,其內容辨別不同擴充運算類型之何者要被進行(例如,捨入757A.1和向量長度(VSIZE)752A.2係分別對於沒有記憶體存取、寫入遮罩控制、部分捨入控制類型運算712指令模板,以及沒有記憶體存取、寫入遮罩控制、VSIZE類型運算717指令模板來明定),同時貝他欄位754之剩餘者辨別明定的類型之運算的何者要被進行。在沒有記憶體存取705指令模板中,比例欄位760、位移欄位762A以及位移比例欄位762B未出現。
在沒有記憶體存取中,寫入遮罩控制、部分捨入控制類型運算710指令模板、貝他欄位754之剩餘者被解譯為捨入運算欄位759A並且禁能例外事件報告(給定的
指令不報告任何種類的浮點例外旗標且不提出任何浮點例外處置器)。
捨入運算控制欄位759A-就如捨入運算控制欄位758一樣,其內容辨別成群的捨入運算之何者要進行(例如,捨進(Round-up)、捨去(Round-down)、向零的方向捨入(Round-towards-zero)以及捨入至最接近值(Round-to-nearest))。因此,捨入運算控制欄位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允許這些特徵在一般性向量親和指令格式中於每指令基礎上被明定。
寫入遮罩欄位和資料元件寬度欄位之結合創建類型指令(typed instruction),在其中他們允許遮罩基於不同資料元件寬度來應用。
在級別A和級別B內發現的各種指令模板有益於各種情況。在本發明之一實施例中,不同處理器或在處理器內的不同核心可支援僅級別A、僅級別B或兩級別。舉例而言,打算用於通用計算的高效能通用亂序核心可支援僅級別B,打算主要用於圖形及/或科學(處理量)計算的核心可支援僅級別A,以及打算用於兩者的核心可支援兩者(當然,具有從兩個級別的模板和指令之某種混合但不是來自兩個級別的所有模板和指令之核心是在本發明之範圍內。同樣,單一處理器可包括多個核心,其之所有支援相同級別或在其中不同核心支援不同的級別。舉例而言,在具有獨立圖形及通用核心的處理器中,打算主要用於圖形及/或科學計算的圖形核心之一者可僅支援級別A,而通用核心的一或多者可為具有打算用於支援僅級別B的通用計算的亂序執行及暫存器更名的高效能通用核心。不具有獨立圖形核心的另一處理器,可包括支援級別A和級別B兩者的一、多個通用循序或亂序核心。當然,來自一級別
的特徵亦可在本發明之不同實施例於其它級別中實行。以高階語言撰寫的程式會被譯(例如,即時編譯的(just in time compiled)或靜態編譯的(statically compiled))成各種不同可執行形式,包括:1)具有僅由用於執行的目標處理器所支援的級別之指令的形式;或2)具有使用所有級別之指令的不同結合來撰寫的替代常式(routine)且具有選擇常式以基於由目前正執行碼的處理器所支援的指令來執行的控制流程碼的形式。
示範性特定向量親和指令格式
圖8為依據本發明之實施例闡述示範性特定向量親和指令格式的方塊圖。圖8繪示特定向量親和指令格式800,該特定向量親和指令格式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])-由a EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)以及757BEX位元組1,位元[5]-B)所組成。EVEX.R、EVEX.X以及EVEX.B位元欄位提供與對應的VEX位元欄位相同的功能特性,並且使用1的補數形式來編碼,亦即ZMM0被編碼為1111B,ZMM15被編碼為
0000B。指令之其它欄位將暫存器索引的較低的三個位元編碼為在本領域已知的(rrr,xxx,and bbb),使得Rrrr、Xxxx以及Bbbb可藉由相加EVEX.R、EVEX.X以及EVEX.B來形成。
REX'欄位710-此為REX'欄位710之第一部分,並且為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來形成。
運算碼映射欄位815(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼隱含的帶頭運算碼位元(0F、0F 38或0F 3)。
資料元件寬度欄位764(EVEX位元組2,位元[7]-W)-由記號EVEX.W代表。EVEX.W係用以定義資料類型之粒度(大小)(32位元資料元件或64位元資料元件其一者)。
EVEX.vvvv820(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv之角色可包括下列:1)EVEX.vvvv
編碼第一來源暫存器運算元,其以倒置(1的補數)形式來明定且對於具有2或更多來源運算元的指令是有效的;2)EVEX.vvvv編碼目的地暫存器運算元,其以1的補數的形式來明定以用於某些向量移位;或3)EVEX.vvvv不編碼任何運算元,該欄位為保留的且應包含1111b。因此,EVEX.vvvv欄位820編碼以倒置(1的補數)形式儲存的第一來源暫存器說明符(specifier)之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之前被擴展成舊有的SIMD前置(所以PLA在不修改下能執行這些舊有指令的舊有及EVEX格式兩者)。雖然較新的指令可以將EVEX前置編碼欄位的內容直接使用為運算碼延伸,某些實施例以類似的方式擴展以用
於一致性(consistency)但允許用以由這些舊有SIMD前置所明定的不同意義。替代的實施例可再設計PLA來支援2位元SIMD前置編碼,因而不需要擴展。
阿爾發欄位752(EVEX位元組3,位元[7]-EH;亦已知為EVEX.EH,EVEX.rs,EVEX.RL,EVEX.寫入遮罩控制,以及EVEX.N;亦闡述為α)-如先前所闡述的,此欄位為內文特定。
貝他欄位754(EVEX位元組3,位元[6:4]-SSS,亦已知為EVEX.s2-0,EVEX.r2-0,EVEX.rr1,EVEX.LL0,EVEX.LLB;亦以βββ來闡述)-如先前所闡述的,此欄位為內文特定。
REX'欄位710-此為REX'欄位之剩餘,並且為EVEX.V'位元欄位(EVEX位元組3,位元[3]-V'),其可被使用來編碼延伸的32暫存器組之高16或低16之其一者。此位元以位元倒置格式來儲存。1的值被使用來編碼低16暫存器。換言之,V'VVVV係藉由結合EVEX.V'、EVEX.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)850-如先前所述,比例欄位752的內容係使用於記憶體位址產生。SIB.xxx854和SIB.bbb856-這些欄位之內容先前已被參照關於暫存器索引Xxxx和Bbbb。
位移欄位762A(位元組7-10)-當MOD欄位842包含10時,位元組7-10為位移欄位762A,並且其與舊有32位元位移(disp32)一樣的工作且在位元組粒度上工作。
位移因子欄位762B(位元組7)-當MOD欄位842包含01時,位元組7為位移因子欄位762B。此欄位之位置為與舊有x86指令集8位元位移(disp8)的相同的之者,其在位元組粒度上工作。由於disp8為正負號(sign)延伸,其能僅在-128和127位元組偏移之間定址;按照64位元組快取線,disp8使用能被設定至僅四個真正有用的值-128、-64、0以及64的8位元;由於常需要較大範圍;故使用disp32;
然而,disp32需要4個位元組。相對於disp8和disp32,位移因子欄位762B為disp8之再詮釋(reinterpretation);當使用位移因子欄位762B時,實際位移係由位移因子欄位的內容乘以記憶體運算元存取(N)的大小來決定。此類型的位移稱為disp8*N。此降低平均指令長度(使用於位移但具有大的多的範圍之單一位元組)。這樣的壓縮位移係基於有效位移為記憶體存取之粒度的倍數的假設,因而位址偏移之冗餘低階位元並不需要被編碼。換言之,位移因子欄位762B取代舊有x86指令集8位元位移。因此,位移因子欄位762B與x86指令集8位元位移相同方式來編碼(所以在ModRM/SIB編碼規則中沒有改變),僅具有例外的是disp8對disp8*N是超載的。換言之,在編碼規則或編碼長度中沒有改變,但僅在藉由硬體的位移值之解譯中有改變(其需要藉由記憶體運算元之大小來定比位移以獲得位元方面的位址偏移)。立即值欄位772如先前所述的運算。
全運算碼欄位
圖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(級別A768A);當其包含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之方塊圖。在闡述的實施例中,有32個向量暫存器910,其為512位元寬;這些暫存器參考為zmm0到zmm31。低16 zmm暫存器之低階256位元覆蓋在暫存器ymm0~16上。低16 zmm暫存器之低階128位元(ymm暫存器之低階128位元)覆蓋在暫存器xmm0~15上。如下表中闡述的,特定向量親和指令格式800在這些覆蓋的暫存器檔
案上運算。
換言之,向量長度欄位759B在最大長度和一或多個其它較短長度之間選擇,其中各個這類的長度為先前長度的一半長度;以及沒有向量長度欄位759B的指令模板在最大向量長度上運算。進一步,在一實施例中,特定向量親和指令格式800之級別B指令模板在緊縮或純量單/雙精度浮點資料和緊縮或純量整數資料上運算。純量運算為在zmm/ymm/xmm暫存器中最低階資料元件位置上進行的運算;取決於實施例,較高階資料元件位置為與他們之前在指令前相同的左側或歸零其一者。
寫入遮罩暫存器915-在闡述的實施例中,有8個寫入遮罩暫存器(k0到k7),各者在大小上為64位元。在選替的實施例中,寫入遮罩暫存器915在大小上為16位元。如先前所述,在本發明之一實施例中,向量遮罩暫存器k0不能被使用為寫入遮罩;當會正常指示k0的編碼被使
用於寫入遮罩時,其選擇0xFFFF之硬連線的寫入遮罩,有效地禁能對該指令的遮蔽。
通用暫存器925-在闡述的實施例中,有十六個64位元通用暫存器,其連同用以定址記憶體運算元的現存x86定址模式來使用。這些暫存器參考以名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15。
純量浮點堆疊暫存器檔案(x87堆疊)945,在其上別名以MMX緊縮整數平面暫存器檔案950-在闡述的實施例中,x87堆疊為8元件堆疊,用以使用x87指令集延伸在32/64/80位元浮點資料上進行純量浮點運算;同時MMX暫存器被使用來在64位元緊縮整數資料上進行運算,以及用以對於在MMX與XMM暫存器之間進行的一些運算來持定運算元。
本發明之替代的實施例可使用較寬或較窄的暫存器。此外,本發明之替代的實施例可使用更多、更少或不同的暫存器檔案及暫存器。
示範性核心架構、處理器以及電腦架構
處理器核心可以不同的方式、為了不同的目的且在不同的處理器中實行。舉例而言,這類核心的實行可包括:1)打算用於通用計算的通用循序核心;2)打算用於通用計算的高效能通用亂序核心;3)主要打算用於圖形及/或科學(處理量)計算的專用(special purpose)核心。不
同處理器之實行包括:1)包括打算用於通用計算的一或多個通用循序核心及/或打算用於通用計算的一或多個通用亂序核心的CPU;以及2)包括主要打算用於圖形及/或科學(處理量)的一或多個專用核心的共處理器(coprocessor)。這類不同的處理器導致不同電腦系統架構,其可包括: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,包括耦接至執行引擎單元1050的前端單元1030且兩者皆耦接至記憶體單元1070。核心1090可為精簡指令集計算(RISC;reduced instruction set computing)核心、複雜指令集計算(CISC;complex instruction set computing)核心、超長指令字(VLIW;very long instruction word)核心或混合或替代的核心類型。如又另一選項,核心1090可為專用核心、例如像是網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理器單元(GPGPU;general purpose computing graphics processing unit)核心、圖形核心或類似者。
前端單元1030包括耦接至指令快取單元1034的分支預測單元1032,其耦接至指令轉譯後備緩衝器(TLB;translation lookaside buffer)1036,該指令轉譯後備緩衝器1036耦接至指令提取單元1038,該指令提取單元1038耦接至解碼單元1040。解碼單元1040(或解碼器)可解碼指令,並且產生為輸出一或多個微運算、微碼進入點(micro-code entry point)、微指令、其它指令或其它控制信號,其自原始指令解碼、或其另以反映原始指令或衍生自原始指令。解碼單元1040可使用各種不同的機制來實
行。合適的機制之範例包括(但不限於)查找表、硬體實行、可編程邏輯陣列(PLA;programmable logic array)、微碼唯讀記憶體(ROM;read only memory)等。在一實施例中,核心1090包括微碼ROM或儲存用於某種巨集指令之微碼的其它媒體(例如,在解碼單元1040中或另以在前端單元1030內)。解碼單元1040耦接至在執行引擎單元1050中的更名/分配器單元1052。
執行引擎單元1050包括耦接至引退單元1054的更名/分配器單元1052和成組的一或多個排程器單元1056。排程器1056代表任何數目不同的排程器,包括保留站(reservations station)、中央指令窗等。排程器單元1056耦接至實體暫存器檔案單元1058。實體暫存器檔案單元1058之各者代表一或多個實體暫存器檔案、其之不同者儲存一或多個不同的資料類型,像是純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如作為要被執行之下一指令之位址的指令指標)等。在一實施例中,實體暫存器檔案單元1058包含向量暫存器檔案、寫入遮罩暫存器單元以及純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮罩暫存器以及通用暫存器。實體暫存器檔案單元1058由引退單元1054所重疊,用以闡述暫存器更名及亂序執行可以其實行的各種方式(例如,使用重排序緩衝器以及引退暫存器檔案;使用未來檔案、歷史緩衝器以及引退暫存器檔案;使用暫存器映射以及暫存器之池等)。引退單元1054和實體暫存器檔案單元
1058耦接至執行叢集1060。執行叢集1060包括成組的一或多個執行單元1062和成組的一或多個記憶體存取單元1064。執行單元1062可進行各種運算(例如,移位、加法、減法、乘法)以及各種類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。在當一些實施例可包括專屬於特定功能或成組的功能的若干個執行單元的同時,其它實施例可包括僅一執行單元或多個執行單元,其所有者進行所有功能。排程器單元1056、實體暫存器檔案單元1058以及執行叢集1060係顯示為可能的複數,因為某些實施例創建分開的管線以用於某類型的資料/運算(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線及/或記憶體存取管線,其各者具有他們自己的排程器單元、實體暫存器檔案單元及/或執行叢集-並且在分開的記憶體存取管線的情形後,實行某些實施例,其中僅此管線之執行叢集具有記憶體存取單元1064)。亦應了解的是,在當使用分開的管線下,這些管線之一或多者可為亂序派發/執行且其餘者為循序的。
該組記憶體存取單元1064耦接至記憶體單元1070,其包括資料TLB單元1072,該資料TLB單元1072耦接至資料快取單元1074,該資料快取單元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進行分配級1008和更名級1010;4)排程器單元1056進行排程級1012;5)實體暫存器檔案單元1058和記憶體單元1070進行暫存器讀取/記憶體讀取級1014;執行叢集1060進行執行級1016;6)記憶體單元1070和實體暫存器檔案單元1058進行寫回/記憶體寫入級1018;7)各種單元可被包含在例外處置級1022;以及8)引退單元1054和實體暫存器檔案單元1058進行提交級1024。
核心1090可支援一或多個指令集(例如,x86指令集(具有一些延伸,其已被添加以較新的版本);加州桑尼維爾的MIPS技術之MIPS指令集;加州桑尼維爾的ARM控股之ARM指令集(具有可選額外的延伸,像是NEON),包括於此說明的指令。在一實施例中,核心1090包括用以支援緊縮資料指令集延伸(例如,AVX1、AVX2)的邏輯,從而允許由許多多媒體應用所使用的運算以使用緊縮資料來進行。
應了解,核心可支援多緒執行(multithreading)(執行二或多個平行組的運算或執行緒),並且可以各式個樣的方式來如此做,包括時間分片多緒執
行、同時多緒執行(其中單一實體核心提供邏輯核心以用於實體核心同時多緒執行的執行緒之各者),或其結合(例如,時間分片提取及解碼和其之後同時多緒執行,像是在英特爾超執行緒技術(Intel® Hyperthreading technology)中)。
在當暫存器更名在亂序執行之內文中說明的同時,應了解暫存器更名可在循序架構中使用。在當闡述的處理器之實施例亦包括分開的指令及資料快取單元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快取,其被分成分開的區域子集,每處理器核心一個。各個處理器核心具有到其自己的L2快取1104之區域子集的直接存取路徑。由處理器核心的資料讀取儲存在其L2快取子集1104中且能被快速地存取,與其它處理器核心存取他們自己的區域L2快取子集併行。由處理器核心的資料寫入儲存在其自己的L2快取子集1104且若需要的話,從其它子集清除(flush)。環狀網路確保共用的資料之連貫性(coherency)。環狀網路為雙向以允許像是處理器核心、L2快取及其它邏輯方塊的代理器在晶片內彼此通訊。各個環狀資料路徑為每方向1012位元寬。
圖11B為依據本發明之實施例在圖11A中之部分的處理器核心之展開圖。圖11B包括L1資料快取1106A、部分的L1快取1104以及關於向量單元1110和向量
暫存器1114的更多細節。具體而言,向量單元1110為16寬的向量處理單元(VPU;vector processing unit)(請見16寬ALU 1128),其執行整數、單精度浮點以及雙精度浮點指令之一或多者。VPU支援以拌和單元1120拌和暫存器輸入、以數值轉換單元1122A~B數值轉換以及在記憶體輸入上以複製單元1124複製。寫入遮罩暫存器1126允許預測導致向量寫入。
圖12為依據本發明之實施例可具有多於一個核心、可具有積體記憶體控制器以及可具有積體圖形的處理器1200之方塊圖。在圖12中的實線框闡述具有單一核心1202A的處理器1200、系統代理器1210、成組的一或多個匯流排控制器單元1216,同時可選添加的虛線框闡述具有多個核心1202A~N的替代的處理器1200、在系統代理單元1210中成組的一或多個積體記憶體控制器單元1214以及專用邏輯1208。
因此,處理器1200之不同的實行可包括:1)具有作為積體圖形及/或科學(處理量)邏輯(其可包括一或多個核心)的專用邏輯1208的CPU,以及作為一或多個通用核心(例如,通用循序核心、通用亂序核心、兩者的結合)的核心1202A~N;2)具有為打算主要用於圖形及/或科學(處理量)的大數目的專用核心之核心1202A~N的共處理器;以及3)具有為大數目的通用循序核心的核心1202A~N的共處理器。因此,處理器1200可為通用處理器、共處理器或專用處理器,例如像是網路或通訊處理器、壓縮引
擎、圖形處理器、GPGPU(通用圖形處理單元)、高處理量許多積體核心(MIC;many integrated core)共處理器(包括30或更多核心)、嵌入式處理器或類似者。處理器可在一或多個晶片上實行。處理器1200可使用若干個處理技術之任一者(例如像是,BiCMOS、CMOS或NMOS)而為基板之部分及/或可在一或多個基板上實行。
記憶體階層包括在核心內快取1204A~N之一或多個層級、一組或一或多個共用快取單元1206以及耦接至該組積體記憶體控制器單元1214的外部記憶體(未繪示)。該組共用快取單元1206可包括一或多個中級快取,像是2級(L2)、3級(L3)、4級(L4)或快取的其它層級、最終級快取(LLC;last level cache)及/或其結合。在於一實施例中基於環狀的互連單元1212將積體圖形邏輯1208、該組共用快取單元1206以及系統代理單元1210/積體記憶體控制器1214互連的同時,替代的實施例可使用任何數目已知的技術以用於互連這類單元。在一實施例中,連貫性係在一或多個快取單元1206與核心1202-A~N之間維持。
在一些實施例中,核心1202A~N之一或多者能夠多緒執行。系統代理器1210包括協調及運算核心1202A~N的該算組件。系統代理單元1210可例如包括功率控制單元(PCU;power control unit)和顯示單元。PCU可為或包括需要用於調節核心1202A~N及積體圖形邏輯1208之功率狀態的邏輯和組件。顯示單元係用於驅動一或多個外部連接的顯示器。
核心1202A~N按照架構指令集而言可為同質的或異質的,亦即,核心1202A~N之二或多者可能夠執行相同指令集,同時其它者可能夠執行僅該指令集或不同指令集的子集。
示範性電腦架構
圖13~16為示範性電腦架構之方塊圖。在膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程站(engineering workstation)、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、蜂巢式電話、可攜媒體播放器、手持裝置以及各種其它電子裝置領域中已知的其它系統及組態亦為合適的。一般而言,能夠包含於此揭示的處理器及/或其它執行邏輯龐大的各種系統或電子裝置一般為合適的。
現請參照圖13,依據本發明之一實施例繪示了系統1300的方塊圖。系統1300可包括一或多個處理器1310、1315,其耦接至控制器集線器1320。在一實施例中,控制器集線器1320包括圖形記憶體控制器集線器(GMCH;graphics memory controller hub)1390和輸入/輸出集線器(IOH;Input/Output Hub)1350(其可在分開的晶片上);GMCH 1390包括記憶體1340和共處理器1345所對其耦接的記憶體及圖形控制器;IOH 1350將輸入/輸出(I/O)裝置1360耦接至GMCH 1390。或者,記憶體及圖形控制器
之一或兩者被整合在處理器內(如於此所述的),記憶體1340及共處理器1345直接耦接至處理器1310,且控制器集線器1320與IOH 1350在單一晶片中。
額外的處理器1315之可選的性質係以虛線在圖13中標誌。各個處理器1310、1315可包括於此說明的處理核心之一或多者且可為處理器1200之某種版本。
記憶體1340可例如為動態隨機存取記憶體(DRAM;dynamic random access memory)、相變記憶體(PCM;phase change memory)或兩者的結合。對於至少一實施例,控制器集線器1320經由多點下傳匯流排(multi-drop bus)與處理器1310、1315通訊,該多點下傳匯流排諸如前端匯流排(FSB;frontside bus)、像是快速通道互連(QPI;QuickPath Interconnect)的點對點介面或類似的連接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;integrated memory controller)單元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可經由高效能介面1492可選地與共處理器1438交換資訊。在一實施例中,共處理器1438為專用處理器,例如像是高處理量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似者。
共用快取(未繪示)可被包括在處理器其一者中或在兩處理器外側,又經由P-P互連與處理器連接,使得若處理器被放到低功率模式中時,其一或兩處理器的區域快取資訊可儲存在共用快取中。
晶片組1490可經由介面1496耦接至第一匯流排1416。在一實施例中,第一匯流排1416可為周邊組件互連(PCI;Peripheral Component Interconnect)匯流排或像是快速PCI匯流排(PCI Express)或另一個第三代I/O互連匯流排的匯流排,雖然本發明的範圍不如此限制。
如在圖14中所繪示,各種I/O裝置1414可耦接至第一匯流排1416,連同將第一匯流排1416耦接至第二匯流排1420的匯流排橋1418。在一實施例中,一或多個額外的處理器1415,像是共處理器、高處理量MIC處理器、GPGPU的加速器(例如像是圖形加速器或數位信號處理(DSP單元)、場可編程閘陣列或任何其它處理器係耦接至第一匯流排1416。在一實施例中,第二匯流排1420可為低腳位數(LPC;low pin count)匯流排。在一實施例中,各種裝置可耦接至第二匯流排1420,例如包括鍵盤及/或滑
鼠1422、通訊裝置1427以及像是碟驅動或其它大量儲存裝置的儲存單元1428,其可包括指令/碼及資料1430。進一步,音訊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,其包括成組的一或多個核心1202A~N、快取1204A~N以及共用快取單元1206;系統代理單元1210;匯流排控制器單元1216;積體記憶體控制器單元1214;成組或一或多個共處理器1620,其可包括積體圖形邏輯、影像處理器、音訊處理器及視訊處理器;靜態專機存取記憶體(SRAM;
static random access memory)單元1630;直接記憶體存取(DMA;direct memory access)單元1632;以及用於耦接至一或多個外部顯示器的顯示單元1640。在一實施例中,共處理器1620包括專用處理器,例如像是網路或通訊處理器、壓縮引擎、GPGPU、高處理量MIC處理器、嵌入式處理器或類似者。
於此揭示的機制之實施例可以硬體、軟體、韌體或以這類實行方法之結合來實行。本發明之實施例可實行為在可編程系統上執行的電腦程式或程式碼,該可編程系統包含至少一處理器、儲存系統(包括揮發性和非揮發性記憶體及/或儲存元件)、至少一輸入裝置以及至少一輸出裝置。
程式碼,像是在圖14中闡述的碼1430,可應用到輸入指令以進行於此說明的功能且產生輸出資訊。輸出資訊可以已知的方式應用到一或多個輸出裝置。為了此應用的目的,處理系統包括具有處理器的任何系統,該處理器例如像是數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)或微處理器。
程式碼可以高階程序或物件導向程式語言來實行以與處理系統通訊。若需要,程式碼亦可以組合或機器語言來實行。事實上,於此所述的機制並不限於任何特定程式語言的範圍。在任何情形中,可編譯語言或解譯語言。
至少一實施例的一或多個態樣可由儲存在機
器可讀媒體上的代表性指令實行,其代表在處理器內的各種邏輯,其當由機器讀取時引起機器製造用以進行於此說明的技術之邏輯。這類代表,已知為「IP核心」,可儲存在有形、機器可讀媒體上且被提供到各種消費者或製造設施以載入到實際作成邏輯或處理器的製造機器。
這類機器可讀儲存媒體可包括(沒有限定)由機器或裝置製造或形成的物件之非暫態、有形配置,包括像是硬碟的儲存媒體,任何其它類型的碟片包括軟碟、光碟、光碟唯讀記憶體(CD-ROM;compact disk read-only memory)、可複寫光碟(CD-RW;compact disk rewritable)以及磁光碟,該配置包括半導體裝置,像是唯讀記憶體(ROM;read-only memory)的、隨機存取記憶體(RAM),隨機存取記憶體像是動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可編程唯讀記憶體(EPROM)、快閃記憶體、電可抹除可編程唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光卡或合適於儲存電子指令的任何其它類型的媒體。
據此,本發明之實施例亦包括非暫態、有形的機器可讀媒體,其包含指令或包含設計資料,像是硬體描述語言(HDL;Hardware Description Language),其界定於此說明的結構、電路、設備、處理器及/或系統特徵。這類的實施例亦可稱為程式產品。
仿真(包括二進位轉譯、碼變形等)
在一些情形中,指令轉換器可被使用來將指令從來源指令集轉換到目標指令集。例如,指令轉換器可轉譯(例如,使用靜態二進位轉譯、包括動態編譯的動態二進位轉譯)、變形、仿真或另以轉換指令到一或多個其它指令,用以由核心來處理。指令轉換器可以軟體、硬體、韌體或其結合來實行。指令轉換器可在處理器上、處理器外或部分在處理器上且部分在處理器外。
圖17為依據本發明之實施例對比用以將在來源指令集中的二進位指令變換成在目標指令集中的二進位指令的軟體指令變換器的使用之方塊圖。雖然指令轉換器可替代地以軟體、韌體、硬體或其各種結合來實行,在闡述的實施例中,指令轉換器為軟體指令轉換器。圖17繪示了在高階語言1702中的程式可使用x86編譯器1704來編譯,用以產生可由具有至少一x86指令集核心1716的處理器所原生地執行的x86二進位碼1706。具有至少一x86指令集核心1716的處理器代表能進行與具有至少一x86指令集核心的英特爾處理器實質相同功能的處理器,其係藉由相同地執行或另以處理(1)英特爾x86指令集核心之指令集的相當部分或(2)針對在具有至少一x86指令集核心的英特爾處理器上運行的應用或其它軟體之目標碼(object code)版本,用以達成與具有至少一x86指令集核心的英特爾處理器實質相同的結果。該x86編譯器1704代表可操作以產生x86二進位碼1706(例如,目標碼)的編譯器,其在有或沒有額外聯結處理下能在具有至少一x86指令集核心1716的
處理器上執行。同樣的,圖17繪示在高階語言1702中的程式可使用替代的指令集編譯器1708來編譯,以產生可由不具有至少一x86指令集核心1714的處理器原生地執行之替代的指令集二進位碼1710(例如,具有執行加州桑尼維爾之MIPS科技之MIPS指令集及/或執行加州桑尼維爾之ARM控股之ARM指令集的核心的處理器)。指令轉換器1712係用以將x86二進位碼1706轉換成可由不具有x86指令集核心1714的處理器原生地執行的碼。此轉換的碼並不傾向於與替代的指令集二進位碼1710相同,因為能夠進行此的指令轉換器是難以作成的;然而,轉換的碼將完成一般運算且由來自替代的指令集的指令組成。因此,指令轉換器1712代表軟體、韌體、硬體或其結合,而透過仿真、模擬或任何其它處理允許不具有x86指令集處理器或核心的處理器或其它電子裝置執行x86二進位碼1706。
Claims (18)
- 一種用於執行指令的設備,包含:解碼器電路,用以解碼單一指令,其中該指令用以包括至少運算碼、用於識別來源運算元的欄位以及用於識別目的地運算元的欄位;以及執行電路,用以根據該運算碼執行該解碼的指令,以針對該識別的來源運算元之各個資料元件位置,對在該資料元件位置中儲存的值與在該識別的來源運算元之先前資料元件位置中儲存的所有值作乘法,並且將該乘法的結果儲存到該目的地運算元之對應的資料元件位置中,其中該指令用以包括欄位以識別寫入遮罩運算元。
- 如申請專利範圍第1項的設備,其中該識別的來源運算元為一向量暫存器且該目的地運算元為一向量暫存器。
- 如申請專利範圍第2項的設備,其中單一向量暫存器被使用於該識別的來源及目的地運算元。
- 如申請專利範圍第1項的設備,其中該識別的來源運算元之該資料元件以小在前排列法來儲存。
- 如申請專利範圍第1項的設備,其中該識別的來源運算元之該資料元件以大在前排列法來儲存。
- 如申請專利範圍第1項的設備,其中該執行電路用以基於該識別的寫入遮罩運算元之值儲存該乘法的結果。
- 一種用於執行指令的方法,包含:解碼單一指令,其中該指令用以包括至少運算碼、用於識別來源運算元的欄位以及用於識別目的地運算元的欄位;以及根據該運算碼執行該解碼的指令,以針對該識別的來源運算元之各個資料元件位置,對在該資料元件位置中儲存的值與在該識別的來源運算元之先前資料元件位置中儲存的所有值作乘法,並且將該乘法的結果儲存到該目的地運算元之對應的資料元件位置中,其中該指令用以包括欄位以識別寫入遮罩運算元。
- 如申請專利範圍第7項的方法,其中該識別的來源運算元為一向量暫存器且該目的地運算元為一向量暫存器。
- 如申請專利範圍第8項的方法,其中單一向量暫存器被使用於該識別的來源及目的地運算元。
- 如申請專利範圍第7項的方法,其中該識別的來源運算元之該資料元件以小在前排列法來儲存。
- 如申請專利範圍第7項的方法,其中該識別的來源運算元之該資料元件以大在前排列法來儲存。
- 如申請專利範圍第7項的方法,其中該儲存係基於該識別的寫入遮罩運算元之值。
- 一種儲存單一指令的非暫態機器可讀媒體,其當處理時用以引起處理器進行一方法,該方法包含:解碼該單一指令,其中該指令用以包括至少運算碼、用於識別來源運算元的欄位以及用於識別目的地運算元的欄位;以及根據該運算碼執行該解碼的指令,以針對該識別的來源運算元之各個資料元件位置,對在該資料元件位置中儲存的值與在該識別的來源運算元之先前資料元件位置中儲存的所有值作乘法,並且將該乘法的結果儲存到該目的地運算元之對應的資料元件位置中,其中該指令用以包括欄位以識別寫入遮罩運算元。
- 如申請專利範圍第13項的非暫態機器可讀媒體,其中該識別的來源運算元為一向量暫存器且該目的地運算元為一向量暫存器。
- 如申請專利範圍第14項的非暫態機器可讀媒體,其中單一向量暫存器被使用於該識別的來源及目的地運算元。
- 如申請專利範圍第13項的非暫態機器可讀媒體,其中該識別的來源運算元之該資料元件以小在前排列法來儲存。
- 如申請專利範圍第13項的非暫態機器可讀媒體,其中該識別的來源運算元之該資料元件以大在前排列法來儲存。
- 如申請專利範圍第13項的非暫態機器可讀媒體,其中該儲存係基於該識別的寫入遮罩運算元的值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/201,392 | 2016-07-02 | ||
US15/201,392 US10089110B2 (en) | 2016-07-02 | 2016-07-02 | Systems, apparatuses, and methods for cumulative product |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201810020A TW201810020A (zh) | 2018-03-16 |
TWI817926B true TWI817926B (zh) | 2023-10-11 |
Family
ID=60806227
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106117443A TWI817926B (zh) | 2016-07-02 | 2017-05-25 | 用於執行指令的設備、方法及非暫態機器可讀媒體 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10089110B2 (zh) |
CN (1) | CN109328333B (zh) |
DE (1) | DE112017003351T5 (zh) |
TW (1) | TWI817926B (zh) |
WO (1) | WO2018009323A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2558955B (en) * | 2017-01-24 | 2020-12-23 | Advanced Risc Mach Ltd | An apparatus and method for generating and processing a trace stream indicative of execution of predicated vector memory access instructions |
US10769527B2 (en) * | 2018-12-11 | 2020-09-08 | Mipsology SAS | Accelerating artificial neural network computations by skipping input values |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050125647A1 (en) * | 2003-12-09 | 2005-06-09 | Arm Limited | Endianess compensation within a SIMD data processing system |
TW201344572A (zh) * | 2011-12-23 | 2013-11-01 | Intel Corp | 提供向量混合與置換功能的指令與邏輯 |
US20140006756A1 (en) * | 2012-06-29 | 2014-01-02 | Igor Ermolaev | Systems, Apparatuses, and Methods for Performing a Shuffle and Operation (Shuffle-Op) |
US9100184B2 (en) * | 2011-12-22 | 2015-08-04 | Intel Corporation | Instructions processors, methods, and systems to process BLAKE secure hashing algorithm |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5099448A (en) * | 1989-06-28 | 1992-03-24 | Nippon Sheet Glass Co., Ltd. | Matrix-vector multiplication apparatus |
DE69130652T2 (de) * | 1990-03-20 | 1999-05-06 | Fujitsu Ltd., Kawasaki, Kanagawa | Digitaler paralleler Hochgeschwindigkeitsmultiplizierer |
JPH04290155A (ja) * | 1991-03-19 | 1992-10-14 | Fujitsu Ltd | 並列データ処理方式 |
US5207132A (en) | 1991-10-16 | 1993-05-04 | Textron Inc. | Elliptical lobed drive system |
JPH0660206A (ja) * | 1992-08-07 | 1994-03-04 | Sharp Corp | データフロープログラムの実行制御方法 |
US5446912A (en) | 1993-09-30 | 1995-08-29 | Intel Corporation | Partial width stalls within register alias table |
US6212618B1 (en) * | 1998-03-31 | 2001-04-03 | Intel Corporation | Apparatus and method for performing multi-dimensional computations based on intra-add operation |
JP4282193B2 (ja) * | 2000-01-13 | 2009-06-17 | 株式会社ルネサステクノロジ | 乗算装置 |
US7624138B2 (en) * | 2001-10-29 | 2009-11-24 | Intel Corporation | Method and apparatus for efficient integer transform |
US7065545B2 (en) * | 2002-05-07 | 2006-06-20 | Quintero-De-La-Garza Raul Gera | Computer methods of vector operation for reducing computation time |
EP1546863B1 (en) * | 2002-09-24 | 2010-01-20 | Interdigital Technology Corporation | Computationally efficient mathematical engine |
US9465611B2 (en) * | 2003-10-02 | 2016-10-11 | Broadcom Corporation | Processor execution unit with configurable SIMD functional blocks for complex number operations |
CN101359284B (zh) | 2006-02-06 | 2011-05-11 | 威盛电子股份有限公司 | 处理数个不同数据格式的乘法累加单元及其方法 |
US8464031B2 (en) * | 2008-08-15 | 2013-06-11 | Apple Inc. | Running unary operation instructions for processing vectors |
US8862653B2 (en) * | 2011-04-26 | 2014-10-14 | University Of South Carolina | System and method for sparse matrix vector multiplication processing |
US9563401B2 (en) | 2012-12-07 | 2017-02-07 | Wave Computing, Inc. | Extensible iterative multiplier |
US9348558B2 (en) | 2013-08-23 | 2016-05-24 | Texas Instruments Deutschland Gmbh | Processor with efficient arithmetic units |
US9442731B2 (en) * | 2014-03-13 | 2016-09-13 | Intel Corporation | Packed two source inter-element shift merge processors, methods, systems, and instructions |
US20150277904A1 (en) * | 2014-03-28 | 2015-10-01 | Roger Espasa | Method and apparatus for performing a plurality of multiplication operations |
-
2016
- 2016-07-02 US US15/201,392 patent/US10089110B2/en active Active
-
2017
- 2017-05-25 TW TW106117443A patent/TWI817926B/zh active
- 2017-06-14 CN CN201780037317.4A patent/CN109328333B/zh active Active
- 2017-06-14 DE DE112017003351.9T patent/DE112017003351T5/de not_active Withdrawn
- 2017-06-14 WO PCT/US2017/037568 patent/WO2018009323A1/en active Application Filing
-
2018
- 2018-08-30 US US16/117,293 patent/US11048510B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050125647A1 (en) * | 2003-12-09 | 2005-06-09 | Arm Limited | Endianess compensation within a SIMD data processing system |
US9100184B2 (en) * | 2011-12-22 | 2015-08-04 | Intel Corporation | Instructions processors, methods, and systems to process BLAKE secure hashing algorithm |
TW201344572A (zh) * | 2011-12-23 | 2013-11-01 | Intel Corp | 提供向量混合與置換功能的指令與邏輯 |
US20140006756A1 (en) * | 2012-06-29 | 2014-01-02 | Igor Ermolaev | Systems, Apparatuses, and Methods for Performing a Shuffle and Operation (Shuffle-Op) |
Also Published As
Publication number | Publication date |
---|---|
US20180004519A1 (en) | 2018-01-04 |
TW201810020A (zh) | 2018-03-16 |
WO2018009323A1 (en) | 2018-01-11 |
CN109328333B (zh) | 2023-12-19 |
US10089110B2 (en) | 2018-10-02 |
US11048510B2 (en) | 2021-06-29 |
CN109328333A (zh) | 2019-02-12 |
DE112017003351T5 (de) | 2019-03-14 |
US20190138306A1 (en) | 2019-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI756251B (zh) | 執行複數的熔合乘-加指令的系統與方法 | |
US10671392B2 (en) | Systems, apparatuses, and methods for performing delta decoding on packed data elements | |
CN112527396B (zh) | 用于执行指令以转换成16位浮点格式的系统和方法 | |
US20140108480A1 (en) | Apparatus and method for vector compute and accumulate | |
US20140089634A1 (en) | Apparatus and method for detecting identical elements within a vector register | |
US9459865B2 (en) | Systems, apparatuses, and methods for performing a butterfly horizontal and cross add or substract in response to a single instruction | |
TW202326409A (zh) | 用於融合乘加運算的系統、裝置及方法 | |
US10860315B2 (en) | Systems, apparatuses, and methods for arithmetic recurrence | |
TWI760341B (zh) | 用於跨步載入的系統、設備及方法 | |
US9870338B2 (en) | Systems, apparatuses, and methods for performing vector packed compression and repeat | |
CN108292228B (zh) | 用于基于通道的步进收集的系统、设备和方法 | |
US9965282B2 (en) | Systems, apparatuses, and methods for performing delta encoding on packed data elements | |
TWI817926B (zh) | 用於執行指令的設備、方法及非暫態機器可讀媒體 | |
US10838720B2 (en) | Methods and processors having instructions to determine middle, lowest, or highest values of corresponding elements of three vectors | |
US20170192783A1 (en) | Systems, Apparatuses, and Methods for Stride Load | |
TWI759306B (zh) | 用於累和的系統、設備及方法 | |
TWI841041B (zh) | 用於融合乘加運算的系統、裝置及方法 |