CN106030513A - 用于采用到被屏蔽结果元素的传播将连续源元素存储到未屏蔽结果元素的处理器、方法、系统和指令 - Google Patents
用于采用到被屏蔽结果元素的传播将连续源元素存储到未屏蔽结果元素的处理器、方法、系统和指令 Download PDFInfo
- Publication number
- CN106030513A CN106030513A CN201480076431.4A CN201480076431A CN106030513A CN 106030513 A CN106030513 A CN 106030513A CN 201480076431 A CN201480076431 A CN 201480076431A CN 106030513 A CN106030513 A CN 106030513A
- Authority
- CN
- China
- Prior art keywords
- result
- instruction
- data element
- operand
- shielding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 70
- 238000003860 storage Methods 0.000 claims abstract description 140
- 230000004044 response Effects 0.000 claims abstract description 8
- 238000012856 packing Methods 0.000 claims description 280
- 238000012545 processing Methods 0.000 claims description 20
- 238000004519 manufacturing process Methods 0.000 claims description 7
- 239000013598 vector Substances 0.000 description 114
- 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
- 238000010586 diagram Methods 0.000 description 49
- 238000006073 displacement reaction Methods 0.000 description 34
- 230000008569 process Effects 0.000 description 27
- 230000000644 propagated effect Effects 0.000 description 21
- 230000008859 change Effects 0.000 description 19
- 238000007667 floating Methods 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 10
- 239000000203 mixture Substances 0.000 description 10
- 230000006399 behavior Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 241001269238 Data Species 0.000 description 7
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 7
- 102000001332 SRC Human genes 0.000 description 7
- 108060006706 SRC Proteins 0.000 description 7
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 7
- 230000008901 benefit Effects 0.000 description 7
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 230000008878 coupling Effects 0.000 description 7
- 238000010168 coupling process Methods 0.000 description 7
- 238000005859 coupling reaction Methods 0.000 description 7
- 230000002441 reversible effect Effects 0.000 description 7
- 230000003068 static effect Effects 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 238000009434 installation Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000002123 temporal effect Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 244000045947 parasite Species 0.000 description 5
- 239000000047 product Substances 0.000 description 5
- 229910002056 binary alloy Inorganic materials 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 230000003247 decreasing effect Effects 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 230000001174 ascending effect Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 230000001965 increasing effect Effects 0.000 description 3
- 238000002156 mixing Methods 0.000 description 3
- 238000011022 operating instruction Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000001276 controlling effect Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 230000005611 electricity Effects 0.000 description 2
- 210000003127 knee Anatomy 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 238000003825 pressing Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 206010008190 Cerebrovascular accident Diseases 0.000 description 1
- 208000006011 Stroke Diseases 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000013506 data mapping Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000011159 matrix material Substances 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
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 239000011232 storage material Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000005612 types of electricity 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/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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
一方面的处理器包括对指令进行解码的解码单元,其中指令指示包括至少四个数据元素的第一源打包数据操作数、包括至少四个屏蔽元素的源屏蔽和目的地存储位置。执行单元响应该指令而存储具有一系列至少两个未屏蔽结果数据元素的结果打包数据操作数。未屏蔽结果数据元素的每个按照相对顺序来存储第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值。最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果元素具有与最靠近结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于被屏蔽的屏蔽元素。
Description
技术领域
本文所述的实施例一般涉及处理器。具体来说,本文所述的实施例一般涉及执行对打包数据进行操作的指令的处理器。
背景技术
许多处理器具有单指令多数据(SIMD)架构。在SIMD架构中,多个数据元素可作为打包数据(packed data)或向量数据被打包在一个寄存器或存储器位置中。在打包数据中,寄存器或另一存储位置的位可在逻辑上划分为数据元素序列。例如,128位宽打包数据寄存器可具有两个64位宽数据元素、四个32位数据元素、八个16位数据元素等。数据元素的每个可表示单独的个体数据片(例如像素颜色等),其可与其他数据片分开和/或无关地操作。
附图说明
通过参照用来示出实施例的以下描述和附图,可以最透彻地了解本发明。附图包括:
图1是可操作以执行采用传播的被屏蔽连续源元素存储指令的实施例的处理器的一实施例的框图。
图2是执行采用传播的被屏蔽连续源元素存储的指令的实施例的方法的一实施例的流程图。
图3是使最低阶被屏蔽元素保持不变的采用传播的被屏蔽连续源元素存储操作的一实施例的框图。
图4是从最高阶元素存储最低阶被屏蔽元素的采用传播的被屏蔽连续源元素存储操作的一实施例的框图。
图5是从最低阶元素存储最高阶被屏蔽元素的采用传播的被屏蔽连续源元素反向和后向存储操作的一实施例的框图。
图6是从最低阶元素存储最高阶被屏蔽元素的采用传播的被屏蔽连续源元素反向存储操作的一实施例的框图。
图7是打包数据寄存器的适当集合的一实施例的框图。
图8是示出屏蔽位的数量取决于打包数据宽度和打包数据元素宽度的表。
图9是打包数据操作屏蔽寄存器的适当集合的一实施例的框图。
图10A-10B是示出按照本发明的实施例的通用向量友好指令格式及其指令模板的框图。
图11A是示出按照本发明的实施例的示范特定向量友好指令格式的框图。
图11B是示出按照本发明的一个实施例、组成全操作码字段的特定向量友好指令格式的字段的框图。
图11C是示出按照本发明的一个实施例、组成寄存器变址字段的特定向量友好指令格式的字段的框图。
图11D是示出按照本发明的一个实施例、组成扩充操作字段的特定向量友好指令格式的字段的框图。
图12是寄存器架构的一实施例的框图。
图13A是示出有序管线的一实施例和寄存器重命名无序发出/执行管线的一实施例的框图。
图13B是包括耦合到执行引擎单元的前端单元(均耦合到存储器单元)的处理器核心的一实施例的框图。
图14A是单个处理器核心连同其到晶片(die)上互连网络的连接并且连同其第2级(L2)高速缓存的本地子集的一实施例的框图。
图14B是图14A的处理器核心的部分的扩大视图的一实施例的框图。
图15是可具有一个以上核心、可具有集成存储器控制器并且可具有集成图形的处理器的一实施例的框图。
图16是计算机架构的第一实施例的框图。
图17是计算机架构的第二实施例的框图。
图18是计算机架构的第三实施例的框图。
图19是计算机架构的第四实施例的框图。
图20是按照本发明的实施例、软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本文所公开的是使处理器采用到被屏蔽结果元素的传播将连续源元素存储到未屏蔽结果元素的采用传播的被屏蔽连续源元素存储指令、运行指令的处理器、由处理器在处理或运行指令时执行的方法以及结合一个或多个处理器以处理或运行指令的系统。在以下描述中,提出许多具体细节(例如具体指令操作、数据格式、处理器配置、微架构细节、操作序列等)。但是,即使没有这些具体细节也可实施实施例。在其他情况下,没有详细示出众所周知的电路、结构和技术,以免影响对本描述的理解。
图1是可操作以执行采用传播的被屏蔽连续源元素存储指令102的实施例的处理器100的一实施例的框图。在一些实施例中,处理器可以是(例如常用于台式、膝上型或其他计算机中的类型的)通用处理器。备选地,处理器可以是专用处理器。适当专用处理器的示例包括但不限于网络处理器、通信处理器、密码处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)和控制器(例如微控制器),这里只列举几个示例。处理器可以是各种复合指令集计算(CISC)处理器、各种简化指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、它们的各种混合中的任一个,或者可实现这类指令集的组合(例如在不同的核心中)。
在操作期间,处理器100可接收采用传播的被屏蔽连续源元素存储指令102的实施例。例如,指令可从指令取单元、指令队列等接收。指令可表示宏指令、汇编语言指令、机器代码指令或者处理器的指令集的另一指令或控制信号。在一些实施例中,指令可显式指定(例如经过一个或多个字段或位集合)或者以其他方式(例如隐式指示)具有多个(例如至少四个)数据元素的第一源打包数据操作数110,可指定或者以其他方式指示包括多个(例如至少四个)屏蔽元素的源屏蔽116(例如在打包数据操作屏蔽寄存器118中),并且可指定或者以其他方式指示可存储结果打包数据操作数114的目的地存储位置。在一些实施例中,指令可选地还可指定或者以其他方式指示具有将要用于一个或多个极值(例如最高阶或最低阶)屏蔽结果数据元素的至少一个值(参见例如图4-6)的第二源(例如打包数据)操作数112,但是这不作要求。
再次参照图1,处理器包括解码单元或解码器104。解码单元可对采用传播的被屏蔽连续源元素存储指令102进行接收和解码。解码单元可输出一个或多个微指令、微操作、微码输入点、解码指令或控制信号或者反映、表示指令102和/或从指令102所得出的其他较低级指令或控制信号。一个或多个低级指令或控制信号可经过一个或多个低级(例如电路级或硬件级)操作来实现高级指令102。解码单元可使用各种不同机制来实现,包括但不限于微码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)和本领域已知的其他机制。
在一些实施例中,指令102不是直接提供给解码单元,而是可选地可使用指令模拟器、转化器、变形器、解释器或其他指令转换模块。各种不同类型的指令转换模块是本领域已知的,并且可通过软件、硬件、固件或者其组合来实现。在一些实施例中,指令转换模块可位于指令处理处理器外部,例如单独晶片上和/或存储器(例如静态、动态或运行时指令模拟模块)中。作为举例,指令转换模块可接收可属于第一指令集的指令102,并且可对指令102进行模拟、转化、变形、解释或者以其他方式将指令102转换为一个或多个对应或所得出中间指令或控制信号,其可属于第二不同的指令集。第二指令集的一个或多个中间指令或控制信号可提供给解码单元(例如解码单元104),其可将第二指令集的所接收的一个或多个指令或控制信号解码为由处理器的本机硬件(例如一个或多个执行单元)可执行的一个或多个低级指令或控制信号。
处理器还包括打包数据寄存器组108。打包数据寄存器的每个可表示晶片上存储位置,其可操作以存储打包数据、向量数据或SIMD数据。打包数据寄存器可表示架构可见的寄存器(例如架构寄存器堆)。架构可见或架构寄存器是软件和/或编程人员可见的,和/或是通过处理器的指令集的指令所指示以识别操作数的寄存器。这些架构寄存器与给定微架构中的其他非架构或者非架构可见寄存器(例如暂时寄存器、重排序缓冲器、引退寄存器等)形成对照。打包数据寄存器可在不同微架构中使用众所周知的技术按照不同方式来实现,而并不局限于任何特定类型的电路。各种不同类型的寄存器是适当的。适当类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器及其组合。
在一些实施例中,第一源打包数据操作数110可选地可存储在第一打包数据寄存器中,以及可选的第二源打包数据操作数112可存储在第二打包数据寄存器中。备选地,存储器位置或其他存储位置可用于这些操作数的一个或多个。在一些实施例中,目的地存储位置也可以是打包数据寄存器。在一些情况下,用作目的地存储位置的打包数据寄存器与用于第一源打包数据操作数和第二源操作数的打包数据寄存器可以是不同的。在其他情况下,用于源打包数据操作数其中之一的打包数据寄存器可再用作目的地存储位置(例如结果打包数据操作数114可覆盖源打包数据操作数110或112其中之一而被写入)。备选地,存储器或其他存储位置可选地可用于目的地存储位置。
再次参照图1,执行单元106与解码单元104、第一源打包数据操作数110、可选的第二源操作数112(若被使用的话)和源屏蔽116耦合。例如,执行单元可与打包数据寄存器108和打包数据操作屏蔽寄存器118耦合。作为举例,执行单元可包括算术逻辑单元、逻辑单元、执行逻辑或数据操纵操作的数字电路等。执行单元可接收一个或多个解码或者以其他方式转换的指令或控制信号,其表示采用传播的被屏蔽连续源元素存储指令102和/或从其中得出。执行单元还可接收第一源打包数据操作数110、源屏蔽116以及在一些实施例中的可选第二源操作数112,其全部可由指令102来指定或者以其他方式指示。
在一些实施例中,执行单元可使用源屏蔽116作为屏蔽或控制操作数,以屏蔽或控制数据如何从第一源打包数据操作数110存储到结果打包数据操作数114。源屏蔽可包括多个屏蔽元素或控制元素。在一些实施例中,可按照与结果打包数据操作数的对应结果数据元素的一一对应性来包含屏蔽元素,使得可与其他分开和/或无关地对各结果数据元素提供屏蔽或控制。在一些实施例中,各屏蔽元素可以是单个屏蔽位,但是本发明的范围并不局限于此。在这类情况下,源屏蔽可具有各结果数据元素的屏蔽位。在一些实施例中,各屏蔽位或另一屏蔽元素的值可屏蔽或控制来自第一源打包数据操作数110的下一个连续数据元素是否存储到结果打包数据操作数114中的对应结果数据元素。例如,各屏蔽位或元素可具有未屏蔽值(例如设置成二进制一(即,1)),以便使第一源打包数据操作数110中的下一个连续源数据元素存储到对应未屏蔽结果数据元素,或者各屏蔽位可具有屏蔽值(例如清除为二进制零(即,0)),以便使(例如最靠近未屏蔽结果数据元素的)另一个值被传播或者以其他方式存储到对应被屏蔽结果数据元素。在另一个实施例中,两个或更多位可选地可用于各屏蔽元素。例如,各屏蔽元素可具有与各对应源数据元素相同的位数,以及最低阶位或最高阶位可用作单个屏蔽位。
执行单元可以是响应指令102和/或作为指令102的结果(例如响应从指令所解码的一个或多个指令或控制信号)可操作的,以便将结果打包数据操作数114存储在指令所指示的目的地存储位置中。在一些实施例中,结果打包数据操作数可包括一系列至少两个未屏蔽结果数据元素。未屏蔽结果数据元素的系列可在结果打包数据操作数的第一端(例如最低阶或最低有效端或位位置)与第二端(例如最高阶或最高有效端或位位置)之间。未屏蔽结果数据元素的每个可对应于源屏蔽116的不同对应未屏蔽的屏蔽元素(例如与被屏蔽的屏蔽元素相反)。该系列的至少两个未屏蔽结果数据元素的每个可按照相同的相对顺序来存储第一源打包数据操作数110的至少两个连续数据元素的不同数据元素的值。在一些实施例中,第一源打包数据操作数的连续或毗连数据元素可扩展到与源屏蔽的未屏蔽元素对应的结果打包数据操作数中的非毗连或潜在稀疏的未屏蔽数据元素位置的系列。源屏蔽的未屏蔽元素可选择将要由第一源打包数据操作数的升序连续数据元素所取代的对应未屏蔽结果数据元素位置。连续源数据元素中的值的相对顺序(例如相同顺序或相反顺序)可保持在未屏蔽结果数据元素的系列中。例如,该系列的最低阶未屏蔽结果数据元素可存储至少两个连续数据元素的最低阶数据元素的值,该系列的下一个最低阶未屏蔽结果数据元素可存储至少两个连续数据元素的下一个最低阶数据元素的值,依此类推。在一些示例中,可存在至少三个或者三个以上这类未屏蔽结果数据元素,但是这不作要求。
在一些实施例中,结果打包数据操作数还可包括至少一个或者多个被屏蔽结果数据元素。被屏蔽结果数据元素可对应于源屏蔽的被屏蔽的屏蔽元素(例如与未屏蔽的屏蔽元素相反)。在一些实施例中,最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素可具有与对应对的未屏蔽结果数据元素其中之一相同的值。在一些实施例中,一对最接近未屏蔽结果数据元素之间的所有被屏蔽结果数据元素可具有与最靠近结果打包数据操作数的第一端(例如最低阶或最低有效位位置或者端)的该对的未屏蔽结果数据元素相同的值。在一些实施例中,未屏蔽结果数据元素的值可传播或者以其他方式存储到它与下一个依次未屏蔽结果数据元素之间的所有这些邻接被屏蔽结果数据元素中。有利地,不要求使被屏蔽结果数据元素调零或保持不变。在一些实施例中,结果打包数据操作数可选地可以是对于图3-6的任一个所示和所述的操作数的任一个,但是本发明的范围并不局限于此。
在一些实施例中,结果打包数据操作数的上述特性(例如将未屏蔽结果数据元素的值传播或者以其他方式存储到相邻被屏蔽数据元素)对指令可以是固定或隐式的(例如对指令的操作码和/或指令的类型是固定或隐式的)。也就是说,这类特性无需通过显式指定或控制(例如通过创建控制操作数)连同诸如全shuffle或permute指令之类的极灵活指令(其类型或操作码不会固定或暗示这类特性)来实现。
有利地,在一些实施例中,采用传播的被屏蔽连续源元素存储指令可以可操作以使处理器将连续源数据元素存储到一系列未屏蔽结果数据元素,并且将源数据元素传播或者以其他方式存储到未屏蔽结果数据元素之间的邻接被屏蔽结果数据元素。将源数据元素传播或者以其他方式存储到被屏蔽结果数据元素的能力在某些实现中可以是有用和/或有利的。例如,这可以是指令用来实现具有对于在条件下递增的标量值的计算的循环时的情况。作为另一个示例,这可以是变量的值在不满足条件时保持为相同并且仅当满足下一个条件时才改变成下一个连续数据元素的值时的情况。
执行单元和/或处理器可包括特定或具体逻辑(例如晶体管、集成电路或者潜在地与固件(例如非易失性存储器中存储的指令)和/或软件相结合的其他硬件),其可操作以执行指令102,和/或响应指令102和/或作为指令102的结果来存储结果。
为了避免影响对本描述的理解,示出和描述比较简单的处理器。在其他实施例中,处理器可选地可包括其他众所周知的处理器组件。实施例可包含在具有多个核心的处理器、逻辑处理器或执行引擎中,其中至少一个具有解码单元和执行单元,以执行本文所公开指令的实施例。
图2是执行采用传播的被屏蔽连续源元素存储指令的实施例的方法220的一实施例的流程图。在各个实施例中,该方法可由处理器、指令处理设备或另一数字逻辑设备来执行。在一些实施例中,图2的方法可由图1的处理器来执行和/或在其中执行。本文对于图1的处理器所述的组件、特征和具体可选细节可选地也适用于图2的方法。备选地,图2的方法可由类似或不同的处理器或设备来执行和/或在其中执行。此外,图1的处理器可与图2相同、相似或者不同地执行方法。
该方法包括在框221接收采用传播的被屏蔽连续源元素存储指令。在各个方面,指令可在处理器或者其一部分(例如指令取单元、解码单元、总线接口单元等)来接收。在各个方面,指令可从晶片外来源(例如从存储器、互连等)或者从晶片上来源(例如从指令高速缓存、指令队列等)来接收。该指令可指定或者以其他方式指示包括第一批多个(例如至少四个)数据元素的第一源打包数据操作数,可指定或者以其他方式指示包括多个(例如至少四个)屏蔽元素的源屏蔽,并且可指定或者以其他方式指示目的地存储位置。
该方法包括在框222响应指令和/或作为指令的结果而将结果打包数据操作数存储在目的地存储位置中。代表性地,执行单元可执行指令并且存储结果。在一些实施例中,结果打包数据操作数可包括一系列至少两个未屏蔽结果数据元素。未屏蔽结果数据元素的每个可按照相对顺序(例如相同顺序或相反顺序)来存储第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值。在一些实施例中,结果打包数据操作数还可包括最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素,其具有与最靠近结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素可对应于源屏蔽的被屏蔽的屏蔽元素。在一些实施例中,结果打包数据操作数可具有对于图3-6的任一个所示和所述特性的任一个,但是本发明的范围并不局限于此。
所示方法涉及架构操作(例如从软件角度可见的操作)。在其他实施例中,该方法可选地可包括一个或多个微架构操作。例如,可对指令进行取、解码、无序调度,可访问源操作数,执行单元可执行微架构操作以实现指令,等等。在一些实施例中,实现指令的微架构操作可选地可包括评估屏蔽位的值,将连续源数据元素复用或者以其他方式移动或重新排列到一系列未屏蔽结果数据元素,将源数据元素传播到一个或多个被屏蔽结果数据元素等。
图3是示出使最低阶被屏蔽元素保持不变的采用传播的被屏蔽连续源元素存储操作330(其可响应指令的实施例而执行)的一实施例的框图。在这个实施例中,超前最低有效未屏蔽结果数据元素(例如在所示示例中为位置3中的A0)的零或以上(例如在所示示例中为三)最低阶被屏蔽结果数据元素332的集合保持不变(例如,可以不改变目的地存储位置中的初始或起始值)。在该图示中,如所观看,结果打包数据操作数的最低有效或最低阶端或位位置331在右边示出,以及最高有效或最高阶端或位位置333在左边示出。
指令可指定(例如显式指定)或者以其他方式指示(例如隐式指示)可具有第一批多个(例如至少四个)打包数据元素的第一源打包数据操作数310。在所示实施例中,第一源打包操作数数据具有八个数据元素A0至A7,但是本发明的范围并不局限于此。在其他实施例中,第一源打包数据操作数可具有不同数量的数据元素,例如等于第一源打包数据操作数的位的大小除以各数据元素的位的大小的数量。在所示实施例中,连续数据元素335的最低阶集合包括位置0中的最低阶数据元素(A0)和位置1中的下一个最低阶数据元素(A1)。在各个实施例中,第一源打包数据操作数的宽度可以是64位、128位、256位、512位或1024位,但是本发明的范围并不局限于此。在各个实施例中,各打包数据元素的宽度可以是8位、16位、32位或64位,但是本发明的范围并不局限于此。在一些实施例中,第一源打包数据操作数可存储在打包数据寄存器中。在其他实施例中,第一源打包数据操作数可选地可存储在存储器位置中,这可允许源数据元素从存储器位置直接存储到结果打包数据操作数,而无需首先将它们加载到打包数据寄存器中。
指令还可指定或者以其他方式指示源屏蔽316。源屏蔽可包括多个屏蔽元素。例如,源屏蔽可包括与结果打包数据操作数314中的结果数据元素的数量相同数量的屏蔽元素。在所示实施例中,源屏蔽具有八个屏蔽元素。各屏蔽元素可对应于操作数内的相同相对位置中的结果打包数据操作数的结果数据元素其中之一。如所示,在一些实施例中,各屏蔽元素可以是单个屏蔽位,但是本发明的范围并不局限于此。按照所示实施例中使用的惯例,清零到二进制零(即,0)值的屏蔽元素表示屏蔽掉或被屏蔽的屏蔽元素,而设置为二进制一(即,1)值的屏蔽元素表示未屏蔽的屏蔽元素。相反惯例也是可能的。在具体所示示例中,八个屏蔽位从(左边的)最高阶位置到(右边的)最低阶位位置具有二进制值0、1、0、0、1、0、0、0。这些只是示例值。在一些实施例中,源屏蔽可存储在打包数据操作屏蔽寄存器中。在一些实施例中,指令集的其他指令可指示(例如具有要指定的位或字段)屏蔽寄存器,并且使用屏蔽寄存器和/或其中存储的屏蔽作为判定操作数,和/或判定打包数据操作。
结果打包数据操作数314可响应指令的实施例和/或作为指令的实施例结果而被生成并且存储(例如由执行单元306)在目的地存储位置中。在各个实施例中,目的地存储位置可以是打包数据寄存器、存储器位置或者另一存储位置。结果打包数据操作数可包括多个(例如可选地至少为四个)结果数据元素。例如,结果打包数据可包括与第一源打包数据操作数的数据元素的数量相同数量的结果数据元素和/或源屏蔽的相同数量的屏蔽元素。在所示实施例中,结果打包数据具有八个结果数据元素,但是本发明的范围并不局限于此。各结果数据元素可对应于操作数内的相同相对位置中的源屏蔽的不同屏蔽元素。
当从(右边的)最低阶端或位位置331移动到(左边的)最高阶端或位位置333时,八个结果数据元素占用数据元素位置0至7。在所示示例中,位置3中的结果数据元素(A0)对应于未屏蔽的屏蔽元素(例如位置3中的对应屏蔽元素具有二进制一的值)。另外,位置3中的结果数据元素(A0)是最低阶未屏蔽结果数据元素和/或与最低阶端或位位置331最靠近的未屏蔽结果数据元素。在所示示例中,位置0至2中的三个最低阶(最右边)结果数据元素各对应于屏蔽掉的屏蔽元素(例如位置0至2中的对应屏蔽元素具有二进制零的值)。位置0至2中的三个最低阶被屏蔽结果数据元素的这个集合处于最低阶端或位位置331与位置3中的最低阶未屏蔽结果数据元素(A0)之间。如在332所示,在这个实施例中,最低阶被屏蔽结果数据元素的这个集合中的所有结果数据元素(其超前最低有效未屏蔽结果数据元素)可保持不变。例如,目的地存储位置(例如寄存器)中的初始或起始数据元素可保持不变和/或不通过操作/指令来更新。作为举例,目的地存储位置最初可将数据元素R0至R2存储在三个最低阶数据元素位置中。在操作/指令之后,数据元素R0至R2可保持为存储在目的地存储位置和/或结果打包数据操作数的三个最低阶数据元素位置中。
在一些实施例中,第一源打包数据操作数的连续数据元素335的集合的最低阶数据元素可存储到最低阶未屏蔽结果数据元素。例如,来自位置0的数据元素(A0)的值可存储在结果打包数据操作数的位置3的未屏蔽结果数据元素中。源屏蔽的位置3中的最低阶未屏蔽的屏蔽元素可选择结果打包数据操作数的位置3中的对应最低阶未屏蔽结果数据元素作为来自第一源打包数据操作数的最低阶源数据元素(例如A0)的适当存储位置。
位置4和5中的结果数据元素是与屏蔽掉的屏蔽元素(例如具有0值)对应的被屏蔽结果数据元素。在一些实施例中,如在334所示,最接近低阶未屏蔽结果数据元素(在本例中为位置3中的数据元素A0)的值可传播或者以其他方式存储到位置4和5的这些高阶被屏蔽结果数据元素的每个中,一直到(但是不包括)下一个高阶未屏蔽结果数据元素(例如位置6中的数据元素A1)。也就是说,在一些实施例中,最接近低阶未屏蔽结果数据元素的值可存储到零或以上高阶被屏蔽结果数据元素的集合。箭头337示出存储或传播的方向可按照增加位有效性或阶。
位置6中的结果数据元素是未屏蔽结果数据元素。在一些实施例中,第一源打包数据操作数的连续数据元素335的集合的下一个高阶数据元素可存储到位置6中的未屏蔽结果数据元素。例如,如所示,第一源打包数据操作数的位置1中的数据元素(A1)的值可存储在位置6的未屏蔽结果数据元素中。位置1中的源数据元素(A1)是位置0中的源数据元素(A0)之后的下一个高阶连续源数据元素。源屏蔽的位置6中的未屏蔽的屏蔽元素可选择位置6中的对应未屏蔽结果数据元素作为下一个连续源数据元素(例如A1)的存储位置。
位置7中的下一个最高阶结果数据元素是被屏蔽结果数据元素。在一些实施例中,如在336所示,最接近低阶未屏蔽结果数据元素(在这个示例中为位置6中的数据元素A1)的值可传播或者以其他方式存储到位置7的最高阶被屏蔽结果数据元素中。位置7中的被屏蔽结果数据元素表示最高阶端或位位置333和与最高阶端或位位置最接近的未屏蔽结果数据元素(例如位置6中的A1)之间的零或以上被屏蔽结果数据元素(例如,在这个示例中为单个被屏蔽结果数据元素)的集合。
如所示,在一些实施例中,第一源打包数据操作数310的连续或毗连数据元素335的集合可“扩展”到通过源屏蔽316的对应未屏蔽元素所选择的结果打包数据操作数314的潜在非毗连或稀疏未屏蔽结果数据元素的系列。源屏蔽316的未屏蔽元素可选择将要由第一源打包数据操作数310的毗连升序连续数据元素335所取代的对应未屏蔽结果数据元素。此外,最接近低阶未屏蔽结果数据元素的值可传播或者以其他方式存储到邻接高阶被屏蔽结果数据元素。有利地,操作和/或指令并不局限于对这些被屏蔽结果数据元素进行调零或者使它们保持不变,而是在先未屏蔽结果数据元素的值可传播或者以其他方式存储到其中。
注意,由于该指令将连续或毗连源数据元素存储到相同大小的结果打包数据操作数的一系列潜在非毗连未屏蔽结果数据元素,所以全部源数据元素可保持在不大于结果打包数据操作数的单个源打包数据操作数中。这可允许所有源数据元素在单个加载操作中从存储器来加载。相比之下,采集类型的操作从可潜在地处于不同段、存储页等中的非毗连存储器位置来采集数据元素。通过这类采集类型操作,存在页错误发生的更大趋势或风险,这趋向于涉及处理这些错误的实现开销。但是,这类页错误对于本文所公开指令的实施例可能不成问题,因为在一些实施例中,所有源数据元素可包含在单个源打包数据操作数中。
以下所列示的是采用传播的被屏蔽连续源元素存储指令(称作VEXPANDPROP)的具体示例实施例的伪代码。在伪代码中,MASK是源屏蔽(例如源屏蔽316)。SRC是具有将要存储或传播到目的地中的连续元素的源打包数据操作数(例如操作数310)。DST是可存储结果打包数据操作数(例如操作数314)的目的地。在各个实施例中,SRC和DST各可以是128位(例如xmm寄存器)、256位(例如ymm寄存器)或者512位(例如zmm寄存器),但是本发明的范围并不局限于此。在备选实施例中,可使用其他大小的寄存器,和/或源操作数的一个或多个可从存储器位置或者另一存储位置而不是从打包数据寄存器来获得。另外,在另一个实施例中,源操作数可选地可隐式地再用作目的地操作数。在伪代码中,“i”是操作数中的位置计数器,“i++”表示增量“i”(即,i=i+1),“n”是递增的变量,“n++”表示增量“n”(即,n=n+1),VL是SRC中的数据元素的数量。数据可以是字节、字、双字、四字、单精度或双精度,这里列举几个示例。
VEXPANDPROP MASK, SRC, DST
for(i=0; i<VL; i++){
if(MASK[i]==l) break;} //查找第一未屏蔽元素的位置
for(n=0; i<VL; i++){ //从第一未屏蔽元素(若有的话)的位置继续进行
DST[i] = SRC[n];
if(MASK[i]==l) n++;}
这个伪代码示出,对于这个实施例的指令,超前第一未屏蔽元素的DST中的屏蔽结果数据元素的最低阶集合在DST中可保持不变。另外,由于参数n开始于零,并且每次遇到未屏蔽的屏蔽元素时仅递增一,所以参数n从SRC选择将要存储到一系列未屏蔽结果数据元素的连续最低阶数据元素(例如SRC[n])。另外,由于n的值对于被屏蔽的屏蔽元素没有递增,所以低阶未屏蔽结果元素的值可存储到高阶被屏蔽结果元素中。
图4是示出从最高阶元素存储最低阶被屏蔽元素、采用传播的被屏蔽连续源元素存储操作440(其可响应指令的实施例而执行)的一实施例的框图。在这个实施例中,操作将第二源打包数据操作数412的最高阶数据元素(例如X7)的值存储到结果打包数据操作数414的零或以上(例如在所示示例中可选地为三)最低阶被屏蔽结果数据元素432的集合。在该图示中,如所观看,结果打包数据操作数的最低有效或最低阶端或位位置431在右边示出,以及结果打包数据操作数的最高有效或最高阶端或位位置433在左边示出。
该指令可指定或者以其他方式指示第一源打包数据操作数410,并且可指定或者以其他方式指示源屏蔽416。第一源打包数据操作数和源屏蔽可选地可具有(例如对图3)先前所述的特性和变化的任一个。
指令可指定或者以其他方式指示第二源打包数据操作数412。在这个实施例中,第二源打包数据操作数提供单个最高阶数据元素(例如X7),其值可用于(例如存储到)结果打包数据操作数414中的零或以上(例如在所示示例中为三)最低阶被屏蔽结果数据元素432。如以下将进一步说明,提供第二源打包数据操作数的最高阶位置中的单个数据元素(例如X7)从某些实现的算法角度来看(例如当向量化递增循环时)可提供优点。例如,最高阶数据元素(例如X7)可表示循环(相当于多个向量的价值(a vectors worth))的先前迭代集合的紧接先前迭代的值,并且可用作迭代集合的下一迭代的输入值。这可帮助降低循环迭代的下一个集合的准备开销。但是,本发明的范围并不局限于这类实现或优点。
结果打包数据操作数414可响应指令的实施例和/或作为指令的实施例结果而被生成并且存储(例如由执行单元406)在目的地存储位置中。目的地存储位置可选地可具有(例如对图3)先前所述的特性和变化的任一个。除了以下所述的差异之外,结果打包数据操作数414还可具有(例如对图3)先前所述的特性和变化的任一个。
在所示示例实施例中,位置0至2中的三个最低阶(最右边)结果数据元素各对应于屏蔽掉的屏蔽元素(例如位置0至2中的屏蔽元素具有二进制零的值)。如在432所示,位置0至2中的这三个最低阶被屏蔽结果数据元素处于最低阶端或位位置431与位置3中的最低阶未屏蔽结果数据元素(A0)之间。在这个实施例中,第二源打包数据操作数412的单个最高阶数据元素(X7)的值存储在全部三个最低阶屏蔽掉结果数据元素432(其超前结果打包数据的最低阶未屏蔽结果数据元素(例如,在本例中为位置3中的A0))中。如所示,结果打包数据操作数414的其余部分可与图3的结果打包数据操作数314相似或相同。
以下所列示的是开始于高阶源元素的采用传播的被屏蔽连续源元素存储指令(称作VEXPANDPROPHIGH)的具体示例实施例的伪代码。SRC1是具有将要存储在DST的结果打包数据操作数的零或以上最低阶被屏蔽元素的集合中的单个最高阶数据元素(例如在位置VL-1)的源打包数据操作数(例如操作数412)。SRC2是具有将要存储或传播到目的地中的连续元素的源打包数据操作数(例如操作数410)。tmp_val是临时值或变量。
这个伪代码示出,对于这个实施例的指令,DST中的零或以上被屏蔽结果数据元素的最低阶集合可存储SRC1的最高阶数据元素。另外,由于每次遇到被满足未屏蔽的屏蔽元素时使n递增,并且n用来从SRC2选择下一个数据元素(例如SRC2[n]),所以系列中的每个未屏蔽结果数据元素可存储来自SRC2的相应连续源数据元素。另外,由于n的值在遇到被屏蔽的屏蔽元素时没有递增,所以低阶未屏蔽结果元素的值可传播或存储到高阶被屏蔽结果元素中,直到(但是不包括)下一个未屏蔽结果数据元素。
图5是示出从最低阶元素存储最高阶被屏蔽元素的采用传播的被屏蔽连续源元素反向和后向存储操作550(其可响应指令的实施例而执行)的一实施例的框图。在这个实施例中,第二源打包数据操作数512的最低阶数据元素(例如X0)的值可存储到零或以上(例如在所示示例中可选地为一)最高阶被屏蔽结果数据元素554(其超前最高阶未屏蔽结果数据元素(例如在所示示例中为位置6中的A0))的集合的值。在这个实施例中,传播是沿使位有效性或阶减小的“反向”方向。另外,这个实施例是“后向”的,因为第一源打包数据操作数510中的数据元素的位有效性或阶与结果打包数据操作数514中是相反或后向的。在该图示中,如所观看,结果打包数据操作数的最低有效或最低阶端或位位置531在右边示出,以及结果打包数据操作数的最高有效或最高阶端或位位置533在左边示出。
该指令可指定或者以其他方式指示第一源打包数据操作数510和源屏蔽516。第一源打包数据操作数和源屏蔽可选地可具有(例如对图3-4)先前所述的特性和变化的任一个。
指令还可指定或者以其他方式指示第二源打包数据操作数512。在这个实施例中,第二源打包数据操作数提供单个最低阶数据元素(例如X0)。最低阶数据元素(X0)的值可用于(例如存储到)结果打包数据操作数514中的零或以上(例如在所示示例中为一)最高阶被屏蔽结果数据元素554的集合。如以下将进一步说明,提供打包数据操作数的最低阶位置中的单个数据元素(例如X0)从某些实现的算法角度来看(例如当向量化递减或后向计数循环时)可提供优点。例如,最低阶数据元素(例如X0)可表示递减迭代的前一集合期间所生成的最后一个值,其可用作对递减迭代的新集合的输入值。但是,本发明的范围并不局限于这类实现或优点。以别的方式,第二源打包数据操作数可选地可具有先前所述的特性和变化的任一个。
结果打包数据操作数514可响应指令的实施例和/或作为指令的实施例结果而被生成并且存储(例如由执行单元506)在目的地存储位置中。目的地存储位置可选地可具有(例如对图3-4)先前所述的特性和变化的任一个。除了以下所述的差异(例如使用第二源打包数据操作数的最低阶数据元素(例如X0)和倒序方面)之外,结果打包数据操作数514可选地可具有(例如对图3-4)先前所述的特性和变化的任一个。
在所示示例实施例中,位置7中的最高阶结果数据元素是被屏蔽结果数据元素。这个最高阶被屏蔽结果数据元素处于最高阶端或位位置533与最高阶未屏蔽结果数据元素(例如,在这个示例中为位置6的A0)之间。在这个实施例中,最高阶被屏蔽结果数据元素存储第二源打包数据操作数的最低阶数据元素(例如X0)的值。
位置6中的下一个最高阶结果数据元素是最高阶未屏蔽结果数据元素。如所示,位置6中的最高阶未屏蔽结果数据元素可存储第一源打包数据操作数510的连续最低阶数据元素535的集合的最低阶源数据元素(例如位置0中的A0)的值。源和结果数据元素的位阶或有效性在这个实施例中是后向的或者翻转。作为一个示例,这可用于涉及具有递增位置n(即,n=n+1)的递减循环计数器(即,i=i-1)的实现(例如循环的向量化)中。在这种情况下,连续源数据元素(例如SRC[n])的读取按照升序或前向顺序进行,而结果打包数据操作数(例如DST[i])中的结果元素的存储按照后向相反顺序进行。在所示示例中,位置4和5中的接着的两个低阶结果数据元素是被屏蔽结果数据元素。如所示,在一些实施例中,最接近高阶未屏蔽结果数据元素(例如在这个示例中为位置6中的A0)的值可传播或者以其他方式存储到位置4和5中的这些低阶被屏蔽结果数据元素。在这个实施例中,传播是从高阶未屏蔽结果数据元素到一个或多个(例如在这个示例中可选地为二)低阶被屏蔽结果数据元素。箭头537示出,传播或存储的方向是按照减小位有效性或阶。注意,方向与图3-4的实施例相反或相对。
位置3中的下一个低阶结果数据元素是未屏蔽结果数据元素。位置3中的未屏蔽结果数据元素存储第一源打包数据操作数的连续最低阶数据元素535的集合的下一个高阶连续源数据元素(例如位置1中的A1)。在跨第一源打包数据操作数从低阶到高阶位置移动时,位置1中的数据元素A1是位置0中的数据元素A0之后的下一个连续数据元素。源屏蔽的位置3中的未屏蔽的屏蔽元素可有效地选择结果打包数据操作数的位置3中的对应未屏蔽结果数据元素作为下一个连续源数据元素(例如A1)的适当存储位置。在所示示例中,位置0至2中的三个最低阶结果数据元素是被屏蔽结果数据元素的集合。如所示,位置0至2中的最低阶被屏蔽结果数据元素各可存储最靠近高阶未屏蔽结果数据元素(例如位置3中的A1)的值。
以下所列示的是开始于低阶元素的采用传播的被屏蔽连续源元素反向和后向存储指令(称作VEXPANDPROPREVBWLOW)的具体示例实施例的伪代码。SRC1是具有将要存储在结果打包数据操作数的零或以上最高阶被屏蔽元素的集合中的单个最低阶数据元素的源打包数据操作数(例如操作数512)。SRC2是具有将要存储或传播到目的地中的连续元素的源打包数据操作数(例如操作数510)。在代码中,“i--”表示减量(例如,i=i-1)和i>=0条件,“i”大于或等于零。
这个伪代码示出,这个实施例的指令将SRC1的最低阶数据元素存储到零或以上最高阶被屏蔽结果数据元素的集合。SRC2的最低阶连续数据元素的集合的最低阶数据元素存储到最高阶未屏蔽结果数据元素。高阶未屏蔽结果数据元素传播或存储到低阶被屏蔽结果数据元素。
图6是示出从最低阶元素存储最高阶被屏蔽元素的采用传播的被屏蔽连续源元素反向存储操作660(其可响应指令的实施例而执行)的一实施例的框图。在这个实施例中,第二源打包数据操作数612的最低阶数据元素(例如X0)的值可存储到零或以上(例如在所示示例中可选地为一)最高阶被屏蔽结果数据元素654(其超前最高阶未屏蔽结果数据元素(例如在所示示例中为位置6中的A7))的集合的值。在该图示中,如所观看,结果打包数据操作数的最低有效或最低阶端或位位置631在右边示出,以及结果打包数据操作数的最高有效或最高阶端或位位置633在左边示出。
该指令可指定或者以其他方式指示第一源打包数据操作数610和源屏蔽616。第一源打包数据操作数和源屏蔽可选地可具有(例如对图3-5)先前所述的特性和变化的任一个。
指令还可指定或者以其他方式指示第二源打包数据操作数612。在这个实施例中,第二源打包数据操作数提供单个最低阶数据元素(例如X0)。最低阶数据元素(X0)的值可用于(例如存储到)结果打包数据操作数614中的零或以上(例如在所示示例中为一)最高阶被屏蔽结果数据元素654的集合。第二源打包数据操作数可选地可具有(例如对图4-5)先前所述的特性和变化的任一个。
结果打包数据操作数614可响应指令的实施例和/或作为指令的实施例结果而被生成并且存储(例如由执行单元606)在目的地存储位置中。目的地存储位置可选地可具有(例如对图3-5)先前所述的特性和变化的任一个。除了以下所述的差异(例如使用第二源打包数据操作数的最低阶数据元素(X0)和倒序方面)之外,结果打包数据操作数614还可具有(例如对图3-5)先前所述的特性和变化的任一个。
在所示示例实施例中,位置7中的最高阶结果数据元素是最高阶端或位位置633与最高阶未屏蔽结果数据元素(例如,在这个示例中为位置6中的A7)之间的被屏蔽结果数据元素。在这个实施例中,最高阶被屏蔽结果数据元素存储第二源打包数据操作数612的最低阶数据元素(例如X0)的值。位置6中的下一个高阶结果数据元素是未屏蔽结果数据元素。如所示,位置6中的未屏蔽结果数据元素可存储第一源打包数据操作数610的连续最高阶数据元素652的集合的最高阶源数据元素(例如位置7中的A7)的值。在所示示例中,位置4和5中的接着的两个低阶结果数据元素是被屏蔽结果数据元素。如所示,在一些实施例中,最接近高阶未屏蔽结果数据元素(例如在这个示例中为位置6中的A7)的值可传播或者以其他方式存储到这些低阶被屏蔽结果数据元素。在这个实施例中,传播是从高阶未屏蔽结果数据元素到一个或多个(例如在这个示例中可选地为二)低阶被屏蔽结果数据元素。箭头637示出传播或存储的方向。注意,方向与图3-4的实施例相反。
位置3中的下一个最低阶结果数据元素是未屏蔽结果数据元素。位置3中的未屏蔽结果数据元素存储第一源打包数据操作数的连续最高阶数据元素652的集合的下一个低阶连续源数据元素(例如位置6中的A6)。在所示示例中,位置0至2中的三个最低阶结果数据元素658是被屏蔽结果数据元素的集合。如所示,位置0至2中的最低阶被屏蔽结果数据元素各可存储最靠近高阶未屏蔽结果数据元素(例如位置3中的A6)的值。
以下所列示的是开始于低阶元素的采用传播的被屏蔽连续源元素反向存储指令(称作VEXPANDPROPREVLOW)的具体示例实施例的伪代码。SRC1是具有将要存储在结果打包数据操作数的零或以上最高阶被屏蔽元素的集合中的单个最低阶数据元素的源打包数据操作数(例如操作数612)。SRC2是具有将要存储或传播到目的地中的连续元素的源打包数据操作数(例如操作数610)。“n--”表示减量“n”(即,n=n-1)。
考虑图4-6的实施例,在一些实施例中,指令可选地可隐式指示但是不显式指定将要用于第二源打包数据操作数(例如412、512、612)的寄存器还将用作目的地存储位置,但是这不作要求。作为举例,如下面将进一步说明,在一些实施例中,这些指令可用来向量化循环。用来向量化循环的迭代的初始集合的指令的结果可被生成并且为了连续性而用作用来向量化循环的迭代的后一集合的指令的输入值或者起始值。将寄存器用作源并且隐式地用作目的地可帮助避免对指定或使用另一个独立寄存器的需要。但是,这是可选的并且不作要求。
图3-6示出若干说明性示例实施例。但是,本发明的范围并不是只限于这些实施例。其他实施例可包括不同数量的数据元素、多位屏蔽元素,源打包数据操作数无需具有与结果打包数据操作数相同数量的数据元素等。另外,图4-6示出提供将用于最低阶或最高阶被屏蔽结果数据元素的值的单个数据元素或值(例如X0或X7)的示例方式。但是,在各个其他实施例中,单个数据元素或值可在打包数据的中间位置中、在通用寄存器中、在存储器位置中或者在另一个存储位置中提供。如果单个数据元素或值足够小(例如8位字节元素或16位字元素)而不会过度增加用于特定实现的指令长度,则它可选地可在指令的立即(immediate)中提供。
本文所述的指令是通用指令。获益于本公开的本领域的技术人员将考虑使用指令的各种不同方式和目的。在一些实施例中,指令可选地可用来促进循环(例如具有对于在条件下递增或递减的标量值的计算的循环)的向量化,但是本发明的范围并不局限于此。在条件下递增的这种循环的一个说明性示例在下列伪代码中示出:
在这个伪代码中,x是标量,以及“i”是迭代数。符号“i++”表示使“i”递增一(即,i=i+1)。类似地,符号“n++”表示使“n”递增一(即,n=n+1)。A[n]是向量或阵列的第n个元素。在这个示例中,计算取决于值n、x或A[n]的值,并且根据特定实现可潜在地/可选地取决于迭代数“i”。注意,在循环的迭代期间,x的值仅对满足那个迭代的条件的那些迭代改变并且使n递增。如果不满足条件,则x的值不发生变化。这可通过将数据元素的值从一个位置传播或存储到结果打包数据操作数中的另一个位置来实现。
这类特性的可能使用的一个说明性示例是随时间推移的多态触发。例如,每次激活触发(例如按下按钮)可表示满足条件。被满足的条件可表示为源屏蔽中的未屏蔽位。在这种情况下,触发可将其当前状态改变成新状态。这可通过从源打包数据操作数中选择下一个依次源数据元素来表示。如果触发没有再次激活(例如没有按下按钮),则再次不满足条件(例如通过没有新的未屏蔽的屏蔽元素所表示)。这可通过将数据元素的值传播到被屏蔽结果数据元素来表示。
一个难题在于,如果向量化是完全可能的,则大部分因n和x值中的迭代之间的数据相关性,当前一般趋向于对这类循环进行向量化是棘手的。例如,可能不存在能够解析数据相关性的足够短的指令序列,其可由编译器用来对这种循环进行向量化。有利地,本文所公开的指令的实施例可用来促进循环(例如上述伪代码中所示的循环)的向量化。例如,迭代的条件可被评估,并且用来生成源屏蔽,其可通过vexpandprophigh指令来指示。例如,可使屏蔽元素对评估为真的条件是未屏蔽的,或者可使屏蔽元素对评估为假的条件是被屏蔽的。然后,vexpandprophigh指令可用来生成x值的向量。这些x值可用于后续计算中。SIMD、向量或打包数据处理可用来并行处理x值的向量。
为了进一步说明某些概念,考虑上述示例循环可如何向量化的下列示例伪代码。在这个示例中,zmm*表示512位打包数据寄存器,以及KL表示以数据元素数量来计的向量长度。
zmml={KL-l:KL-2:... :2:1:0} //迭代的增量值的向量
zmm_iterations=zmml //初始化递增迭代的向量
n=0;
zmm3 = {0:0:0:.„:0:0} //采用零来初始化zmm3
broadcast A[0],zmm4 //采用A[0]来初始化zmm4
for(i=0; i+=KL; i<N){ //KL是向量中的元素的数量
kl [KL-1:0]=condition(i+KL-l :i) //生成KL迭代的源屏蔽
broadcast n+l,zmm2 //zmm2=n+l :n+l :n+l :..:n+l
zmm2 += zmml //zmm2=n+KL:n+KL-l :...:n+2:n+l
vexpandprophigh kl,zmm3,zmm2,zmm3 //zmm3中的n值的向量
vexpandprophigh kl,zmm4,&A[n+l],zmm4 //扩展源元素
// zmm4=x [i+KL-1 :i]=A [n(i+KL-1) :n(i)]
zmm5=computation(zmm3,zmm4,zmm_iterations) //向量计算
result[i+KL-l :i]=zmm5 //存储结果
zmm_iterations += zmml //使迭代的向量递增
n += popcnt(kl)} //使n递增k1中设置的位的计数
在上文中,第一vexpandprophigh指令用来生成zmm3中的KL迭代的这个集合的“n”个值的向量。这通过将vexpandprophigh指令应用于向量{n0+KL:n0+KL-l:...:n0+2:n0+l}进行,其中n0是对超前当前KL迭代集合的KL迭代集合中的最后迭代的n的所产生值。vexpandprophigh指令的第二实例用来扩展源数据元素,以生成x值的向量。在这个示例中,源数据元素处于存储器中(例如&A[n+l])。
为了进一步说明,考虑向量用于循环的八次迭代(迭代0至7)的上述循环的实现的示例。最初可评估条件,以生成源屏蔽(k1),并且起始数据可在可通过 vexpandprophigh指令所指示的源操作数中建立。
n=0
zmm3 = 0:*:*:*:*:*:*:* //初始化zmm3的最高阶数据元素中的0
zmm4 = A[0]:*:*:*:*:*:*:* //初始化zmm4的最高阶数据元素中的A[0]
kl = 01001000 //迭代0-7的源屏蔽
zmm2=8:7:6:5:4:3:2:l //迭代0-7的输入向量
vexpandprophigh kl, zmm3, zmm2, zmm3 //zmm3=2:2:l:l:l:0:0:0
vexpandprophigh kl, zmm4, &A[n+l], zmm4 // zmm4=A2:A2:Al :A1 :A1 :A0:A0:A0
popcnt(k 1 )=2 //k1中设置的二个位
随后,可评估八个条件的另一个集合,以生成迭代8至15的新源屏蔽(k1)。接着的八次迭代的起始数据的新集合可存储在新源操作数(zmm2)中。
n=2 //基于popcnt(k1)使n递增
zmm3=2:2:1:1:1:0:0:0 //来自先前迭代(0-7)的结果
zmm4=A2:A2:Al:Al:Al:A0:A0:A0 //来自先前迭代(0-7)的结果
kl = 10010100 //迭代8-15的控制屏蔽
zmm2=10:9:8:7:6:5:4:3 //迭代8-15的输入向量
vexpandprophigh kl,zmm3,zmm2,zmm3 //zmm3=5:4:4:4:3:3:2:2
vexpandprophighkl ,zmm4,&A[n+l ],zmm4
//zmm4=A5:A4:A4:A4:A3:A3:A2:A2
popcnt(kl)=3 //k1中的三个设置位
这个过程一般可对循环的后续迭代重复进行。
图7是打包数据寄存器708的适当集合的示例实施例的框图。打包数据寄存器包括32个512位打包数据寄存器,标记为ZMM0至ZMM31。在所示实施例中,下方16个寄存器、即ZMM0-ZMM15的低阶256位混叠或覆盖于相应256位打包数据寄存器(标记为YMM0-YMM15),但是这不作要求。同样,在所示实施例中,寄存器YMM0-YMM15的低阶128位混叠或覆盖于相应128位打包数据寄存器(标记为XMM0-XMM15),但是这也不作要求。512位寄存器ZMM0至ZMM31可操作以保持512位打包数据、256位打包数据或128位打包数据。256位寄存器YMM0-YMM15可操作以保存256位打包数据或128位打包数据。128位寄存器XMM0-XMM15可操作以保存128位打包数据。在一些实施例中,寄存器的每个可用来存储打包浮点数据或打包整数数据。支持不同的数据元素大小,包括至少8位字节数据、16位字数据、32位双字、32位单精度浮点数据、64位四字和64位双精度浮点数据。在备选实施例中,可使用不同数量的寄存器和/或不同大小的寄存器。在又一些实施例中,寄存器可以或者可以不使用较大寄存器在较小寄存器上的混叠,和/或可以或者可以不用来存储浮点数据。
图8是示出屏蔽位的数量取决于打包数据宽度和打包数据元素宽度的表890。示出128位、256位和512位的打包数据宽度,但是其他宽度也是可能的。考虑8位字节、16位字、32位双字(dword)或者单精度浮点以及64位四字(Qword)或双精度浮点的打包数据元素宽度,但是其他宽度也是可能的。
图9是打包数据操作屏蔽寄存器908的适当集合的示例实施例的框图。打包数据操作屏蔽寄存器的每个可用来存储打包数据操作屏蔽。在所示实施例中,集合包括标记为k0至k7的八个寄存器。备选实施例可包括少于八个寄存器(例如二、四、六个等)或者多于八个寄存器(例如十六、三十二个等)。在所示实施例中,寄存器的每个为64位。在备选实施例中,寄存器的宽度可宽于64位(例如80位、128位等)或者窄于64位(例如8位、16位、32位等)。寄存器可使用众所周知的技术按照不同方式来实现,而并不局限于任何已知的特定类型的电路。适当寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器及其组合。作为举例,指令可使用三位(例如3位字段)来编码或指定八个打包数据操作屏蔽寄存器k0至k7的任一个。在备选实施例中,当存在更少或更多打包数据操作屏蔽寄存器时,可分别使用更少或更多位。在一些实施例中,屏蔽可存储在这些寄存器的最低阶位中,但是这不作要求。
指令集包括一个或多个指令格式。给定指令格式定义各种字段(位数、位的位置),以指定将要执行的操作(操作码)以及对其将要执行操作的(一个或多个)操作数等等。一些指令格式经过指令模板的定义(或者子格式)进一步分解。例如,给定指令格式的指令模板可定义成具有指令格式的字段的不同子集(所包含的字段通常按照相同顺序,但是至少一部分具有不同的位位置,因为包含了更少字段),和/或定义成具有以不同方式所解释的给定字段。因此,ISA的各指令使用给定指令格式来表达(以及如果被定义,则采用该指令格式的指令模块的给定指令模块),并且包括用于指定操作和操作数的字段。例如,示范ADD指令具有特定操作码和指令格式,其包括指定该操作码的操作码字段以及选择操作数(源1/目的地和源2)的操作数字段;以及这个ADD指令在指令流中的出现将在选择特定操作数的操作数字段中具有特定内容。称作高级向量扩展(AVX)(AVX1和AVX2)并且使用向量扩展(VEX)编码方案的SIMD扩展集合已经发布和/或发表(例如参见Intel® 64和IA-32架构软件开发人员手册,2011年10月;并且参见Intel®高级向量扩展编程参考,2011年6月)。
示范指令格式
本文所述的(一个或多个)指令的实施例可按照不同格式来实施。另外,下面详述示范系统、架构和管线。(一个或多个)指令的实施例可在这类系统、架构和管线上运行,但是并不局限于那些细节。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,存在向量操作特定的某些字段)。虽然描述向量和标量操作均经过向量友好指令格式来支持的实施例,但是备选实施例仅使用向量友好指令格式的向量操作。
图10A-10B是示出按照本发明的实施例的通用向量友好指令格式及其指令模板的框图。图10A是示出按照本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图10B是示出按照本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体来说,通用向量友好指令格式1000被定义A类和B类指令模板,其均包括无存储器存取1005指令模板和存储器存取1020指令模板。向量友好指令格式的上下文中的术语“通用”表示指令格式没有绑定到任何特定指令集。
虽然将描述向量友好指令格式支持如下方面的本发明的实施例:具有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字节向量操作数)。
图10A中的A类指令模板包括:1) 在无存储器存取1005指令模板中,示出无存储器存取、全舍入控制类型(full round control type)操作1010指令模板和无存储器存取、数据变换类型操作1015指令模板;以及2)在存储器存取1020指令模板中,示出存储器存取、时间上的1025指令模板和存储器存取、非时间上的1030指令模板。图10B中的B类指令模板包括:1) 1) 在无存储器存取1005指令模板中,示出无存储器存取、写屏蔽控制、部分舍入控制类型操作1012指令模板和无存储器存取、写屏蔽控制、vsize操作1017指令模板;以及2)在存储器存取1020指令模板中,示出存储器存取、写屏蔽控制1027指令模板。
通用向量友好指令格式1000包括以下按照图10A-10B所示顺序所列示的下列字段。
格式化字段1040 – 这个字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且因而识别指令流中按照向量友好指令格式的指令的出现。因此,在不是仅具有通用向量友好指令格式的指令集所需的意义上,这个字段是可选的。
基础操作字段1042 – 其内容区分不同的基础操作。
寄存器变址字段1044 – 其内容直接地或者经过地址生成来指定源和目的地操作数的位置(如果它们在寄存器中或者在存储器中)。这些包括足够的位数,以便从P×Q (例如32×512、16×128、32×1024,、64×1024)寄存器堆中选择N个寄存器。虽然在一个实施例中,N可达三个源和一个目的地寄存器,但是备选实施例可支持更多或更少的源和目的地寄存器(例如,可支持达两个源(其中这些源之一还充当目的地),可支持达三个源(其中这些源之一还充当目的地),可支持达两个源和一个目的地)。
修改符字段1046 – 其内容区分按照通用向量指令格式的指令的出现,其指定来自不是这样(即,在无存储器存取1005指令模板与存储器存取1020指令模板之间)的那些的存储器存取。存储器存取操作对存储器分级结构进行读和/或写(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器存取操作则不是这样(例如源和目的地是寄存器)。虽然在一个实施例中,这个字段也在执行存储器地址计算的三种不同方式之间进行选择,但是备选实施例可支持执行存储器地址计算的更多、更少或不同的方式。
扩充操作字段1050 – 其内容区分除了基础操作之外、多种不同操作的哪一个还要被执行。这个字段是上下文特定的。在本发明的一个实施例中,这个字段分为类字段1068、α字段1052和β字段1054。扩充操作字段1050允许操作的共同编组在单个指令、而不是2、3或4个指令中执行。
缩放(scale)字段1060 – 其内容允许用于存储器地址生成(例如,用于使用2scale * 变址 + 基址的地址生成)的变址字段的内容的缩放。
位移字段1062A – 其内容用作存储器地址生成的部分(例如用于使用2scale *变址+ 基址 + 位移的地址生成)。
位移因数字段1062B(注意,直接在位移因数字段1062B之上的位移字段1062A的并置指示使用一个或另一个) – 其内容用作地址生成的部分;它指定通过存储器存取的大小(N)来缩放的位移因数—其中N是存储器存取中的字节数(例如,用于使用2scale *变址 + 基址 + 已缩放的位移的地址生成)。忽略冗余低阶位,并且因此位移因数字段的内容与存储器操作数总大小(N)相乘,以便生成计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于全操作码字段1074(本文稍后所述)和数据操纵字段1054C来确定。位移字段1062A和位移因数字段1062B在它们没有用于无存储器存取1005指令模板的意义上是可选的和/或不同实施例可以仅实现这两个中的一个或二者。
数据元素宽度字段1064 – 其内容区分要使用多个数据元素宽度的哪一个(在一些实施例中对于全部指令;在其他实施例中仅对于指令的一部分)。在仅支持一个数据元素宽度而不需要这个字段的意义上,这个字段是可选的,和/或数据元素宽度使用操作码的某个方面来支持。
写屏蔽字段1070 – 其内容基于每数据元素位置来控制目的地向量操作数中的那个数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并–写屏蔽,而B类指令模板支持合并-和调零-写屏蔽。当合并时,向量屏蔽允许目的地中的元素的任何集合在任何操作的执行期间被保护以免更新(通过基础操作和扩充操作所指定);在另一实施例中,保存目的地的各元素的旧值,其中对应屏蔽位具有0。相比之下,当调零时,向量屏蔽允许目的地中的元素的任何集合在任何操作的执行期间被调零(通过基础操作和扩充操作所指定);在一个实施例中,当对应屏蔽位具有0值时,目的地的元素设置为0。这个功能性的子集是控制被执行操作的向量长度的能力(也就是说,元素的跨度从第一个修改成最后一个);但是,修改的元素是连续的不是必需的。因此,写屏蔽字段1070允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述写屏蔽字段1070的内容选择包含待使用写屏蔽的多个写屏蔽寄存器其中之一(并且因而写屏蔽字段1070的内容间接地识别待执行屏蔽)的本发明的实施例,但是作为替代或补充,备选实施例允许屏蔽写字段1070的内容直接指定待执行屏蔽。
立即(immediate)字段1072 – 其内容允许立即的指定。在这个字段不存在于不支持立即的通用向量友好格式的实现中以及不存在于没有使用立即的指令中的意义上,这个字段是可选的。
类字段1068 – 其内容区分指令的不同类。参照图10A-B,这个字段的内容在A类与B类指令之间进行选择。图10A-B中,圆角正方形用来指示特定值存在于字段中(例如,分别在图10A-B中的类字段1068的A类1068A和B类1068B)。
A类的指令模板
在A类的非存储器存取1005指令模板的情况下,α字段1052被解释为RS字段1052A,其内容区分不同扩充操作类型的哪一个要被执行(例如,对无存储器存取、舍入类型操作1010和无存储器存取、数据变换类型操作1015指令模板分别指定舍入1052A.1和数据变换1052A.2),而β字段1054区分要执行所指定类型的操作的哪一个。在无存储器存取1005指令模板中,缩放字段1060、位移字段1062A和位移缩放字段1062B不存在。
无存储器存取指令模板 – 全舍入控制类型操作
在无存储器存取全舍入控制类型操作1010指令模板中,β字段1054被解释为舍入控制字段1054A,其(一个或多个)内容提供静态舍入。虽然在本发明的所述实施例中,舍入控制字段1054A包括抑制所有浮点异常(SAE)字段1056和舍入操作控制字段1058,但是备选实施例可支持将这些概念均编码到同一字段中,或者仅具有这些概念/字段的一个或另一个(例如可以仅具有舍入操作控制字段1058)。
SAE字段1056 – 其内容区分是否禁用异常事件报告;当SAE字段1056的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志,并且不提出任何浮点异常处理程序(handler)。
舍入操作控制字段1058 – 其内容区分要执行一组舍入操作的哪一个(例如上舍入、下舍入、向零方向舍入和舍入到最近)。因此,舍入操作控制字段1058允许基于每指令来改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1050的内容覆盖该寄存器值。
无存储器存取指令模板 – 数据变换类型操作
在无存储器存取数据变换类型操作1015指令模板中,β字段1054被解释为数据变换字段1054B,其内容区分要执行多个数据变换的哪一个(例如无数据变换、搅和、广播)。
在A类的存储器存取1020指令模板的情况下,α字段1052被解释为逐出提示字段1052B,其内容区分要使用逐出提示的哪一个(图10A中,对存储器存取、时间上的1025指令模板和存储器存取、非时间上的1030指令模板分别指定时间上的1052B.1和非时间上的1052B.2),而β字段1054被解释为数据操纵字段1054C,其内容区分要执行多个数据操纵操作(又称作原语)的哪一个(例如,无操纵、广播、源的上变换和目的地的下变换)。存储器存取1020指令模板包括缩放字段1060以及可选的位移字段1062A或位移缩放字段1062B。
向量存储器指令采用转换支持来执行从存储器的向量加载以及对存储器的向量存储。如同正则向量指令一样,向量存储器指令逐个数据元素地从/向存储器传递数据,其中实际传递的元素通过选择作为写屏蔽的向量屏蔽的内容来规定。
存储器存取指令模板 – 时间上的
时间数据是可能足够快再使用以获益于高速缓存的数据。但是,这是提示,并且不同处理器可按照不同方式(包括完全忽略提示)来实现它。
存储器存取指令模板 – 非时间上的
非时间数据是不可能足够快被再使用以获益于第1级高速缓存中的高速缓存的数据,并且应当被给予逐出的优先级。但是,这是提示,并且不同处理器可按照不同方式(包括完全忽略提示)来实现它。
B类的指令模板
在B类的指令模板的情况下,α字段1052被解释为写屏蔽控制(Z)字段1052C,其内容区分写屏蔽字段1070所控制的写屏蔽应当是合并还是调零。
在B类的非存储器存取1005指令模板的情况下,β字段1054的部分被解释为RL字段1057A,其内容区分不同扩充操作类型的哪一个要被执行(例如,对无存储器存取、写屏蔽控制、部分舍入控制类型操作1012指令模板和无存储器存取、写屏蔽控制、VSIZE类型操作1017指令模板分别指定舍入1057A.1和向量长度(VSIZE)1057A.2),而β字段1054的其余部分区分要执行所指定类型的操作的哪一个。在无存储器存取1005指令模板中,缩放字段1060、位移字段1062A和位移缩放字段1062B不存在。
在无存储器存取、写屏蔽控制、部分舍入控制类型操作1010指令模板中,β字段1054的其余部分被解释为舍入操作字段1059A,并且禁用异常事件报告(给定指令不报告任何种类的浮点异常标志,并且不提出任何浮点异常处理程序)。
舍入操作控制字段1059A – 正如舍入操作控制字段1058,其内容区分要执行一组舍入操作的哪一个(例如上舍入、下舍入、向零方向舍入和舍入到最近)。因此,舍入操作控制字段1059A允许基于每指令来改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1050的内容覆盖该寄存器值。
在无存储器存取、写屏蔽控制、VSIZE类型操作1017指令模板中,β字段1054的其余部分被解释为向量长度字段1059B,其内容区分多个数据向量长度的哪一个要被执行(例如128、256或512字节)。
在B类的存储器存取1020指令模板的情况下,β字段1054的部分被解释为广播字段1057B,其内容区分广播类型数据操纵操作是否要被执行,而β字段1054的其余部分被解释为向量长度字段1059B。存储器存取1020指令模板包括缩放字段1060以及可选的位移字段1062A或位移缩放字段1062B。
关于通用向量友好指令格式1000,示出全操作码字段1074,其包括格式字段1040、基础操作字段1042和数据元素宽度字段1064。虽然示出全操作码字段1074包括全部这些字段的一个实施例,但是在不支持它们全部的实施例中,全操作码字段1074包括少于全部这些字段。全操作码字段1074提供操作代码(操作码)。
扩充操作字段1050、数据元素宽度字段1064和写屏蔽字段1070允许这些特征基于每指令在通用向量友好指令格式中指定。
写屏蔽字段和数据元素宽度字段的组合创建类型化的指令,因为它们允许屏蔽基于不同数据元素宽度来应用。
存在于A类和B类中的各种指令模板在不同状况中是有益的。在本发明的一些实施例中,不同处理器或者处理器中的不同核心可支持仅A类、仅B类或者两类。例如,预计用于通用计算的高性能通用无序核心可以仅支持B类,主要预计用于图形和/或科学(吞吐量)计算的核心可以仅支持A类,以及预计用于两者的核心可支持两者(当然,具有来自两类的模板和指令的某种混合但是没有来自两类的所有模板和指令的核心处于本发明的范围之内)。另外,单个处理器可包括多个核心,其全部支持相同类,或者其中不同核心支持不同类。例如,在具有单独图形和通用核心的处理器中,主要预计用于图形和/或科学计算的图形核心之一可以仅支持A类,而通用核心的一个或多个可以是具有预计用于通用计算的无序执行和寄存器重命名的高性能通用核心,其仅支持B类。没有单独图形核心的另一个处理器可包括一个或多个通用有序或无序核心,其支持A类以及B类。当然,在本发明的不同实施例中,来自一类的特征也可在另一类中实现。通过高级语言所编写的程序输入(例如就在编译或静态编译时)到多种不同的可执行形式中,包括:1) 仅具有目标处理器所支持的(一个或多个)类的指令供执行的形式;或者2) 具有使用所有类的指令的不同组合所编写的备选例程并且具有控制流程代码(其基于当前运行代码的处理器所支持的指令来选择要运行的例程)的形式。
示范特定向量友好指令格式
图11是示出按照本发明的实施例的示范特定向量友好指令格式的框图。图11示出特定向量友好指令格式1100,其在指定字段的位置、大小、解释和顺序以及那些字段的一部分的值的意义上是特定的。特定向量友好指令格式1100可用来扩展x86指令集,并且因而字段的一部分与现有x86指令集及其扩展(例如AVX)中使用的字段相似或相同。这个格式保持为与具有扩展的现有x86指令集的前缀编码字段、真正操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即字段一致。示出来自图11的字段映射到来自图10的字段中。
应当理解,虽然为了便于说明而在通用向量友好指令格式1000的上下文中参照特定向量友好指令格式1100来描述本发明的实施例,但是本发明并不局限于特定向量友好指令格式1100,除了要求保护的情况之外。例如,通用向量友好指令格式1000考虑各种字段的多种可能大小,而特定向量友好指令格式1100示为具有特定大小的字段。通过特定示例,虽然数据元素宽度字段1064示为特定向量友好指令格式1100中的一位字段,但是本发明并不局限于此(也就是说,通用向量友好指令格式1000考虑数据元素宽度字段1064的其他大小)。
通用向量友好指令格式1000包括以下按照图11A所示顺序所列示的下列字段。
EVEX前缀(字节0-3) 1102 – 按照四字节形式来编码。
格式字段1040(EVEX字节0、位[7:0]) – 第一字节(EVEX字节0)是格式字段1040,并且它包含0×62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段1105(EVEX字节1,位[7-5]) – 由EVEX.R位字段(EVEX字节1,位[7] – R)、EVEX.X位字段(EVEX字节1,位[6] – X)和1057BEX字节1、位[5] – B)来组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应VEX位字段相同的功能性,并且使用1的补数的形式来编码,即,ZMM0编码为111B,ZMM15编码为0000B。指令的其他字段如本领域已知对寄存器变址的下三位进行编码(rrr、xxx和bbb),使得Rrrr、Xxxx和Bbbb可通过相加EVEX.R、EVEX.X和EVEX.B来形成。
REX’字段1010 – 这是REX’字段1010的第一部分,并且是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来形成。
操作码映射字段1115(EVEX字节1,位[3:0] – mmmm) – 其内容对暗示的领先操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段1064 (EVEX字节2,位[7] – W) – 通过记号EVEX.W来表示。EVEX.W用来定义数据类型的粒度(大小)(32位数据元素或者64位数据元素)。
EVEX.vvvv 1120(EVEX字节2,位[6:3]-vvvv) – EVEX.vvvv的作用可包括如下:1)EVEX.vvvv对于按照反转(1的补码)形式所指定的第一源寄存器操作数进行编码,并且对具有2或以上源操作数的指令是有效的;2) EVEX.vvvv对于某些向量移位按照1的补码的形式所指定的目的地寄存器操作数进行编码;或者3) EVEX.vvvv没有对任何操作数进行编码,该字段被保留并且应当包含1111b。因此,EVEX.vvvv字段1120对于按照反转(1的补码)形式所存储的第一源寄存器指定符的4个低阶位进行编码。取决于指令,额外的不同EVEX位字段用来将特定大小扩展到32个寄存器。
EVEX.U 1068类字段(EVEX字节2,位[2]-U) – 如果EVEX.U = 0,则它指示A类或EVEX.U0;如果EVEX.U = 1,则它指示B类或EVEX.U1。
前缀编码字段1125(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前缀编码,并且因而不要求扩展。
α字段1052(EVEX字节3,位[7] – EH;又称作EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写屏蔽控制和EVEX.N;也采用α示出) – 如先前所述,这个字段是上下文特定的。
β字段1054(EVEX字节3,位[6:4]-SSS,又称作EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也采用βββ示出) – 如先前所述,这个字段是上下文特定的。
REX’字段1010 – 这是REX’字段的其余部分,并且是EVEX.V’位字段(EVEX字节3,位[3] – V’),其可用来对扩展32寄存器组的上16或下16进行编码。这个位按照位反转格式来存储。值1用来对下方16个寄存器进行编码。换言之,V’VVVV通过组合EVEX.V’、EVEX.vvvv来形成。
写屏蔽字段1070(EVEX字节3,位[2:0]-kkk) – 其内容指定写屏蔽寄存器中的寄存器的变址,如先前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写屏蔽用于特定指令的特殊行为(这可按照多种方式来实现,包括使用硬连线到全部一的写屏蔽或者绕过屏蔽硬件的硬件)。
真正操作码字段1130(字节4)又称作操作码字节。操作码的部分在这个字段中指定。
MOD R/M字段1140(字节5)包括MOD字节1142、Reg字段1144和/或R/M字段1146。如先前所述,MOD字段1142的内容区分存储器存取和非存储器存取操作。Reg字段1144的作用能够概括成两种状况:对目的地寄存器操作数或者源寄存器操作数进行编码,或者被看作是操作码扩展而不用来对任何指令操作数进行编码。R/M字段1146的作用可包括如下:对于引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
缩放、变址、基址(SIB)字节(字节6) – 如先前所述,缩放字段1050的内容用于存储器地址生成。SIB.xxx 1154和SIB.bbb 1156 – 先前针对寄存器变址Xxxx和Bbbb已经提到这些字段的内容。
位移字段1062A(字节7-10) – 当MOD字段1142包含10时,字节7-10是位移字段1062A,并且它与遗留32位位移(disp32)相同地进行工作,并且以字节粒度进行工作。
位移因数字段1062B (字节7) – 当MOD字段1142包含01时,字节7是位移因数字段1062B。这个字段的位置是与遗留x86指令集8位位移(disp8)相同的字段,其以字节粒度进行工作。由于disp8是符号扩展,所以它能够仅在-128与127字节偏移之间进行寻址;根据64字节高速缓存线,disp8使用8位,其能够设置成仅四个实际有用值-128、-64、0和64;由于常常需要较大范围,所以使用disp32;但是disp32要求4个字节。与disp8和disp32形成对照,位移因数字段1062B是disp8的重新解释;当使用位移因数字段1062B时,实际位移通过位移因数字段的内容乘以存储器操作数存取的大小(N)来确定。这种类型的位移称作disp8*N。这减少平均指令长度(用于位移但是具有大许多的范围的单个字节)。这种压缩位移基于如下假设:有效位移是存储器存取的粒度的倍数,并且因此地址偏移的冗余低阶位无需被编码。换言之,位移因数字段1062B代替遗留x86指令集8位位移。因此,位移因数字段1062B按照与x86指令集8位位移相同的方式来编码(因此没有ModRM/SIB编码规则的变化),其中唯一的例外是disp8过度加载到disp8*N。换言之,不存在编码规则或编码长度的变化,而是仅存在硬件(其需要对位移进行缩放的倍数是存储器操作数的大小,以得到逐字节的地址偏移)对位移值的解释的变化。
立即字段1072如先前所述进行操作。
全操作码字段
图11B是示出按照本发明的一个实施例、组成全操作码字段1074的特定向量友好指令格式1100的字段的框图。具体来说,全操作码字段1074包括格式字段1040、基础操作字段1042和数据元素宽度(W)字段1064。基础操作字段1042包括前缀编码字段1125、操作码映射字段1115和真正操作码字段1130。
寄存器变址字段
图11C是示出按照本发明的一个实施例、组成寄存器变址字段1044的特定向量友好指令格式1100的字段的框图。具体来说,寄存器变址字段1044包括REX字段1105、REX’字段1110、MODR/M.reg字段1144、MODR/M.r/m字段1146、VVVV字段1120、xxx字段1154和bbb字段1156。
扩充操作字段
图11D是示出按照本发明的一个实施例、组成扩充操作字段1050的特定向量友好指令格式1100的字段的框图。当类(U)字段1068包含0时,它表示EVEX.U0(A类1068A);当它包含1时,它表示EVEX.U1(B类1068B)。
当U=0并且MOD字段1142包含11(表示无存储器存取操作)时,α字段1052(EVEX字节3,位[7] – EH)被解释为rs字段1052A。当rs字段1052A包含1(舍入1052A.1)时,β字段1054(EVEX字节3,位[6:4] – SSS)被解释为舍入控制字段1054A。舍入控制字段1054A包括一位SAE字段1056和二位舍入操作字段1058。当rs字段1052A包含0(数据变换1052A.2)时,β字段1054(EVEX字节3,位[6:4] – SSS)被解释为三位数据变换字段1054B。当U=0并且MOD字段1142包含00、01或10(表示存储器存取操作)时,α字段1052(EVEX字节3,位[7] – EH)被解释为逐出提示(EH)字段1052B,以及β字段1054(EVEX字节3,位[6:4] – SSS)被解释为三位数据操纵字段1054C。
当U=1时,α字段1052(EVEX字节3,位[7] – EH)被解释为写屏蔽控制(Z)字段1052C。当U=1并且MOD字段1142包含11(表示无存储器存取操作)时,β字段1054的部分(EVEX字节3,位[4] – S0)被解释为RL字段1057A;当它包含1(舍入1057A.1)时,β字段1054的其余部分(EVEX字节3,位[6-5] – S2-1)被解释为舍入操作字段1059A,而当RL字段1057A包含0(VSIZE 1057.A2)时,β字段1054的其余部分(EVEX字节3,位[6-5] – S2-1)被解释为向量长度字段1059B(EVEX字节3,位[6-5] – L1-0)。当U=1并且MOD字段1142包含00、01或10(表示存储器存取操作)时,β字段1054(EVEX字节3,位[6:4] – SSS)被解释为向量长度字段1059B(EVEX字节3,位[6-5] – L1-0)和广播字段1057B(EVEX字节3,位[4] – B)。
示范寄存器架构
图12是按照本发明的一个实施例的寄存器架构1200的框图。在所示实施例中,存在512位宽的32个向量寄存器1210;这些寄存器称作zmm0至zmm31。下方16个zmm寄存器的低阶256位覆盖于寄存器ymm0-16。下方16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖于寄存器xmm0-15。特定向量友好指令格式1100对这些覆盖寄存器堆进行操作,如下表所示。
换言之,向量长度字段1059B在最大长度与一个或多个其他较短长度之间进行选择,其中每个这种较短长度是超前长度的一半长度;以及没有向量长度字段1059B的指令模板对最大向量长度进行操作。此外,在一个实施例中,特定向量友好指令格式1100的B类指令模板对打包或标量单/双精度浮点数据和打包或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置所执行的操作;高阶数据元素位置保持为与它们在指令之前原本的情况相同或者根据本实施例调零。
写屏蔽寄存器1215 – 在所示实施例中,存在8个写屏蔽寄存器(k0至k7),每个的大小为64位。在备选实施例中,写屏蔽寄存器1215的大小为16位。如先前所述,在本发明的一个实施例中,向量屏蔽寄存器k0不能用作写屏蔽;当正常指示k0的编码用于写屏蔽时,它选择0xFFFF的硬连线写屏蔽,从而有效地禁用那个指令的写屏蔽。
通用寄存器1225 – 在所示实施例中,存在16个64位通用寄存器,其连同现有x86寻址模式一起使用来对存储器操作数进行寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15而被引用。
标量浮点栈寄存器堆(x87栈)1245(其上被混叠MMX打包整数平面寄存器堆1250)– 在所示实施例中,x87栈是八元素栈,其用来使用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作;而MMX寄存器用来对64位打包整数数据执行操作,以及保存在MMX与XMM寄存器之间执行的一些操作的操作数。
本发明的备选实施例可使用更宽或更窄的寄存器。另外,本发明的备选实施例可使用更多、更少或不同的寄存器堆和寄存器。
示范核心架构、处理器和计算机架构
处理器核心可按照不同方式为了不同目的并且在不同的处理器中实现。例如,这类核心的实现可包括:1) 预计用于通用计算的通用有序核心;2) 预计用于通用计算的高性能通用无序核心;3) 主要预计用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现可包括:1) CPU,包括预计用于通用计算的一个或多个通用有序核心和/或预计用于通用计算的一个或多个通用无序核心;以及2) 协处理器,包括主要预计用于图形和/或科学(吞吐量)的一个或多个专用核心。这类不同的处理器引起不同的计算机系统架构,其可包括:1) 与CPU分开的芯片上的协处理器;2) 与CPU相同的打包中的单独晶片(die)上的协处理器;3) 与CPU相同的晶片上的协处理器(在这种情况下,这种协处理器有时称作专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者称作专用核心);以及4) 可在相同晶片上包括所述CPU(有时称作应用核心(一个或多个)或应用处理器(一个或多个))、上述协处理器和附加功能性的芯片上的系统。接下来描述示范核心架构,之后接着示范处理器和计算机架构的描述。
示范核心架构
有序和无序核心框图
图13A是示出按照本发明的实施例、示范有序管线和示范寄存器重命名、无序发出/执行管线的框图。图13B是示出按照本发明的实施例、包含在处理器中的有序架构核心和示范寄存器重命名、无序发出/执行架构核心的框图。图13A-B中的实线框示出有序管线和有序核心,而虚线框的可选添加示出寄存器重命名、无序发出/执行管线和核心。假定有序方面是无序方面的子集,将描述无序方面。
图13A中,处理器管线1300包括取级1302、长度解码级1304、解码级1306、分配级1308、重命名级1310、调度(又称作分发或发出)级1312、寄存器读/存储器读级1314、运行级1316、回写/存储器写级1318、异常处理级1322和提交级1324。
图13B示出包括耦合到执行引擎单元1350并且均耦合到存储器单元1370的前端单元1330的处理器核心1390。核心1390可以是简化指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或者混合或备选核心类型。作为又一个选项,核心1390可以是专用核心(例如网络或通信核心)、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元1330包括耦合到指令高速缓存单元1334的分支预测单元1332,指令高速缓存单元1334耦合到指令转化后备缓冲器 (TLB)1336,指令转化后备缓冲器(TLB)1336耦合到指令取单元1338,指令取单元1338耦合到解码单元1340。解码单元1340(或解码器)可对指令进行解码,并且作为输出生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令来解码或得出或者以其他方式反映原始指令。解码单元1340可使用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核心1390包括微代码ROM或另一介质,其存储某些宏指令的微代码(例如在解码单元1340中或者在前端单元1330中)。解码单元1340耦合到执行引擎单元1350的重命名/分配器单元1352。
执行引擎单元1350包括重命名/分配器单元1352,其耦合到引退单元1354和一组一个或多个调度器单元1356。(一个或多个)调度器单元1356表示任何数量的不同调度器,包括保留站、中心指令窗口等。(一个或多个)调度器单元1356耦合到(一个或多个)物理寄存器堆单元1358。(一个或多个)物理寄存器堆单元1358的每个表示一个或多个物理寄存器堆,其中不同的寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要运行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元1358包括向量寄存器单元、写屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量屏蔽寄存器和通用寄存器。(一个或多个)物理寄存器堆单元1358被引退单元1354重叠,以示出可实现寄存器重命名和无序执行的各种方式(例如使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)将来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元1354和(一个或多个)物理寄存器堆单元1358耦合到(一个或多个)执行聚类1360。(一个或多个)执行聚类1360包括一组一个或多个执行单元1362和一组一个或多个存储器存取单元1364。执行单元1362可执行各种操作(例如移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)来执行。虽然一些实施例可包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或多个执行单元,其全部执行全部功能。(一个或多个)调度器单元1356、(一个或多个)物理寄存器堆单元1358和(一个或多个)执行聚类1360示为可能是多个的,因为某些实施例创建某些类型的数据/操作的单独管线(例如标量整数管线、标量浮点/打包整数/打包浮点/向量整数/向量浮点管线和/或存储器存取管线,其各具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行聚类—以及在单独存储器存取管线的情况下,实现只有这个管线的执行聚类具有(一个或多个)存储器存取单元1364的某些实施例)。还应当理解,在使用独立管线的情况下,这些管线的一个或多个可以是无序发出/执行,而其余的是有序的。
存储器存取单元1364的集合耦合到存储器单元1370,其包括耦合到数据高速缓存单元1374(其耦合到第2级(L2)高速缓存单元1376)的数据TLB单元1372。在一个示范实施例中,存储器存取单元1364可包括加载单元、存储地址单元和存储数据单元,其各耦合到存储器单元1370中的数据TLB单元1372。指令高速缓存单元1334还耦合到存储器单元1370中的第2级(L2)高速缓存单元1376。L2高速缓存单元1376耦合到一个或多个其他等级的高速缓存,并且最终耦合到主存储器。
作为举例,示范寄存器重命名、无序发出/执行核心架构可按如下所述实现管线1300:1) 指令取1338执行取和长度解码级1302和1304;2) 解码单元1340执行解码级1306;3) 重命名/分配器单元1352执行分配级1308和重命名级1310;4) (一个或多个)调度器单元1356执行调度级1312;5) (一个或多个)物理寄存器堆单元1358和存储器单元1370执行寄存器读/存储器读级1314;执行聚类1360执行运行级1316;6) 存储器单元1370和(一个或多个)物理寄存器堆单元1358执行回写/存储器写级1318;7) 各种单元可包含在异常处理级1322中;以及8) 引退单元1354和(一个或多个)物理寄存器堆单元1358执行提交级1324。
核心1390可支持一个或多个指令集(例如x86指令集(其中具有随较新版本已经添加的一些扩展);MIPS Technologies(Sunnyvale,CA)的MIPS指令集;ARM Holdings(Sunnyvale,CA)的ARM指令集(其中具有可选附加扩展、例如NEON)),包括本文所述的(一个或多个)指令。在一个实施例中,核心1390包括支持打包数据指令集扩展的逻辑(例如AVX1、AVX2),由此允许许多多媒体应用所使用的操作使用打包数据来执行。
应当理解,核心可支持多线程运行(运行操作或线程的两个或更多并行集合),并且可按照多种方式这样做,包括时间切片多线程运行、同时多线程运行(其中单个物理核心为物理核心同时多线程运行的线程的每个提供逻辑核心)或者其组合(例如,时间切片取和解码以及此后的同时多线程运行,例如在Intel®超线程技术中)。
虽然在无序执行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可用于有序架构中。虽然处理器的所示实施例还包括单独指令和数据高速缓存单元1334/1374和共享L2高速缓存单元1376,但是备选实施例可具有用于指令和数据的单个内部高速缓存,例如第1级(L1)内部高速缓存或者多级内部高速缓存。在一些实施例中,系统可包括内部高速缓存以及核心和/或处理器外部的外部高速缓存的组合。备选地,高速缓存全部可以是核心和/或处理器外部的。
特定示范有序核心架构
图14A-B示出更具体的示范有序核心架构的框图,该核心可以是芯片中的若干逻辑块其中之一(包括相同类型和/或不同类型的其他核心)。逻辑块经过具有某种固定功能逻辑、存储器I/O接口和其他必要I/O逻辑(这取决于应用)的高带宽互连网络(例如环形网络)进行通信。
图14A是按照本发明的实施例、单个处理器核心连同其到晶片上互连网络1402的连接以及连同其第2级(L2)高速缓存1404的本地子集的框图。在一个实施例中,指令解码器1400支持具有打包数据指令集扩展的x86指令集。L1高速缓存1406允许对标量和向量单元中的高速缓冲存储器的低等待时间访问。虽然在一个实施例中(为了简化设计),标量单元1408和向量单元1410使用单独寄存器组(分别为标量寄存器1412和向量寄存器1414),以及在它们之间所传递的数据被写到存储器并且然后从第1级(L1)高速缓存1406读回,但是本发明的备选实施例可使用不同方式(例如使用单个寄存器组,或者包括允许数据在两个寄存器堆之间来传递的通信,而无需被写入和读回)。
L2高速缓存1404的本地子集是全局L2高速缓存(其划分为单独本地子集,每处理器核心一个)的部分。各处理器核心具有到L2高速缓存1404的其自己的本地子集的直接访问通路。由处理器核心所读取的数据存储在其L2高速缓存子集1404中,并且能够与访问其自己的本地L2高速缓存子集的其他处理器核心并行地快速访问。由处理器核心所写入的数据存储在其自己的L2高速缓存子集1404中,并且在必要时从其他子集来刷新。环形网络确保共享数据的相干性。环形网络是双向的,以便允许诸如处理器核心、L2高速缓存和其他逻辑块之类的代理能够在芯片中相互通信。各环形数据通路每方向为1012位宽。
图14B是按照本发明的实施例、图14A中的处理器核心的部分的展开图。图14B包括L1高速缓存1404的L1数据高速缓存1406A部分以及与向量单元1410和向量寄存器1414有关的更多细节。具体来说,向量单元1410是16宽向量处理单元(VPU)(参见16宽ALU 1428),其运行整数、单精度浮点和双精度浮点指令的一个或多个。VPU支持采用搅和单元1420来搅和寄存器输入、采用数字转换单元1422A-B的数字转换以及采用复制单元1424对存储器输入的复制。写屏蔽寄存器1426允许判定所产生向量写。
具有集成存储器控制器和图形的处理器
图15是按照本发明的实施例、可具有一个以上核心、可具有集成存储器控制器并且可具有集成图形的处理器1500的框图。图15中的实线框示出具有单个核心1502A、系统代理1510、一组一个或多个总线控制器单元1516的处理器1500,而虚线框的可选添加示出具有多个核心1502A-N、系统代理单元1510中的一组一个或多个集成存储器控制器单元1514和专用逻辑1508的备选处理器1500。
因此,处理器1500的不同实现可包括:1) 具有作为集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)的专用逻辑1508和作为一个或多个通用核心(例如通用有序核心、通用无序核心、两者的组合)的核心1502A-N的CPU;2) 具有作为主要预计用于图形和/或科学(吞吐量)的大量专用核心的核心1502A-N的协处理器;以及3) 具有作为大量通用有序核心的核心1502A-N的协处理器。因此,处理器1500可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核心(MIC)协处理器(包括30个或以上核心)、嵌入式处理器等。处理器可在一个或多个芯片上实现。处理器1500可以是一个或多个衬底的一部分和/或可使用多种工艺技术的任一种、例如BiCMOS、CMOS或NMOS在一个或多个衬底上实现。
存储器分级结构包括核心中的一级或多级高速缓存、一组一个或多个共享高速缓存单元1506以及耦合到集成存储器控制器单元1514的集合的外部存储器(未示出)。共享高速缓存单元1506的集合可包括一个或多个中间级高速缓存,例如第2级(L2)、第3级(L3)、第4级(L4)或者其他高速缓存级、最后一级高速缓存(LLC)和/或它们的组合。虽然在一个实施例中,基于环形的互连单元1512互连集成图形逻辑1508、共享高速缓存单元1506的集合和系统代理单元1510/集成存储器控制器单元1514,但是备选实施例可将任何数量的众所周知技术用于互连这类单元。在一个实施例中,在一个或多个高速缓存单元1506与核心1502A-N之间保持一致性。
在一些实施例中,核心1502A-N的一个或多个能够进行多线程运行。系统代理1510包括协调和操作核心1502A-N的那些组件。系统代理单元1510可包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括用于调节核心1502A-N和集成图形逻辑1508的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心1502A-N在架构指令集方面可以是同构或异构的;也就是说,核心1502A-N的两个或更多可以能够运行相同指令集,而其他核心可以能够仅运行那个指令集的子集或者不同的指令集。
示范计算机架构
图16-19是示范计算机架构的框图。用于膝上型、台式、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器,数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器,蜂窝电话、便携媒体播放机、手持装置和各种其他电子装置的本领域已知的其他系统设计和配置也是适合的。一般来说,能够结合本文所公开的处理器和/或其他执行逻辑的大量系统或电子装置一般是适合的。
现在参照图16,所示的是按照本发明的一个实施例的系统1600的框图。系统1600可包括一个或多个处理器1610、1615,其耦合到控制器中枢1620。在一个实施例中,控制器中枢1620包括图形存储器控制器中枢(GMCH)1690和输入/输出中枢(IOH)1650(其可在单独芯片上);GMCH 1690包括存储器和图形控制器,存储器1640和协处理器1645与其耦合;IOH1650将输入/输出(I/O)装置1660耦合到GMCH 1690。备选地,存储器和图形控制器的一个或两者集成在处理器中(如本文所述),存储器1640和协处理器1645直接耦合到处理器1610,以及控制器中枢1620(与IOH 1650在单个芯片中)。
附加处理器1615的可选性质在图16中采用虚线表示。各处理器1610、1615可包括本文所述处理核心的一个或多个,并且可以是处理器1500的某个版本。
存储器1640可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或者两者的组合。对于至少一个实施例,控制器中枢1620经由多点总线(例如前侧总线(FSB))、点对点接口(例如QuickPath互连(QPI))或者类似连接1695与(一个或多个)处理器1610、1615进行通信。
在一个实施例中,协处理器1645是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器中枢1620可包括集成图形加速器。
在包括架构、微架构、热、功率消耗特性等的优点的衡量标准范围方面,在物理资源1610、1615之间存在各种差异。
在一个实施例中,处理器1610运行控制通用类型的数据处理操作的指令。嵌入在指令中的可以是协处理器指令。处理器1610将这些协处理器指令识别为应当由所附连的协处理器1645来运行的类型。相应地,处理器1610在协处理器总线或另一互连上向协处理器1645发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1645接受和运行所接收的协处理器指令。
现在参照图17,所示的是按照本发明的一实施例的第一更具体示范系统1700的框图。如图17所示,多处理器系统1700是点对点互连系统,并且包括经由点对点互连1750所耦合的第一处理器1770和第二处理器1780。处理器1770和1780的每个可以是处理器1500的某种版本。在本发明的一个实施例中,处理器1770和1780分别是处理器1610和1615,而协处理器1738是协处理器1645。在另一个实施例中,处理器1770和1780分别是处理器1610、协处理器1645。
示出处理器1770和1780,其分别包括集成存储器控制器(IMC)单元1772和1782。处理器1770还包括作为其总线控制器单元的部分的点对点(P-P)接口1776和1778;类似地,第二处理器1780包括P-P接口1786和1788。处理器1770、1780可使用点对点(P-P)接口电路1778、1788经由P-P接口1750来交换数据。如图17所示,IMC 1772和1782将处理器耦合到相应存储器、即存储器1732和存储器1734,其可以是本地附连到相应处理器的主存储器的部分。
处理器1770、1780均可使用点对点接口电路1776、1794、1786、1798经由个体P-P接口1752、1754与芯片组1790交换数据。芯片组1790可选地可经由高性能接口1739与协处理器1738交换信息。在一个实施例中,协处理器1738是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可包含处理器中或者两个处理器外部,但是仍然经由P-P互连与处理器连接,使得如果使处理器进入低功耗模式,则任一个或两个处理器的本地高速缓存信息可存储在共享高速缓存中。
芯片组1790可经由接口1796耦合到第一总线1716。在一个实施例中,第一总线1716可以是外设部件互连(PCI)总线或者例如PCI Express总线等总线或另一种第三代I/O互连总线,但是本发明的范围并不局限于此。
如图17所示,各种I/O装置1714可连同总线桥1718(其将第一总线1716耦合到第二总线1720)一起耦合到第一总线1716。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器之类的一个或多个附加处理器1715耦合到第一总线1716。在一个实施例中,第二总线1720可以是低引脚数(LPC)总线。在一个实施例中,各种装置可耦合到第二总线1720,包括例如键盘和/或鼠标1722、通信装置1727以及可包括指令/代码和数据1730的诸如磁盘驱动器或其他大容量存储装置之类的存储单元1728。此外,音频I/O 1724可耦合到第二总线1720。注意,其他架构是可能的。例如,代替图17的点对点架构,系统可实现多点总线或其他这种架构。
现在参照图18,所示的是按照本发明的一实施例的第二更具体示范系统1800的框图。图17和图18中的相似元件具有相似参考标号,并且从图18中省略图17的某些方面,以免影响对图18的其他方面的理解。
图18示出处理器1770、1780可分别包括集成存储器和I/O控制逻辑(“CL”)1772和1782。因此,CL 1772、1782包括集成存储器控制器单元,并且包括I/O控制逻辑。图18不仅示出存储器1732、1734耦合到CL 1772、1782,而且还示出I/O装置1814也耦合到控制逻辑1772、1782。传统I/O装置1815耦合到芯片组1790。
现在参照图19,所示的是按照本发明的一实施例的SoC 1900的框图。图15中的相似元件具有相似参考标号。另外,虚线框是更高级SoC上的可选特征。图19中,(一个或多个)互连单元1902耦合到:应用处理器1910,其包括一组一个或多个核心202A-N和(一个或多个)共享高速缓存单元1506;系统代理单元1510;(一个或多个)总线控制器单元1516;(一个或多个)集成存储器控制器单元1514;一组一个或多个协处理器1920,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1930;直接存储器存取(DMA)单元1932;以及显示单元1940,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1920包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文所公开的机制的实施例可通过硬件、软件、固件或者这类实现方式的组合来实现。本发明的实施例可实现为在可编程系统上运行的计算机程序或程序代码,其中可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
例如图17所示的代码1730等程序代码可应用于输入指令,以执行本文所述的功能并且生成输出信息。输出信息可按照已知方式应用于一个或多个输出装置。为了便于本申请,处理系统包括具有例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器等处理器的任何系统。
程序代码可通过高级过程或面向对象的编程语言来实现,以便与处理系统进行通信。根据需要,程序代码也可通过汇编或机器语言来实现。实际上,本文所述的机制的范围并不局限于任何具体编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可通过机器可读介质上存储的、表示处理器中的各种逻辑的代表指令来实现,其在由机器读取时使机器制作执行本文所述技术的逻辑。称作“IP核心”的这类表示可存储在有形机器可读介质上,并且提供给各种客户或制造设施,以加载到实际制作逻辑或处理器的制造机器中。
这种机器可读存储介质可以非限制性地包括通过机器或装置所制造或形成的产品的非暂时有形布置,其中包括:例如硬盘等存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW)和磁光盘;半导体器件,例如只读存储器(ROM)、例如动态随机存取存储器(DRAM)、静态随机存取存储器(SARAM)等随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
相应地,本发明的实施例还包括非暂时有形机器可读介质,其包含指令或者包含定义本文所述结构、电路、设备、处理器和/或系统特征的设计数据、例如硬件描述语言(HDL)。这类实施例又可称作程序产品。
模拟(包括二进制转化、代码变形等)
在一些情况下,指令转换器可用来将指令从源指令集转换成目标指令集。例如,指令转换器可将指令转化(例如使用静态二进制转化、包括动态编译的动态二进制转化)、变形、模拟或者以其他方式变换成将要由核心来处理的一个或多个其他指令。指令转换器可通过软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或者部分处理器上和部分处理器外。
图20是按照本发明的实施例、与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。在所示实施例中,指令转换器是软件指令转换器,但是备选地,指令转换器可通过软件、固件、硬件或者它们的各种组合来实现。图20示出高级语言2002的程序可使用x86编译器2004来编译,以生成x86二进制代码2006,其可由具有至少一个x86指令集核心的处理器2016本机运行。具有至少一个x86指令集核心的处理器2016表示任何处理器,其能够通过兼容地运行或者以其他方式处理下列方面来执行与具有至少一个x86指令集核心的Intel处理器基本上相同的功能:(1) Intel x86指令集核心的指令集的大部分;或者(2) 针对运行于具有至少一个x86指令集核心的Intel处理器的应用或其他软件的对象代码版本,以便取得与具有至少一个x86指令集核心的Intel处理器基本上相同的结果。x86编译器2004表示可操作以生成x86二进制代码2006(例如对象代码)(其能够在具有或没有附加链接处理的情况下运行于具有至少一个x86指令集核心的处理器2016)的编译器。类似地,图20示出高级语言2002的程序可使用备选指令集编译器2008来编译,以便生成备选指令集二进制代码2010,其可由没有至少一个x86指令集核心的处理器2014(例如具有运行MIPS Technologies(Sunnyvale,CA)的MIPS指令集和/或运行ARMHoldings(Sunnyvale,CA)的ARM指令集的核心的处理器)本机运行。指令转换器2012用来将x86二进制代码2006转换为可由没有x86指令集核心的处理器2014本机运行的代码。这个转换代码不可能与备选指令集二进制代码2010是相同的,因为能够进行这个操作的指令转换器难以制作;但是,转换代码将实现一般操作,并且由来自备选指令集的指令来组成。因此,指令转换器2012表示软件、固件、硬件或者其组合,其经过模拟、仿真或者任何其他过程允许处理器或者没有x86指令集处理器或核心的另一电子装置运行x86二进制代码2006。
对图3-9的任一个所述的组件、特征和细节也可选地可用于图1-2的任一个中。此外,本文对本文所述设备的任一个所述的组件、特征和细节也可选地可用于和/或应用于本文所述方法的任一个,其在实施例中可由和/或采用这种设备来执行。本文所述处理器的任一个可包含在计算机系统或者本文所述的其他系统的任一个中。指令可具有本文所述的各种指令格式的任一种。
在本描述和权利要求书中,可使用术语“耦合”和/或“连接”连同其派生。这些术语不是要作为彼此的同义词。在实施例中,“连接”而是可用来表示两个或更多元件相互直接物理和/或电接触。“耦合”可表示两个或更多元件相互直接物理和/或电接触。但是,“耦合”也可表示两个或更多元件不是相互直接接触,但是仍然相互配合或交互。例如,执行单元可经过一个或多个中间组件与寄存器和/或解码单元耦合。附图中,箭头用来示出连接和耦合。
可使用术语“和/或”。如本文所使用的术语“和/或”表示一个或另一个或者两者(例如A和/或B表示A或B或者A和B)。
在以上描述中,提出了许多具体细节,以便提供对实施例的透彻了解。但是,即使没有这些具体细节的一部分也可实施其他实施例。本发明的范围不是通过以上提供的具体示例来确定,而是仅通过以下权利要求书来确定。在其他情况下,众所周知的电路、结构、装置和操作以框图形式示出和/或没有详述,以免影响对本描述的理解。在认为适当的情况下,附图中重复参考标号或者参考标号的末尾部分,以指示可选地可具有相同或相似特性的对应或相似的元件,除非另有指定或者另加明确说明。
某些操作可由硬件组件来执行,或者可包含在机器可执行或电路可执行指令中,这些指令可用来使和/或引起采用指令所编程的电路或硬件(例如处理器、处理器的部分、电路等等)执行操作。操作还可以可选地通过硬件和软件的组合来执行。处理器、机器、电路或硬件可包括特定或具体电路或另一逻辑(例如潜在地与固件和/或软件相结合的硬件),其可操作以运行和/或处理指令,并且响应指令而存储结果。
一些实施例包括制造产品(例如计算机程序产品),其包括机器可读介质。介质可包括采取机器可读的形式来提供、例如存储信息的机制。机器可读介质可提供或者其上存储了指令或指令序列,其如果和/或在由机器运行时可操作以使机器执行和/或引起机器执行本文所公开的一个或多个操作、方法或技术。机器可读介质可存储或者以其他方式提供本文所述指令的实施例的一个或多个。
在一些实施例中,机器可读介质可包括有形和/或非暂时机器可读存储介质。例如,有形和/或非暂时机器可读存储介质可包括软盘、光存储介质、光盘、光数据存储装置、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦可编程ROM(EPROM)、电可擦可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪速存储器、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储装置、非暂时存储器、非暂时数据存储装置等。非暂时机器可读存储介质不是由暂时传播信号来组成。
适当机器的示例包括但不限于通用处理器、专用处理器、指令处理设备、数字逻辑电路、集成电路等。适当机器的又一些示例包括计算装置或另一电子装置,其包括处理器、指令处理设备、数字逻辑电路或集成电路。这类计算装置和电子装置的示例包括但不限于台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、蜂窝电话、服务器、网络装置(例如路由器和交换机)、移动因特网装置(MID)、媒体播放器、智能电视机、上网机、机顶盒和视频游戏控制器。
例如,本说明书中通篇提到“一个实施例”、“一实施例”、“一个或多个实施例”、“一些实施例”指示特定特征可包含在本发明的实践中,但是不一定要求这样。类似地,在本描述中,各种特征有时在单个实施例、附图或者其描述中集中在一起,以便简化本公开,并且帮助了解各个发明方面。但是,本公开的这种方法不应当被理解为反映本发明要求超过各权利要求中明确描述的特征的意图。如以下权利要求所反映的那样,发明方面而是在于少于单个所公开实施例的全部特征。因此,接着详细描述的权利要求书书由此明确结合到本详细描述中,其中各权利要求本身代表本发明的独立实施例。
示例实施例
以下示例涉及其他实施例。示例中的具体细节可在一个或多个实施例中的任何位置使用。
示例1包括处理器,其包括对指令进行解码的解码单元。指令指示包括至少四个数据元素的第一源打包数据操作数、指示包括至少四个屏蔽元素的源屏蔽和指示目的地存储位置。执行单元与解码单元耦合。执行单元响应指令而将结果打包数据操作数存储在目的地存储位置中。结果打包数据操作数具有一系列至少两个未屏蔽结果数据元素。未屏蔽结果数据元素的每个按照相对顺序来存储第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值。最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。
示例2包括示例1的处理器,其中执行单元存储包括第一端与最靠近第一端的系列的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合的结果打包数据操作数。
示例3包括示例2的处理器,其中执行单元存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有与结果打包数据操作数被存储之前最初在目的地存储位置中相同的值。
示例4包括示例2的处理器,其中解码单元对指示包括最高阶数据元素的第二源打包数据操作数的指令进行解码,并且执行单元存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有与第二源打包数据操作数的最高阶数据元素相同的值。
示例5包括示例2的处理器,其中解码单元对指示包括最低阶数据元素的第二源打包数据操作数的指令进行解码,并且执行单元存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有与第二源打包数据操作数的最低阶数据元素相同的值。
示例6包括示例1的处理器,其中,执行单元存储包括结果打包数据操作数的第二端与最靠近第二端的系列的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合的结果打包数据操作数,并且第二集合的每个被屏蔽结果数据元素具有与第二未屏蔽结果数据元素相同的值。
示例7包括示例1的处理器,其中执行单元存储结果打包数据操作数,其中第一端包括最低阶端,以及连续数据元素是最低阶连续数据元素。
示例8包括示例1的处理器,其中执行单元存储结果打包数据操作数,其中第一端包括最低阶端,连续数据元素是最高阶连续数据元素。
示例9包括示例1的处理器,其中执行单元存储结果打包数据操作数,其中第一端包括最高阶端,以及连续数据元素是最低阶连续数据元素。
示例10包括示例1的处理器,其中执行单元存储结果打包数据操作数,其中第一端包括最高阶端,连续数据元素是最高阶连续数据元素。
示例11包括示例1至10的任一个的处理器,其中源屏蔽存储在屏蔽寄存器中,并且指令包含在具有指示作为判定操作数的屏蔽寄存器的多个其他指令的指令集中。
示例12包括示例1至10的任一个的处理器,其中解码单元对指示存储器中的位置中的第一源打包数据操作数的指令进行解码。
示例13包括示例1至10的任一个的处理器,其中执行单元存储结果打包数据操作数,其中特性是最接近的对应未屏蔽结果数据元素对之间的所述所有被屏蔽结果数据元素具有与最靠近第一端的对应对的未屏蔽结果数据元素相同的值,所述特性对指令的操作码是隐式的。
示例14是处理器中包括接收指令的方法。指令指示包括至少四个数据元素的第一源打包数据操作数,指示包括至少四个屏蔽元素的源屏蔽,并且指示目的地存储位置。响应指令而将结果打包数据操作数存储在目的地存储位置中。结果打包数据操作数包括一系列至少两个未屏蔽结果数据元素。未屏蔽结果数据元素的每个按照相对顺序来存储第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值。最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。
示例15包括示例14的方法,其中存储包括存储包括第一端与最靠近第一端的系列的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的结果打包数据操作数。另外,其中存储结果打包数据操作数包括不改变第一集合的被屏蔽结果数据元素的每个的值。
示例16包括示例14的方法,其中存储包括存储包括第一端与最靠近第一端的系列的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的结果打包数据操作数。另外,其中第一集合的被屏蔽结果数据元素的每个具有与指令所指示的第二源打包数据操作数的最高阶数据元素相同的值。
示例17包括示例16的方法,其中第一端包括最低阶端。
示例18包括示例16的方法,其中存储包括存储包括结果打包数据操作数的第二端与最靠近第二端的系列的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合的结果打包数据操作数。另外,其中第二集合的每个被屏蔽结果数据元素具有与第二未屏蔽结果数据元素相同的值。
示例19包括示例14的方法,其中存储包括存储包括第一端与最靠近第一端的系列的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的结果打包数据操作数。另外,其中第一集合的被屏蔽结果数据元素的每个具有与指令所指示的第二源打包数据操作数的最低阶数据元素相同的值。
示例20包括示例19的方法,其中第一端包括最高阶端。
示例21包括示例14的方法,其中存储包括存储结果打包数据,其中在给定的最接近未屏蔽结果数据元素对之间存在至少三个被屏蔽结果数据元素。
图22是处理指令的系统,其包括互连以及与互连耦合的处理器。处理器响应指令可操作以将结果打包数据操作数存储在目的地存储位置中,该指令指示包括至少四个数据元素的第一源打包数据操作数、指示包括至少四个屏蔽元素的源屏蔽以及指示目的地存储位置。结果打包数据操作数包括一系列至少两个未屏蔽结果数据元素。未屏蔽结果数据元素的每个按照相对顺序来存储第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值。最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。该系统还包括与互连耦合的动态随机存取存储器(DRAM)。DRAM存储指令集,以便对于对基于多个条件所递增的标量值执行计算的循环进行向量化。指令集在由处理器运行时可操作以使处理器执行操作,包括评估多个条件,使源屏蔽的元素对于被评估为真的条件是未屏蔽的,使源屏蔽的元素对于被评估为假的条件是被屏蔽的,并且对结果打包数据操作数并行地执行计算。
示例23包括示例22的系统,其中处理器存储包括第一端与最靠近第一端的系列的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的结果打包数据操作数。第一集合的被屏蔽结果数据元素的每个具有与指令所指示的第二源打包数据操作数的最高阶数据元素相同的值。
图24包括制造产品,其中包括非暂时机器可读存储介质。非暂时机器可读存储介质存储指令。指令指示包括至少四个数据元素的第一源打包数据操作数、指示包括至少四个屏蔽元素的源屏蔽和指示目的地存储位置。指令在由机器运行时可操作以使机器执行操作,包括将结果打包数据操作数存储在目的地存储位置中。结果打包数据操作数包括一系列至少两个未屏蔽结果数据元素。未屏蔽结果数据元素的每个按照相对顺序来存储第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值。最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。
示例25包括示例24的制造产品,其中结果打包数据操作数包括最接近的对应未屏蔽结果数据元素对之间的至少三个被屏蔽结果数据元素。可选地,各屏蔽元素可由单个位组成。
示例26包括处理器或其他设备,其可操作以执行示例14-21的任一个的方法。
示例27包括处理器或其他设备,其包括用于执行示例14-21的任一个的方法的部件。
示例28包括处理器,其包括执行示例14-21的任一个的方法的模块、单元、逻辑、电路、部件或者它们的任何组合。
示例29包括可选的非暂时机器可读介质,其可选地存储或者以其他方式提供指令,其如果和/或在由处理器、计算机系统或另一机器运行时可操作以使机器执行示例14-21的任一个的方法。
示例30包括处理器或其他设备,其可操作以执行一个或多个操作或者基本上如本文所述的任何方法。
示例31包括处理器或其他设备,其包括用于执行一个或多个操作或者基本上如本文所述的任何方法的部件。
示例32包括处理器或其他设备,其可操作以执行基本上如本文所述的指令的任一个。
示例33包括处理器或其他设备,其包括用于执行基本上如本文所述的指令的任一个的部件。
示例34包括处理器或其他设备,其包括可操作以对第一指令集的指令进行解码的解码单元。解码单元接收一个或多个指令,其模拟可以是基本上如本文所公开的指令的任一个并且属于第二指令集的第一指令。处理器或其他设备还包括与解码单元耦合的一个或多个执行单元,以运行第一指令集的一个或多个指令。一个或多个执行单元响应第一指令集的一个或多个指令可操作以将结果存储在目的地中。结果可包括基本上如本文对第一指令所公开的结果的任一个。
示例35包括计算机系统或另一电子装置,其包括具有解码单元(其可操作以对第一指令集的指令进行解码)并且具有一个或多个执行单元的处理器。计算机系统还包括耦合到处理器的存储装置。存储装置存储第一指令,其可以是基本上如本文所公开的指令的任一个,并且属于第二指令集。存储装置还存储指令,以便将第一指令转换为第一指令集的一个或多个指令。第一指令集的一个或多个指令在由处理器运行时可操作以使处理器将结果存储在目的地中。结果可包括基本上如本文对第一指令所公开的结果的任一个。
Claims (25)
1.一种处理器,包括:
用于对指令进行解码的解码单元,所述指令指示包括至少四个数据元素的第一源打包数据操作数,指示包括至少四个屏蔽元素的源屏蔽,并且指示目的地存储位置;
与所述解码单元耦合的执行单元,所述执行单元响应所述指令而将结果打包数据操作数存储在目的地存储位置中,所述结果打包数据操作数具有:
一系列至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个按照相对顺序存储所述第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值;以及
最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素具有与最靠近所述结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素。
2.如权利要求1所述的处理器,其中,所述执行单元存储包括所述第一端与最靠近所述第一端的所述系列的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合的所述结果打包数据操作数。
3.如权利要求2所述的处理器,其中,所述执行单元存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有与所述结果打包数据操作数被存储之前最初在所述目的地存储位置中相同的值。
4.如权利要求2所述的处理器,其中,所述解码单元对指示包括最高阶数据元素的第二源打包数据操作数的所述指令进行解码,并且其中所述执行单元存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包数据操作数的最高阶数据元素相同的值。
5.如权利要求2所述的处理器,其中,所述解码单元对指示包括最低阶数据元素的第二源打包数据操作数的所述指令进行解码,并且其中所述执行单元存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包数据操作数的最低阶数据元素相同的值。
6.如权利要求1所述的处理器,其中,所述执行单元存储包括所述结果打包数据操作数的第二端与最靠近所述第二端的所述系列的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合的所述结果打包数据操作数,并且所述第二集合的每个被屏蔽结果数据元素具有与所述第二未屏蔽结果数据元素相同的值。
7.如权利要求1所述的处理器,其中,所述执行单元存储所述结果打包数据操作数,其中所述第一端包括最低阶端,以及其中所述连续数据元素是最低阶连续数据元素。
8.如权利要求1所述的处理器,其中,所述执行单元存储所述结果打包数据操作数,其中所述第一端包括最低阶端,其中所述连续数据元素是最高阶连续数据元素。
9.如权利要求1所述的处理器,其中,所述执行单元存储所述结果打包数据操作数,其中所述第一端包括最高阶端,以及其中所述连续数据元素是最低阶连续数据元素。
10.如权利要求1所述的处理器,其中,所述执行单元存储所述结果打包数据操作数,其中所述第一端包括最高阶端,其中所述连续数据元素是最高阶连续数据元素。
11.如权利要求1至10中的任一项所述的处理器,其中,所述源屏蔽存储在屏蔽寄存器中,并且其中所述指令包含在具有指示作为判定操作数的所述屏蔽寄存器的多个其他指令的指令集中。
12.如权利要求1至10中的任一项所述的处理器,其中,所述解码单元对指示存储器中的位置中的所述第一源打包数据操作数的所述指令进行解码。
13.如权利要求1至10中的任一项所述的处理器,其中,所述执行单元存储所述结果打包数据操作数,其中特性是最接近的对应未屏蔽结果数据元素对之间的所述所有被屏蔽结果数据元素具有与最靠近所述第一端的对应对的所述未屏蔽结果数据元素相同的值,所述特性对所述指令的操作码是隐式的。
14.一种在处理器中的方法,包括:
接收指令,所述指令指示包括至少四个数据元素的第一源打包数据操作数,指示包括至少四个屏蔽元素的源屏蔽,并且指示目的地存储位置;以及
响应所述指令而将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数包括:
一系列至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个按照相对顺序存储所述第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值;以及
最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素具有与最靠近所述结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素。
15.如权利要求14所述的方法,其中,存储包括存储包括所述第一端与最靠近所述第一端的所述系列的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的所述结果打包数据操作数,并且其中存储所述结果打包数据操作数包括不改变所述第一集合的所述被屏蔽结果数据元素的每个的值。
16.如权利要求14所述的方法,其中,存储包括存储包括所述第一端与最靠近所述第一端的所述系列的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的所述结果打包数据操作数,并且其中所述第一集合的所述被屏蔽结果数据元素的每个具有与所述指令所指示的第二源打包数据操作数的最高阶数据元素相同的值。
17.如权利要求16所述的方法,其中,所述第一端包括最低阶端。
18.如权利要求16所述的方法,其中,存储包括存储包括所述结果打包数据操作数的第二端与最靠近所述第二端的所述系列的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合的所述结果打包数据操作数,并且其中所述第二集合的每个被屏蔽结果数据元素具有与所述第二未屏蔽结果数据元素相同的值。
19.如权利要求14所述的方法,其中,存储包括存储包括所述第一端与最靠近所述第一端的所述系列的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的所述结果打包数据操作数,并且其中所述第一集合的所述被屏蔽结果数据元素的每个具有与所述指令所指示的第二源打包数据操作数的最低阶数据元素相同的值。
20.如权利要求19所述的方法,其中,所述第一端包括最高阶端。
21.如权利要求14所述的方法,其中,存储包括存储所述结果打包数据,其中在给定的最接近未屏蔽结果数据元素对之间存在至少三个被屏蔽结果数据元素。
22.一种处理指令的系统,包括:
互连;
与所述互连耦合的处理器,所述处理器响应指示包括至少四个数据元素的第一源打包数据操作数、指示包括至少四个屏蔽元素的源屏蔽以及指示目的地存储位置的指令可操作以将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数包括:
一系列至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个按照相对顺序存储所述第一源打包数据操作数的至少两个连续数据元素的不同数据元素的值;以及
最接近的对应未屏蔽结果数据元素对之间的所有被屏蔽结果数据元素具有与最靠近所述结果打包数据操作数的第一端的对应对的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素;以及
与所述互连耦合的动态随机存取存储器(DRAM),所述DRAM存储指令集,以便对于对基于多个条件所递增的标量值执行计算的循环进行向量化,所述指令集在由所述处理器运行时可操作以使所述处理器执行操作,包括:
评估所述多个条件;
使所述源屏蔽的元素对于被评估为真的条件是未屏蔽的;
使所述源屏蔽的元素对于被评估为假的条件是屏蔽的;以及
对所述结果打包数据操作数并行地执行所述计算。
23.如权利要求22所述的系统,其中,所述处理器存储包括所述第一端与最靠近所述第一端的第一未屏蔽结果数据元素之间的至少两个被屏蔽结果数据元素的第一集合的所述结果打包数据操作数,所述第一集合的所述被屏蔽结果数据元素的每个具有与所述指令所指示的第二源打包数据操作数的最高阶数据元素相同的值。
24.一种包括用于执行如权利要求14-21中的任一项所述的方法的部件的处理器。
25.一种制造产品,包括非暂时机器可读存储介质,其存储在由机器运行时可操作以使所述机器执行如权利要求14-21中的任一项的方法的指令。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/IB2014/000611 WO2015145190A1 (en) | 2014-03-27 | 2014-03-27 | Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106030513A true CN106030513A (zh) | 2016-10-12 |
Family
ID=50933445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480076431.4A Pending CN106030513A (zh) | 2014-03-27 | 2014-03-27 | 用于采用到被屏蔽结果元素的传播将连续源元素存储到未屏蔽结果元素的处理器、方法、系统和指令 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10223113B2 (zh) |
EP (1) | EP3123301A1 (zh) |
JP (1) | JP6374975B2 (zh) |
KR (1) | KR101826707B1 (zh) |
CN (1) | CN106030513A (zh) |
WO (1) | WO2015145190A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109697506A (zh) * | 2017-10-20 | 2019-04-30 | 图核有限公司 | 神经网络中的处理 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10223113B2 (en) | 2014-03-27 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements |
WO2015145193A1 (en) * | 2014-03-28 | 2015-10-01 | Intel Corporation | Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements |
GB2528115B (en) * | 2014-07-11 | 2021-05-19 | Advanced Risc Mach Ltd | Dynamic saving of registers in transactions |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100042789A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Check-hazard instructions for processing vectors |
CN102473093A (zh) * | 2009-06-30 | 2012-05-23 | 英特尔公司 | 对多个通道中的紧缩数据解压缩 |
WO2013095617A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Apparatus and method for propagating conditionally evaluated values in simd/vector execution |
CN103562855A (zh) * | 2011-04-01 | 2014-02-05 | 英特尔公司 | 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4180861A (en) | 1978-03-31 | 1979-12-25 | Ncr Corporation | Selectively operable mask generator |
US6266769B1 (en) | 1998-04-30 | 2001-07-24 | Intel Corporation | Conversion between packed floating point data and packed 32-bit integer data in different architectural registers |
US6356951B1 (en) | 1999-03-01 | 2002-03-12 | Sun Microsystems, Inc. | System for parsing a packet for conformity with a predetermined protocol using mask and comparison values included in a parsing instruction |
US20040054877A1 (en) * | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US20110035568A1 (en) | 2008-08-15 | 2011-02-10 | Apple Inc. | Select first and select last instructions for processing vectors |
US8984262B2 (en) | 2008-08-15 | 2015-03-17 | Apple Inc. | Generate predicates instruction for processing vectors |
US20110283092A1 (en) | 2008-08-15 | 2011-11-17 | Apple Inc. | Getfirst and assignlast instructions for processing vectors |
US8793472B2 (en) | 2008-08-15 | 2014-07-29 | Apple Inc. | Vector index instruction for generating a result vector with incremental values based on a start value and an increment value |
US8650383B2 (en) | 2008-08-15 | 2014-02-11 | Apple Inc. | Vector processing with predicate vector for setting element values based on key element position by executing remaining instruction |
US20100325399A1 (en) | 2008-08-15 | 2010-12-23 | Apple Inc. | Vector test instruction for processing vectors |
US8271832B2 (en) | 2008-08-15 | 2012-09-18 | Apple Inc. | Non-faulting and first-faulting instructions for processing vectors |
US8417921B2 (en) | 2008-08-15 | 2013-04-09 | Apple Inc. | Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector |
US8447956B2 (en) * | 2008-08-15 | 2013-05-21 | Apple Inc. | Running subtract and running divide instructions for processing vectors |
US8959316B2 (en) | 2008-08-15 | 2015-02-17 | Apple Inc. | Actual instruction and actual-fault instructions for processing vectors |
US20120254588A1 (en) | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask |
US20140059322A1 (en) * | 2011-12-23 | 2014-02-27 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for broadcasting from a general purpose register to a vector register |
US9864602B2 (en) | 2011-12-30 | 2018-01-09 | Intel Corporation | Packed rotate processors, methods, systems, and instructions |
US9268569B2 (en) | 2012-02-24 | 2016-02-23 | Apple Inc. | Branch misprediction behavior suppression on zero predicate branch mispredict |
US9116686B2 (en) | 2012-04-02 | 2015-08-25 | Apple Inc. | Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction |
US9501276B2 (en) * | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
US20140289502A1 (en) * | 2013-03-19 | 2014-09-25 | Apple Inc. | Enhanced vector true/false predicate-generating instructions |
US10223113B2 (en) | 2014-03-27 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements |
WO2015145193A1 (en) | 2014-03-28 | 2015-10-01 | Intel Corporation | Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements |
-
2014
- 2014-03-27 US US15/122,005 patent/US10223113B2/en active Active
- 2014-03-27 EP EP14729717.0A patent/EP3123301A1/en not_active Withdrawn
- 2014-03-27 KR KR1020167023187A patent/KR101826707B1/ko active IP Right Grant
- 2014-03-27 WO PCT/IB2014/000611 patent/WO2015145190A1/en active Application Filing
- 2014-03-27 CN CN201480076431.4A patent/CN106030513A/zh active Pending
- 2014-03-27 JP JP2016550582A patent/JP6374975B2/ja not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100042789A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Check-hazard instructions for processing vectors |
CN102473093A (zh) * | 2009-06-30 | 2012-05-23 | 英特尔公司 | 对多个通道中的紧缩数据解压缩 |
CN103562855A (zh) * | 2011-04-01 | 2014-02-05 | 英特尔公司 | 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法 |
WO2013095617A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Apparatus and method for propagating conditionally evaluated values in simd/vector execution |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109697506A (zh) * | 2017-10-20 | 2019-04-30 | 图核有限公司 | 神经网络中的处理 |
CN109697506B (zh) * | 2017-10-20 | 2023-07-14 | 图核有限公司 | 神经网络中的处理 |
Also Published As
Publication number | Publication date |
---|---|
EP3123301A1 (en) | 2017-02-01 |
US20170017488A1 (en) | 2017-01-19 |
US10223113B2 (en) | 2019-03-05 |
JP2017513087A (ja) | 2017-05-25 |
WO2015145190A1 (en) | 2015-10-01 |
KR20160113220A (ko) | 2016-09-28 |
JP6374975B2 (ja) | 2018-08-15 |
KR101826707B1 (ko) | 2018-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103562856B (zh) | 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法 | |
CN104040489B (zh) | 多寄存器收集指令 | |
CN105278917B (zh) | 无局部性提示的向量存储器访问处理器、方法、设备、制品和电子设备 | |
CN104081336B (zh) | 用于检测向量寄存器内的相同元素的装置和方法 | |
CN104077107B (zh) | 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统 | |
CN104137060B (zh) | 高速缓存协处理单元 | |
CN104137055B (zh) | 点积处理器、方法、系统和指令 | |
CN104049953B (zh) | 用于合并操作掩码的未经掩码元素的装置、方法、系统和制品 | |
CN106030514A (zh) | 采用到被屏蔽结果元素的传播将源元素存储到对应未屏蔽结果元素的处理器、方法、系统和指令 | |
CN104040488B (zh) | 用于给出相应复数的复共轭的矢量指令 | |
CN109791488A (zh) | 用于执行用于复数的融合乘-加指令的系统和方法 | |
CN107250993A (zh) | 向量缓存行写回处理器、方法、系统和指令 | |
CN104145245B (zh) | 浮点舍入量确定处理器、方法、系统和指令 | |
CN104049954B (zh) | 多数据元素与多数据元素比较处理器、方法、系统和指令 | |
CN106293640A (zh) | 用于紧密耦合的异构计算的硬件处理器和方法 | |
CN107077334A (zh) | 从多维阵列预取多维元素块的硬件装置和方法 | |
CN104011671B (zh) | 用于执行置换操作的设备和方法 | |
CN104011665B (zh) | 超级乘加(超级madd)指令 | |
CN106030510A (zh) | 三源操作数浮点加法处理器、方法、系统和指令 | |
CN109471659A (zh) | 使用写掩码将两个源操作数混合进单个目的地的系统、装置和方法 | |
CN104185837B (zh) | 在不同的粒度等级下广播数据值的指令执行单元 | |
CN104011661B (zh) | 用于大整数运算的向量指令的装置和方法 | |
CN104040487A (zh) | 用于合并掩码模式的指令 | |
CN104350492A (zh) | 在大寄存器空间中利用累加的向量乘法 | |
CN109213524A (zh) | 用于难预测分支的预测器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20191220 |
|
AD01 | Patent right deemed abandoned |