CN106030510A - 三源操作数浮点加法处理器、方法、***和指令 - Google Patents
三源操作数浮点加法处理器、方法、***和指令 Download PDFInfo
- Publication number
- CN106030510A CN106030510A CN201480076474.2A CN201480076474A CN106030510A CN 106030510 A CN106030510 A CN 106030510A CN 201480076474 A CN201480076474 A CN 201480076474A CN 106030510 A CN106030510 A CN 106030510A
- Authority
- CN
- China
- Prior art keywords
- floating
- source
- instruction
- data element
- point
- 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
- 238000007667 floating Methods 0.000 title claims abstract description 380
- 238000000034 method Methods 0.000 title claims description 72
- 239000000654 additive Substances 0.000 claims abstract description 34
- 230000000996 additive effect Effects 0.000 claims abstract description 34
- 230000004044 response Effects 0.000 claims abstract description 27
- 238000005538 encapsulation Methods 0.000 claims description 159
- 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 claims description 91
- 238000003860 storage Methods 0.000 claims description 67
- 238000007792 addition Methods 0.000 claims description 31
- 238000012545 processing Methods 0.000 claims description 22
- 230000008878 coupling Effects 0.000 claims description 9
- 238000010168 coupling process Methods 0.000 claims description 9
- 238000005859 coupling reaction Methods 0.000 claims description 9
- 230000000903 blocking effect Effects 0.000 claims description 3
- 230000015654 memory Effects 0.000 description 104
- 238000010586 diagram Methods 0.000 description 54
- 238000006073 displacement reaction Methods 0.000 description 33
- 230000008569 process Effects 0.000 description 22
- 230000003321 amplification Effects 0.000 description 13
- 230000008859 change Effects 0.000 description 13
- 238000003199 nucleic acid amplification method Methods 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 12
- 230000006399 behavior Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 11
- 239000000203 mixture Substances 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 9
- 238000009434 installation Methods 0.000 description 9
- 230000000873 masking effect Effects 0.000 description 9
- 230000014509 gene expression Effects 0.000 description 8
- 230000003068 static effect Effects 0.000 description 8
- 230000001629 suppression Effects 0.000 description 8
- 229910002056 binary alloy Inorganic materials 0.000 description 7
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 230000001276 controlling effect Effects 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000000605 extraction Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000007704 transition Effects 0.000 description 4
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 230000005611 electricity Effects 0.000 description 3
- 239000000686 essence Substances 0.000 description 3
- 238000011068 loading method Methods 0.000 description 3
- 238000002156 mixing Methods 0.000 description 3
- 206010008190 Cerebrovascular accident Diseases 0.000 description 2
- 241001269238 Data Species 0.000 description 2
- 101000974356 Homo sapiens Nuclear receptor coactivator 3 Proteins 0.000 description 2
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 2
- 102100037226 Nuclear receptor coactivator 2 Human genes 0.000 description 2
- 102100022883 Nuclear receptor coactivator 3 Human genes 0.000 description 2
- 208000006011 Stroke Diseases 0.000 description 2
- 244000299461 Theobroma cacao Species 0.000 description 2
- 235000009470 Theobroma cacao Nutrition 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 2
- 230000003466 anti-cipated effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 241000196324 Embryophyta Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000000454 anti-cipatory effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000013078 crystal Substances 0.000 description 1
- 238000013506 data mapping Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000000280 densification Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000004899 motility 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
- 238000010606 normalization Methods 0.000 description 1
- 230000006911 nucleation Effects 0.000 description 1
- 238000010899 nucleation Methods 0.000 description 1
- 238000010422 painting Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 239000011232 storage material Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000007306 turnover Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- 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/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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/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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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
-
- 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/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Nonlinear Science (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
一个方面的处理器包括用于解码三源浮点加法指令的解码单元,三源浮点加法指令指示具有第一浮点数据元素的第一源操作数、具有第二浮点数据元素的第二源操作数和具有第三浮点数据元素的第三源操作数。执行单元与解码单元耦合。响应于指令,执行单元将结果存储在由指令指示的目的地操作数中。结果包括包含第一浮点舍入和的结果浮点数据元素。第一浮点舍入和表示第二浮点舍入和与第三浮点数据元素的加性组合。第二浮点舍入和表示第一浮点数据元素和第二浮点数据元素的加性组合。
Description
技术领域
本文中描述的实施例一般涉及处理器。具体来说,本文中描述的实施例一般涉及用于响应于指令将浮点数相加的处理器。
背景技术
处理器、计算机***和其它电子装置中普遍使用浮点数。浮点数的一个优点是,它们允许用相对紧凑的数值格式和/或多个位来表示广泛范围的数值。浮点数可将它们的位摊派到若干个组成字段中,这些组成字段称为浮点数的符号、有效数和指数。符号、有效数、基数和指数的关系如下:
A=(-1) 符号 *有效数*基数 指数
表达式“(-1) 符号 ”表示(-1)的符号次幂。该表达式评估浮点数是正数(+)还是负数(-)。例如,当符号是整数0时,浮点数是正数,或者当符号是整数1时,浮点数是负数。有效数包括具有在很大程度上决定浮点数的精度的长度的数字串。有效数有时又称为有效数字、系数、小数或尾数。通常隐含地假设小数点(例如,十进制格式的十进制小数点或二进制格式的二进制小数点)位于固定位置(例如,刚好在有效数的最左边数字或最高有效数字的右边,在一些情况下,这是隐含的)。二进制中的示例有效数可以是“1.10010010000111111011011”。小数点右边的有效数的数字(例如,“10010010000111111011011”)可表示小数位。表达式“基数指数”表示基数的指数次幂。基数通常是基数2(对于二进制)、基数10(对于十进制)、或基数16(对于十六进制)。基数有时称为底数。指数(exponent)有时又称为指数(characteristic)或阶(scale)。在基数上加指数次幂实际上将小数点(例如,从隐含的或假设的起始位置)偏移指数个数字。如果指数是正数,那么小数点向右偏移,或者如果指数是负数,那么小数点向左偏移。
电气和电子工程师协会(IEEE)在标准IEEE 754中对若干种不同的浮点格式进行了标准化。有代表性的是,单精度浮点格式具有32位,它包括位[22:0]中的23位有效数、位[30:23]中的8位指数和位[31]中的1位符号。双精度浮点格式具有64位,它包括位[51:0]中的52位有效数、位[62:52]中的11位指数和位[63]中的1位符号。其它浮点格式在本领域中也是已知的,例如半精度浮点、扩展型双精度浮点和四倍精度浮点格式。如果需要,关于浮点数和格式的进一步细节可参考IEEE 754。
附图说明
通过参考以下描述和用于说明实施例的附图,可最好地理解本发明。图中:
图1是可进行操作以便执行三源浮点加法指令的实施例的处理器的实施例的框图。
图2是用于执行三源浮点加法指令的实施例的方法的实施例的流程框图。
图3是封装(packed)三源浮点可选屏蔽加法操作的实施例的框图。
图4是标量三源浮点可选屏蔽加法操作的实施例的框图。
图5是封装三源浮点可选屏蔽可选求反控制加法操作的实施例的框图。
图6是标量三源浮点可选屏蔽可选求反控制加法操作的实施例的框图。
图7是三源浮点加法器的实施例的框图。
图8是串联耦合在一起的一对两源浮点加法器的实施例的框图。
图9是具有耦合输出端和输入端的再循环路径的两源浮点加法器的实施例的框图。
图10是三源浮点加法指令的合适指令格式的实施例的框图。
图11是封装数据寄存器的合适集合的实施例的框图。
图12是示出掩码位的数量取决于封装数据宽度和数据元素宽度的表。
图13是操作掩码寄存器的合适集合的实施例的框图。
图14A-14B是示出根据本发明的实施例的通用向量友好指令格式及其指令模本的框图。
图15A是示出根据本发明的实施例的示例性特定向量友好指令格式的框图。
图15B是示出根据本发明一个实施例构成完整操作码字段的特定向量友好指令格式的字段的框图。
图15C是示出根据本发明一个实施例构成寄存器索引字段的特定向量友好指令格式的字段的框图。
图15D是示出根据本发明一个实施例构成扩增操作字段的特定向量友好指令格式的字段的框图。
图16是寄存器体系结构的实施例的框图。
图17A是示出有序管线的实施例和寄存器重命名无序发出/执行管线的实施例的框图。
图17B是示出包括耦合到执行引擎单元的前端单元的处理器核的实施例的框图,其中前端单元和执行引擎单元均耦合到存储器单元。
图18A是单个处理器核以及它到管芯上互连网络的连接和它的2级(L2)高速缓存的本地子集的实施例的框图。
图18B是图18A的处理器核的部分的展开图的实施例的框图。
图19是可具有多于一个核、可具有集成式存储器控制器、并且可具有集成式图形的处理器的实施例的框图。
图20是计算机体系结构的第一实施例的框图。
图21是计算机体系结构的第二实施例的框图。
图22是计算机体系结构的第三实施例的框图。
图23是计算机体系结构的第四实施例的框图。
图24是根据本发明的实施例利用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本文中公开三源操作数浮点加法指令、用于执行这些指令的处理器、在处理或执行这些指令时由处理器执行的方法、以及并入用于处理或执行这些指令的一个或多个处理器的***。在以下描述中,阐述了众多具体细节(例如,特定指令操作、数据格式、处理器配置、微体系结构细节、操作序列等)。但是,没有这些具体细节也可实践实施例。在其它情况下,没有详细示出公知的电路、结构和技术,以免使本发明变得模糊。
图1是可进行操作以便执行三源浮点加法指令102的实施例的处理器100的实施例的框图。在一些实施例中,处理器可以是通用处理器(例如,在桌面型计算机、膝上型计算机或其它计算机中常用的类型)。备选地,处理器可以是专用处理器。合适的专用处理器的示例包括但不限于图形处理器、网络处理器、通信处理器、密码处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)和控制器(例如,微控制器)。处理器可以是以下处理器中的任一处理器:各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、其各种混合、或其它类型的处理器。
在操作期间,处理器100可接收三源浮点加法指令102的实施例。例如,可从指令提取单元、指令队列等接收三源浮点加法指令。三源浮点加法指令可代表宏指令、汇编语言指令、机器代码指令或处理器的指令集的指令或控制信号。在一些实施例中,三源浮点加法指令可明确地指定(例如,通过一个或多个字段或位的集合)或以其它方式指示(例如,隐含地指示、可通过仿真寄存器映射映射到该寄存器等)具有至少第一浮点数据元素的第一源操作数112,可指定或以其它方式指示具有至少第二浮点数据元素的第二源操作数114,可指定或以其它方式指示具有至少第三浮点数据元素的第三源操作数116,并且可指定或以其它方式指示用于存储结果118的目的地操作数(例如,目的地存储位置)。
再次参考图1,处理器包括解码单元或解码器104。解码单元可接收并解码三源浮点加法指令102。解码单元可输出反映、代表三源浮点加法指令和/或从三源浮点加法指令导出的一个或多个微指令、微操作、微代码入口点、解码指令或控制信号、或其它相对较低级的指令或控制信号。这一个或多个较低级指令或控制信号可通过一个或多个较低级(例如,电路级或硬件级)操作实现较高级三源浮点加法指令。在一些实施例中,解码单元可包括:用于接收指令的一个或多个输入结构(例如,端口、互连、接口等);与输入结构耦合以便接收、识别指令并将指令解码为这一个或多个对应的较低级指令或控制信号的指令识别和解码逻辑;以及与指令识别和解码逻辑耦合以便输出这一个或多个对应的较低级指令或控制信号的一个或多个输出结构(例如,端口、互连、接口等)。解码单元可利用各种不同的机制来实现,包括但不限于微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)和本领域中已知的其它机制。
在一些实施例中,并非将三源浮点加法指令直接提供给解码单元,而是可以可选地使用指令仿真器、转译器、变形器、解释器或其它指令转换模块。各种不同类型的指令转换模块在本领域中已知,它们可以用软件、硬件、固件或其组合来实现。在一些实施例中,指令转换模块可设置在指令处理的处理器的外部,例如位于独立管芯上和/或位于存储器中(例如,作为静态、动态或例行程序指令仿真模块)。举例来说,指令转换模块可接收具有第一指令集的三源浮点加法指令,并且可将该三源浮点加法指令仿真、转译、变形、解释或以其它方式转换为可具有不同的第二指令集的一个或多个对应的或导出的中间指令或控制信号。可将第二指令集的这一个或多个中间指令或控制信号提供给解码单元,解码单元可将接收的第二指令集的这一个或多个指令或控制信号解码为可由处理器的本机硬件(例如,一个或多个执行单元)执行的一个或多个较低级指令或控制信号。
处理器还包括寄存器110的集合。每个寄存器可代表可进行操作以便存储浮点数据的管芯上存储位置。举例来说,寄存器可以是可进行操作以便存储浮点数据元素的浮点寄存器、可进行操作以便存储封装或标量浮点数据元素的封装数据寄存器等。寄存器可代表对于软件和/或程序设计员可见的体系结构或体系结构可见的寄存器(例如,体系结构寄存器文件),和/或是由处理器的指令集的指令指示以便标识操作数的寄存器。这些体系结构寄存器与给定微体系结构中的其它非体系结构或非体系结构可见的寄存器(例如,临时寄存器、记录缓冲器、引退寄存器等)形成对比。可在不同微体系结构中利用公知的技术以不同方式实现寄存器,并且寄存器不限于任何特定类型的电路。合适类型的寄存器的示例包括但不限于专用物理寄存器、利用寄存器重命名的动态分配的物理寄存器、及其组合。
在一些实施例中,第一源操作数112可以可选地存储在集合的第一寄存器中,第二源操作数114可以可选地存储在集合的第二寄存器中,第三源操作数116可以可选地存储在集合的第三寄存器中,并且目的地操作数可以可选地存储在集合的第四寄存器中。在一些情况下,用于目的地操作数的寄存器可不同于用于第一、第二和第三源操作数的寄存器。在其它情况下,用于源操作数之一的寄存器可再用于目的地操作数(例如,可将结果覆写在源操作数之一上)。备选地,可以可选地对这些操作数中的一个或多个操作数使用存储器位置或其它存储位置。
再次参考图1,执行单元106与解码单元104和寄存器110的集合耦合。在一些实施例中,执行单元还可与可选的封装数据操作掩码寄存器120和/或可选的封装数据操作掩码122耦合,这些将在下文进一步描述,但这不是必需的。执行单元可接收代表三源浮点加法指令和/或从三源浮点加法指令导出的这一个或多个经过解码或以其它方式转换的指令或控制信号。执行单元还可接收具有至少第一浮点数据元素的第一源操作数112、具有至少第二浮点数据元素的第二源操作数114和具有至少第三浮点数据元素的第三源操作数116。执行单元可响应于三源浮点加法指令和/或作为三源浮点加法指令的结果(例如,响应于从指令直接或间接(例如,通过仿真)解码的一个或多个指令或控制信号)进行操作以便将结果118存储在由指令指示的目的地操作数中。在一些实施例中,结果可至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。在一些实施例中,结果浮点数据元素可包括至少第一浮点舍入和(rounded sum)。第一浮点舍入和是浮点数,并且在合适时,利用浮点舍入法进行了舍入。在一些实施例中,第一浮点舍入和可代表第二浮点舍入和与第三浮点数据元素的加性组合。在一些实施例中,第二浮点舍入和可代表第一浮点数据元素与第二浮点数据元素的加性组合。在一些实施例中,结果可以是针对图3-6中的任一图示出和描述的任何结果,但是本发明的范围不限于此。
为清楚起见,如本文中所使用,使用第一值和第二值的术语“加性组合”来表示允许不对第一和第二值中的任一个值求反、对第一和第二值中的任一个值或两个值求反的和。例如,第二浮点舍入和与第三浮点数据元素的加性组合可包括第三浮点数据元素加上第二浮点舍入和的和、或第二浮点舍入和加上第三浮点数据元素的负数的和。同样地,第一和第二浮点数据元素的加性组合可包括第一浮点数据元素加上第二浮点数据元素的和、第一浮点数据元素加上第二浮点数据元素的负数的和、第一浮点数据元素的负数加上第二浮点数据元素的负数的和、或第一浮点数据元素的负数加上第二浮点数据元素的和。如下文将进一步解释,一些但非所有实施例可以可选地允许在加法之前可选地对数据元素中的任一个、两个或所有数据元素求反,但这不是必需的(例如,另一个实施例不允许这种求反能力)。
有利地,三源浮点加法指令可在执行单个指令(例如,宏指令、指令集的指令等)的范围内执行两次加法。照惯例,需要两个不同的指令。以一个指令执行两次加法的能力往往会提供某些性能和/或功率益处。首先,两次加法均可通过解码单个指令而不是解码两个独立指令来执行。这可有助于通过空出另一个指令的解码时隙来增加指令解码吞吐量。这还有助于降低功耗量,因为可以少解码一个指令来实现这两次加法。也可通过避免将这两次加法之一的中间和写入到体系结构寄存器并避免从体系结构寄存器随后读取中间和以便执行第二次加法来实现性能改善。进出体系结构寄存器的这些写入和读取一般会招致另外的时间或等待时间(例如,大约几个时钟周期)。这还有助于避免捆绑体系结构寄存器,并有助于减少寄存器重命名操作的数量。消除读取、写入和寄存器重命名操作还有助于降低功耗。对于某些处理器,降低功耗本身可导致性能增加,因为某些处理器(例如,尤其是用于高性能计算的处理器)往往具有变成受到可用功耗范围限制的性能。因此,降低功耗也可导致性能增加。
当浮点操作(例如,浮点加法)的准确结果需要比有效数中有的数字更多的数字时,可使用浮点舍入。在一些实施例中,结果可反映两个不同的浮点舍入操作,而不是单个浮点舍入操作。具体来说,可对涉及第一和第二浮点数据元素的和执行第一初始浮点舍入操作以便生成第一舍入和,然后可对第三浮点数据元素和第一舍入和的和执行第二个随后的浮点舍入操作。如下文将进一步解释,这两个浮点舍入操作可反映指令的微体系结构实现。例如,在一些实施例中,用于实现指令的微体系结构可使用不能将三个浮点值同步相加的逻辑。作为一个示例,如下文将进一步解释,可串联地使用两个浮点加法器,并且每个加法器执行只有两个浮点值的同步相加。例如,在第一加法器中,可执行两个浮点值的求和,接着可对该和执行第一浮点舍入操作,然后在第二加法器中,可执行第三浮点值和舍入和的求和,接着可对第二加法器的和输出执行第二舍入操作。
作为另一个示例,如下文将进一步解释,可与再循环一起使用单个浮点加法器,并且在每个循环或每次穿过加法器期间,可执行只有两个浮点值的同步相加。例如,在第一次穿过时,可执行两个浮点值的求和,接着可对该和执行第一浮点舍入操作;然后,在第二次穿过时,可执行第三浮点值和来自第一次穿过时的舍入和的求和,接着可对第二次穿过时的加法器的输出执行第二舍入操作。如下文将进一步解释,对于这些微体系结构实现存在多个优点,例如避免需要包含专用和/或一般大型或复杂的逻辑来执行三个浮点值的同步相加。涉及这两个浮点舍入操作的结果可与执行单个舍入操作时略有不同,它们反映这些微体系结构实现。
在一些实施例中,可对进行的两次舍入使用相同类型的舍入操作或舍入模式。不同类型的舍入操作或舍入模式适合于各种实施例。合适的舍入模式的示例包括但不限于以下:(1)舍入到最接近的值,优先取偶数值(round to nearest with ties to even);(2)向下向负无穷大舍入;(3)向上向正无穷大舍入;以及(4)通过截断向0舍入(round towardzero with truncate)。
在一些实施例中,三源浮点加法指令可支持指令本身内的嵌入式舍入模式控制,但这不是必需的。照惯例,一般在浮点控制和状态寄存器(例如,MXCSR)中指定舍入模式控制。一些指令能够经由立即操作数内的编码字段提供每个指令舍入优先。在一些实施例中,可在立即数的外部通过指令的编码提供每个指令舍入模式优先控制。作为一个示例,在一些实施例中,舍入模式控制可作为静态或每个指令舍入模式优先控制嵌入在前缀(例如,EVEX前缀)中。这可允许程序设计员静态地应用可覆盖(override)浮点控制和状态寄存器(例如,MXCSR)中的舍入模式的特定舍入模式。在一些实施例中,当通过指令编码提供这种舍入模式控制时,可以可选地暗指抑制报告所有浮点异常。抑制报告所有浮点异常都会出现,而不论或不管浮点控制和状态寄存器(例如,MXCSR)中的抑制或不抑制报告对应浮点异常的任何特定掩码位。抑制报告这些浮点异常可意味着,当出现这些浮点异常时,不会更新浮点控制和状态寄存器(例如,MXCSR)中的位或标志(例如,可不报告它们)。
再次参考图1,执行单元106和/或处理器100可包括特殊或特定逻辑(例如,晶体管、集成电路、或可能与固件(例如,存储在非易失性存储器中的指令)和/或软件组合的其它硬件),它可进行操作以便执行三源浮点加法指令,和/或响应于三源浮点加法指令和/或作为三源浮点加法指令的结果(例如,响应于从三源浮点加法指令解码或以其它方式导出的一个或多个指令或控制信号)存储结果。执行单元可包括浮点加法逻辑108。举例来说,执行单元和/或浮点加法逻辑可包括浮点加法器、浮点混合乘法器-加法器(FMA)、浮点算术单元、浮点算术逻辑单元等。在一些实施例中,执行单元可包括用于接收源操作数的一个或多个输入结构(例如,端口、互连、接口等)、与输入结构耦合以便接收和处理源操作数并生成结果的浮点加法电路或逻辑、以及与浮点加法电路或逻辑耦合以便输出结果的一个或多个输出结构(例如,端口、互连、接口等)。在一些实施例中,执行单元可包括针对图7-9中的任何一个或多个图示出和描述的电路或逻辑,它们是合适的微体系结构布置的说明性示例,但是本发明的范围不限于此。
为了避免使本描述模糊,示出和描述了相对简单的处理器100。在其它实施例中,处理器可以可选地包括其它公知的处理器组件。这些组件的可能示例包括但不限于指令提取单元、指令和数据高速缓存、第二级或更高级高速缓存、无序执行逻辑、指令调度单元、寄存器重命名单元、引退单元、总线接口单元、指令和数据转译后备缓冲器、预取缓冲器、微指令队列、微指令定序器、包含在处理器中的其它组件、及其各种组合。这些组件的众多不同组合和配置都是合适的。实施例不限于任何已知的组合或配置。此外,实施例可包含在处理器中,这些处理器具有多个核、逻辑处理器或执行引擎,其中至少一个具有解码单元和执行单元以便执行三源浮点加法指令的实施例。
图2是用于执行三源浮点加法指令的实施例的方法225的实施例的流程框图。在各种实施例中,该方法可由处理器、指令处理设备或其它数字逻辑装置来执行。在一些实施例中,图2的操作和/或方法可由图1的处理器执行和/或在图1的处理器内执行。本文中针对图1的处理器描述的组件、特征和特定的可选细节同样可选地适用于图2的操作和/或方法。备选地,图2的操作和/或方法可由类似或不同的处理器或设备执行,和/或可在类似或不同的处理器或设备内执行。此外,图1的处理器可执行与图2的操作和/或方法相同、类似或不同的操作和/或方法。
该方法包括:在框226,接收三源浮点加法指令。在各个方面中,可在处理器、指令处理设备或其一部分(例如,指令提取单元、解码单元、总线接口单元等)中接收指令。在各个方面中,可从管芯外来源(例如,从存储器、互连等)或从管芯上来源(例如,从指令高速缓存、指令队列等)接收指令。三源浮点加法指令可指定或以其它方式指示具有至少第一浮点数据元素的第一源操作数,指定或以其它方式指示具有至少第二浮点数据元素的第二源操作数,并可指定或以其它方式指示具有至少第三浮点数据元素的第三源操作数。
在框227,响应于三源浮点加法指令和/或作为三源浮点加法指令的结果,将结果存储在目的地操作数中。目的地操作数可由三源浮点加法指令指定或以其它方式指示。代表性地,执行单元、指令处理设备或处理器可执行指令并存储结果。结果可至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。结果浮点数据元素可包括第一浮点舍入和。在一些实施例中,第一浮点舍入和可表示第二浮点舍入和与第三浮点数据元素的加性组合。在一些实施例中,第二浮点舍入和可表示第一浮点数据元素与第二浮点数据元素的加性组合。在一些实施例中,结果可以是针对图3-6中的任意一个图示出和描述的结果中的任意一个结果,但是本发明的范围不限于此。
所示方法涉及体系结构操作(例如,从软件角度可见的操作)。在其它实施例中,该方法可以可选地包括一个或多个微体系结构操作。举例来说,可提取、解码指令,可访问源操作数,执行单元可执行微体系结构操作以便实现指令,等等。在一些实施例中,用于实现指令的微体系结构操作可以可选地包括针对图3-6或7-9中任一图示出和描述的任何一个微体系结构操作。例如,在一些实施例中,可以可选地将第二浮点舍入和从第一浮点加法器提供给第二浮点加法器。作为另一个示例,在一些实施例中,第二浮点舍入和可以可选地从浮点加法器的输出端再循环到浮点加法器的输入端。
图3是示出可响应于封装三源浮点可选屏蔽加法指令的实施例执行的封装三源浮点可选屏蔽加法操作330的实施例的框图。该指令可指定(例如,明确地指定)或以其它方式指示(例如,隐含地指示)第一源封装数据操作数312、第二源封装数据操作数314和第三源封装数据操作数316。第一源封装数据操作数可具有多个第一封装浮点数据元素A1-AN。第二源封装数据操作数可具有多个第二封装浮点数据元素B1-BN。第三源封装数据操作数可具有多个第三封装浮点数据元素C1-CN。在操作数内的对应的相对位置中,第一源封装数据操作数中的每个数据元素可对应于第二源封装数据操作数中的不同数据元素,并对应于第三源封装数据操作数中的不同数据元素。例如,A1、B1和C1可彼此对应,AN、BN和CN可彼此对应,依此类推。
通常,每个源封装数据操作数中的浮点数据元素的数量可等于源封装数据操作数的位大小除以每个浮点数据元素的位大小。在各种实施例中,每个源封装数据操作数的宽度可以是64位、128位、256位、512位或1024位,但本发明的范围不限于此。在各种实施例中,每个浮点数据元素可以是16位半精度浮点数据元素、32位单精度浮点数据元素、64位双精度浮点数据元素、80位双倍扩展精度格式或128位四倍精度浮点格式。在一些实施例中,由于当前广泛使用,所以可以支持32位单精度或64位双精度格式。其它封装数据操作数大小和数据元素宽度也是合适的。在各种实施例中,每个源封装数据操作数中可存在至少两个、至少四个、至少八个或多于八个浮点数据元素。
再次参考图3,如图所示,在一些实施例中,指令还可可选地指定或以其它方式指示源封装数据操作掩码322,但这不是必需的。封装数据操作掩码在本文中又可简称为操作掩码、预测掩码或掩码。源封装数据操作掩码可具有多个掩码元素M1-MN。每个掩码元素可对应于操作数内的对应的相对位置中的源数据元素和/或结果数据元素。例如,M1可对应于A1、B1和C1。
源封装数据操作掩码可表示掩码操作数、预测操作数或条件控制操作数,它可用于预测、有条件地控制或屏蔽是否执行对应的封装数据操作和/或是否存储对应结果。在一些实施例中,屏蔽或预测可以按每个数据元素的粒度,以使得可以彼此分开和/或独立地预测或有条件地控制三个对应数据元素的不同集合上的操作。掩码可包括多个掩码元素、预测元素或条件控制元素。在一个方面中,可与三个源数据元素和/或对应的结果数据元素的对应集合一一对应地包含掩码元素。如图所示,在一些实施例中,每个掩码元素可以是单个掩码位。在这些情况下,掩码可对于第一源封装数据操作数中的每个数据元素和/或结果封装数据318中的每个结果数据元素具有一个位。每个掩码位的值可控制是否执行对应的封装数据操作和/或是否存储对应的结果数据元素。每个掩码位可具有允许在三源数据元素的对应集合上执行操作并允许将对应结果数据元素存储在结果封装数据中的第一值,或者可具有不允许在三源数据元素的对应集合上执行操作和/或不允许将对应结果数据元素存储在结果封装数据中的第二不同值。根据一个可能的惯例,如图示中所示,清空为二进制零(即,0)的掩码位可表示屏蔽操作,其中将屏蔽值、而不是将操作的结果存储在对应的结果数据元素中。相反,设置成二进制一(即,1)的掩码位可表示未屏蔽操作,其中可将操作的结果存储在对应的结果数据元素中。在其它实施例中,可使用相反的惯例,或者可以可选地对每个掩码元素使用两个或两个以上位(例如,每个掩码元素可具有与每个对应的源数据元素相同数量的位,并且可利用一个或多个最高或最低有效位来进行预测)。
操作330的实施例可响应于指令的实施例和/或作为指令的实施例的结果执行。在可选地使用封装数据操作掩码322的实施例中,可执行该操作以便经受可选的源封装数据操作掩码的屏蔽、预测或条件控制。响应于指令,可生成(例如,通过执行单元)结果封装数据318,并将它存储在目的地存储位置中。目的地存储位置可由指令指定或以其它方式指示。在各种实施例中,目的地存储位置可以是封装数据寄存器、存储器位置或其它存储位置。结果封装数据可包括多个数据元素,每个数据元素对应于三源数据元素的不同集合和不同的对应掩码元素。
在使用可选的封装数据操作掩码的实施例中,对应于未屏蔽掩码元素的结果数据元素可具有取决于在三源浮点数据元素的对应集合上执行的操作的值。在所示示例中,最右边的结果数据元素对应于未屏蔽操作,它存储取决于在来自第一、第二和第三源封装数据操作数的三源浮点数据元素的对应集合上执行的对应的封装数据操作的值。具体来说,在一些实施例中,最右边的结果浮点数据元素可存储第一浮点舍入和(例如,RND1(C1+RND2(A1+B1)))。第一浮点舍入和可表示第二浮点舍入和(例如,RND2(A1+B1))与第三浮点数据元素(例如,C1)的加性组合。第二浮点舍入和(例如,RND2(A1+B1))可表示第一浮点数据元素(例如,A1)与第二浮点数据元素(例如,B1)的加性组合。加性组合允许可选地或潜在地对源数据元素(例如,A1、B1和/或C1中的任何一个或多个)求反。在该示例中,利用RND1和RND2来指定两个独立的顺序采用的浮点舍入操作(例如,在RND1之前执行RND2)。
相反,在使用可选的封装数据操作掩码322的实施例中,对应于屏蔽掩码元素的结果数据元素可具有不取决于在源数据元素的对应对上执行的操作的值。而是,这些结果数据元素可具有屏蔽的值(例如,固定或预定值)。例如,要么无需执行对应操作,或者如果执行对应的操作,那么无需将对应结果存储在结果封装数据中。而是,可将屏蔽的值(例如,固定或预定值)存储在对应的结果数据元素中。
在所示示例中,第N个掩码元素MN是屏蔽的值(例如,在此情况下为二进制零)。因此,对应的最左边的结果数据元素具有屏蔽的值。特定的屏蔽值可取决于用于特定实现的屏蔽的类型。在一些实施例中,可使用归零屏蔽。在归零屏蔽中,可将屏蔽的结果数据元素归零(例如,迫使其具有值零)。在其它实施例中,可使用合并屏蔽。在合并屏蔽中,屏蔽的结果数据元素可具有对应的源数据元素之一的值(例如,可将对应的源数据元素一直传递到屏蔽的结果数据元素)。例如,最左边的结果数据元素可具有AN、BN或CN之一的值。在其它实施例中,可屏蔽或不屏蔽其它结果数据元素。
图4是示出可响应于标量三源浮点可选屏蔽加法指令的实施例执行的标量三源浮点可选屏蔽加法操作432的实施例的框图。图4的标量操作具有与图3的封装操作的某些相似性。为了避免使本描述模糊,将主要描述图4的标量操作的不同和/或另外特性,而不重复相对于图3的封装操作的所有可选地类似或共同的特性和细节。但是,应明白,除非另外指出或以其它方式明确表示,否则除了关于每个操作数中存在多个数据元素的方面之外,之前描述的图3的封装操作的特性和细节也可可选地适用于图4的标量操作。
该指令可指定(例如,明确地指定)或以其它方式指示(例如,隐含地指示)第一源操作数412、第二源操作数414和第三源操作数416。第一源操作数可具有第一浮点数据元素A。第二源操作数可具有第二浮点数据元素B。第三源操作数可具有第三浮点数据元素C。数据元素A、B和C可彼此对应。上文针对图3提及的之前提到的浮点数据元素类型也是合适的。
在一些实施例中,数据元素A、B和C可以用标量格式存储在相应的封装数据寄存器中。封装数据寄存器可具有大于浮点数据元素A、B和C的位宽度。例如,在各种实施例中,每个封装数据寄存器的宽度可以是64位、128位、256位、512位或1024位,但本发明的范围不限于此。在一个特定示例中,可使用128位封装数据寄存器,但这不是必需的。除了标量浮点数据元素A、B和C以外,封装数据寄存器还能够存储封装数据。
再次参考图4,如图所示,在一些实施例中,指令还可可选地指定或以其它方式指示源操作掩码422,但这不是必需的。源操作掩码可具有掩码元素M。掩码元素M可对应于源数据元素A、B和C。掩码元素M还可对应于结果418中的相同的相对位置中的结果数据元素。源操作掩码可具有如之前针对图3的源封装数据操作掩码描述的类似属性和变化,主要的不同之处在于,存在单个而不是多个掩码元素。在该示例实施例中,掩码元素未屏蔽(例如,M=1)。在一些实施例中,即使只存在对应标量元素的单个集合,仍可使用源操作掩码。
操作432的实施例可响应于指令的实施例和/或作为指令的实施例的结果执行。在可选地使用操作掩码422的实施例中,可执行该操作以便经受可选的源操作掩码的屏蔽、预测或条件控制。响应于指令,可生成(例如,通过执行单元)结果418,并将它存储在目的地存储位置中。目的地存储位置可由指令指定或以其它方式指示。在各种实施例中,目的地存储位置可以是寄存器、存储器位置或其它存储位置。结果可包括对应于源浮点数据元素A、B和C以及掩码元素M的结果浮点数据元素。
在所示示例中,由于掩码元素未屏蔽(例如,M=1),所以结果数据元素存储取决于在源浮点数据元素A、B和C的对应集合上执行的操作的值。具体来说,在一些实施例中,结果浮点数据元素可存储第一浮点舍入和(例如,RND1(C+RND2(A+B)))。第一浮点舍入和可表示第二浮点舍入和(例如,RND2(A+B))与第三浮点数据元素(例如,C)的加性组合。第二浮点舍入和(例如,RND2(A+B))可表示第一浮点数据元素(例如,A)与第二浮点数据元素(例如,B)的加性组合。加性组合允许可选地或潜在地对A、B和C中的任何一个或多个求反。RND1和RND2用于指定两个独立的顺序采用的浮点舍入操作。
在备选示例中,如果掩码元素进行了屏蔽(例如,如果M=0),那么结果数据元素可改为存储屏蔽的值(例如,固定或预定值)。之前描述的针对图3提到的屏蔽的值是合适的(例如,在归零屏蔽的情况下为0,或者在合并屏蔽的情况下为A、B或C)。
图5是示出可响应于封装三源浮点可选屏蔽可选求反控制加法指令的实施例执行的封装三源浮点可选屏蔽可选求反控制加法操作534的实施例的框图。图5的可选求反控制操作具有与图3的操作的某些相似性。为了避免使该描述模糊,将主要描述图5的可选求反控制操作的不同和/或另外特性,而不重复相对于图3的操作的所有可选地类似或共同的特性和细节。但是,将明白,除非另外指出或以其它方式明确表示,之前描述的图3的操作的特性和细节也可可选地适用于图5的可选求反控制操作。
该指令可指定或以其它方式指示具有浮点数据元素A1-AN的第一源封装数据操作数512、具有浮点数据元素B1-BN的第二源封装数据操作数514和具有浮点数据元素C1-CN的第三源封装数据操作数516。源封装数据操作数和数据元素可具有如之前(例如,如图3)所描述的特征和变化。
在一些实施例中,指令还可可选地指定或以其它方式指示源封装数据操作掩码522,但这不是必需的。源封装数据操作掩码可具有掩码元素M1-MN。源封装数据操作掩码和掩码元素可具有如之前(例如,如图3)所描述的特征和变化。在所示示例中,掩码元素M1和MN均未屏蔽(例如,M1=1,并且MN=1)。
在一些实施例中,指令可以可选地具有一个或多个求反控制位,但这不是必需的。这一个或多个求反控制位可允许软件和/或程序设计员控制任何一个或多个或全部源操作数的求反。在一些实施例中,指令可具有对应于第一源操作数512的一个或多个位536的第一集合以便指定是否对第一源操作数的所有封装浮点数据元素(例如,A1-AN)求反。在一些实施例中,指令还可或备选地具有对应于第二源操作数514的一个或多个位538的第二集合以便指定是否对第二源操作数的所有封装浮点数据元素(例如,B1-BN)求反。在一些实施例中,指令还可或备选地具有对应于第三源操作数516的一个或多个位540的第三集合以便指定是否对第三源操作数的所有封装浮点数据元素(例如,C1-CN)求反。
在一些实施例中,单个位可对应于每个相应的源封装数据操作数,并且可用于提供对该源封装数据操作数的求反控制。根据一个可能的惯例,每个单个求反控制位可设置成二进制一(即,1)以便指定即将对对应的源封装数据的所有数据元素求反,或者可改为清空为二进制零(即,0)以便指定不会对对应的源封装数据操作数的所有数据元素求反。例如,第一位536可设置成指定即将对第一源操作数的所有数据元素(例如,A1-AN)求反,或者可清空以指示不对它们求反。类似地,第二位538可设置成指定即将对第二源操作数的所有数据元素(例如,B1-BN)求反,或者可清空以指示不对它们求反。类似地,第三位540可设置成指定即将对第三源操作数的所有数据元素(例如,C1-CN)求反,或者可清空以指示不对它们求反。
在一些实施例中,可存在可对应于第一、第二和第三源封装数据中的任何一个源封装数据并且可提供对第一、第二和第三源封装数据中的任何一个源封装数据的求反控制的一个或多个求反控制位的单个集合。在其它实施例中,可存在可对应于第一、第二和第三源封装数据中的任意两个源封装数据并且可提供对第一、第二和第三源封装数据中的任意两个源封装数据的求反控制的一个或多个求反控制位的两个集合。备选地,可存在可对应于第一、第二和第三源封装数据中的所有三个源封装数据并且可提供对第一、第二和第三源封装数据中的所有三个源封装数据的求反控制的一个或多个求反控制位的三个集合。
在一些实施例中,求反控制位可以可选地由指令的立即数542提供。例如,在一个特定示例实施例中,可以可选地使用8位立即数,并且可由位imm8[0]提供对应于第一源封装数据的单个位536,可由位imm8[1]提供对应于第二源封装数据的单个位538,并可由位imm8[2]提供对应于第三源封装数据的单个位540。在其它实施例中,可以可选地使用其它大小的立即数,例如2位立即数、4位立即数、6位立即数等。在其它实施例中,可以可选地使用这些立即数的其它位,和/或这些立即数的其它位可以用不同的方式与源封装数据对应。作为另一个选项,并非使用立即数,而是可以通过指令以其它方式提供求反控制位(例如,作为操作码的一部分、作为指令的另一个字段等)。
再次参考图5,在所示示例中,使用对应于每个源封装数据的单个求反控制位。此外,该位设置成指定求反,或清空以便指定不求反。在所示示例中,将对应于第一源封装数据的位清空,并将对应于第三源封装数据的位清空。因此,将不对第一源封装数据的数据元素(例如,A1-AN)和第三源封装数据的数据元素(例如,C1-CN)求反。相反,设置对应于第二源封装数据的位,并且因此将对第二源封装数据的数据元素(例如,B1-BN)求反。
操作534的实施例可响应于指令的实施例和/或作为指令的实施例的结果执行。响应于指令,可生成(例如,通过执行单元)结果封装数据518,并将它存储在目的地存储位置中。结果封装数据可包括多个结果数据元素。在所示示例实施例中,最右边的结果浮点数据元素可存储第一浮点舍入和(例如,RND1(C1+RND2(A1+(-B1)))),而最左边的结果浮点数据元素可存储第N个浮点舍入和(例如,RND1(CN+RND2(AN+(-BN))))。注意,基于由第二位538提供的舍入控制对数据元素B1-BN求反。第一个和第N个浮点舍入和可各自表示另一个相应的浮点舍入和(例如,RND2(A1+(-B1))或RND2(AN+(-BN)))与来自第三源封装数据的对应浮点数据元素(例如,C1或CN)的加性组合。加性组合允许可选地或潜在地对源数据元素(在此情况下为B1-BN)求反。
有利地,可以可选地利用指令能够指定求反控制的能力来增加指令的灵活性(例如,通过允许减去一个或多个源)。备选地,可以可选地在执行封装三源浮点加法指令的范围之外执行求反(例如,通过一个或多个其它指令)。
表1提供对封装三源双精度浮点屏蔽和求反控制加法指令(命名为VADD3PD)的特定示例实施例的描述。在一些实施例中,该指令可具有格式VADD3PD zmm1 {k1}{z}, zmm2,zmm3/m512, imm8{er}。在一些实施例中,可以用EVEX将指令编码为EVEX.U1.NDS.512.F3.0F3A.W1 68/r /is4。
表1. VADD3PD
指令: | 描述: |
VADD3PD-融合加法-封装双精度浮点值的加法 | 将来自显式第二操作数(zmm2)的封装双精度浮点值与来自显式第三操作数(zmm3或存储器512)的封装双精度浮点值相加,将中间舍入的结果与来自显式第一操作数(zmm1)的封装双精度浮点值相加,并基于显式写掩码k1将结果存储在与第一操作数相同的隐式目的地(zmm1)中。使用立即位[2:0]作为求反控制以便控制加法的符号。 |
以下列出VADD3PD指令的伪代码。DEST是第一源操作数和目的地操作数。SRC2是第二源操作数。SRC3是第三源操作数。VL是以位为单位的向量长度,在此情况下为512位。KL是以位为单位的掩码长度,在此情况下为8位。EVEX.b位用于嵌入式舍入控制和异常抑制。k1是源操作掩码。IMM8是8位立即数。“i”和“j”是计数器。在其它实施例中,可以用存储器或其它存储位置来取代寄存器。
表2提供对封装三源单精度浮点屏蔽和求反控制加法指令(命名为VADD3PS)的特定示例实施例的描述。
表2. VADD3PS
指令: | 描述: |
VADD3PS-融合加法-封装单精度浮点值的加法 | 将来自显式第二操作数(zmm2)的封装单精度浮点值与来自显式第三操作数(zmm3或存储器512)的封装单精度浮点值相加,将中间舍入的结果与来自显式第一操作数(zmm1)的封装单精度浮点值相加,并基于显式写掩码k1将结果存储在与第一操作数相同的隐式目的地(zmm1)中。使用立即位[2:0]作为求反控制以便控制加法的符号。 |
VADD3PS指令的伪代码与上文所列的VADD3PD指令的伪代码类似,不同之处在于,使用32位而不是64位数据元素,并且使用两倍宽的操作掩码。在其它实施例中,可以用存储器或其它存储位置来取代寄存器。
这些只是指令的合适实施例的说明性示例。其它实施例可使用更窄或更宽的源封装数据操作数,和/或可使用不同大小的浮点数据元素。其它实施例可不使用屏蔽/预测。其它实施例可不使用求反控制。其它实施例可不同地指定或指示源和/或目的地操作数。
图6是示出可响应于标量三源浮点可选屏蔽可选求反控制加法指令的实施例执行的标量三源浮点可选屏蔽可选求反控制加法操作644的实施例的框图。图6的标量可选求反控制操作具有与图4的标量操作的某些相似性,只是并入了与图5的封装操作类似的可选求反控制。为了避免使该描述模糊,将提供图6的简短描述,而不重复相对于图4-5的操作的所有可选地类似或共同的特性和细节。但是,将明白,除非另外指出或以其它方式明确表示,否则之前描述的图4的标量操作的特性和细节以及图5的操作的可选求反控制方面也可可选地适用于图6的操作。
如同图4的标量操作,指令可指定或以其它方式指示具有数据元素A的第一源操作数612、具有数据元素B的第二源操作数614和具有数据元素C的第三源操作数616。这些源操作数和数据元素可具有如之前(例如,如图4)所述的特征和变化。
在一些实施例中,指令还可可选地指定或以其它方式指示源操作掩码622,但这不是必需的。源操作掩码和掩码元素可具有如之前(例如,如图4)所述的特征和变化。在所示示例中,掩码元素M未屏蔽(例如,M=1)。
在一些实施例中,指令可以可选地具有一个或多个求反控制位,但这不是必需的。例如,在所示示例中,指令具有第一位636、第二位638和第三位640,但本发明的范围不限于此。这些位可以可选地位于立即数642中,但本发明的范围不限于此。在其它实施例中,指令可包含具有之前针对图5的操作描述的任何特征、特性和变化的求反控制,不同之处在于,在该标量实施例中,在源操作中对单标量数据元素应用求反控制。在所示示例实施例中,将第一位636设置成控制数据元素A的求反,将第二位638清空以便控制数据元素B的不求反,并将第三位640设置成控制数据元素C的求反。因此,在该示例中,结果可作为单个结果数据元素存储第一浮点舍入和(例如,RND1((-C)+RND2((-A)+B)))。将明白,对哪些特定源操作数求反只是为了说明的目的,在其它实施例中,可不同地对源操作数求反或不求反。
表3提供对标量三源双精度浮点屏蔽和求反控制加法指令(命名为VADD3SD)的特定示例实施例的描述。在一些实施例中,该指令可具有格式VADD3SD xmm1 {k1}{z}, xmm2,xmm3/m64, imm8{er}。在一些实施例中,可在EVEX中将指令编码为EVEX.U1.NDS.128.F3.0F3A.W1 69 /r /is4。
下文列出VADD3SD指令的伪代码。DEST是第一源操作数和目的地操作数。SRC2是第二源操作数。SRC3是第三源操作数。EVEX.b位用于嵌入式舍入控制和异常抑制。k1是源操作掩码。IMM8是8位立即数。在其它实施例中,可以用存储器或其它存储位置来取代寄存器。
表4提供对标量三源单精度浮点屏蔽和求反控制加法指令(命名为VADD3SS)的特定示例实施例的描述。
VADD3SS指令的伪代码与上文所列的VADD3SD指令的伪代码类似,不同之处在于,使用32位而不是64位数据元素。在其它实施例中,可以用存储器或其它存储位置来取代寄存器。
这些只是指令的合适实施例的说明性示例。其它实施例可使用不同大小的浮点数据元素。其它实施例可不使用屏蔽/预测。其它实施例可不使用求反控制。其它实施例可不同地指定或指示源和/或目的地操作数。
图7是用于将三个源浮点操作数相加的三源浮点加法器707的实施例的框图。在该实施例中,三源浮点加法器能够同步地接收第一源浮点操作数712、第二源浮点操作数714和第三源浮点操作数716并将它们相加,并产生可能舍入的结果750。加法器具有用于同步接收这三个源操作数的输入端,并且能够在一般一个的同步加法操作中将它们相加。在这些实施例中,一般不需要并且一般不执行中间舍入和归一化操作。但是,这类三源浮点加法器的一个潜在缺点是,它们往往具有相对更加复杂的设计,往往较大型,往往消耗相对更多的功率,并且往往相当专门化。
许多处理器已经具有或者可以容易地具有一个或多个两源浮点加法器,这一个或多个两源浮点加法器均能够同步地将两个源浮点操作数相加,但它们不能同步地将三个源浮点操作数相加。这类加法器的示例包括常规浮点加法器、混合乘法器-加法器等。在一些实施例中,可利用这些现有的两源浮点加法器来实现本文中所公开的三源浮点加法指令/操作,以免需要包含诸如图7的加法器的专门的三源浮点加法器。
图8是串联耦合在一起以便将三个源浮点操作数相加的一对两源浮点加法器808A、808B的实施例的框图。举例来说,加法器可包括浮点加法器、浮点混合乘法器-加法器等。第一个两源操作数浮点加法器808A具有耦合成接收第一浮点操作数812和第二浮点操作数814的输入端。第一个两源操作数浮点加法器还具有耦合成接收对应于三源浮点加法指令和/或从三源浮点加法指令导出的控制信号802的输入端。例如,可从保留站(未示出)接收控制信号。在一些实施例中,还可可选地将控制信号或其可选地简化的版本提供给可选的缓冲器854。第一个两源操作数浮点加法器能够将第一和第二浮点操作数相加以便产生涉及第一和第二操作数的第一舍入和852。当合适时,根据浮点舍入模式对第一舍入和进行舍入操作。第一个两源操作数浮点加法器具有用于提供第一舍入和的输出端。第二个两源浮点加法器808B具有与第一加法器的输出端耦合以便接收第一舍入和的输入端。第二个两源浮点加法器还具有耦合成接收第三浮点操作数816的输入端。第二个两源浮点加法器还具有与缓冲器854的输出端耦合以便接收控制信号802或其简化版本的输入端。在通过第一加法器生成第一舍入和时的时间周期,可将控制信号存储在缓冲器中,然后可将控制信号与第一舍入和一起提供给第二加法器。第二个两源操作数浮点加法器能够将第三浮点操作数与第一舍入和相加以便产生涉及所有三个源浮点操作数的第二舍入和818。第二个两源操作数浮点加法器具有用于提供第二舍入和的输出端。有利地,在该实施例中,可将三个源浮点操作数相加,而无需包含三源浮点加法器,由此可有助于降低设计的复杂度、大小和/或功耗。
图9是两源浮点加法器908的实施例的框图,该加法器具有用于耦合加法器的输出端和加法器的输入端的再循环路径956。举例来说,加法器可包括浮点加法器、浮点混合乘法器-加法器等。两源操作数浮点加法器具有耦合成接收第一浮点操作数912和第二浮点操作数914的第一和第二输入端。两源操作数浮点加法器还具有耦合成接收对应于三源浮点加法指令和/或从三源浮点加法指令导出的控制信号902的输入端。例如,可从保留站(未示出)接收控制信号。两源操作数浮点加法器能够将第一和第二浮点操作数相加以便产生涉及第一和第二源操作数的第一舍入和952。当合适时,根据浮点舍入模式对第一舍入和进行舍入操作。两源操作数浮点加法器具有与再循环路径956耦合的输出端。再循环路径可将来自加法器的输出端的第一舍入和耦合或通信到加法器的输入端。再循环路径可包括用于将来自加法器的输出端的第一舍入和耦合回到加法器的输入端的电路,例如线路、导线、互连、传导路径等。两源浮点加法器还具有耦合成接收第三浮点操作数916的输入端。两源浮点加法器还具有与缓冲器954的输出端耦合以便接收控制信号902的输入端。在通过加法器生成第一舍入和时的时间周期,可将控制信号存储在缓冲器中,然后可将控制信号与第一舍入和以及第三源操作数一起提供给加法器。两源操作数浮点加法器能够将第三浮点操作数与第一舍入和相加以便产生涉及所有三个源浮点操作数的第二舍入和918。注意,对于两个顺序浮点加法操作使用同一个两源浮点加法器。两源操作数浮点加法器具有用于提供第二舍入和918的输出端。有利地,在该实施例中,可将三个源浮点操作数相加,而无需包含三源浮点加法器,由此可有助于降低设计的复杂度、大小和/或功耗。
图10是三源浮点加法指令1002的合适指令格式的实施例的框图。该指令格式包括操作代码或操作码1060。操作码可表示可进行操作以便标识即将执行的指令和/或操作(例如,三源浮点加法)的多个位或一个或多个字段。
该指令格式还可选地包括用于指定第一源操作数的第一源指定符1061、用于指定第二源操作数的第二源指定符1062、用于指定第三源操作数的第三源指定符1063、和用于指定可存储结果的目的地操作数的目的地指定符1064。举例来说,这些指定符中的每个指定符可包括用于明确地指定相关联的操作数的寄存器、存储器位置或其它存储位置的地址的位或一个或多个字段。备选地,在另一个实施例中,一个或多个指定符可以可选地对于指令是隐式的,而不是明确地指定。例如,在一些实施例中,取代目的地指定符,可以可选地隐含地使用用于源操作数之一的相同存储位置来作为目的地操作数。举例来说,源/目的地寄存器最初可具有源数据,稍后可以用结果覆写该源数据。备选地,在另一个实施例中,可以用隐式操作数来取代任何一个或多个显式指定符。
在一些实施例中,指令格式可包括用于明确地指定操作掩码(例如,掩码寄存器)的可选操作掩码指定符1065。备选地,可隐含地指示封装数据操作掩码。在一些实施例中,指令格式还可包括用于指定屏蔽操作的类型的可选的屏蔽操作类型指定符1066。举例来说,屏蔽操作类型指定符可包括用于指定即将执行合并屏蔽还是归零屏蔽的单个位。备选地,可隐含地指示(例如,通过操作码)或以其它方式指定(例如,在控制寄存器中)屏蔽操作的类型。其它实施例可不执行屏蔽,并且无需掩码指定符或屏蔽类型指定符。
在一些实施例中,指令格式可包括用于指定即将在本文中公开的操作中使用的浮点舍入模式的可选的浮点舍入模式指定符1067。在一些实施例中,浮点舍入模式可覆盖浮点控制寄存器中的模式。本文中提到的各种舍入模式中的任何舍入模式或本领域中已知的其它舍入模式都是合适的。浮点舍入模式指定符是可选的,而不是必需的。在一些实施例中,舍入模式指定符可暗示抑制所有浮点异常,但这不是必需的。
在一些实施例中,指令格式可包括用于指定求反控制的可选的求反控制指定符1068。在一些实施例中,求反控制指定符可包括立即数的位。备选地,可使用指令编码的其它部分中的位。求反控制指定符是可选的,而不是必需的。
将明白,这只是一个说明性示例。备选实施例可包括这些指定符的子集,可增加另外的指定符或字段,可重叠某些指定符或字段,等等。另外,所示的字段的顺序/排列不是必需的,而是这些字段可重新排列、重叠;这些字段无需包括连续的位序列,而是可包括非连续或独立的位;等等。在一些实施例中,指令格式可具有VEX或EVEX编码或指令格式,它可具有在本文中的其它地方加以描述的特征,但本发明的范围不限于此。在一些实施例中,在EVEX编码中,可在reg_field中编码第三源操作数,可在VEX.vvvv中编码第一源操作数,并且可利用八位立即数的一部分和rm_field之一编码第二源操作数,但本发明的范围不限于此。在EVEX编码的情况下,可通过对于指令的寄存器-寄存器形式将EVEX.b位设置成1来在指令的编码中启用静态舍入模式控制和隐含地抑制所有异常。
图11是封装数据寄存器1110的合适集合的示例实施例的框图。封装数据寄存器包括标为ZMM0-ZMM31的32个512位封装数据寄存器。在所示实施例中,较低的16个寄存器(即,ZMM0-ZMM15)的低阶256位混叠或覆盖在标为YMM0-YMM15的相应的256位封装数据寄存器上,但这不是必需的。同样地,在所示实施例中,寄存器YMM0-YMM15的低阶128位混叠或覆盖在标为XMM0-XMM15的相应的128位封装数据寄存器上,但这也不是必需的。512位寄存器ZMM0-ZMM31可进行操作以便保存512位封装数据、256位封装数据或128位封装数据。256位寄存器YMM0-YMM15可进行操作以便保存256位封装数据或128位封装数据。128位寄存器XMM0-XMM15可进行操作以便保存128位封装数据。在一些实施例中,每个寄存器都可用于存储封装浮点数据或封装整数数据。支持不同的数据元素大小,包括至少8位字节数据、16位字数据、32位双字、32位单精度浮点数据、64位四字和64位双精度浮点数据。在备选实施例中,可使用不同数量的寄存器和/或不同大小的寄存器。在其它实施例中,可使用或不使用将较大寄存器混叠在较小寄存器上的寄存器,和/或寄存器可用于或可不用于存储浮点数据。
图12是示出封装数据操作掩码位的数量取决于封装数据宽度和封装数据元素宽度的表1270。示出128位、256位和512位的封装数据宽度,但其它宽度也是可能的。示出16位半精度、32位单精度和64位双精度浮点格式的封装数据元素宽度,但其它宽度也是可能的。作为一个示例,当封装数据宽度是128位时,在封装数据元素宽度是32位时,可使用4位(例如,寄存器的最低阶4位)来进行屏蔽。
图13是操作掩码寄存器1320的合适集合的示例实施例的框图。每个封装数据操作掩码寄存器都可用于存储封装数据操作掩码。在所示实施例中,该集合包括标为k0-k7的8个寄存器。备选实施例可包括少于8个寄存器(例如,2个、4个、6个等)或多于8个寄存器(例如,16个、32个等)。在所示实施例中,每个寄存器都是64位。在备选实施例中,寄存器的宽度可比64位宽(例如,80位、128位等)或比64位窄(例如,8位、16位、32位等)。寄存器可以利用公知的技术以不同的方式实现,并且不限于任何已知的特定类型的电路。合适寄存器的示例包括但不限于专用物理寄存器、利用寄存器重命名的动态分配的物理寄存器及其组合。
在一些实施例中,封装数据操作掩码寄存器1320可以是体系结构寄存器的独立的专用集合。在一些实施例中,指令可在与用于编码或指定其它类型的寄存器(例如,封装数据寄存器)的位或字段不同的指令格式的位或一个或多个字段中编码或指定封装数据操作掩码寄存器。举例来说,指令可使用三个位(例如,3位字段)来编码或指定8个封装数据操作掩码寄存器k0-k7中的任何一个。在备选实施例中,当存在更少或更多封装数据操作掩码寄存器时,可分别使用更少或更多位。在一个特定实现中,可只寻址封装数据操作掩码寄存器k1-k7(而没有k0)以便作为预测操作数来预测屏蔽封装数据操作。寄存器k0可用作常规源或目的地,而不编码为预测操作数(例如,如果指定k0,那么它具有“非屏蔽”编码)。但是,这是可选的,而不是必需的。
指令集包括一个或多个指令格式。给定指令格式定义各种字段(位的数量、位的位置),以便尤其指定即将执行的操作(操作码)和即将被执行该操作的操作数。通过定义指令模板(或子格式)进一步分解一些指令格式。例如,给定指令格式的指令模板可定义成具有指令格式的字段的不同子集(包含的字段通常按相同顺序,但是因为包含较少字段,所以至少一些字段具有不同的位的位置),和/或可定义成具有不同地解释的给定字段。因此,利用给定指令格式(并且如果进行了定义,那么在该指令格式的给定一个指令模板中)来表示ISA的每个指令,并且每个指令包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,该指令格式包括用于指定该操作码的操作码字段和用于选择操作数的操作数字段(源1/目的地和源2);并且该ADD指令在指令流中出现将在选择特定操作数的操作数字段中具有特定内容。称为高级向量扩展(AVX)(AVX1和AVX2)并利用向量扩展(VEX)编码方案的SIMD扩展的集合已经有、已经发布和/或公布(例如,见2011年10月的Intel® 64和IA-32 Architectures Software Developers Manual;以及2011年6月的Intel® Advanced Vector Extensions Programming Reference)。
示例性指令格式
本文中描述的指令的实施例可以用不同的格式实施。另外,下文详述示例性***、体系结构和管线。指令的实施例可在这些***、体系结构和管线上执行,但是不限于详述的这些***、体系结构和管线。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,存在对于向量操作特有的某些字段)。尽管描述了其中通过向量友好指令格式支持向量和标量操作的实施例,但是备选实施例只利用向量友好指令格式的向量操作。
图14A-14B是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图14A是示出根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图14B是示出根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体来说,为通用向量友好指令格式1400定义A类和B类指令模板,这两个指令模板均包括非存储器访问1405指令模板和存储器访问1420指令模板。向量友好指令格式的上下文中的术语“通用”是指指令格式并不束缚于任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下格式的本发明的实施例:具有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字节向量操作数)。
图14A中的A类指令模板包括:1)在非存储器访问1405指令模板内,示出非存储器访问、全部舍入控制型操作1410指令模板和非存储器访问、数据变换类型操作1415指令模板;以及2)在存储器访问1420指令模板内,示出存储器访问、临时1425指令模板和存储器访问、非临时1430指令模板。图14B中的B类指令模板包括:1)在非存储器访问1405指令模板内,示出非存储器访问、写掩码控制、部分舍入控制型操作1412指令模板和非存储器访问、写掩码控制、vsize型操作1417指令模板;以及2)在存储器访问1420指令模板内,示出存储器访问、写掩码控制1427指令模板。
通用向量友好指令格式1400包括下文按图14A-14B所示的顺序列出的以下字段。
格式字段1440——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式、以及因此的向量友好指令格式的指令在指令流中的出现。因此,从对于只具有通用向量友好指令格式的指令集而言不需要它的意义来说,该字段是可选的。
基本操作字段1442——它的内容区分不同的基本操作。
寄存器索引字段1444——如果源和目的地操作数在寄存器或存储器中,那么该字段的内容直接或通过地址生成指定源和目的地操作数的位置。它们包括足以从P×Q(例如,32×512、16×128、32×1024、64×1024)寄存器文件中选择N个寄存器的数量的位。尽管在一个实施例中,N可多达三个源和一个目的地寄存器,但是备选实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源之一还充当目的地;可支持多达三个源,其中这些源之一还充当目的地;可支持多达两个源和一个目的地)。
修改符字段1446——它的内容区分指定存储器访问的通用向量指令格式的指令的出现与不指定存储器访问的通用向量指令格式的指令的出现;即,在非存储器访问1405指令模板和存储器访问1420指令模板之间进行区分。存储器访问操作对存储器层级进行读取和/或写入(在一些情况下,利用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。尽管在一个实施例中,该字段也在三种不同方法之间选择以便执行存储器地址计算,但是备选实施例可支持更多、更少或不同的方法来执行存储器地址计算。
扩增操作字段1450——它的内容区分除了基本操作之外还将执行各种不同操作中的哪个操作。该字段是内容特定的。在本发明的一个实施例中,该字段划分成类别字段1468、α字段1452和β字段1454。扩增操作字段1450允许在单个指令而不是在2、3或4个指令中执行共同操作群组。
缩放字段1460——它的内容允许对索引字段的内容进行缩放以便用于存储器地址生成(例如,用于利用2scale*index+base的地址生成)。
位移字段1462A——它的内容用作存储器地址生成的一部分(例如,用于利用2scale*index+base+displacement的地址生成)。
位移因子字段1462B(注意,位移字段1462A直接并置在位移因子字段1462B上指示使用一个或另一个)——它的内容用作地址生成的一部分;它指定即将缩放存储器访问的大小(N)的位移因子,其中N是存储器访问中的字节数(例如,用于利用2scale*index+base+scaled displacement的地址生成)。忽略冗余低阶位,并且因此,将位移因子字段的内容乘以存储器操作数总大小(N),从而生成最终位移以便在计算有效地址时使用。N的值由处理器硬件在运行时基于完整操作码字段1474(本文稍后将描述)和数据操纵字段1454C确定。从对于非存储器访问1405指令模板不使用它们和/或不同实施例可只实现这两个中的一个或不实现这两个中的任一个的意义来说,位移字段1462A和位移因子字段1462B是可选的。
数据元素宽度字段1464——它的内容区分将使用多个数据元素宽度中的哪个数据元素宽度(在一些实施例中对于所有指令;在其它实施例中只对于一些指令)。从如果只支持一个数据元素宽度、那么它不需要和/或利用操作码的某个方面支持数据元素宽度的意义来说,该字段是可选的。
写掩码字段1470——它的内容在每个数据元素位置基础上控制目的地向量操作数中的数据元素位置是否反映基本操作和扩增操作的结果。A类指令模板支持合并-写屏蔽,而B类指令模板支持合并和归零-写屏蔽。当为合并时,向量掩码允许保护目的地中的任何元素集以免在执行任何操作(由基本操作和扩增操作指定)期间更新;在其它一个实施例中,在对应掩码位具有0的情况下,保存目的地的每个元素的旧值。反之,当为归零时,向量掩码允许在执行任何操作(由基本操作和扩增操作指定)期间将目的地中的任何元素集归零;在一个实施例中,当对应掩码位具有0值时,将目的地的元素设置成0。该功能性的子集具有控制所执行的操作的向量长度(即,所修改的元素从第一个元素到最后一个元素的跨距)的能力;但是,修改的元素不一定是连续的。因此,写掩码字段1470允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段1470的内容选择多个写掩码寄存器中包含即将使用的写掩码的写掩码寄存器(并且因此,写掩码字段1470的内容间接地标识即将执行的该屏蔽)的本发明的实施例,但是备选实施例改为或另外允许写掩码字段1470的内容直接指定即将执行的屏蔽。
立即字段1472——它的内容允许规定立即数。从在不支持立即数的通用向量友好格式的实现中不存在并且在不使用立即数的指令中不存在的意义来说,该字段是可选的。
类别字段1468——它的内容区分不同类别的指令。参考图14A-B,该字段的内容在A类和B类指令之间选择。在图14A-B中,使用圆角方形来指示在字段中存在特定值(例如,在图14A-B中,对于类别字段1468分别为A类1468A和B类1468B)。
A类的指令模板
在A类的非存储器访问1405指令模板的情况下,将α字段1452解释为RS字段1452A,其内容区分即将执行不同扩增操作类型中的哪个扩增操作类型(例如,分别为非存储器访问、舍入型操作1410和非存储器访问、数据变换类型操作1415指令模板指定舍入1452A.1和数据变换1452A.2);而β字段1454区分即将执行指定类型的操作中的哪个操作。在非存储器访问1405指令模板中,不存在缩放字段1460、位移字段1462A和位移缩放字段1462B。
非存储器访问指令模板——全部舍入控制型操作
在非存储器访问全部舍入控制型操作1410指令模板中,将β字段1454解释为舍入控制字段1454A,其内容提供静态舍入。尽管在所描述的本发明的实施例中,舍入控制字段1454A包括抑制所有浮点异常(SAE)字段1456和舍入操作控制字段1458,但是备选实施例可支持将这些概念编码到相同字段中,或者只具有这些概念/字段中的一个或另一个(例如,可只具有舍入操作控制字段1458)。
SAE字段1456——它的内容区分是否禁用异常事件报告;当SAE字段1456的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志,并且不引发任何浮点异常处理程序。
舍入操作控制字段1458——它的内容区分执行舍入操作群组中的哪个操作(例如,向上舍入、向下舍入、向零舍入和最近舍入)。因此,舍入操作控制字段1458允许在每个指令基础上改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1450的内容覆盖该寄存器值。
非存储器访问指令模板——数据变换类型操作
在非存储器访问数据变换类型操作1415指令模板中,将β字段1454解释为数据变换字段1454B,其内容区分将执行多个数据变换中的哪个数据变换(例如,非数据变换、搅和、广播)。
在A类的存储器访问1420指令模板的情况下,将α字段1452解释为驱逐提示字段1452B,其内容区分将使用驱逐提示中的哪个驱逐提示(在图14A中,分别为存储器访问、临时1425指令模板和存储器访问、非临时1430指令模板指定临时1452B.1和非临时1452B.2);而将β字段1454解释为数据操纵字段1454C,其内容区分将执行多个数据操纵操作(又称为原语)中的哪个数据操纵操作(例如,非操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问1420指令模板包括缩放字段1460以及可选的位移字段1462A或位移缩放字段1462B。
向量存储器指令在转换支持下执行从存储器的向量加载以及到存储器的向量存储。正如常规向量指令一样,向量存储器指令以逐个数据元素的方式从存储器传送数据和/或将数据传送到存储器,其中通过选作写掩码的向量掩码的内容规定实际传送的元素。
存储器访问指令模板——临时
临时数据是可能在足以得益于缓存的不久再用的数据。但是,这是提示,并且不同处理器可以用不同方式实现它,包括完全忽略该提示。
存储器访问指令模板——非临时
非临时数据是不太可能在足以得益于第一级高速缓存中的缓存的不久再用的数据,并且应当赋予其驱逐优先级。但是,这是提示,并且不同处理器可以用不同方式实现它,包括完全忽略该提示。
B类的指令模板
在B类的指令模板的情况下,将α字段1452解释为写掩码控制(Z)字段1452C,其内容区分受写掩码字段1470控制的写屏蔽应当是合并还是归零。
在B类的非存储器访问1405指令模板的情况下,将β字段1454的部分解释为RL字段1457A,其内容区分将执行不同扩增操作类型中的哪个扩增操作类型(例如,分别为非存储器访问、写掩码控制、部分舍入控制型操作1412指令模板和非存储器访问、写掩码控制、VSIZE型操作1417指令模板指定舍入1457A.1和向量长度(VSIZE)1457A.2);而β字段1454的剩余部分区分将执行指定类型的操作中的哪个操作。在非存储器访问1405指令模板中,不存在缩放字段1460、位移字段1462A和位移缩放字段1462B。
在非存储器访问、写掩码控制、部分舍入控制型操作1410指令模板中,将β字段1454的剩余部分解释为舍入操作字段1459A,并禁用异常事件报告(给定指令不报告任何种类的浮点异常标志,并且不引发任何浮点异常处理程序)。
舍入操作控制字段1459A——正像舍入操作控制字段1458一样,它的内容区分执行舍入操作群组中的哪个舍入操作(例如,向上舍入、向下舍入、向零舍入和最近舍入)。因此,舍入操作控制字段1459A允许在每个指令基础上改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1459A的内容覆盖该寄存器值。
在非存储器访问、写掩码控制、VSIZE型操作1417指令模板中,将β字段1454的剩余部分解释为向量长度字段1459B,其内容区分将执行多个数据向量长度中的哪个数据向量长度(例如,128、256或512字节)。
在B类的存储器访问1420指令模板的情况下,将β字段1454的部分解释为广播字段1457B,其内容区分是否将执行广播型数据操纵操作;而将β字段1454的剩余部分解释为向量长度字段1459B。存储器访问1420指令模板包括缩放字段1460,并且可选地包括位移字段1462A或位移缩放字段1462B。
关于通用向量友好指令格式1400,示出包括格式字段1440、基本操作字段1442和数据元素宽度字段1464的完整操作码字段1474。尽管示出其中完整操作码字段1474包括所有这些字段的一个实施例,但是在不支持它们中的全部的实施例中,完整操作码字段1474包括这些字段中的不到全部字段。完整操作码字段1474提供操作代码(操作码)。
扩增操作字段1450、数据元素宽度字段1464和写掩码字段1470允许在通用向量友好指令格式中在每个指令基础上指定这些特征。
写掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同数据元素宽度应用掩码。
A类和B类中发现的各种指令模板在不同情形中都是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核可只支持A类、只支持B类或支持两类。例如,预计用于通用计算的高性能通用无序核可只支持B类,预计主要用于图形和/或科学(吞吐量)计算的核可只支持A类,而预计用于两者的核可支持两者(当然,具有来自两类的模板和指令的一些混合而并非具有来自两类的所有模板和指令的核也在本发明的范围内)。并且,单个处理器可包括多个核,所有这些核支持相同类或在这些核中不同核支持不同类。例如,在具有独立的图形和通用核的处理器中,预计主要用于图形和/或科学计算的图形核之一可只支持A类;而通用核中的一个或多个核可以是具有预计用于通用计算的无序执行和寄存器重命名的高性能通用核,它只支持B类。不具有独立图形核的另一个处理器可包括支持A类和B类的一个或多个通用有序或无序核。当然,在本发明的不同实施例中,来自一个类的特征也可在另一个类中实现。用高级语言编写的程序将放到(例如,及时编译或静态地编译到)各种不同的可执行形式中,包括:1)只具有由目标处理器支持以用于执行的类别的指令的形式;或2)具有利用所有类别的指令的不同组合编写的备选例行程序并且具有基于由当前执行代码的处理器支持的指令选择这些例行程序以便执行的控制流代码的形式。
示例性特定向量友好指令格式
图15是示出根据本发明的实施例的示例性特定向量友好指令格式的框图。图15示出从它指定字段的位置、大小、解释和顺序以及那些字段中的一些字段的值的意义来说特定的特定向量友好指令格式1500。特定向量友好指令格式1500可用于扩展x86指令集,并且因此其中一些字段与现有x86指令集及其扩展(例如,AVX)中所用的字段类似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即字段一致。图中示出与来自图15的字段映射的来自图14的字段。
应了解,尽管出于说明的目的,在通用向量友好指令格式1400的上下文中参考特定向量友好指令格式1500描述本发明的实施例,但是除非另外声明,否则本发明不限于特定向量友好指令格式1500。例如,通用向量友好指令格式1400预期各种字段的各种可能的大小,而特定向量友好指令格式1500示为具有特定大小的字段。举一个特定示例,尽管将数据元素宽度1464示为是特定向量友好指令格式1500中的一位字段,但是本发明不限于此(即,通用向量友好指令格式1400预期数据元素宽度字段1464的其它大小)。
通用向量友好指令格式1400包括下文按图15A中示出的顺序列出的以下字段。
EVEX Prefix(字节0-3)1502——用四字节形式编码。
格式字段1440(EVEX字节0、位[7:0])——第一字节(EVEX字节0)是格式字段1440,并且它包含0×62(在本发明的一个实施例中,用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段1505(EVEX字节1、位[7-5])——由EVEX.R位字段(EVEX字节1、位[7]-R)、EVEX.X位字段(EVEX字节1、位[6]-X)和EVEX.B(EVEX字节1、位[5]-B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应的VEX位字段相同的功能性,并且利用1s补码形式编码,即,将ZMM0编码为1111B,将ZMM15编码为0000B。如本领域中所知,指令的其它字段编码寄存器索引的较低三个位(rrr、xxx和bbb),以使得可通过增加EVEX.R、EVEX.X和EVEX.B而形成Rrrr、Xxxx和Bbbb。
REX字段1410——这是REX字段1410的第一部分,并且是用于编码扩展型32寄存器集合的较上16个或较下16个寄存器的EVEX.R的位字段(EVEX字节1、位[4]-R’)。在本发明的一个实施例中,以位倒转格式存储该位以及下文所指示的其它位,以便区别于(以众所周知的x86 32位模式)BOUND指令,其真实操作码字节是62,但在MOD R/M字段(如下所述)中不接受MOD字段中的值为11;本发明的备选实施例不以倒转格式存储该位和其它指示的位。值1用于编码较低的16个寄存器。换句话说,通过组合EVEX.R’、EVEX.R和来自其它字段的其它RRR形成R’Rrrr。
操作码映射字段1515(EVEX字节1、位[3:0]-mmmm)——它的内容编码隐含的主导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段1464(EVEX字节2、位[7]-W)——由符号EVEX.W表示。EVEX.W用于定义数据类型的粒度(大小)(32位数据元素或64位数据元素)。
EVEX.vvvv 1520(EVEX字节2、位[6:3]-vvvv)——EVEX.vvvv的作用可包括如下:1)EVEX.vvvv编码以倒转(1s补码)形式指定的第一源寄存器操作数,并且对于具有2个或2个以上源操作数的指令有效;2)EVEX.vvvv编码对于某些向量偏移以1s补码形式指定的目的地寄存器操作数;或3)EVEX.vvvv不编码任何操作数,该字段保留并且应当包含1111b。因此,EVEX.vvvv字段1520编码以倒转(1s补码)形式存储的第一源寄存器指定符的4个低阶位。取决于指令,利用另外的不同EVEX位字段来将指定符大小扩展为32个寄存器。
EVEX.U 1468类别字段(EVEX字节2、位[2]-U)——如果EVEX.U=0,那么它指示A类或EVEX.U0;如果EVEX.U=1,那么它指示B类或EVEX.U1。
前缀编码字段1525(EVEX字节2、位[1:0]-pp)——它为基本操作字段提供另外位。除了为EVEX前缀格式的传统SSE指令提供支持以外,这还具有压缩SIMD前缀的益处(无需字节来表示SIMD前缀,EVEX前缀只需2个位)。在一个实施例中,为了支持使用传统格式和EVEX前缀格式的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码到SIMD前缀编码字段中;并且在运行时将其扩充到传统SIMD前缀中,然后提供给解码器的PLA(因此,PLA可执行这些传统指令的传统和EVEX格式,而无需修改)。尽管更新的指令可直接使用EVEX前缀编码字段的内容以作为操作码扩展,但是某些实施例以类似方式扩充以便实现一致性,但允许通过这些传统SIMD前缀来指定不同含义。备选实施例可将PLA重新设计成支持2位SIMD前缀编码,并且因此无需扩充。
α字段1452(EVEX字节3、位[7]-EH;又称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制和EVEX.N;还用α示出)——如前所述,该字段是内容特定的。
β字段1454(EVEX字节3、位[6:4]-SSS,又称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;还用βββ示出)——如前所述,该字段是内容特定的。
REX字段1410——这是REX’字段的剩余部分,并且是可用于编码扩展型32寄存器集合的较上16个或较下16个寄存器的EVEX.V’位字段(EVEX字节3、位[3]-V’)。以位倒转格式存储该位。值1用于编码较低的16个寄存器。换句话说,通过组合EVEX.V’和EVEX.vvvv而形成V’VVVV。
写掩码字段1470(EVEX字节3、位[2:0]-kkk)——如前所述,它的内容指定写掩码寄存器中的寄存器的索引。在本发明的一个实施例中,特定值EVEK.kkk=000具有暗示对于特定指令不使用写掩码的特殊行为(这可以用多种方式实现,包括使用硬接线到所有的写掩码或绕过屏蔽硬件的硬件)。
真实操作码字段1530(字节4)又称为操作码字节。该字段中指定操作码的部分。
MOD R/M字段1540(字节5)包括MOD字段1542、Reg字段1544和R/M字段1546。如前所述,MOD字段1542的内容区分存储器访问和非存储器访问操作。Reg字段1544的作用可总结为两种情形:编码目的地寄存器操作数或源寄存器操作数;或视作是操作码扩展而不用于编码任何指令操作数。R/M字段1546的作用可包括如下:编码引用存储器地址的指令操作数;或编码目的地寄存器操作数或源寄存器操作数。
缩放、索引、基址(SIB)字节(字节6)——如前所述,缩放字段1450的内容用于存储器地址生成。SIB.xxx 1554和SIB.bbb 1556——之前已经关于寄存器索引Xxxx和Bbbb提到过这些字段的内容。
位移字段1462A(字节7-10)——当MOD字段1542包含10时,字节7-10是位移字段1462A,并且它与传统32位位移(disp32)相同地工作,并且按字节粒度工作。
位移因子字段1462B(字节7)——当MOD字段1542包含01时,字节7是位移因子字段1462B。该字段的位置与按字节粒度工作的传统x86指令集8位位移(disp8)相同。由于disp8进行了符号扩展,所以它只可在-128和127字节偏移之间寻址;依据64字节高速缓存线,disp8使用8个位,这8个位可设置成只有4个真实有用的值-128、-64、0和64;由于通常需要更大范围,所以使用disp32;但是,disp32需要4个字节。与disp8和disp32相比,位移因子字段1462B是disp8的重新解释;当使用位移因子字段1462B时,实际位移由位移因子字段的内容乘以存储器操作数存取的大小(N)决定。这种类型的位移称为disp8*N。这减少了平均指令长度(单个字节用于位移,但是具有大得多的范围)。这种压缩位移基于如下假设,即,有效位移是存储器访问的粒度的倍数,并且因此,无需编码地址偏移的冗余低阶位。换句话说,位移因子字段1462B代替传统x86指令集8位位移。因此,以与x86指令集8位位移相同的方式编码位移因子字段1462B(因此,ModRM/SIB编码规则没有变化),唯一不同之处在于,disp8过载为disp8*N。换句话说,编码规则或编码长度没有变化,只是在通过硬件解释位移值时有所变化(这需要将位移缩放存储器操作数的大小以便获得逐个字节地址偏移)。
立即字段1472如前所述那样操作。
完整操作码字段
图15B是示出根据本发明一个实施例构成完整操作码字段1474的特定向量友好指令格式1500的字段的框图。具体来说,完整操作码字段1474包括格式字段1440、基本操作字段1442和数据元素宽度(W)字段1464。基本操作字段1442包括前缀编码字段1525、操作码映射字段1515和真实操作码字段1530。
寄存器索引字段
图15C是示出根据本发明一个实施例构成寄存器索引字段1444的特定向量友好指令格式1500的字段的框图。具体来说,寄存器索引字段1444包括REX字段1505、REX’字段1510、MODR/M.reg字段1544、MODR/M.r/m字段1546、VVVV字段1520、xxx字段1554和bbb字段1556。
扩增操作字段
图15D是示出根据本发明一个实施例构成扩增操作字段1450的特定向量友好指令格式1500的字段的框图。当类别(U)字段1468包含0时,它意味着EVEX.U0(A类1468A);当它包含1时,它意味着EVEX.U1(B类1468B)。当U=0并且MOD字段1542包含11(意味着非存储器访问操作)时,α字段1452(EVEX字节3、位[7]-EH)解释为rs字段1452A。当rs字段1452A包含1(舍入1452A.1)时,β字段1454(EVEX字节3、位[6:4]-SSS)解释为舍入控制字段1454A。舍入控制字段1454A包含一位SAE字段1456和两位舍入操作字段1458。当rs字段1452A包含0(数据变换1452A.2)时,β字段1454(EVEX字节3、位[6:4]-SSS)解释为三位数据变换字段1454B。当U=0并且MOD字段1542包含00、01或10(意味着存储器访问操作)时,α字段1452(EVEX字节3、位[7]-EH)解释为驱逐提示(EH)字段1452B,并且β字段1454(EVEX字节3、位[6:4]-SSS)解释为三位数据操纵字段1454C。
当U=1时,α字段1452(EVEX字节3、位[7]-EH)解释为写掩码控制(Z)字段1452C。当U=1并且MOD字段1542包含11(意味着非存储器访问操作)时,β字段1454的部分(EVEX字节3、位[4]-S0)解释为RL字段1457A;当它包含1(舍入1457A.1)时,β字段1454的剩余部分(EVEX字节3、位[6:5]-S2-1)解释为舍入操作字段1459A;而当RL字段1457A包含0(VSIZE 1457.A2)时,β字段1454的剩余部分(EVEX字节3、位[6:5]-S2-1)解释为向量长度字段1459B(EVEX字节3、位[6-5]-L1-0)。当U=1并且MOD字段1542包含00、01或10(意味着存储器访问操作)时,β字段1454(EVEX字节3、位[6:4]-SSS)解释为向量长度字段1459B(EVEX字节3、位[6-5]-L1-0)和广播字段1457B(EVEX字节3、位[4]-B)。
示例性寄存器体系结构
图16是根据本发明一个实施例的寄存器体系结构1600的框图。在所示实施例中,有32个512位宽的向量寄存器1610;这些寄存器称为zmm0-zmm31。较低16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。较低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。特定向量友好指令格式1500在这些覆盖的寄存器文件上操作,如下表所示。
换句话说,向量长度字段1459B在最大长度和一个或多个其它较短长度之间选择,其中每个这样的较短长度是之前长度的长度的一半;并且不具有向量长度字段1459B的指令模板在最大向量长度上操作。此外,在一个实施例中,特定向量友好指令格式1500的B类指令模板在封装或标量单/双精度浮点数据和封装或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;取决于实施例,较高阶数据元素位置留下与它们在指令之前一样或清零。
写掩码寄存器1615——在所示实施例中,有8个写掩码寄存器(k0-k7),每个大小为64位。在备选实施例中,写掩码寄存器1615的大小为16位。如前所述,在本发明的一个实施例中,向量掩码寄存器k0可不用作写掩码;当对于写掩码使用通常指示k0的编码时,它选择0xFFFF的硬接线写掩码,从而对该指令有效地禁用写屏蔽。
通用寄存器1625——在所示实施例中,有16个64位通用寄存器,它们与现有x86寻址模式一起用于寻址存储器操作数。这些寄存器称为名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8-R15。
标量浮点堆栈寄存器文件(x87堆栈)1645,其上混叠了MMX封装整数平寄存器文件1650——在所示实施例中,x87堆栈是用于利用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作的8元素堆栈;而使用MMX寄存器来对64位封装整数数据执行操作,并为在MMX和XMM寄存器之间执行的一些操作保存操作数。
本发明的备选实施例可使用更宽或更窄的寄存器。另外,本发明的备选实施例可使用更多、更少或不同的寄存器文件和寄存器。
示例性核体系结构、处理器和计算机体系结构
处理器核可以用不同方式、出于不同目的以及在不同处理器中实现。例如,这些核的实现可包括:1)预计用于通用计算的通用有序核;2)预计用于通用计算的高性能通用无序核;3)预计主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)包括预计用于通用计算的一个或多个通用有序核和/或预计用于通用计算的一个或多个通用无序核的CPU;以及2)包括预计主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这些不同的处理器导致不同的计算机***体系结构,它们可包括:1)位于与CPU独立的芯片上的协处理器;2)位于与CPU相同的封装中的独立管芯上的协处理器;3)位于与CPU相同的管芯上的协处理器(在此情况下,这种协处理器有时称为专用逻辑(例如,集成式图形和/或科学(吞吐量)逻辑)或专用核);以及4)位于可在相同管芯上包含所描述的CPU(有时称为应用核或应用处理器)、上述协处理器和另外功能性的芯片上的***。在描述示例性处理器和计算机体系结构之后,接着将描述示例性核体系结构。
示例性核体系结构
有序和无序核框图
图17A是示出根据本发明的实施例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线的框图。图17B是示出根据本发明的实施例包含在处理器中的有序体系结构核的示例性实施例和示例性寄存器重命名、无序发出/执行体系结构核的框图。图17A-B中的实线框示出有序管线和有序核,而虚线框的可选增加示出寄存器重命名、无序发出/执行管线和核。假定有序方面是无序方面的子集,将描述无序方面。
在图17A中,处理器管线1700包括提取阶段1702、长度解码阶段1704、解码阶段1706、分配阶段1708、重命名阶段1710、调度(又称为分派或发出)阶段1712、寄存器读取/存储器读取阶段1714、执行阶段1716、写回/存储器写入阶段1718、异常处理阶段1722和提交阶段1724。
图17B示出包括耦合到执行引擎单元1750的前端单元1730的处理器核1790,并且前端单元1730和执行引擎单元1750均耦合到存储器单元1770。核1790可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或备选核类型。作为另一个选项,核1790可以是专用核,例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元1730包括耦合到指令高速缓存单元1734的分支预测单元1732,指令高速缓存单元1734耦合到指令转译后援缓冲器(TLB)1736,TLB 1736耦合到指令提取单元1738,指令提取单元1738耦合到解码单元1740。解码单元1740(或解码器)可解码指令,并作为输出生成一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号,这些指令或信号从原始指令解码、或以其它方式反映原始指令、或从原始指令导出。解码单元1740可以利用各种不同的机制实现。合适机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1790包括存储某些宏指令的微代码(例如,存储在解码单元1740或以其它方式存储在前端单元1730内)的微代码ROM或其它介质。解码单元1740耦合到执行引擎单元1750中的重命名/分配器单元1752。
执行引擎单元1750包括耦合到引退单元1754和一个或多个调度器单元1756的集合的重命名/分配器单元1752。调度器单元1756代表任意数量的不同调度器,包括保留站、中央指令窗等。调度器单元1756耦合到物理寄存器文件单元1758。每个物理寄存器文件单元1758代表一个或多个物理寄存器文件,其中的不同物理寄存器文件存储:一个或多个不同的数据类型,例如标量整数、标量浮点、封装整数、封装浮点、向量整数、向量浮点;状态(例如,作为即将执行的下一个指令的地址的指令指针);等等。在一个实施例中,物理寄存器文件单元1758包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供体系结构向量寄存器、向量掩码寄存器和通用寄存器。物理寄存器文件单元1758与引退单元1754重叠以便说明可实现寄存器重命名和无序执行的各种方式(例如,使用记录器缓冲器和引退寄存器文件;使用未来文件、历史缓冲器和引退寄存器文件;使用寄存器映射和寄存器池;等等)。引退单元1754和物理寄存器文件单元1758耦合到执行集群1760。执行集群1760包括一个或多个执行单元1762的集合和一个或多个存储器访问单元1764的集合。执行单元1762可对各种类型的数据(例如,标量浮点、封装整数、封装浮点、向量整数、向量浮点)执行各种操作(例如,偏移、加法、减法、乘法)。尽管一些实施例可包括专用于特定功能或功能集合的多个执行单元,但是其它实施例可只包括一个执行单元或包括全都执行全部功能的多个执行单元。调度器单元1756、物理寄存器文件单元1758和执行集群1760示为可能是复数个,因为某些实施例为某些类型的数据/操作创建独立管线(例如,标量整数管线,标量浮点/封装整数/封装浮点/向量整数/向量浮点管线,和/或各自具有它们自己的调度器单元、物理寄存器文件单元和/或执行集群的存储器访问管线,并且在独立存储器访问管线的情况下,实现其中只有该管线的执行集群具有存储器访问单元1764的某些实施例)。还应了解,在使用独立管线的情况下,这些管线中的一个或多个管线可以是无序发出/执行,而剩余的则是有序的。
存储器访问单元1764的集合耦合到存储器单元1770,存储器单元1770包括耦合到数据高速缓存单元1774的数据TLB单元1772,数据高速缓存单元1774耦合到2级(L2)高速缓存单元1776。在一个示例性实施例中,存储器访问单元1764可包括加载单元、存储地址单元和存储数据单元,其中每个单元均耦合到存储器单元1770中的数据TLB单元1772。指令高速缓存单元1734进一步耦合到存储器单元1770中的2级(L2)高速缓存单元1776。L2高速缓存单元1776耦合到一个或多个其它级别的高速缓存,并且最终耦合到主存储器。
举例来说,示例性寄存器重命名、无序发出/执行核体系结构可如下实现管线1700:1)指令提取1738执行提取和长度解码阶段1702和1704;2)解码单元1740执行解码阶段1706;3)重命名/分配器单元1752执行分配阶段1708和重命名阶段1710;4)调度器单元1756执行调度阶段1712;5)物理寄存器文件单元1758和存储器单元1770执行寄存器读取/存储器读取阶段1714;执行集群1660执行执行阶段1716;6)存储器单元1770和物理寄存器文件单元1758执行写回/存储器写入阶段1718;7)异常处理阶段1722中可涉及各种单元;以及8)引退单元1754和物理寄存器文件单元1758执行提交阶段1724。
核1790可支持包括本文中所描述的指令的一个或多个指令集(例如,x86指令集(更新版本增加了一些扩展);MIPS Technologies of Sunnyvale, CA的MIPS指令集;ARMHoldings of Sunnyvale, CA的ARM指令集(具有诸如NEON的可选另外扩展))。在一个实施例中,核1790包括用于支持封装数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许利用封装数据执行供许多多媒体应用使用的操作。
应了解,该核可支持多线程化(执行操作或线程的两个或两个以上并行集合),并且可以用包括时间切片多线程化、同时多线程化(其中单个物理核为物理核同时多线程化的每个线程提供逻辑核)或其组合(例如,时间切片提取和解码以及此后同时多线程化,例如在Intel® Hyperthreading技术中)的各种方式这样做。
尽管在无序执行的上下文中描述寄存器重命名,但是应了解,寄存器重命名可在有序体系结构中使用。尽管处理器的所示实施例还包括独立的指令和数据高速缓存单元1734/1774以及共享L2高速缓存单元1776,但是备选实施例可具有用于指令和数据的单个内部高速缓存(例如,1级(L1)内部高速缓存)或多级内部高速缓存。在一些实施例中,***可包括内部高速缓存和位于核和/或处理器的外部的外部高速缓存的组合。备选地,所有高速缓存可位于核和/或处理器的外部。
特定示例性有序核体系结构
图18A-B示出更特定的示例性有序核体系结构的框图,该核可以是芯片中的数个逻辑块之一(包括相同类型和/或不同类型的其它核)。取决于应用,这些逻辑块通过高带宽互连网络(例如,环网络)与某个固定功能逻辑、存储器I/O接口和其它必需的I/O逻辑通信。
图18A是根据本发明的实施例的单个处理器核以及它到管芯上互连网络1802的连接和它的2级(L2)高速缓存1804的本地子集的框图。在一个实施例中,指令解码器1800支持具有封装数据指令集扩展的x86指令集。L1高速缓存1806允许低等待时间访问以便将存储器缓存到标量和向量单元中。尽管在一个实施例中(为了简化设计),标量单元1808和向量单元1810使用独立的寄存器集合(分别为标量寄存器1812和向量寄存器1814),并将在它们之间传送的数据写入到存储器,然后从1级(L1)高速缓存1806读回,但是本发明的备选实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许在这两个寄存器文件之间传送数据而无需写入和读回的通信路径)。
L2高速缓存1804的本地子集是划分成独立的本地子集(每个处理器核一个本地子集)的全局L2高速缓存的部分。每个处理器核具有到它自己的L2高速缓存1804的本地子集的直接访问路径。将由处理器核读取的数据存储在它的L2高速缓存子集1804中,并且可以与其它处理器核访问它们自己的本地L2高速缓存子集一起并行地快速访问。将由处理器核写入的数据存储在它自己的L2高速缓存子集1804中,并且如果需要,将它们从其它子集冲洗出。环网络确保共享数据的一致性。环网络是双向的,以便允许诸如处理器核、L2高速缓存和其它逻辑块的代理在芯片内彼此通信。每个环数据路径是每个方向1012位宽。
图18B是根据本发明的实施例的图18A中的处理器核的部分的展开图。图18B包括L1高速缓存1804的L1数据高速缓存1806A部分以及关于向量单元1810和向量寄存器1814的更多细节。具体来说,向量单元1810是16宽度的向量处理单元(VPU)(见16宽度的ALU1828),它执行整数、单精度浮点和双精度浮点指令中的一个或多个指令。VPU支持利用搅和单元1820搅和寄存器输入、利用数字转换单元1822A-B进行数字转换、以及利用复制单元1824对存储器输入进行复制。写掩码寄存器1826允许预测所得向量写入。
具有集成式存储器控制器和图形的处理器
图19是根据本发明的实施例的处理器1900的框图,处理器1900可具有多于一个核,可具有集成式存储器控制器,并且可具有集成式图形。图19中的实线框示出具有单个核1902A、***代理1910、一个或多个总线控制器单元1916的集合的处理器1900,而虚线框的可选增加示出具有多个核1902A-N、***代理单元1910中的一个或多个集成式存储器控制器单元1914的集合、以及专用逻辑1908的备选处理器1900。
因此,处理器1900的不同实现可包括:1)其中专用逻辑1908是集成式图形和/或科学(吞吐量)逻辑(它可包括一个或多个核)并且核1902A-N是一个或多个通用核(例如,通用有序核、通用无序核、这两者的组合)的CPU;2)其中核1902A-N是预计主要用于图形和/或科学(吞吐量)的大量专用核的协处理器;以及3)其中核1902A-N是大量通用有序核的协处理器。因此,处理器1900可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核(MIC)协处理器(包括30个或30个以上核)、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器1900可以是一个或多个衬底的一部分,和/或可以利用诸如BiCMOS、CMOS或NMOS的多个工艺技术中的任一工艺技术在一个或多个衬底上实现。
存储器层级包括位于核内的一个或多个高速缓存级、一个或多个共享高速缓存单元1906的集合以及耦合到集成式存储器控制器单元1914的集合的外部存储器(未示出)。共享高速缓存单元1906的集合可包括:一个或多个中间级高速缓存,例如2级(L2)、3级(L3)、4级(L4)或其它高速缓存级;最后一级高速缓存(LLC);和/或其组合。尽管在一个实施例中,基于环的互连单元1912互连集成式图形逻辑1908、共享高速缓存单元1906的集合和***代理单元1910/集成式存储器控制器单元1914,但是备选实施例可使用任意数量的公知技术来互连这些单元。在一个实施例中,在一个或多个高速缓存单元1906和核1902A-N之间维持一致性。
在一些实施例中,核1902A-N中的一个或多个核能够进行多线程化。***代理1910包括协调和操作核1902A-N的那些组件。***代理单元1910可包括例如功率控制单元(PCU)和显示单元。PCU可以是或可包括用于调节核1902A-N和集成式图形逻辑1908的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核1902A-N可以在体系结构指令集方面是同质或异质的;即,核1902A-N中的两个或两个以上核能够执行相同指令集,而其它核能够只执行该指令集的子集或执行不同指令集。
示例性计算机体系结构
图20-23是示例性计算机体系结构的框图。本领域中已知的用于膝上型计算机、桌面型计算机、手持式PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式装置和各种其它电子装置的其它***设计和配置也都是合适的。一般来说,能够并入本文中所公开的处理器和/或其它执行逻辑的种类繁多的***或电子装置一般都是合适的。
现在参考图20,示出根据本发明一个实施例的***2000的框图。***2000可包括耦合到控制器集线器2020的一个或多个处理器2010、2015。在一个实施例中,控制器集线器2020包括图形存储器控制器集线器(GMCH)2090和输入/输出集线器(IOH)2050(它们可以在独立芯片上);GMCH 2090包括与存储器2040和协处理器2045耦合的存储器和图形控制器;IOH 2050将输入/输出(I/O)装置2060耦合到GMCH 2000。备选地,存储器和图形控制器中的一个或两个集成在处理器内(如本文中所述),存储器2040和协处理器2045直接耦合到处理器2010,并且控制器集线器2020与IOH 2050在单个芯片中。
图20中用虚线表示另外处理器2015的可选性质。每个处理器2010、2015可包括本文中所描述的处理核中的一个或多个核,并且可以是处理器1900的某个版本。
存储器2040可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器集线器2020经由诸如前端总线(FSB)的多跳总线、诸如快速路径互连(QPI)的点到点接口或类似连接2095与处理器2010、2015通信。
在一个实施例中,协处理器2045是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器2020可包括集成式图形加速器。
物理资源2010、2015之间在包括体系结构、微体系结构、热、功耗特性等的指标度量范围方面可存在各种差异。
在一个实施例中,处理器2010执行控制一般类型的数据处理操作的指令。协处理器指令可嵌入在这些指令内。处理器2010将这些协处理器指令识别为是应当由附连的协处理器2045执行的类型。因此,处理器2010在协处理器总线或其它互连上将这些协处理器指令(或代表协处理器指令的控制信号)发给协处理器2045。协处理器2045接受并执行所接收的协处理器指令。
现在参考图21,示出根据本发明一个实施例的第一更特定的示例性***2100的框图。如图21所示,多处理器***2100是点到点互连***,并且包括经由点到点互连2150耦合的第一处理器2170和第二处理器2180。处理器2170和2180中的每个处理器可以是处理器1900的某个版本。在本发明的一个实施例中,处理器2170和2180分别是处理器2010和2015,而协处理器2138是协处理器2045。在另一个实施例中,处理器2170和2180分别是处理器2010和协处理器2045。
图中示出处理器2170和2180分别包括集成式存储器控制器(IMC)单元2172和2182。处理器2170还包括作为它的总线控制器单元的一部分的点到点(P-P)接口2176和2178;类似地,第二处理器2180包括P-P接口2186和2188。处理器2170、2180可经由点到点(P-P)接口2150利用P-P接口电路2178、2188交换信息。如图21所示,IMC 2172和2182将处理器耦合到相应的存储器,即存储器2132和存储器2134,这些存储器可以是在本地附连到相应处理器的主存储器的部分。
处理器2170、2180均可经由各个P-P接口2152、2154利用点到点接口电路2176、2194、2186、2198与芯片组2190交换信息。芯片组2190还可可选地经由高性能接口2139与协处理器2138交换信息。在一个实施例中,协处理器2138是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可包含在任一处理器内,或包含在两个处理器外部,而仍经由P-P互连与处理器连接,以使得如果处理器处于低功率模式,那么任一个或两个处理器的本地高速缓存信息可存储在共享高速缓存中。
芯片组2190可经由接口2196耦合到第一总线2116。在一个实施例中,第一总线2116可以是***组件互连(PCI)总线、或诸如PCI Express总线或其它第三代I/O互连总线的总线,但是本发明的范围不限于此。
如图21所示,各种I/O装置2114以及总线桥接器2118可耦合到第一总线2116,总线桥接器2118将第一总线2116耦合到第二总线2120。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器的一个或多个另外处理器2115耦合到第一总线2116。在一个实施例中,第二总线2120可以是低引脚计数(LPC)总线。各种装置可耦合到第二总线2120,这些装置包括例如键盘和/或鼠标2122、通信装置2127和诸如磁盘驱动器或其它大容量存储装置的存储单元2128,在一个实施例中,存储单元2128可包括指令/代码和数据2130。此外,音频I/O 2124可耦合到第二总线2120。注意,其它体系结构也是可能的。例如,取代图21的点到点体系结构,***可实现多跳总线或其它这样的体系结构。
现在参考图22,示出根据本发明一个实施例的第二更特定的示例性***2200的框图。图21和图22中的类似元件具有类似参考数字,并且图22中省略了图21的某些方面,以免使图22的其它方面模糊。
图22示出,处理器2170、2180可分别包括集成式存储器和I/O控制逻辑(“CL”)2172和2182。因此,CL 2172、2182包括集成式存储器控制器单元,并且包括I/O控制逻辑。图22示出,不仅存储器2132、2134耦合到CL 2172、2182,而且I/O装置2214也耦合到控制逻辑2172、2182。传统I/O装置2215耦合到芯片组2190。
现在参考图23,示出根据本发明一个实施例的SoC 2300的框图。图19中的类似元件具有类似参考数字。并且,虚线框是更高级的SoC上的可选特征。在图23中,互连单元2302耦合到:应用处理器2310,它包括一个或多个核202A-N的集合和共享高速缓存单元1906;***代理单元1910;总线控制器单元1916;集成式存储器控制器单元1914;一个或多个协处理器2320的集合,它可包括集成式图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元2330;直接存储器访问(DMA)单元2332;以及用于耦合到一个或多个外部显示器的显示单元2340。在一个实施例中,协处理器2320包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文中公开的机制的实施例可以用硬件、软件、固件或这些实现方法的组合来实现。本发明的实施例可以作为在可编程***上执行的计算机程序或程序代码来实现,可编程***包括至少一个处理器、存储***(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
可以将诸如图21中示出的代码2130的程序代码应用于输入指令以便执行本文中所描述的功能并生成输出信息。可以用已知方式将输出信息应用于一个或多个输出装置。出于本申请的目的,处理***包括具有处理器的任何***,处理器可以是例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
可以用高级过程或面向对象编程语言来实现程序代码,以便与处理***通信。如果需要,还可用汇编或机器语言来实现程序代码。实际上,本文中所描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可通过存储在表示处理器内的各种逻辑的机器可读介质上的代表性指令来实现,这些指令在由机器读取时使得机器制造逻辑以便执行本文中所描述的技术。称为“IP核”的这些表示可存储在有形机器可读介质上,并提供给各种客户或制造设施以便加载到实际制作逻辑或处理器的制造机器中。
这些机器可读存储介质可包括但不限于由机器或装置制造或形成的非暂时性有形物品的布置,包括诸如下列的存储介质:硬盘、任何其它类型的盘(包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW)和磁-光盘);半导体装置,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁或光卡;或适于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括包含指令或包含诸如硬件描述语言(HDL)的设计数据的非暂时性有形机器可读介质,设计数据用于定义本文中所描述的结构、电路、设备、处理器和/或***特征。这些实施例也可称为程序产品。
仿真(包括二进制转译、代码变形等)
在一些情况下,可以利用指令转换器来将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,利用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或以其它方式转换为即将由核处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、在处理器外、或一部分在处理器上而一部分在处理器外。
图24是根据本发明的实施例对比用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所示实施例中,指令转换器是软件指令转换器,但是备选地,可以在软件、固件、硬件或其各种组合中实现指令转换器。图24示出,可以利用x86编译器2404来编译高级语言2402中的程序,以便生成天生可通过具有至少一个x86指令集核的处理器2416执行的x86二进制代码2406。具有至少一个x86指令集核的处理器2416表示可通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个x86指令集核的Intel处理器基本相同的功能的任何处理器:(1) Intel x86指令集核的指令集的大部分;或(2) 目标是在具有至少一个x86指令集核的Intel处理器上运行的应用或其它软件的目标代码版本,从而达到与具有至少一个x86指令集核的Intel处理器基本相同的结果。x86编译器2404表示可进行操作以便生成x86二进制代码2406(例如,目标代码)的编译器,二进制代码2406可在存在或没有另外链接处理的情况下在具有至少一个x86指令集核的处理器2416上执行。类似地,图24示出,可以利用备选指令集编译器2408来编译高级语言2402中的程序以便生成备选指令集二进制代码2410,二进制代码2410天生可通过不具有至少一个x86指令集核的处理器2414(例如,具有执行MIPS Technologies ofSunnyvale, CA的MIPS指令集和/或执行ARM Holdings of Sunnyvale, CA的ARM指令集的核的处理器)执行。利用指令转换器2412将x86二进制代码2406转换为天生可通过不具有x86指令集核的处理器2414执行的代码。该转换后的代码不太可能与备选指令集二进制代码2410相同,因为能够这么做的指令转换器很难制作;但是,转换后的代码将实现一般操作,并且可由来自备选指令集的指令构成。因此,指令转换器2412表示通过仿真、模拟或任何其它过程允许不具有x86指令集处理器或核的处理器或其它电子装置执行x86二进制代码2406的软件、固件、硬件或其组合。
针对图3-13中的任何一个图描述的组件、特征和细节也可可选地在图1-2的任何一个图中使用。此外,本文中针对上文所述的任何一个设备描述的组件、特征和细节也可可选在本文中描述的任何一个方法中使用和/或适用于本文中描述的任何一个方法,在实施例中,该方法可通过这些设备执行和/或利用这些设备执行。本文中描述的任何处理器可包含在本文中公开的任何计算机***或其它***中。在一些实施例中,可利用针对本文中公开的指令格式描述的特征和细节(例如,VEX、EVEX等)来编码指令,但是本发明的范围不限于此。
在本描述和权利要求书中,可使用术语“耦合”和/或“连接”及其派生词。这些术语不是要彼此同义。而是,在实施例中,“连接”可用于指示两个或两个以上元件彼此直接物理和/或电接触。“耦合”可表示两个或两个以上元件直接物理和/或电接触。但是,“耦合”也可表示两个或两个以上元件彼此不直接接触,但仍然彼此共同协作或交互。例如,执行单元可通过一个或多个中介组件与寄存器和/或解码单元耦合。图中,使用箭头来示出连接和耦合。
文中使用了术语“和/或”。如本文中所使用,术语“和/或”表示一个或另一个或两个(例如,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包括示例1的处理器,其中解码单元用于解码指定是否对第一源操作数的一个或多个浮点数据元素全部求反的三源浮点加法指令。
示例5包括示例4的处理器,其中解码单元用于解码指定是否对第二源操作数的一个或多个浮点数据元素全部求反的三源浮点加法指令。
示例6包括示例5的处理器,其中解码单元用于解码指定是否对第三源操作数的一个或多个浮点数据元素全部求反的三源浮点加法指令。
示例7包括示例1-6中任一示例的处理器,其中解码单元用于解码指示第一、第二和第三源操作数的三源浮点加法指令,第一、第二和第三源操作数分别具有作为标量数据元素的第一、第二和第三浮点数据元素,标量数据元素均存储在相应的封装数据寄存器中,封装数据寄存器还能够在不同时间存储封装数据。并且,三源浮点加法指令指示源预测掩码,该掩码具有对应于第一、第二和第三浮点数据元素并预测三源浮点加法指令在第一、第二和第三浮点数据元素上的操作的掩码元素。
示例8包括示例1-6中任一示例的处理器,其中解码单元用于解码指示第一、第二和第三源操作数的三源浮点加法指令,第一、第二和第三源操作数分别具有包括第一浮点数据元素的多个第一封装数据元素、包括第二浮点数据元素的多个第二封装数据元素、以及包括第三浮点数据元素的多个第三封装数据元素。
示例9包括示例8的处理器,其中解码单元用于解码指示具有多个掩码元素的源封装数据操作掩码的三源浮点加法指令。每个掩码元素对应于第一、第二和第三源操作数的对应的浮点数据元素,并预测三源浮点加法指令在第一、第二和第三源操作数的对应浮点数据元素上的封装数据操作。
示例10包括示例1-6中任一示例的处理器,其中执行单元对第一和第二浮点舍入和使用舍入模式,舍入模式是如下之一:(1)舍入到最接近的值,优先取偶数值;(2)向下向负无穷大舍入;(3)向上向正无穷大舍入;以及(4)通过截断向0舍入。解码单元还可选地解码指定舍入模式的三源浮点加法指令。并且,由指令可选地指定的舍入模式覆盖处理器的浮点控制寄存器中的舍入模式。
示例11包括示例1-6中任一示例的处理器,其中执行单元包括经耦合以便接收第一和第二浮点数据元素并输出第二浮点舍入和的第一浮点加法器。执行单元还包括经耦合以便接收第三浮点数据元素和第二浮点舍入和的第二浮点加法器,第二浮点加法器输出第一浮点舍入和。
示例12包括示例11的处理器,它还包括保留站以及与保留站耦合的缓冲器。缓冲器从保留站接收对应于三源浮点加法指令的控制信号,并在第一浮点加法器生成第二浮点舍入和时的时间周期期间存储控制信号。缓冲器与第二浮点加法器耦合,以便在该时间周期之后将控制信号提供给第二浮点加法器。
示例13包括示例1-6中任一示例的处理器,其中执行单元包括输出端、输入端和用于耦合输出端与输入端的电路。
示例14包括示例1-6中任一示例的处理器,其中解码单元用于解码具有EVEX编码的三源浮点加法指令,其中在reg_field中编码第三源操作数。并且可选地,其中在VEX.vvvv中编码第一源操作数。并且可选地,其中利用八位立即数的一部分和rm_field之一编码第二源操作数。
示例15是一种在处理器中的方法,该方法包括接收三源浮点加法指令。三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数。该方法还包括:响应于三源浮点加法指令,将结果存储在目的地操作数中。目的地操作数由三源浮点加法指令指示。结果至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。结果浮点数据元素包括第一浮点舍入和。第一浮点舍入和表示第二浮点舍入和与第三浮点数据元素的加性组合。第二浮点舍入和表示第一浮点数据元素和第二浮点数据元素的加性组合。
示例16包括示例15的方法,其中接收包括接收指定是否对第一源操作数的一个或多个浮点数据元素全部求反的三源浮点加法指令。可选地,该指令还指定是否对第二源操作数的一个或多个浮点数据元素全部求反。
示例17包括示例15的方法,其中接收包括接收指定用于第一和第二浮点舍入和的舍入模式的三源浮点加法指令。
示例18包括示例15的方法,其中接收包括接收指示第一、第二和第三源操作数的三源浮点加法指令,第一、第二和第三源操作数分别具有作为标量数据元素的第一、第二和第三浮点数据元素,标量数据元素各自存储在相应的封装数据寄存器中。三源浮点加法指令还可可选地指示源预测掩码。
示例19是一种用于处理指令的***,它包括互连以及与互连耦合的处理器。处理器接收三源浮点加法指令。三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数。响应于三源浮点加法指令,处理器将结果存储在由三源浮点加法指令指示的目的地操作数中。结果至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。结果浮点数据元素包括第一浮点舍入和。第一浮点舍入和表示第二浮点舍入和与第三浮点数据元素的加性组合。第二浮点舍入和表示第一浮点数据元素与第二浮点数据元素的加性组合。该***还可选地包括与互连耦合的动态随机存取存储器(DRAM)。
示例20包括示例19的***,其中三源浮点加法指令指定是否对第一源操作数的一个或多个浮点数据元素全部求反。
示例21包括一种包含机器可读介质的制品,机器可读介质可以可选地是非暂时性机器可读存储介质。该介质存储三源浮点加法指令。三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数。三源浮点加法指令在由机器执行时使得机器执行操作,操作包括:响应于三源浮点加法指令,将结果存储在目的地操作数中。目的地操作数由三源浮点加法指令指示。结果至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。结果浮点数据元素包括第一浮点舍入和,第一浮点舍入和表示第二浮点舍入和与第三浮点数据元素的加性组合。第二浮点舍入和表示第一浮点数据元素与第二浮点数据元素的加性组合。
示例22包括示例21的制品,其中三源浮点加法指令指定是否对第一源操作数的一个或多个浮点数据元素全部求反。
示例23是一种处理器,它包括多个寄存器和用于解码三源浮点加法指令的解码单元。三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数。该指令还可选地具有用于指定是否对第一源操作数的一个或多个浮点数据元素全部求反的第一位,和/或具有用于指定是否对第二源操作数的一个或多个浮点数据元素全部求反的第二位。执行单元与所述多个寄存器和解码单元耦合。响应于三源浮点加法指令,执行单元将结果存储在由三源浮点加法指令指示的目的地操作数中。结果至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。结果浮点数据元素包括浮点舍入和,该浮点舍入和表示第一、第二和第三浮点数据元素的加性组合。
示例24包括示例23的处理器,其中浮点舍入和表示另一个浮点舍入和的加性组合。
示例25包括一种处理器或其它设备,它可进行操作以便执行示例15-18中任一示例的方法。
示例26包括一种处理器或其它设备,它包括用于执行示例15-18中任一示例的方法的部件。
示例27包括一种处理器,它包括用于执行示例15-18中任一示例的方法的模块、单元、逻辑、电路、部件或其任意组合。
示例28包括一种计算机***或其它电子装置,它包括互连、与互连耦合的处理器以及与互连耦合的至少一个组件,这至少一个组件选自DRAM、图形芯片、无线通信芯片、相变存储器和摄像机,该计算机***或其它电子装置用于执行示例15-18中任一示例的方法。
示例29包括一种机器可读介质,它可选地是非暂时性机器可读存储介质,它可选地存储或以其它方式提供指令,如果处理器、计算机***或其它机器执行该指令和/或在处理器、计算机***或其它机器执行该指令时,该指令可进行操作以使得机器执行示例15-18中任一示例的方法。
示例30包括一种处理器或其它设备,它可进行操作以便执行基本上如本文中所描述的一个或多个操作或任何方法。
示例31包括一种处理器或其它设备,它包括用于执行基本上如本文中所描述的一个或多个操作或任何方法的部件。
示例32包括一种处理器或其它设备,它可进行操作以便执行基本上如本文中所描述的任何一个指令。
示例33包括一种处理器或其它设备,它包括用于执行基本上如本文中所描述的任何一个指令的部件。
示例34包括一种方法,它包括将第一指令转换到第二指令集的一个或多个指令中,第一指令可以是基本上如本文中所公开的任何一个指令,并且在第一指令集中。该方法还包括解码并在处理器上执行第二指令集的这一个或多个指令。执行包括将结果存储在目的地中。结果可包括基本上如本文中所公开的第一指令的任何结果。
示例35包括一种处理器或其它设备,它包括可进行操作以便解码第一指令集的指令的解码单元。解码单元接收仿真第一指令的一个或多个指令,这一个或多个指令可以是基本上如本文中所公开的任何指令,并且在第二指令集中。该处理器或其它设备还包括与解码单元耦合以便执行第一指令集的这一个或多个指令的一个或多个执行单元。响应于第一指令集的这一个或多个指令,这一个或多个执行单元可进行操作以便将结果存储在目的地中。结果可包括基本上如本文中所公开的第一指令的任何结果。
示例36包括一种计算机***或其它电子装置,它包括具有可进行操作以便解码第一指令集的指令的解码单元并具有一个或多个执行单元的处理器。该计算机***还包括耦合到处理器的存储装置。存储装置存储第一指令,第一指令可以是基本上如本文中所公开的任何指令,并且在第二指令集中。存储装置还存储用于将第一指令转换到第一指令集的一个或多个指令中的指令。第一指令集的这一个或多个指令在由处理器执行时可进行操作以使得处理器将结果存储在目的地中。结果可包括基本上如本文中所公开的第一指令的任何结果。
Claims (25)
1.一种处理器,包括:
多个寄存器;
用于解码三源浮点加法指令的解码单元,所述三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数;以及
与所述多个寄存器和所述解码单元耦合的执行单元,响应于所述三源浮点加法指令,所述执行单元将结果存储在将由所述三源浮点加法指令指示的目的地操作数中,所述结果至少包括对应于所述第一、第二和第三浮点数据元素的结果浮点数据元素,所述结果浮点数据元素包括第一浮点舍入和,所述第一浮点舍入和表示第二浮点舍入和与所述第三浮点数据元素的加性组合,所述第二浮点舍入和表示所述第一浮点数据元素与所述第二浮点数据元素的加性组合。
2.如权利要求1所述的处理器,其中所述解码单元用于解码所述三源浮点加法指令,所述指令具有:
用于指定是否对所述第一源操作数的一个或多个浮点数据元素全部求反的第一位;
用于指定是否对所述第二源操作数的一个或多个浮点数据元素全部求反的第二位;以及
用于指定是否对所述第三源操作数的一个或多个浮点数据元素全部求反的第三位。
3.如权利要求2所述的处理器,其中所述第一、第二和第三位包括所述三源浮点加法指令的立即数的位。
4.如权利要求1所述的处理器,其中所述解码单元用于解码指定是否对所述第一源操作数的一个或多个浮点数据元素全部求反的所述三源浮点加法指令。
5.如权利要求4所述的处理器,其中所述解码单元用于解码指定是否对所述第二源操作数的一个或多个浮点数据元素全部求反的所述三源浮点加法指令。
6.如权利要求5所述的处理器,其中所述解码单元用于解码指定是否对所述第三源操作数的一个或多个浮点数据元素全部求反的所述三源浮点加法指令。
7.如权利要求1-6中任一权利要求所述的处理器,其中所述解码单元用于解码指示所述第一、第二和第三源操作数的所述三源浮点加法指令,所述第一、第二和第三源操作数分别具有作为标量数据元素的所述第一、第二和第三浮点数据元素,所述标量数据元素各自存储在相应的封装数据寄存器中,所述封装数据寄存器还能够在不同时间存储封装数据;并且其中所述三源浮点加法指令指示具有掩码元素的源预测掩码,所述掩码元素对应于所述第一、第二和第三浮点数据元素,并预测所述三源浮点加法指令在所述第一、第二和第三浮点数据元素上的操作。
8.如权利要求1-6中任一权利要求所述的处理器,其中所述解码单元用于解码指示所述第一、第二和第三源操作数的所述三源浮点加法指令,所述第一、第二和第三源操作数分别具有包括所述第一浮点数据元素的多个第一封装数据元素、包括所述第二浮点数据元素的多个第二封装数据元素、以及包括所述第三浮点数据元素的多个第三封装数据元素。
9.如权利要求8所述的处理器,其中所述解码单元用于解码指示具有多个掩码元素的源封装数据操作掩码的所述三源浮点加法指令,所述掩码元素中的每个掩码元素对应于所述第一、第二和第三源操作数的对应的浮点数据元素,并预测所述三源浮点加法指令在所述第一、第二和第三源操作数的对应浮点数据元素上的封装数据操作。
10.如权利要求1-6中任一权利要求所述的处理器,其中所述执行单元对所述第一和第二浮点舍入和使用舍入模式,所述舍入模式是如下之一:(1)舍入到最接近的值,优先取偶数值;(2)向下向负无穷大舍入;(3)向上向正无穷大舍入;以及(4)通过截断向0舍入,并且其中所述解码单元用于解码指定所述舍入模式的所述三源浮点加法指令,并且其中由所述指令指定的所述舍入模式覆盖所述处理器的浮点控制寄存器中的舍入模式。
11. 如权利要求1-6中任一权利要求所述的处理器,其中所述执行单元包括:
第一浮点加法器,其经耦合以便接收所述第一和第二浮点数据元素并输出所述第二浮点舍入和;以及
第二浮点加法器,其经耦合以便接收所述第三浮点数据元素和所述第二浮点舍入和,所述第二浮点加法器输出所述第一浮点舍入和。
12. 如权利要求11所述的处理器,还包括:
保留站;以及
与所述保留站耦合的缓冲器,所述缓冲器从所述保留站接收对应于所述三源浮点加法指令的控制信号,并在所述第一浮点加法器生成所述第二浮点舍入和时的时间周期期间存储所述控制信号,所述缓冲器与所述第二浮点加法器耦合以便在所述时间周期之后将所述控制信号提供给所述第二浮点加法器。
13.如权利要求1-6中任一权利要求所述的处理器,其中所述执行单元包括输出端、输入端和用于耦合所述输出端与所述输入端的电路。
14.如权利要求1-6中任一权利要求所述的处理器,其中所述解码单元用于解码具有EVEX编码的所述三源浮点加法指令,其中在reg_field中编码所述第三源操作数,其中在VEX.vvvv中编码所述第一源操作数,并其中利用八位立即数的一部分和rm_field之一编码所述第二源操作数。
15. 一种在处理器中的方法,所述方法包括:
接收三源浮点加法指令,所述三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数;以及
响应于所述三源浮点加法指令,将结果存储在目的地操作数中,所述目的地操作数由所述三源浮点加法指令指示,所述结果至少包括对应于所述第一、第二和第三浮点数据元素的结果浮点数据元素,所述结果浮点数据元素包括第一浮点舍入和,所述第一浮点舍入和表示第二浮点舍入和与所述第三浮点数据元素的加性组合,所述第二浮点舍入和表示所述第一浮点数据元素与所述第二浮点数据元素的加性组合。
16.如权利要求15所述的方法,其中接收包括接收所述三源浮点加法指令,所述指令指定是否对所述第一源操作数的一个或多个浮点数据元素全部求反,并指定是否对所述第二源操作数的一个或多个浮点数据元素全部求反。
17.如权利要求15所述的方法,其中接收包括接收指定用于所述第一和第二浮点舍入和的舍入模式的所述三源浮点加法指令。
18.如权利要求15所述的方法,其中接收包括接收指示所述第一、第二和第三源操作数的所述三源浮点加法指令,所述第一、第二和第三源操作数分别具有作为标量数据元素的所述第一、第二和第三浮点数据元素,所述标量数据元素各自存储在相应的封装数据寄存器中,并且其中所述三源浮点加法指令指示源预测掩码。
19.一种用于处理指令的***,包括:
互连;
与所述互连耦合的处理器,所述处理器接收三源浮点加法指令,所述三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数;响应于所述三源浮点加法指令,所述处理器将结果存储在由所述三源浮点加法指令指示的目的地操作数中,所述结果至少包括对应于所述第一、第二和第三浮点数据元素的结果浮点数据元素,所述结果浮点数据元素包括第一浮点舍入和,所述第一浮点舍入和表示第二浮点舍入和与所述第三浮点数据元素的加性组合,所述第二浮点舍入和表示所述第一浮点数据元素与所述第二浮点数据元素的加性组合;以及
与所述互连耦合的动态随机存取存储器(DRAM)。
20.如权利要求19所述的***,其中所述三源浮点加法指令指定是否对所述第一源操作数的一个或多个浮点数据元素全部求反。
21. 一种包括非暂时性机器可读存储介质的制品,所述非暂时性机器可读存储介质存储三源浮点加法指令,
所述三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数;并且
所述三源浮点加法指令在由机器执行时使得所述机器执行操作,所述操作包括:响应于所述三源浮点加法指令,将结果存储在目的地操作数中,所述目的地操作数由所述三源浮点加法指令指示,所述结果至少包括对应于所述第一、第二和第三浮点数据元素的结果浮点数据元素,所述结果浮点数据元素包括第一浮点舍入和,所述第一浮点舍入和表示第二浮点舍入和与所述第三浮点数据元素的加性组合,所述第二浮点舍入和表示所述第一浮点数据元素与所述第二浮点数据元素的加性组合。
22.如权利要求21所述的制品,其中所述三源浮点加法指令指定是否对所述第一源操作数的一个或多个浮点数据元素全部求反。
23.一种处理器,包括:
多个寄存器;
用于解码三源浮点加法指令的解码单元,所述三源浮点加法指令指示具有至少第一浮点数据元素的第一源操作数,指示具有至少第二浮点数据元素的第二源操作数,并指示具有至少第三浮点数据元素的第三源操作数;所述三源浮点加法指令具有用于指定是否对所述第一源操作数的一个或多个浮点数据元素全部求反的第一位,并具有用于指定是否对所述第二源操作数的一个或多个浮点数据元素全部求反的第二位;以及
与所述多个寄存器和所述解码单元耦合的执行单元,响应于所述三源浮点加法指令,所述执行单元将结果存储在由所述三源浮点加法指令指示的目的地操作数中,所述结果至少包括对应于所述第一、第二和第三浮点数据元素的结果浮点数据元素,所述结果浮点数据元素包括浮点舍入和,所述浮点舍入和表示所述第一、第二和第三浮点数据元素的加性组合。
24.如权利要求23所述的处理器,其中所述浮点舍入和表示另一个浮点舍入和的加性组合。
25.一种处理器,包括用于执行权利要求15-18中任一权利要求的方法的部件。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP14382106.4 | 2014-03-26 | ||
EP14382106 | 2014-03-26 | ||
PCT/US2014/039600 WO2015147895A1 (en) | 2014-03-26 | 2014-05-27 | Three source operand floating point addition processors, methods, systems, and instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106030510A true CN106030510A (zh) | 2016-10-12 |
Family
ID=50473243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480076474.2A Pending CN106030510A (zh) | 2014-03-26 | 2014-05-27 | 三源操作数浮点加法处理器、方法、***和指令 |
Country Status (8)
Country | Link |
---|---|
US (2) | US9785433B2 (zh) |
JP (1) | JP6371855B2 (zh) |
KR (1) | KR101893814B1 (zh) |
CN (1) | CN106030510A (zh) |
DE (1) | DE112014006508T5 (zh) |
RU (1) | RU2656730C2 (zh) |
TW (1) | TWI575448B (zh) |
WO (1) | WO2015147895A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109716290A (zh) * | 2016-10-20 | 2019-05-03 | 英特尔公司 | 用于经融合的乘加的***、装置和方法 |
CN110140109A (zh) * | 2016-12-15 | 2019-08-16 | 优创半导体科技有限公司 | 具有嵌入式取整规则的浮点指令格式 |
CN111078281A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、***及相关产品 |
CN112527396A (zh) * | 2018-11-09 | 2021-03-19 | 英特尔公司 | 用于执行指令以转换成16位浮点格式的***和方法 |
CN112947894A (zh) * | 2017-04-28 | 2021-06-11 | 英特尔公司 | 用来执行用于机器学习的浮点和整数操作的指令和逻辑 |
CN115098165A (zh) * | 2022-06-13 | 2022-09-23 | 昆仑芯(北京)科技有限公司 | 数据处理方法、装置、芯片、设备及介质 |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015147895A1 (en) | 2014-03-26 | 2015-10-01 | Intel Corporation | Three source operand floating point addition processors, methods, systems, and instructions |
US20160188341A1 (en) * | 2014-12-24 | 2016-06-30 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for fused add-add instructions |
US9817662B2 (en) * | 2015-10-24 | 2017-11-14 | Alan A Jorgensen | Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof |
US10481908B2 (en) | 2017-06-23 | 2019-11-19 | International Business Machines Corporation | Predicted null updated |
US10514913B2 (en) | 2017-06-23 | 2019-12-24 | International Business Machines Corporation | Compiler controls for program regions |
US10684852B2 (en) * | 2017-06-23 | 2020-06-16 | International Business Machines Corporation | Employing prefixes to control floating point operations |
US10725739B2 (en) | 2017-06-23 | 2020-07-28 | International Business Machines Corporation | Compiler controls for program language constructs |
US10310814B2 (en) | 2017-06-23 | 2019-06-04 | International Business Machines Corporation | Read and set floating point control register instruction |
US10379851B2 (en) | 2017-06-23 | 2019-08-13 | International Business Machines Corporation | Fine-grained management of exception enablement of floating point controls |
US10740067B2 (en) | 2017-06-23 | 2020-08-11 | International Business Machines Corporation | Selective updating of floating point controls |
US10592422B2 (en) | 2017-12-15 | 2020-03-17 | International Business Machines Corporation | Data-less history buffer with banked restore ports in a register mapper |
US11366663B2 (en) * | 2018-11-09 | 2022-06-21 | Intel Corporation | Systems and methods for performing 16-bit floating-point vector dot product instructions |
US11099853B2 (en) * | 2019-02-15 | 2021-08-24 | International Business Machines Corporation | Digit validation check control in instruction execution |
US11372711B2 (en) | 2019-06-29 | 2022-06-28 | Intel Corporation | Apparatus and method for fault handling of an offload transaction |
US20200409764A1 (en) * | 2019-06-29 | 2020-12-31 | Intel Corporation | Core-to-core "snoop" instruction variants |
US11188299B2 (en) | 2019-07-31 | 2021-11-30 | International Business Machines Corporation | Repurposed hexadecimal floating point data path |
US11237827B2 (en) * | 2019-11-26 | 2022-02-01 | Advanced Micro Devices, Inc. | Arithemetic logic unit register sequencing |
JP7391774B2 (ja) | 2020-06-11 | 2023-12-05 | 株式会社東芝 | 演算処理装置、情報処理装置及び演算処理方法 |
US11256987B1 (en) | 2021-06-02 | 2022-02-22 | SambaNova Systems, Inc. | Memory efficient dropout, with reordering of dropout mask elements |
US11328209B1 (en) | 2021-06-02 | 2022-05-10 | SambaNova Systems, Inc. | Dual cycle tensor dropout in a neural network |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5995122A (en) * | 1998-04-30 | 1999-11-30 | Intel Corporation | Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format |
US20030167460A1 (en) * | 2002-02-26 | 2003-09-04 | Desai Vipul Anil | Processor instruction set simulation power estimation method |
US20090158013A1 (en) * | 2007-12-13 | 2009-06-18 | Muff Adam J | Method and Apparatus Implementing a Minimal Area Consumption Multiple Addend Floating Point Summation Function in a Vector Microprocessor |
CN102103486A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 用于将三个源操作数相加的加法指令 |
CN104025044A (zh) * | 2011-12-29 | 2014-09-03 | 国际商业机器公司 | 从区位格式转换为十进制浮点格式 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SU1056182A1 (ru) * | 1982-04-16 | 1983-11-23 | Таганрогский радиотехнический институт им.В.Д.Калмыкова | Суммирующее устройство с плавающей зап той |
JPH0644270B2 (ja) * | 1984-06-13 | 1994-06-08 | 富士通株式会社 | ベクトルプロセッサの制御処理方式 |
SU1290300A1 (ru) * | 1985-03-26 | 1987-02-15 | Специальное Проектно-Конструкторское Бюро "Дискрет" При Одесском Политехническом Институте | Устройство дл суммировани двух чисел с плавающей зап той |
WO1995031767A1 (en) * | 1994-05-11 | 1995-11-23 | Vlsi Technology, Inc. | Floating-point processor with apparent-precision based selection of execution-precision |
MX9801571A (es) * | 1995-08-31 | 1998-05-31 | Intel Corp | Aparato para realizar operaciones de multiplica-suma en datos empacados. |
DE69734399D1 (de) * | 1996-01-24 | 2006-03-02 | Sun Microsystems Inc | Verfahren und vorrichtung zur stapel-cachespeicherung |
JP2747267B2 (ja) * | 1996-01-29 | 1998-05-06 | 甲府日本電気株式会社 | 3入力浮動小数点加算装置 |
JP2919386B2 (ja) * | 1996-09-19 | 1999-07-12 | 甲府日本電気株式会社 | 浮動小数点数検出装置および浮動小数点数検出回路 |
US5880984A (en) * | 1997-01-13 | 1999-03-09 | International Business Machines Corporation | Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments |
US6029243A (en) * | 1997-09-19 | 2000-02-22 | Vlsi Technology, Inc. | Floating-point processor with operand-format precision greater than execution precision |
US6094668A (en) * | 1997-10-23 | 2000-07-25 | Advanced Micro Devices, Inc. | Floating point arithmetic unit including an efficient close data path |
US6288723B1 (en) * | 1998-04-01 | 2001-09-11 | Intel Corporation | Method and apparatus for converting data format to a graphics card |
US6542916B1 (en) * | 1999-07-28 | 2003-04-01 | Arm Limited | Data processing apparatus and method for applying floating-point operations to first, second and third operands |
JP2001092633A (ja) * | 1999-09-22 | 2001-04-06 | Toshiba Corp | 複数の結果を出力する命令を有する演算装置 |
US6857061B1 (en) * | 2000-04-07 | 2005-02-15 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US6912557B1 (en) | 2000-06-09 | 2005-06-28 | Cirrus Logic, Inc. | Math coprocessor |
JP2002215384A (ja) * | 2001-01-16 | 2002-08-02 | Toshiba Corp | 多入力加減算回路 |
US20030055859A1 (en) * | 2001-05-04 | 2003-03-20 | Southern Methodist University | Fast IEEE floating-point adder |
US6779013B2 (en) | 2001-06-04 | 2004-08-17 | Intel Corporation | Floating point overflow and sign detection |
US6889241B2 (en) | 2001-06-04 | 2005-05-03 | Intel Corporation | Floating point adder |
US7293056B2 (en) | 2002-12-18 | 2007-11-06 | Intel Corporation | Variable width, at least six-way addition/accumulation instructions |
US7139900B2 (en) * | 2003-06-23 | 2006-11-21 | Intel Corporation | Data packet arithmetic logic devices and methods |
US20060218381A1 (en) * | 2005-03-24 | 2006-09-28 | Stexar Corporation | Rounding correction for add-shift-round instruction with dual-use source operand for DSP |
US8069200B2 (en) * | 2005-04-28 | 2011-11-29 | Qsigma, Inc. | Apparatus and method for implementing floating point additive and shift operations |
US8589663B2 (en) * | 2006-06-27 | 2013-11-19 | Intel Corporation | Technique to perform three-source operations |
JP4388543B2 (ja) * | 2006-12-14 | 2009-12-24 | 株式会社日立製作所 | 3項入力の浮動小数点加減算器 |
CN104126173A (zh) * | 2011-12-23 | 2014-10-29 | 英特尔公司 | 不会引起密码应用的算术标志的三输入操作数向量add指令 |
WO2015147895A1 (en) | 2014-03-26 | 2015-10-01 | Intel Corporation | Three source operand floating point addition processors, methods, systems, and instructions |
-
2014
- 2014-05-27 WO PCT/US2014/039600 patent/WO2015147895A1/en active Application Filing
- 2014-05-27 RU RU2016135016A patent/RU2656730C2/ru not_active IP Right Cessation
- 2014-05-27 DE DE112014006508.0T patent/DE112014006508T5/de not_active Ceased
- 2014-05-27 JP JP2016552599A patent/JP6371855B2/ja not_active Expired - Fee Related
- 2014-05-27 KR KR1020167023156A patent/KR101893814B1/ko active IP Right Grant
- 2014-05-27 CN CN201480076474.2A patent/CN106030510A/zh active Pending
-
2015
- 2015-02-26 TW TW104106247A patent/TWI575448B/zh not_active IP Right Cessation
- 2015-03-12 US US14/645,836 patent/US9785433B2/en not_active Expired - Fee Related
-
2017
- 2017-10-09 US US15/728,324 patent/US20180032332A1/en not_active Abandoned
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5995122A (en) * | 1998-04-30 | 1999-11-30 | Intel Corporation | Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format |
US20030167460A1 (en) * | 2002-02-26 | 2003-09-04 | Desai Vipul Anil | Processor instruction set simulation power estimation method |
US20090158013A1 (en) * | 2007-12-13 | 2009-06-18 | Muff Adam J | Method and Apparatus Implementing a Minimal Area Consumption Multiple Addend Floating Point Summation Function in a Vector Microprocessor |
CN102103486A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 用于将三个源操作数相加的加法指令 |
CN104025044A (zh) * | 2011-12-29 | 2014-09-03 | 国际商业机器公司 | 从区位格式转换为十进制浮点格式 |
Non-Patent Citations (1)
Title |
---|
INTEL: "IA-64 Application Developer’s Architecture Guide", 《HTTPS://WWW.CS.NMSU.EDU/~RVINYARD/ITANIUM/DOCS/IA64_APP_DEVEL_ARCH_GUIDE.PDF》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11782709B2 (en) | 2016-10-20 | 2023-10-10 | Intel Corporation | Systems, apparatuses, and methods for addition of partial products |
CN109716290A (zh) * | 2016-10-20 | 2019-05-03 | 英特尔公司 | 用于经融合的乘加的***、装置和方法 |
CN109716290B (zh) * | 2016-10-20 | 2023-12-19 | 英特尔公司 | 用于经融合的乘加的***、装置和方法 |
US11526354B2 (en) | 2016-10-20 | 2022-12-13 | Intel Corporation | Systems, apparatuses, and methods for fused multiply add |
US11526353B2 (en) | 2016-10-20 | 2022-12-13 | Intel Corporation | Systems, apparatuses, and methods for fused multiply add |
US11544058B2 (en) | 2016-10-20 | 2023-01-03 | Intel Corporation | Systems, apparatuses, and methods for fused multiply add |
CN110140109A (zh) * | 2016-12-15 | 2019-08-16 | 优创半导体科技有限公司 | 具有嵌入式取整规则的浮点指令格式 |
CN112947894A (zh) * | 2017-04-28 | 2021-06-11 | 英特尔公司 | 用来执行用于机器学习的浮点和整数操作的指令和逻辑 |
CN111078281A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、***及相关产品 |
CN112527396A (zh) * | 2018-11-09 | 2021-03-19 | 英特尔公司 | 用于执行指令以转换成16位浮点格式的***和方法 |
CN112527396B (zh) * | 2018-11-09 | 2024-05-10 | 英特尔公司 | 用于执行指令以转换成16位浮点格式的***和方法 |
CN115098165B (zh) * | 2022-06-13 | 2023-09-08 | 昆仑芯(北京)科技有限公司 | 数据处理方法、装置、芯片、设备及介质 |
CN115098165A (zh) * | 2022-06-13 | 2022-09-23 | 昆仑芯(北京)科技有限公司 | 数据处理方法、装置、芯片、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
KR101893814B1 (ko) | 2018-10-04 |
WO2015147895A1 (en) | 2015-10-01 |
TWI575448B (zh) | 2017-03-21 |
TW201604776A (zh) | 2016-02-01 |
DE112014006508T5 (de) | 2017-01-05 |
JP6371855B2 (ja) | 2018-08-08 |
RU2016135016A3 (zh) | 2018-03-01 |
RU2016135016A (ru) | 2018-03-01 |
US20180032332A1 (en) | 2018-02-01 |
US20150286482A1 (en) | 2015-10-08 |
US9785433B2 (en) | 2017-10-10 |
JP2017515177A (ja) | 2017-06-08 |
RU2656730C2 (ru) | 2018-06-06 |
KR20160110511A (ko) | 2016-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106030510A (zh) | 三源操作数浮点加法处理器、方法、***和指令 | |
CN104094218B (zh) | 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的***、装置和方法 | |
CN104011647B (zh) | 浮点舍入处理器、方法、***和指令 | |
CN104350492B (zh) | 在大寄存器空间中利用累加的向量乘法 | |
CN104011673B (zh) | 向量频率压缩指令 | |
CN104137055B (zh) | 点积处理器、方法、***和指令 | |
CN104040482B (zh) | 用于在打包数据元素上执行增量解码的***、装置和方法 | |
CN104040488B (zh) | 用于给出相应复数的复共轭的矢量指令 | |
CN104145245B (zh) | 浮点舍入量确定处理器、方法、***和指令 | |
CN104081341B (zh) | 用于多维数组中的元素偏移量计算的指令 | |
CN107003844A (zh) | 用于矢量广播和xorand逻辑指令的装置和方法 | |
CN109791488A (zh) | 用于执行用于复数的融合乘-加指令的***和方法 | |
CN104137059B (zh) | 多寄存器分散指令 | |
CN104011652B (zh) | 打包选择处理器、方法、***和指令 | |
CN104081337B (zh) | 用于响应于单个指令来执行横向部分求和的***、装置和方法 | |
CN104094182B (zh) | 掩码置换指令的装置和方法 | |
CN104011657A (zh) | 用于向量计算和累计的装置和方法 | |
CN104350461B (zh) | 具有不同的读和写掩码的多元素指令 | |
CN104321740B (zh) | 利用操作数基础***转换和再转换的向量乘法 | |
CN104137053B (zh) | 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的***、装置和方法 | |
CN104185837B (zh) | 在不同的粒度等级下广播数据值的指令执行单元 | |
CN104011661B (zh) | 用于大整数运算的向量指令的装置和方法 | |
CN104040487A (zh) | 用于合并掩码模式的指令 | |
CN104081336A (zh) | 用于检测向量寄存器内的相同元素的装置和方法 | |
CN104011671A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161012 |
|
RJ01 | Rejection of invention patent application after publication |