CN107003841B - 用于融合加法-加法指令的装置和方法 - Google Patents
用于融合加法-加法指令的装置和方法 Download PDFInfo
- Publication number
- CN107003841B CN107003841B CN201580063772.2A CN201580063772A CN107003841B CN 107003841 B CN107003841 B CN 107003841B CN 201580063772 A CN201580063772 A CN 201580063772A CN 107003841 B CN107003841 B CN 107003841B
- Authority
- CN
- China
- Prior art keywords
- data elements
- packed data
- add
- instruction
- data element
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims description 23
- 230000015654 memory Effects 0.000 claims description 149
- 238000007667 floating Methods 0.000 claims description 25
- 238000012545 processing Methods 0.000 claims description 22
- 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 70
- 238000010586 diagram Methods 0.000 description 34
- 238000004891 communication Methods 0.000 description 10
- 230000003416 augmentation Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 238000007792 addition Methods 0.000 description 6
- 239000000872 buffer Substances 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 101000974356 Homo sapiens Nuclear receptor coactivator 3 Proteins 0.000 description 4
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 4
- 102100037226 Nuclear receptor coactivator 2 Human genes 0.000 description 4
- 102100022883 Nuclear receptor coactivator 3 Human genes 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 101000602926 Homo sapiens Nuclear receptor coactivator 1 Proteins 0.000 description 2
- 101000651467 Homo sapiens Proto-oncogene tyrosine-protein kinase Src Proteins 0.000 description 2
- 102100027384 Proto-oncogene tyrosine-protein kinase Src Human genes 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013501 data transformation Methods 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 101100534223 Caenorhabditis elegans src-1 gene Proteins 0.000 description 1
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 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
- 238000012856 packing Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/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/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
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- 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/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
在本发明的一个实施例中,一种处理器包括存储位置,所述存储位置被配置为用于存储源紧缩数据操作数集合,所述操作数各自具有多个紧缩数据元素,所述紧缩数据元素根据所述操作数之一内的立即数位值而为正或负。所述处理器还包括:解码器,所述解码器用于对需要输入多个源操作数的指令进行解码;以及执行单元,所述执行单元用于接收所解码的指令并且生成作为所述源操作数之和的结果。在一个实施例中,将所述结果存储回所述源操作数之一中,或者将所述结果存储到独立于所述源操作数的操作数中。
Description
技术领域
本公开涉及微处理器,并且更具体地涉及用于对微处理器中的数据元素进行操作的指令。
背景技术
为了提高多媒体应用以及具有类似特征的其他应用的效率,在微处理器系统中已经实现了单指令多数据(Single Instruction,Multiple Data,SIMD)架构,以使得一条指令能够并行地在若干个操作数上操作。特别地,SIMD架构利用将许多数据元素紧缩在一个寄存器或连续的存储器位置中。利用并行硬件执行,通过一条指令对多个分开的数据元素执行多个操作。这通常产生显著的性能优点,但是以增加的逻辑和因此更大的功耗为代价。
附图说明
以附图部分中的这些图通过举例的方式而非通过限制性的方式展示了本发明,在附图中类似的参考标记指示相似的元件。
图1A是框图,展示了根据本发明的实施例的示例性有序获取、解码、引退流水线和示例性寄存器重命名、乱序发布/执行流水线两者。
图1B是框图,展示了根据本发明的实施例的有序获取、解码、引退核的示例性实施例以有待包含在处理器中的示例性寄存器重命名、乱序发布/执行架构核的示例性实施例两者。
图2是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器的框图;
图3展示了根据本发明的一个实施例的系统的框图;
图4展示了根据本发明的实施例的第二系统的框图;
图5展示了根据本发明的实施例的第三系统的框图;
图6展示了根据本发明的实施例的片上系统(SoC)的框图;
图7展示了对照根据本发明的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图;
图8A和图8B是框图,展示了根据本发明的实施例的通用向量友好指令格式及其指令模板;
图9A至图9D是框图,展示了根据本发明的实施例的示例性专用向量友好指令格式;并且
图10是根据本发明一个实施例的寄存器架构的框图;
图11A是根据本发明的实施例的单个处理器核连同其与裸片上互连网络的连接以及其二级(L2)高速缓存的本地子集的框图;并且
图11B是根据本发明的实施例的图14A中的处理器核的一部分的放大视图。
图12至图15是流程图,展示了根据本发明的实施例的融合加法-加法操作。
图16是根据本发明的实施例的融合加法-加法操作的方法的流程图。
图17是流程图,展示了用于在处理设备中实现融合加法-加法操作的示例性数据流。
图18是流程图,展示了用于在处理设备中实现融合加法-加法操作的第一替代示例性数据流。
图19是流程图,展示了用于在处理设备中实现融合加法-加法操作的第二替代示例性数据流。
具体实施方式
当用SIMD数据工作时,存在减少总指令计数并提高功率效率(特别是对于小核)会是有益的情况。特别地,实现浮点数据类型的融合加法-加法操作的指令允许减少总指令数量并减少工作负载功率要求。
在下面的描述中,阐述了许多具体细节。然而,应当理解,可以在没有这些具体细节的情况下实践本发明的实施例。在其他情况下,未详细示出公知的电路、结构和技术,以避免模糊对本说明书的理解。然而,本领域技术人员将理解的是,可以在没有这些具体细节的情况下实践本发明。通过所包含的描述,本领域普通技术人员将能够实现适当的功能而无需过多的实验。
在说明书中提到“一个实施例”、“实施例”、“示例实施例”等表明所描述的实施例可以包括特定特征、结构、或特性,但每一个实施例可能不一定包括所述特定特征、结构、或特性。而且,此类短语不一定指相同的实施例。进一步地,当结合实施例描述具体特征、结构或特性时,应认为,无论是否明确描述,结合其他实施例来实现这种特征、结构或特性是在本领域的普通技术人员的知识范围内。
在以下说明书和权利要求书中,可以使用术语“耦合”和“连接”及其衍生词。应当理解,这些术语并不意为彼此的同义词。“耦合”用于指示彼此协作或相互作用的彼此之间可能或可能不直接物理或电接触的两个或更多个元件。“连接”用于指示彼此耦合的两个或更多个元件之间的通信的建立。
指令集
指令集(instruction set)或指令集架构(instruction set architecture,ISA)是与编程有关的计算机架构的一部分,并且可以包括本机数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(I/O)。术语指令在本文中一般指代宏指令-即提供给处理器(或将指令翻译(例如,使用静态二进制翻译,包括动态编译的动态二进制翻译)、变形、仿真或以其他方式转换成待由处理器处理的一个或多个其他指令的指令转换器)以便执行的指令,与作为处理器的解码器解码宏指令的结果的微指令或微操作(micro-op)相反。
ISA与微架构是不同在于,所述微架构是实现指令集的处理器的内部设计。具有不同微架构的处理器可以共享共同的指令集。例如,来自奔腾4(Pentium 4)处理器、CoreTM处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices,Inc.)的诸多处理器执行几乎相同版本的x86指令集(在更新的版本中已加入了一些扩展),但具有不同的内部设计。例如,ISA的相同寄存器架构在不同的微架构中可以使用已知的技术以不同的方式来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器堆;使用多个映射和寄存器池)等的一个或多个动态分配物理寄存器。除非另有说明,否则短语寄存器架构、寄存器堆和寄存器在本文中用于指代软件/编程器可见的寄存器以及指令指定寄存器的方式。在需要特殊性的情况下,形容词逻辑的(logical)、架构的(architectural)或软件可见的(software visible)将用于指示寄存器架构中的寄存器/堆,而不同的形容词将用于指定给定微架构中的寄存器(例如物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。
指令集包括一种或多种指令格式。给定指令格式限定各个字段(位的数目、位的位置)以便在其他事物中指定有待执行的操作(操作数)以及对其有待执行所述操作的所述(多个)操作数。通过指令模板(或子格式)的定义,一些指令格式被进一步细分。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包含的字段通常是按相同的次序,但是至少有一些具有不同的位位置,因为包含较少的字段)和/或被定义为具有不同解释的给定字段。因此,使用给定的指令格式(并且如果定义了就以所述指令格式的指令模板中的给定指令格式)来表示ISA的每条指令,并且所述指令包括用于指定操作和操作数的多个字段。例如,示例性ADD指令具有特定的操作数和指令格式,所述指令格式包括用于指定操作数的操作码字段以及用于选择操作数(源1/目的地和源2)的操作数字段;并且指令流中此ADD指令的出现将在选择特定操作数的操作数字段中具有特定内容。
科学、财务、自动向量化通用目的、RMS(识别、挖掘和综合)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)通常需要对大量数据项执行相同的操作(称为“数据并行性”)。单指令多数据(Single InstructionMultiple Data,SIMD)指代使处理器对多个数据项执行操作的指令类型。SIMD技术特别适合于可以在逻辑上将寄存器中的位划分成多个固定大小的数据元素的处理器,每个数据元素代表单独的值。例如,256位寄存器中的位可以被指定为待作为四个单独64位紧缩数据元素(四倍字长(Q)大小的数据元素)、八个单独32位紧缩数据元素(双倍字长(D)大小的数据元素)、十六个单独16位紧缩数据元素(字长(W)大小的数据元素)、或三十二个单独8位数据元素(字节(B)大小的数据元素)进行操作的源操作数。这种数据类型称为紧缩数据类型或向量数据类型,并且这种数据类型的操作数称为紧缩数据操作数或向量操作数。换句话说,紧缩数据项或向量指代紧缩数据元素的序列,并且紧缩数据操作数或向量操作数是SIMD指令(也称为紧缩数据指令或向量指令)的源或目的地操作数。
作为示例,一种类型的SIMD指令指定待以竖直方式对两个源向量操作数执行的单个向量操作,以生成相同大小的目的地向量操作数(也称为结果向量操作数),具有相同数量的数据元素,并且具有相同的数据元素顺序。源向量操作数中的数据元素称为源数据元素,而目的地向量操作数中的数据元素称为目的地或结果数据元素。这些源向量操作数具有相同的大小,并且包含相同宽度的数据元素,并且因此它们包含相同数量的数据元素。所述两个源向量操作数的相同位位置中的源数据元素形成数据元素对(也称为对应的数据元素;即每个源操作数的数据元素位置0中的数据元素对应,每个源操作数的数据元素位置1中的数据元素对应等)。对这些源数据元素对中的每一者分开地执行由所述SIMD指令指定的操作,以生成匹配数量的结果数据元素,并且因此每对源数据元素具有对应的结果数据元素。由于操作是竖直的,并且由于结果向量操作数大小相同、具有相同数量的数据元素,并且结果数据元素以与源向量操作数相同的数据元素顺序存储,所以结果数据元素位于结果向量操作数的与源矢量操作数中的对应的源数据元素对相同的位位置中。除了这种示例性类型的SIMD指令之外,还存在各种其他类型的SIMD指令(例如,仅具有一个源向量操作数或具有以水平方式操作的多于两个的源向量操作数、生成不同大小的结果向量操作、具有不同大小的数据元素、和/或具有不同数据元素顺序的SIMD指令)。应当理解的是,术语目的地向量操作数(或目的地操作数)被定义为执行由指令指定的操作(包括将所述目的地操作数存储在位置(其为寄存器或由所述指令指定的存储器地址))的直接结果,以使得它可以作为源操作数被另一指令(通过所述另一指令指定相同位置)访问。
诸如具有包括x86、MMXTM、流式SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集的CoreTM处理器所采用的SIMD技术已经使应用性能能够得到显著改善。已经发布和/或公布了引用高级向量扩展(AVX)(AVX1和AVX2)以及使用向量扩展(VEX)编码方案的一组附加SIMD扩展(例如,参见64和IA-32架构软件开发人员手册,2011年10月;以及参见高级向量扩展编程参考,2011年6月)。
图1A是框图,展示了根据本发明的实施例的示例性有序获取、解码、引退流水线和示例性寄存器重命名、乱序发布/执行流水线两者。图1B是框图,展示了根据本发明的实施例的有序获取、解码、引退核的示例性实施例以有待包含在处理器中的示例性寄存器重命名、乱序发布/执行架构核的示例性实施例两者。图1A和图1B中的实线框展示了流水线和核的有序部分,而虚线框的可选添加展示了寄存器重命名乱序发布/执行流水线和核。
在图1A中,处理器流水线100包括获取阶段102、长度解码阶段104、解码阶段106、分配阶段108、重命名阶段110、调度(也称为分派或发布)阶段112、寄存器读取/存储器读取阶段114、执行阶段116、回写/存储器写阶段118、异常处理阶段122以及提交阶段124。图1B示出了处理器核190,所述处理器核包括耦合到执行引擎单元150的前端单元130,并且所述执行引擎单元和前端单元都耦合到存储器单元170。核190可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核心、超长指令字(VLIW)核、或混合或替代核类型。作为又一选项,核190可以是专用核,例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元130包括耦合到指令高速缓存单元134的分支预测单元132,所述指令高速缓存单元被耦合到指令翻译后备缓冲器(TLB)136,所述指令转换后备缓冲器被耦合到指令获取单元138,所述指令获取单元被耦合到解码单元140。解码单元140(或解码器)可以对指令进行解码并且生成从原始指令解码出的、或以其他方式反映原始指令或从原始指令衍生出的作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。解码单元140可以使用各种不同的机制来实现。合适机制的示例包括但不限于:查找表、硬件实施方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核190包括微代码ROM或存储用于某些宏指令的微码的其他介质(例如,在解码单元140中或者在前端单元130内)。解码单元140被耦合到执行引擎单元150中的重命名/分配器单元152。
执行引擎单元150包括耦合到引退单元154的重命名/分配器单元152和一组一个或多个调度器单元156。所述调度器单元156表示任何数量的不同调度器,包括保留站、中央指令窗口等。所述调度器单元156被耦合到物理寄存器堆单元158。所述(多个)物理寄存器堆单元158各自表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点状态(例如,作为有待执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器堆单元158包括向量寄存器单元、写掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、以及通用寄存器。物理寄存器堆单元158被引退单元154重叠,所述引退单元用于展示可以实现寄存器重命名和无序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来堆,(多个)历史缓冲区,以及(多个)引退寄存器堆;使用寄存器映射和寄存器池等)。
引退单元154和(多个)物理寄存器堆单元158被耦合到(多个)执行群集160。所述(多个)执行群集160包括一组一个或多个执行单元162和一组一个或多个存储器访问单元164。执行单元162可以执行各种操作(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可以仅包括执行所有功能的一个执行单元或多个执行单元。所述(多个)调度器单元156、(多个)物理寄存器堆单元158、以及(多个)执行集群160被示出为可能是复数的,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/压缩整数/压缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,所述流水线各自具有其本身的调度器单元、(多个)物理寄存器堆单元、和/或执行集群,并且在分开的存储器访问流水线的情况下,实现了其中只有该流水线的执行集群具有(多个)存储器访问单元164的某些实施例)。还应当理解的是,在使用分开的流水线的情况下,这些流水线中的一者或多者可以是乱序发布/执行流水线,并且其余的是有序流水线。
所述一组存储器访问单元164被耦合到存储器单元170,所述存储器单元包括耦合到数据高速缓存单元174的数据TLB单元172,所述数据高速缓存单元被耦合到二级(L2)高速缓存单元176。在一个示例性实施例中,存储器访问单元164可以包括各自被耦合到存储器单元170中的数据TLB单元172的加载单元、存储地址单元、以及存储数据单元。指令高速缓存单元134被进一步耦合到存储器单元170中的二级(L2)高速缓存单元176。L2高速缓存单元176被耦合到一个或多个其他级的高速缓存并且最终被耦合到主存储器。
作为示例,示例性寄存器重命名乱序发布/执行核架构可以如下实现流水线100:1)指令获取单元138执行获取阶段102和长度解码阶段104;2)解码单元140执行解码阶段106;3)重命名/分配器单元152执行分配阶段108和重命名阶段110;4)所述(多个)调度器单元156执行调度阶段112;5)所述(多个)物理寄存器堆单元158和存储器单元170执行寄存器读/写阶段114;执行集群160执行执行阶段116;6)存储器单元170和所述(多个)物理寄存器堆单元158执行回写/存储器写阶段118;7)各种单元可以涉及异常处理阶段122;以及8)引退单元154和所述(多个)物理寄存器堆单元158执行提交阶段124。
核190可以支持一个或多个指令集(例如,x86指令集(具有已经添加了较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(具有任选的附加扩展,例如NEON)),包括本文所描述的指令。在一个实施例中,核190包括支持紧缩数据指令集扩展(例如,AVX1、AVX2、和/或某种形式的通用向量友好指令格式(U=0和/或U=1),如下所述)的逻辑,从而允许使用紧缩数据来执行许多多媒体应用所使用的操作。
应当理解,核可以支持多线程化(执行两个或更多个并行的操作或线程集),并且可以以各种方式来完成所述多线程化,此各种方式包括时分多线程化、同步多线程化(其中,单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分获取和解码以及此后诸如超线程化技术中的同步多线程化)。
虽然在乱序执行的上下文中描述了寄存器重命名,但应当理解的是,可以在有序架构中使用寄存器重命名。虽然处理器的所示实施例还包括分开的指令和数据高速缓存单元134/174和共享的L2高速缓存单元176,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,例如一级(L1)内部高速缓存、或多级内部高速缓存。在一些实施例中,所述系统可以包括在所述核和/或处理器外部的内部高速缓存和外部高速缓存的组合。可替代地,所有高速缓存都可以在所述核和/或处理器的外部。
图2是根据本发明的实施例的可以具有多于一个核的、可以具有集成存储器控制器的、以及可以具有集成图形的处理器200的框图。图2中的实线框展示了具有单个核202A、系统代理210、一组一个或多个总线控制器单元216的处理器200,而虚线框的可选添加展示了具有多个核202A-N、系统代理210中的一组一个或多个集成存储器控制器单元214以及专用逻辑208的替代处理器200。
因此,处理器200的不同实施方式可以包括:1)CPU,其中专用逻辑208是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),并且核202A-N是一个或多个通用核(例如,通用有序核、通用乱序核、两者的组合);2)协处理器,其中核202A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核202A-N是大量通用有序核。因此,处理器200可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(MIC)协处理器(包括30个或更多个核)、嵌入式处理器等。所述处理器可以在一个或多个芯片上实现。处理器200可以是一个或多个衬底的一部分和/或可以使用诸如例如BiCMOS、CMOS或NMOS的多种加工技术中的任何一种技术在一个或多个衬底上被实现。
存储器层级包括所述核内的一个或多个级别的高速缓存,一组或一个或多个共享高速缓存单元206、以及外部存储器(未示出),所述外部存储器被耦合到所述一组集成存储器控制器单元214。所述一组共享高速缓存单元206可以包括一个或多个中级高速缓存,如二级(L2)、三级(L3)、四级(L4)、或其他级别的高速缓存、终极高速缓存(LLC)、和/或其组合。虽然在一个实施例中,基于环形的互连单元212将集成图形逻辑208、所述一组共享高速缓存单元206、以及系统代理单元210/(多个)集成存储器控制器单元214互连,但替代实施例可以使用任何数量的用于互连这样的单元的已知技术。在一个实施例中,维持一个或多个高速缓存单元206与核202A-N之间的相干性。
在一些实施例中,所述核202A-N中的一个或多个核能够进行多线程。系统代理210包括协调和操作核202A-N的那些组件。系统媒介单元210可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括用于调节核202A-N和集成图形逻辑208的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。就架构指令集而言,核202A-N可以是同质的或异构的;也就是说,核202A-N中的两个或更多个核能够执行相同的指令集,而其他的核能够仅执行所述指令集的子集或不同指令集。在一个实施例中,核202A-N是异构的,并且包括下面描述的“小”核和“大”核两者。
图3-6是示例性计算机架构的框图。本领域已知的用于膝上型计算机、台式机,手持PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置也是合适的。一般,能够结合本文所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备通常是合适的。
现在参考图3,示出的是根据本发明的一个实施例的系统300的框图。系统300可以包括耦合到控制器中枢320的一个或多个处理器310、315。在一个实施例中,控制器中枢320包括图形存储器控制器中枢(GMCH)390和输入/输出中枢(IOH)350(其可以在分开的芯片上);GMCH 390包括存储器和图形控制器,存储器340和协处理器345被耦合到所述图形控制器;IOH 350将输入/输出(I/O)设备360耦合到GMCH 390。可替代地,存储器和图形控制器中的一者或两者被集成在处理器(如本文所述)内,存储器340和协处理器345通过IOH 350直接耦合到单个芯片中的处理器310和控制器中枢320。
图3中用虚线表示附加处理器315的特性。每个处理器310、315可以包括本文描述的一个或多个处理核,并且可以是某一版本的处理器200。存储器340可以例如是动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器中枢320经由多点总线(例如前端总线(FSB)、诸如快速路径互连(QPI)的点对点接口或类似连接件395)与(多个)处理器310、315通信。在一个实施例中,协处理器345是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器中枢320可以包括集成图形加速器。就一系列指标量度(包括体系结构、微体系结构、热、功耗特性等)而言,物理资源310、315之间存在多种差异。
在一个实施例中,处理器310执行控制一般类型的数据处理操作的指令。协处理器指令可以被嵌入在所述指令中。处理器310将这些协处理器指令识别为应由附连的协处理器345执行的类型。相应地,处理器310将协处理器总线或其他互连上的这些协处理器指令(或表示协处理器指令的控制信号)发布到协处理器345。(多个)协处理器345接受并执行接收到的协处理器指令。
现在参考图4,示出了根据本发明的实施例的更具体的第一示例性系统400的框图。如图4所示,多处理器系统400是点对点互连系统,且包括经由点对点互连450耦合的第一处理器470和第二处理器480。处理器470和480各自可以是某一版本的处理器200。在本发明的一个实施例中,处理器470和480分别是处理器310和315,而协处理器438是协处理器345。在另一实施例中,处理器470和480分别是处理器310和345。
处理器470和480被示出为分别包括集成存储器控制器(IMC)单元472和482。处理器470还包括作为其总线控制器单元的一部分的点对点(P-P)接口476和478;类似地,第二处理器480包括P-P接口486和488。处理器470、480可以使用P-P接口电路478、488通过点对点(P-P)接口450交换信息。如图4所示,IMC 472和482将处理器联接到对应存储器、即存储器432和存储器434上,所述存储器可以是主存储器的本地附接到对应处理器上的部分。处理器470、480可以各自使用点对点接口电路476、494、486、498经由单独的P-P接口452、454来与芯片组490交换信息。芯片组490可以可选地经由高性能接口439与协处理器438交换信息。在一个实施例中,协处理器438是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以包括在任一处理器中或者在两个处理器外部但经由P-P互连与所述处理器相连接,使得如果处理器被置于低功耗模式中,则任一或两个处理器的本地高速缓存信息可以被存储在所述共享高速缓存中。芯片组490可以经由接口496耦合至第一总线416。在一个实施例中,第一总线416可以是外围部件互连(PCI)总线,或诸如PCIExpress总线或另一种第三代I/O互连总线的总线,尽管本发明的范围不限于此。
如图4所示,不同I/O设备414可以连同总线桥接器418耦合到第一总线416,所述总线桥接器可以将第一总线416耦合到第二总线420。在一个实施例中,一个或多个附加处理器415(例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、字段可编程门阵列、或任何其他处理器)被耦合到第一总线416。在一个实施例中,第二总线420可以是低引脚数(LPC)总线。在一个实施例中,各个设备可以耦合至第二总线420,所述设备包括例如键盘和/或鼠标422、多个通信设备427、以及可以包括指令/代码数据430的存储单元428(如磁盘驱动器或者其他大容量存储设备)。进一步地,音频I/O424可以耦合至第二总线420。注意到,其他架构是可能的。例如,替代图4的点对点体系结构,系统可以实现多站式总线或其他这样的架构。
现在参考图5,示出了根据本发明的实施例的更具体的第二示例性系统500的框图。图4和图5中的相同元件具有相同的参考数字,并且已经从图5中省略了图4的某些方面以避免使图5的其他方面模糊。图5展示了处理器470、480可以分别包括集成存储器和I/O控制逻辑(“CL”)472和482。因此,CL 472、482包括集成存储器控制器单元并且包括I/O控制逻辑。图5展示了不仅存储器432、434被耦合至CL 472、482,而且I/O设备514也被耦合至控制逻辑472、482。传统I/O设备515被耦合至芯片组490。
现在参考图6,示出的是根据本发明的实施例的SoC 600的框图。图2中的相似元件具有相同的附图标记。此外,虚线框是关于更先进的SoC的可选特征。在图6中,(多个)互连单元602被耦合到:应用处理器610,所述应用处理器包括一组一个或多个核202A-N和一个或多个共享高速缓存单元206;系统代理单元210;(多个)总线控制器单元216;(多个)集成存储器控制器单元214;一组或一个或多个协处理器620,所述协处理器可以包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(SRAM)单元630;直接存储器访问(DMA)单元632;以及显示单元640,所述显示单元用于耦合到一个或多个外部显示器。在一个实施例中,所述(多个)协处理器620是专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文公开的机制的实施例能够以硬件、软件、固件或这些实现途径的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。诸如图4所示的代码430的程序代码可以被应用于输入指令以执行本文所述的功能并且生成输出信息。输出信息能够以已知的方式应用于一个或多个输出设备。出于此应用的目的,处理系统包括具有处理器(例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器)的任何系统。程序代码能够以高级程序或面向对象的编程语言来实现,以与处理系统通信。如果需要,程序代码还能够以汇编或机器语言实现。事实上,本文描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。
可以由机器可读介质上所存储的表属性指令实现至少一个实施例的一个或多个方面,该指令代表处理器内的各种逻辑,当被机器读取时该指令使该机器制作用于执行在此所描述的技术的逻辑。此类表示(称为“IP核”)可以被存储在有形的机器可读介质上并提供给各顾客或制造设施以加载至实际制作该逻辑或处理器的制作机器中。这样的机器可读存储介质可以包括但不限于:由机器或设备制造或形成的物品的非瞬态有形安排,包括诸如硬盘的存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、致密盘可擦写光盘(CD-RW)、和磁光盘;半导体设备,例如只读存储器(ROM);随机存取存储器(RAM),例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM);可擦可编程只读存储器(EPROM);闪存存储器;电可擦可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括包含指令或包含设计数据(如硬件描述语言(HDL))的非瞬态有形机器可读介质,所述非瞬态有形机器可读介质限定本文描述的结构、电路、设备、处理器和/或系统特征。这样的实施例也可以被称为程序产品。在一些情况下,可以使用指令转换器将指令从源指令集转换为目标指令集。例如,所述指令转换器可以将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真、或以其他方式转换为有待由核处理的一个或多个其他指令。指令转换器能够以软件、硬件、固件或其组合来实现。指令转换器可以位于处理器上、处理器外、或者部分在处理器上并且部分在处理器外。
图7是对照根据本发明的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所示实施例中,指令转换器是软件指令转换器,然而可替代地,指令转换器能够以软件、固件、硬件或其各种组合来实现。图7示出了可以使用x86编译器704来编译高级语言702的程序以生成x86二进制代码706,所述x86二进制代码可以由具有至少一个x86指令集核的处理器716本机执行。具有至少一个x86指令集核的处理器716表示可以通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的Intel处理器基本相同功能的任何处理器:(1)Intelx86指令集核的指令集的实质部分、或(2)目标代码版本的应用或目标是在具有至少一个x86指令集核的Intel处理器上运行的其他软件,以便实现与具有至少一个x86指令集核的Intel处理器基本相同的结果。x86编译器704表示可操作用于生成x86二进制代码706(例如,目标代码)的编译器,所述x86二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核716的处理器上执行。
类似地,图7示出了可以使用替代性指令集编译器708来编译高级语言702的程序以生成替代性指令集二进制代码710,可以由不具有至少一个x86指令集核的处理器714(例如,具有执行加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的多个核的处理器)本机执行所述替代性指令集二进制代码。指令转换器712用于将x86二进制代码706转换为可由不具有x86指令集核的处理器714本机执行的代码。此经转换的代码不太可能与替代性指令集二进制代码710相同,因为能够实现这一点的指令转换器很难制作;然而,经转换的代码将完成一般操作,并且由来自所述替代性指令集的指令构成。因此,指令转换器712表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码706的软件、固件、硬件或其组合。
示例性指令格式
本文描述的所述(多个)指令的实施例能够以不同的格式实现。另外,以下详述示例性系统、架构、以及流水线。所述(多个)指令的实施例可以在这样的系统、架构、以及流水线上执行,但不限于所详述的实施例。向量友好指令格式是适用于向量指令的指令格式(例如,存在某些特定于向量操作的字段)。虽然描述了通过所述向量友好指令格式使向量操作和标量操作均受支持的实施例,但是替代实施例仅使用向量操作向量友好指令格式。
图8A和图8B是框图,展示了根据本发明的实施例的通用向量友好指令格式及其指令模板。图8A是框图,展示了根据本发明的实施例的通用向量友好指令格式及其A类指令模板;而图8B是框图,展示了根据本发明的实施例的通用向量友好指令格式及其B类指令模板。具体地,为通用向量友好指令格式800限定了A类和B类指令模板,所述指令模板都不包括存储器访问805指令模板和存储器访问820指令模板。
在向量友好指令格式的上下文中的术语“通用”是指不绑定到任何特定指令集的指令格式。虽然将描述本发明的实施例,其中向量友好指令格式支持以下各项:具有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字节向量操作数)。
图8A中的A类指令模板包括:1)在无存储器访问805指令模板中,示出了无存储器访问,完全舍入控制式操作810指令模板和无存储器访问,数据变换式操作815指令模板;以及2)在存储器访问820指令模板中,示出了存储器访问,时间825指令模板和存储器访问,非时效性的830指令模板。图8B中的B类指令模板包括:1)在无存储器访问805指令模板中,示出了无存储器访问,写掩码控制、部分舍入控制式操作812指令模板和无存储器访问、写掩码控制、vsize式操作817指令模板;以及2)在存储器访问820指令模板中,示出了存储器访问,写掩码控制827指令模板。通用向量友好指令格式800包括以下按照图8A和图8B所示的次序列出的以下字段。
格式字段840-该字段中的特定值(指令格式标识符值)唯一地标识所述向量友好指令格式,并且因此在指令流中出现向量友好指令格式的指令。如此,在仅具有通用向量友好指令格式的指令集不需要该字段的情况下,该字段是任性的。
基础操作字段842-其内容区分不同的基础操作。
寄存器索引字段844-其内容直接或通过地址生成来指定源操作数和目的地操作数的位置,无论是在寄存器还是存储器中。这些包含足够数量的位以从PxQ(例如32×512、16×128、32×1024、64×1024)寄存器堆中选择N个寄存器。虽然在一个实施例中,N可以是多达三个源和一个目的地寄存器,但替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源(其中这些源之一也用作目的地),可以支持多达三个来源(其中一个源也用作目的地),可以支持多达两个源和一个目的地)。
修饰符字段846-其内容区分通用向量指令格式的指令的出现,所述指令指定来自不是通用向量指令格式的指令的存储器访问;也就是说,在无存储器访问805指令模板语存储器访问820指令模板之间。存储器访问操作读和/或写存储器层级(在一些情况下,使用多个寄存器中的值指定所述源和/或目的地址),而无存储器访问操作不读和/或写存储器层级(例如,所述源和目的地是寄存器)。虽然在一个实施例中,该字段还选择三种不同的方式来执行存储器地址计算,但替代实施例可以支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段850-其内容区分各种不同操作中除了基础操作之外的哪一种有待被执行。该字段是特定于上下文的。在本发明的一个实施例中,该字段被划分为类字段868、阿尔法字段852、以及贝塔字段854。扩充操作字段850允许在单条指令而不是2条、3条或4条指令中执行常见的操作组。
比例字段860-其内容允许索引字段的内容按比例缩放以用于存储器地址生成(例如,对于地址生成,使用2比例*索引+基址)。
移位字段862A-其内容作存储器地址生成的一部分(例如,对于地址生成,使用2比例*索引+基址+移位)。
移位因子字段862B(注意,移位字段862A直接并置在移位因子字段862B上指示使用了一者或另一者)-其内容用作地址生成的一部分;所述移位因子字段指定有待由存储器访问(N)的大小来缩放的移位因子,其中N是存储器访问中的字节数(例如,对于地址生成,使用2比例*索引+基址+经缩放移位)。冗余的低次序位被忽略,并且因此,移位因子字段的内容乘以存储器操作数总大小(N),以便产生用于计算有效地址的最终移位。基于全的操作码字段874(本文所描述的)和数据操作字段854C,由运行时的处理器硬件确定N的值。移位字段862A和移位因子字段862B从不用于无存储器访问805指令模板和/或不同实施例可以仅实现两者之一或一个都不实现的意义上说是可选的。
数据元素宽度字段864-其内容区分多个数据元素宽度中的哪一个有待被使用(在一些实施例中,针对所有指令;在其他实施例中,仅针对一些指令)。该字段从其在如果仅支持一个数据元素宽度和/或使用所述操作数的一些方面来支持多个数据元素宽度的情况下则不需要的意义上说是可选的。
写掩码字段870-其内容基于每个数据元素位置控制目的地向量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并写掩码,而B类指令模板支持合并和归零写掩码。当合并时,向量掩码允许在执行(由所述基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集合免受更新;在另一实施例中,在对应的掩码位具有0的情况下保留目的地的每个元素的旧值。相比之下,当归零时,向量掩码允许在执行(由所述基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素归零;在一个实施例中,当对应的掩码位具有0值时,将目的地的元素设置为0。该功能的子集是控制正在执行的操作的向量长度(即正在修改的元素的跨度,从第一个到最后一个)的能力;然而,所修改的元素不必是连续的。因此,写入掩模字段870允许部分向量操作,包括负载、存储、算术、逻辑等。虽然描述了本发明的多个实施例,其中写掩模字段的870内容选择多个写掩码寄存器中的包含有待使用的写掩码的一个写掩码寄存器(并且因此写掩码字段的870内容间接地标识要执行的掩码),替代实施例代替地或另外允许掩模写字段的870内容直接指定有待执行的掩码。
立即数字段872-其内容允许立即数的指定。该字段从其不存在于不支持立即数的通用向量友好格式的实现中并且不存在于不使用立即数的指令中的意义上说是可选的。
类字段868-其内容区分不同类别的指令。参考图8A和图8B,该字段的内容在A类和B类指令之间进行选择。在图8A和图8B中,使用圆角方格指示字段(例如,图8A和图8B中分别为类字段868的A类字段868A和B类字段868B)中存在特定值。
A类指令模板
在无存储器访问805A类指令模板的情况下,阿尔法字段852被解释为RS字段852A,其内容区分所述不同扩充操作类型中的哪一种有待执行(例如,舍入852A.1和数据变换852A.2分别被指定用于无存储器访问舍入式操作810和无存储器访问数据变换式操作815指令模板),而贝塔字段854区分所指定类型的操作中的哪一个有待执行。在无存储器访问805指令模板中,不存在比例字段860、移位字段862A、以及移位比例字段862B。
无存储器访问指令模板-完全舍入控制式操作
在无存储器访问完全舍入控制式操作810指令模板中,贝塔字段854被解释为舍入控制字段854A,其(多项)内容提供静态舍入。虽然在本发明的所描述的实施例中,舍入控制字段854A包括抑制所有浮点异常(SAE)字段856和舍入操作控制字段858,但替代实施例可以支持并可以将这两个概念编码到同一个字段中、或者仅具有这些概念/字段中的一者或另一者(例如,可以只具有舍入操作控制字段858)。
SAE字段856-其内容区分是否禁用异常事件报告;当SAE字段的856内容表示抑制被启用时,给定指令不会报告任何类型的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段858-其内容区分一组舍入操作中的哪一个要执行(例如,上入、下舍、朝向零舍入以及舍入到最近整数)。因此,舍入操作控制字段858允许基于每条指令改变舍入模式。在本发明的其中处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段的850内容覆盖所述寄存器的值。
无存储器访问指令模板-数据变换式操作
在无存储器访问数据变换式操作815指令模板中,贝塔字段854被解释为数据变换字段854B,其内容区分多项数据变换的哪一项有待执行(例如,无数据变换、混合、广播)。
在存储器访问820A类指令模板的情况下,阿尔法字段852被解释为驱逐提示字段852B,其内容区分驱逐提示中的哪一个有待使用(在图8A中,时效性的852B.1和非时效性的852B.2分别被指定用于存储器访问时效性的825指令模板和存储器访问非时效性的830指令模板),而贝塔字段854被解释为数据操纵字段854C,其内容区分多项数据操纵操作(也称为原语)中的哪一些有待执行(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问820指令模板包括比例字段860、以及可选的移位字段862A或移位比例字段862B。向量存储器指令通过转换支持对来存储器执行向量加载和向量存储。与常规向量指令一样,向量存储器指令以数据元素方式传送来自存储器的数据或将数据传送到存储器,实际传送的元素由被选择为写掩码的向量掩码的内容决定。
存储器访问指令模板-时效性的
时效性的数据是可能很快重新使用足以从高速缓存中受益的数据。然而,这是一个提示,并且不同的处理器能够以不同的方式实现所述时态数据,包括完全忽略提示。
存储器访问指令模板-非时效性的
非时效性的数据是在一级高速缓存中不太可能很快重新使用足以从高速缓存中受益的数据,并且应优先考虑驱逐。然而,这是一个提示,并且不同的处理器能够以不同的方式实现所述时态数据,包括完全忽略提示。
B类指令模板
在B类指令模板的情况下,阿尔法字段852被解释为写掩码控制(Z)字段852C,其内容区分由写掩码字段870控制的写掩码应为合并还是归零。在无存储器访问805B类指令模板的情况下,贝塔字段854的一部分被解释为RL字段857A,其内容区分所述不同扩充操作类型中的哪一种有待执行(例如,舍入857A.1和向量长度(VSIZE)857A.2分别被指定用于无存储器访问写掩码操作部分舍入控制式操作812指令模块和无存储器访问写掩码控制VSIZE式操作817指令模板),而贝塔字段854的其余部分区分所指定类型的操作中的哪一个有待执行。在无存储器访问805指令模板中,不存在比例字段860、移位字段862A、以及移位比例字段862B。在无存储器访问写掩码操作部分舍入控制式操作810指令模块中,贝塔字段854的其余部分被解释为舍入操作字段859A,并且异常事件报告被禁用(给定指令不报告任何类型的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段859A(就像舍入操作控制字段858一样)-其内容区分一组舍入操作中的哪一个要执行(例如,上入、下舍、朝向零舍入以及舍入到最近整数)。因此,舍入操作控制字段859A允许基于每条指令改变舍入模式。在本发明的其中处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段的850内容覆盖所述寄存器的值。在无存储器访问写掩码控制VSIZE式操作817指令模板中,贝塔字段854的其余部分被解释为向量长度字段859B,其内容区分多个数据向量长度的哪一个有待执行(例如,128、256或512字节)。
在存储器访问820B类指令模板的情况下,贝塔字段854的一部分被解释为广播字段857B,其内容区分是否要执行广播式数据操纵操作,而贝塔字段854的其余部分被解释为向量长度字段859B。存储器访问820指令模板包括比例字段860、以及可选的移位字段862A或移位比例字段862B。
在存储器访问820B类指令模板的情况下,贝塔字段854的一部分被解释为广播字段857B,其内容区分是否要执行广播式数据操纵操作,而贝塔字段854的其余部分被解释为向量长度字段859B。存储器访问820指令模板包括比例字段860、以及可选的移位字段862A或移位比例字段862B。关于通用向量友好指令格式800,示出了包括格式字段840、基础操作字段842以及数据元素宽度字段864的全操作码字段874。尽管示出了全操作码字段874包括所有这些字段的一个实施例,但在不支持所有这些字段的实施例中全操作码字段874包括比所有这些字段更少的字段。全操作码字段874提供操作代码(操作数)。扩充操作字段850、数据元素宽度字段864以及写掩码字段870允许基于每条指令以通用向量友好指令格式指定这些特征。写掩码字段和数据元素宽度字段的组合创建了多个类型化指令,因为它们允许基于不同数据元素宽度应用掩码。
在A类和B类中发现的各种指令模板在不同情况下都是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同的核仅支持A类、仅支持B类或支持两类。例如,旨在用于通用计算的高性能通用乱序核可以仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核可以仅支持A类,并且旨在用于支持两者的核可以支持两者(当然,具有来自两类的模板和指令的一些混合而不是来自两类的所有模板和指令的核是在本发明的范围内)。此外,单个处理器可以包括多个核,所有这些核都支持相同的类,或者其中不同的核支持不同的类。例如,在具有分开的图形核和通用核的处理器中,旨在主要用于图形和/或科学计算的图形核之一可以仅支持A类,而通用核中的一者或多者可以是高性能通用核,其中乱序执行和寄存器重命名旨在用于仅支持类B的通用计算。
不具有分开的图形核的另一处理器可以包括支持A类和B类两者的更为通用的有序或乱序核。当然,在本发明的不同实施例中,来自一类的特征也可以在另一类中实现。以高级语言书写的程序将被放入(例如,及时编译或静态编译)到各种不同的可执行形式中,包括:1)仅具有由用于执行的目标处理器支持的类的指令的形式;或2)具有使用所有类别的指的不同组合书写的替代例程并且具有控制流程代码的形式,所述控制流程代码基于当前正在执行代码的处理器所支持的指令来选择要执行的例程。
图9A至图9D是框图,展示了根据本发明的示例性实施例的专用向量友好指令格式。图9示出了专用向量友好指令格式900,所述专用向量友好指令格式从其指定所述字段的位置、大小、解释和次序以及某些字段的值的意义上说是特定的。可以使用专用向量友好指令格式900来扩展x86指令集,并且因此所述字段中的一些字段与现有的x86指令集及其扩展(例如,AVX)中使用的字段相似或相同。该格式与现有的带有扩展的x86指令集的前缀编码字段、实际操作数字节字段、MOD R/M字段、SIB字段、移位字段、以及立即数字段保持一致。示出了来自图8的从图9映射到其中的字段。
应当理解的是,尽管为了说明的目的,在通用向量友好指令格式800的上下文中参考专用向量友好指令格式900来描述本发明的实施例,但是本发明不限于专用向量友好指令格式900,除非声称。例如,通用向量友好指令格式800考虑了各种字段的各种可能的大小,而专用向量友好指令格式900被示出为具有特定大小的字段。作为特定示例,虽然数据元素宽度字段864被示为专用向量友好指令格式900中的一位字段,但本发明不限于此(即,通用向量友好指令格式800考虑了其他大小的数据元素宽度字段864)。通用向量友好指令格式800包括以下按照图9A所示的次序列出的以下字段。
EVEX前缀(字节0-3)902以四字节形式编码。
格式字段840(EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段840,并且所述第一字节包含0x62(在本发明的一个实施例中,用于区分向量友好指令格式的唯一值)。第二至第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段905(EVEX字节1,位[7-5])由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和857BEX字节1,位[5]-B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应的VEX位字段相同的功能,并且使用ls补码形式进行编码,即ZMM0被编码为811B,ZMM15被编码为0000B。指令的其他字段对如本领域已知的(rrr,xxx和bbb)编码寄存器索引的低3位进行编码,以便可以通过添加EVEX.R、EVEX.X、以及EVEX.B来形成Rrrr、Xxxx、以及Bbbb。
REX’字段810-这是REX’字段810的第一部分并且是用于对扩展的32寄存器集的较高16或较低16进行编码的EVEX.R’位字段(EVEX字节1,位[4]-R’)。在本发明的一个实施例中,该位以及如下所指示的其他位以位反转格式存储,以(在众所周知的x86 32位模式中)从BOUND指令区分谁的实际操作数字节为62,但是在MOD R/M字段中不接受MOD字段中的11的值;本发明的替代实施例不以反转格式存储该位和下面的指示的其他位。使用值1来对较低的16个寄存器进行编码。换句话说,R’Rrrr是通过将EVEX.R’、EVEX.R和来自其他字段的另一RRR组合而形成的。
操作码映射字段915(EVEX字节1,位[3:0]-mmmm)-其内容对隐含的前导操作数字节(0F、0F 38、或0F 3)进行编码。
数据元素宽度字段864(EVEX字节2,位[7]-W)-用符号EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。
EVEX.vvvv 920(EVEX字节2,位[6:3]-vvvv)-EVEX.vvvv的作用可以包括以下内容:1)EVEX.vvvv对第一源寄存器操作数进行编码,以反向(ls补码)形式指定,并且对于具有2个或更多个源操作数的指令有效;2)EVEX.vvvv对目的地寄存器操作数进行编码,对于某些向量移位以ls补码形式指定;或者3)EVEX.vvvv不对任何操作数进行编码,所述字段被保留并且应包含811b。因此,EVEX.vvvv字段920对以反转(ls补码)形式存储的第一源寄存器说明符的4个低次序位进行编码。取决于指令,使用另外不同的EVEX位字段将说明符大小扩展到32个寄存器。
EVEX.U 868类字段(EVEX字节2,位[2]-U)-如果EVEX.U=0,则所述类字段表示A类或EVEX.U0;如果EVEX.U=1,则所述类字段表示B类或EVEX.U1。
前缀编码字段925(EVEX字节2,位[1:0]-pp)为所述基础操作字段提供多个附加位。除了为EVEX前缀格式的传统SSE指令提供支持之外,所述前缀编码字段还具有压缩SIMD前缀的优点(而不是要求一个字节来表示SIMD前缀,EVEX前缀只需要2位)。在一个实施例中,为了支持使用传统格式和EVEX前缀格式的SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时在提供给解码器的PLA之前扩展到传统SIMD前缀中(因此,PLA可以同时执行这些传统指令的传统格式和EVEX格式,而无需修改)。虽然较新的指令可以将EVEX前缀编码字段的内容的直接用作操作数扩展,但是为了一致性,某些实施例以类似的方式扩展但允许由这些传统SIMD前缀指定不同的含义。替代实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
阿尔法字段852(EVEX字节3,位[7]-EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制和EVEX.N;也用α表示)-如前所述,该字段是特定于上下文的。
贝塔字段854(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ表示)-如前所述,该字段是特定于上下文的。
REX’字段810-这是REX’字段的其余部分并且是可以用于对扩展的32寄存器集的较高16或较低16进行编码的EVEX.V’位字段(EVEX字节3,位[3]-V’)。该位是以位反转格式存储的。使用值1来对较低的16个寄存器进行编码。换句话说,V’VVVV是通过组合EVEX.V’、EVEX.vvvv形成的。
写掩码字段870(EVEX字节3,位[2:0]-kkk)-其内容指定写掩码寄存器中的寄存器的索引,如前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有特定的行为,意味着没有写掩码用于特定指令(这能够以各种方式实现,包括使用硬连线到所有或绕过掩码硬件的硬件的写掩码)。
实际操作码字段930(字节4)-其也称为操作码字节。在此字段中指定所述操作码的一部分。
MOD R/M字段940(字节5)包括MOD字段942、Reg字段944、以及R/M字段946。如前所述,MOD字段的942内容在存储器访问和无存储器访问操作之间进行区分。Reg字段944的作用可以归结为两种情况:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作数扩展并且不用于对任何指令操作数进行编码。R/M字段946的作用可以包括如下:对引用存储器地址的指令操作数进行编码,或对目的地寄存器操作数或源寄存器操作数进行编码。
比例索引基址(SIB)字节(字节6)-如前所述,比例字段的850内容用于存储器地址生成。SIB.xxx 954和SIB.bbb 956-这些字段的内容先前已经参考了寄存器索引Xxxx和Bbbb。
移位字段862A(字节7-10)-当MOD字段942包含10时,字节7-10是移位字段862A,并且所述移位字段与传统32位移位(disp32)一样工作并且以字节粒度工作。
移位因子字段862B(字节7)-当MOD字段942包含01时,字节7是移位因子字段862B。这个字段的位置与传统的x86指令集8位移位(disp8)的位置相同,所述字段以字节粒度工作。由于disp8是扩展符号,它只能在-128和127字节偏移之间寻址;就64字节高速缓存线而言,disp8使用只能设置四个非常有用的值-128、-64、0和64的8位;由于通常需要更大的范围,因此使用disp32;然而,disp32需要4个字节。与disp8和disp32相比,移位因子字段862B是disp8的重新解释;当使用移位因子字段862B时,实际移位由移位因子字段的内容乘以存储器操作数访问(N)的大小来确定。这种类型的移位称为disp8*N。这减少了平均指令长度(单个字节用于移位,但具有更大的范围)。这样的压缩移位是基于有效移位是存储访问粒度的倍数的假设,并且因此地址偏移的冗余低次序位不需要进行编码。换句话说,移位因子字段862B代替传统的x86指令集8位移位。因此,移位因子字段862B以与x86指令集8位移位相同的方式进行编码(因此ModRM/SIB编码规则没有变化),只有disp8超载到disp8*N除外。换句话说,编码规则或编码长度没有变化,但只有在由硬件解释移位值(这需要通过按存储器操作数的大小来缩放移位来获得字节地址偏移)时如此。立即数字段872如前所述地操作。
全操作码字段
图9B是框图,展示了根据本发明的一个实施例的专用向量友好指令格式900的构成全操作码字段874的字段。具体地,全操作码字段874包括格式字段840、基础操作字段842以及数据元素宽度(W)字段864。基础操作字节842包括前缀编码字段925、操作码映射字段915、以及实际操作码字段930。
寄存器索引字段
图9C是框图,展示了根据本发明的一个实施例的专用向量友好指令格式900的构成寄存器索引字段844的字段。具体地,寄存器索引字段844包括REX字段905、REX’字段910、MODR/M.reg字段944、MODR/M.r/m字段946、VVVV字段920、xxx字段954、以及bbb字段956。
扩充操作字段
图9D是框图,展示了根据本发明的一个实施例的专用向量友好指令格式900的构成扩充操作字段850的字段。当类(U)字段868包含0时,所述字段表示EVEX.U0(A类868A);当所述字段包含1时,所述字段表示EVEX.U1(B类868B)。当U=0并且MOD字段942包含11(表示无存储器访问操作)时,阿尔法字段852(EVEX字节3,位[7]-EH)被解释为rs字段852A。当rs字段852A包含1(舍入852A.1)时,贝塔字段854(EVEX字节3,位[6:4]-SSS)被解释为舍入控制字段854A。舍入控制字段854A包括一位SAE字段856和两位舍入操作字段858。当rs字段852A包含0(数据变换852A.2)时,贝塔字段854(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段854B。当U=0并且MOD字段942包含00、01或10(表示存储器访问操作)时,阿尔法字段852(EVEX字节3,位[7]-EH)被解释为驱逐提示(EH)字段852B,并且贝塔字段854(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段854C。
当U=1时,阿尔法字段852(EVEX字节3,位[7]-EH)被解释为写掩码控制(Z)字段852C。当U=1并且MOD字段942包含11(表示无存储器访问操作)时,贝塔字段854的一部分(EVEX字节3,位[4]-S0)被解释为RL字段857A;当所述RL字段包含1(舍入857A.1)时,贝塔字段854的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入操作字段859A,而当RL字段857A包含0(VSIZE 857.A2)时,贝塔字段854的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段859B(EVEX字节3,位[6-5]-L1-0)。当U=1并且MOD字段942包含00、01或10(表示存储器访问操作)时,贝塔字段854(EVEX字节3,位[6:4]-SSS)被解释为向量长度字段859B(EVEX字节3,位[6-5]-L1-0)和广播字段857B(EVEX字节3,位[4]-B)。
图10是根据本发明一个实施例的方法的寄存器架构1000的框图。在所示的实施例中,存在512位宽的32个向量寄存器1010;这些寄存器的参考号为zmm0到zmm31。较低的16个zmm寄存器的次序较低的256位叠加在寄存器ymm0-16上。较低的16个zmm寄存器的次序较低的128位(ymm寄存器的次序较低的128位)叠加在寄存器xmm0-15上。专用向量友好指令格式900对这些叠加的寄存器堆进行操作,如下表所示。
换句话说,向量长度字段859B在最大长度与一个或多个其他较短长度之间进行选择,其中每个这样的较短长度是前一长度的一半长度;并且没有向量长度字段859B的指令模板对最大向量长度进行操作。进一步地,在一个实施例中,专用向量友好指令格式900的B类指令模板对压缩或标量单/双精度浮点数据以及压缩或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶的数据元素位置执行的操作;取决于所述实施例,次序较高的数据元素位置或者在所述指令之前保持不变或者被归零。
写掩码寄存器1015-在所示实施例中,存在8个写掩码寄存器(k0至k7),每个写掩码寄存器的大小为64位。在替代实施例中,写掩码寄存器1015的大小为16位。如前所述,在本发明的一个实施例中,向量掩模寄存器k0不能用作写掩码;当通常指示k0的编码用于写掩码时,所述向量掩模寄存器选择0xFFFF的硬连线写掩码,有效地禁止所述指令的写掩码。
通用寄存器1025-在所示实施例中,存在十六个64位通用寄存器,所述通用寄存器与现有的x86寻址模式一起使用以对多个存储器操作数进行寻址。这些寄存器用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、以及R8到R15作为参考标记。
标量浮点堆栈寄存器堆(x87堆栈)1045,在其上重叠有MMX压缩整数平面寄存器堆1050-在所示实施例中,x87堆栈是用于使用x87指令集扩展对32位/64位/80位浮点数据字节执行标量浮点操作的八元素堆栈;而MMX寄存器用于对64位压缩整数数据执行操作,以及为在MMX寄存器与XMM寄存器之间执行的某些操作保存操作数。本发明的替代实施例可以使用更宽或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
图11A和图11B示出了更特定的示例性有序核架构的框图,该核是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核)之一。取决于应用,所述逻辑块通过具有某些固定功能逻辑、存储器I/O接口和其他必需I/O逻辑的高带宽互连网络(例如,环形网络)进行通信。
图11A是根据本发明的裸片实施例的单个处理器核、和其与上互连网络1102的连接以及其二级(L2)高速缓存1104的本地子集的框图。在一个实施例中,指令解码器1100支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1106允许对高速缓存存储器的低时延访问进入标量单元和向量单元。虽然在一个实施例中(为了简化设计),标量单元1108和向量单元1110使用分开的寄存器组(分别为标量寄存器1112和向量寄存器1114),并且在它们之间传送的数据被写入存储器并且然后从一级(L1)高速缓存1106中回读,但本发明的替代实施例可以使用不同的途径(例如,使用单个寄存器组或者包括允许数据在两个寄存器堆之间传送而未被书写和回读的通信路径)。
L2高速缓存1104的本地子集是全局L2高速缓存的一部分,所述全局L2高速缓存被划分为多个分开的本地子集,每个处理器核一个。每个处理器核具有到其本身的L2高速缓存1104的本地子集的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集1104中并且可以被快速访问,与其他处理器核并行地访问其本地L2的高速缓存子集。由处理器核写的数据被存储在其本身的L2高速缓存子组1104中,并且如果需要,则从其他子集划掉。所述环形网络确保共享数据的相干性。所述环形网络是双向的,允许诸如处理器核、L2高速缓存和其他逻辑块的媒介在芯片内彼此通信。每个环形数据路径在每个方向为1012位宽。
图11B是根据本发明的实施例的图11A中的处理器核的一部分的放大视图。图11B包括L1高速缓存1104的L1数据高速缓存1106A部分、以及关于向量单元1110和向量寄存器1114的更多细节。具体地,向量单元1110是16位宽向量处理单元(VPU)(参见16位宽ALU1128),所述向量处理单元执行整数、单精度浮点和双精度浮点指令中的一者或多者。VPU支持用混合单元1120对寄存器输入进行混合、用转换单元1122A-B进行数字转换、以及用复制单元1124对存储器输入进行复制。写掩码寄存器1126允许预测结果向量写。
本发明的实施例可以包括上面已经描述的各个步骤。这些步骤可以体现在可用于使通用或专用处理器执行这些步骤的机器可执行指令中。可替代地,这些操作可以由含有用于执行这些操作的硬件连线的逻辑的特定硬件部件执行,或者由程序计算机部件和自定义硬件部件的任意组合执行。
如本文所述,指令可以是指硬件的具体配置,例如被配置为用于执行某些操作或具有存储在非瞬态计算机可读介质中实施的存储器中的预定功能或软件指令的专用集成电路(ASIC)。因此,可以使用在一个或多个电子设备(例如,终端站、网络元件等)上存储和执行的代码和数据来实现这些图中所示的技术。这样的电子设备使用计算机机器可读媒体(例如,非瞬态计算机机器可读存储媒体(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器设备;相变存储器)以及瞬态计算机机器可读通信媒体(例如,电、光、声或其他形式的传播信号—例如载波、红外信号、数字信号等))来(在内部和/或通过网络与其他电子设备)存储和传达代码和数据。
此外,这样的电子设备典型地包括耦合到一个或多个其他组件(例如,一个或多个存储设备(非瞬态机器可读存储媒体)、用户输入/输出设备(例如键盘、触摸屏和/或显示器)、以及网络连接件)的一组一个或多个处理器。所述一组处理器和其他组件的耦合典型地通过一个或多个总线和桥接器(也称为总线控制器)。存储设备和携带网络流量的信号分别代表一个或多个机器可读存储媒体和机器可读通信媒体。因此,给定电子设备的存储设备典型地存储用于在所述电子设备的所述一组一个或多个处理器上执行的代码和/或数据。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。
用于执行融合加法-加法操作的装置和方法
如以上所提及的,当用向量/SIMD数据工作时,存在减少总指令计数并提高功率效率(特别是对于小核)会是有益的情况。特别地,实现浮点数据类型的融合加法-加法操作的指令允许减少总指令数量并减少工作负载功率要求。
图12-15展示了在512位向量/SIMD操作数上的融合加法-加法操作的实施例,每个操作数作为包含单精度浮点值的16个单独的32位紧缩数据元素进行操作。然而,应当注意,图12-15中所展示的特定向量和紧缩数据元素大小仅用于说明的目的。本发明的基本原理可以使用任何向量或紧缩数据元素大小来实现。参考图12-15,源1和源2操作数(分别为1205-1505和1201-1501)可以是SIMD紧缩数据寄存器,并且源3操作数1203-1503可以是存储器中的SIMD紧缩数据寄存器或位置。响应于融合加法-加法操作,根据向量格式来设置舍入控制。在本文所描述的实施例中,可以根据图8A的A类指令模板(包括无存储器访问舍入式操作810)或图8B的B类指令模板(包括无存储器访问写掩码控制部分舍入控制式操作812)来设置舍入控制。
如图12所示,占据源2操作数的最低有效32位的初始紧缩数据元素(例如,1201中具有值7的紧缩数据元素)被添加到来自源3操作数的对应紧缩数据元素(例如,1203中具有值15的紧缩数据元素),生成第一结果数据元素。第一结果数据元素进行舍入并添加到源1/目的地操作数的对应紧缩数据元素(例如,1205中具有值8的紧缩数据元素),生成第二结果数据元素。第二结果数据元素进行舍入并写回到源1/目的地操作数1207的相同紧缩数据元素位置(例如,具有值-16的紧缩数据元素1215)。在一个实施例中,用操作/指令对立即数字节值进行编码,其中立即数的最低有效3位1209各自包含一或零,为每个操作数的相应紧缩数据元素中的每一者分配正或负值用于融合加法-加法操作。立即数字节的立即数位[7:3]1211对源3的存储器中的寄存器或位置进行编码。对于对应的源操作数的每个相应的紧缩数据元素重复融合加法-加法操作,其中每个源操作数包括多个紧缩数据元素(例如,对于一组对应的操作数,每个操作数具有16个紧缩数据元素,具有512位的向量操作数长度,其中每个紧缩数据元素为32位宽)。
另一实施例涉及四个紧缩数据操作数。类似于图12,图13展示了占用源2操作数1301的最低有效32位的初始紧缩数据元素。初始紧缩数据元素被添加到来自源3操作数1303的对应紧缩数据元素,生成第一结果数据元素。第一结果数据元素进行舍入并且被添加到源1操作数1305的对应紧缩数据元素,产生第二结果数据元素。与图12相反,第二结果数据元素在进行舍入后被写到第四紧缩数据操作数、目的地操作数1307的对应紧缩数据元素(例如,具有值-16的紧缩数据元素1315)中。在一个实施例中,用操作/指令对立即数字节值进行编码,其中最低有效3位1309各自包含一或零,为每个操作数的紧缩数据元素中的每一者分别分配正或负值用于融合加法-加法操作。立即数字节的立即数位[7:3]1311对源3的存储器中的寄存器或位置进行编码。对于对应的源操作数的每个相应的紧缩数据元素重复融合加法-加法操作,其中每个源操作数包括多个紧缩数据元素(例如,对于一组对应的操作数,每个操作数具有16个紧缩数据元素,具有512位的向量操作数长度,其中每个紧缩数据元素为32位宽)。
图14展示了包括添加了具有32位紧缩数据元素宽度的写掩码寄存器K11419的替代实施例。写掩码寄存器K1的低16位包括一和零的混合。写掩模寄存器K1中的低16位位置各自对应于紧缩数据元素位置之一。对于源1/目的地操作数1407中的每个紧缩数据元素位置,写掩码寄存器K1中的对应位控制是否将操作的结果写到目的地。例如,如果写掩码是0,则操作的结果不被写入目的地紧缩数据元素位置(例如,具有值6的紧缩数据元素1421);如果写掩码是1,则操作的结果被写入目的地紧缩数据元素位置(例如,具有值-16的紧缩数据元素1415)。
在另一实施例中,如图15所示,源1/目的地操作数1405被替换为附加源操作数、源1操作数1505(例如,对于具有四个紧缩数据操作数的实施例)。在这些实施例中,目的地操作数1507包含来自紧缩数据元素位置中的掩码寄存器K1的对应位位置为零的那些紧缩数据元素位置(例如,具有值6的紧缩数据元素1521)中操作之前的源1操作数的内容,并且包含紧缩数据元素位置中的掩码寄存器K1的对应位位置为1的那些紧缩数据元素位置(例如,具有值-16的紧缩数据元素1515)的操作结果。
根据上述融合加法-加法指令的实施例,操作数可以参照图12-15和图9A进行如下编码。目的地操作数1207-1507(也是图12和图14中的源1/目的地操作数)是紧缩数据寄存器并且在Reg字段944中进行编码。源2操作数1201-1501是紧缩数据寄存器并且在VVVV字段920中进行编码。在一个实施例中,源3操作数1203-1503为紧缩数据寄存器,并且在另一实施例中,其为32位浮点紧缩数据存储器位置。源3操作数可以在立即数字段872中或在R/M字段946中进行编码。
图16是流程图,展示了根据一个实施例的在执行融合加法-加法操作期间由处理器遵循的示例性步骤。所述方法可以在上述架构的上下文中实现,但不限于任何特定架构。在步骤1601处,解码单元(例如,解码单元140)接收指令并且对指令进行解码以确定要执行融合加法-加法操作。所述指令可以指定三个或四个源紧缩数据操作数的集合,每个源紧缩数据操作数具有N个紧缩数据元素的数组。根据具有立即数字节的位位置中的对应值(例如,源3操作数内的立即数字节中的最低有效3位,每位包含一或零,为每个操作数的紧缩数据元素中的每一者分别分配正或负值用于融合加法-加法操作),紧缩数据操作数的每一者中的每个紧缩数据元素的值为正或负。
在步骤1603处,解码单元140访问寄存器(例如物理寄存器堆单元158中的寄存器)或存储器(例如存储器单元170)内的位置。可以根据指令中指定的寄存器地址访问物理寄存器堆单元158中的寄存器或存储器单元170中的存储器位置。例如,融合加法-加法操作可以包括SRC1、SRC2、SRC3和DEST寄存器地址,其中SRC1是第一源寄存器的地址,SRC2是第二源寄存器的地址,并且SRC3是第三源寄存器的地址。DEST是存储了结果数据的目的地址寄存器的地址。在一些实施方式中,用SRC1标记的存储位置还用于存储所述结果,并且被称为SRC1/DEST。在一些实施方式中,SRC1、SRC2、SRC3和DEST的任一者或全部都定义了处理器的可寻址存储器空间中的存储器位置。例如,SRC3可以标识存储器单元170中的存储器位置,而SRC2和SRC1/DEST在物理寄存器堆单元158中分别标识第一和第二寄存器。为了简化本文的描述,将描述关于访问物理寄存器堆的实施例。然而,可以将这些访问改为存储器。
在步骤1605处,执行单元(例如,执行引擎单元150)能够对所访问的数据执行融合加法-加法操作。根据融合加法-加法操作,源2操作数的初始紧缩数据元素被添加到来自源3操作数的对应紧缩数据元素,生成第一结果数据元素。第一结果数据元素进行舍入并且被添加到源1/目的地操作数的对应紧缩数据元素,产生第二结果数据元素。第二结果数据元素进行舍入并写回到源1/目的地操作数的相同紧缩数据元素位置。对于涉及四个紧缩数据操作数的实施例,第二结果数据元素在进行舍入后被写到第四紧缩数据操作数、目的地操作数的对应紧缩数据元素中。在一个实施例中,在源3操作数中对立即数字节值进行编码,其中最低有效3位各自包含一或零,为每个操作数的相应紧缩数据元素中的每一者分配正或负值用于融合加法-加法操作。立即数位[7:3]对源3的存储器中的寄存器进行编码。
对于包括写掩码寄存器的实施例,源1/目的地操作数中的每个紧缩数据元素位置根据写掩码寄存器中的相应位位置是零还是一而分别包含源1/目的地中的紧缩数据元素位置的内容或操作的结果。对于对应源操作数的每个相应紧缩数据元素重复融合加法-加法操作,其中每个源操作数包括多个紧缩数据元素。根据指令的要求,源1/目的地操作数或目的地操作数可以在存储了融合加法-加法操作的结果的物理寄存器堆单元158中指定寄存器。在步骤1607处,根据指令的要求,可以将融合加法-加法操作的结果存储回物理寄存器堆单元158或存储器单元170中的位置。
图17展示了用于实现融合加法-加法操作的示例性数据流。在一个实施例中,处理单元1701的执行单元1705是融合加法-加法单元1705,并且耦合到物理寄存器堆单元1703以从相应源寄存器接收源操作数。在一个实施例中,融合加法-加法单元可操作用于对存储在由第一、第二和第三源操作数指定的寄存器中的紧缩数据元执行融合加法-加法操作。
融合加法-加法单元进一步包括用于在来自源操作数中的每一者的紧缩数据元素上操作的(多个)子电路(即,算术逻辑单元)。每个子电路将来自源2操作数(1201-1501)的一个紧缩数据元素添加到源3操作数(1203-1503)的对应紧缩数据元素,生成第一结果数据元素。根据具有三个或四个源操作数的指令,第一结果数据元素相应地进行舍入并添加到源1/目的地操作数或源1操作数(1205-1505)的对应紧缩数据元素,生成第二结果数据元素。第二结果数据元素进行舍入并写回到源1/目的地操作数或目的地操作数(1207-1507)的对应紧缩数据元素位置。在完成操作之后,例如,在回写或引退阶段,源1/目的地操作数或目的地操作数中的结果可以被写回到物理寄存器堆单元1703。
图18展示了用于实现融合加法-加法操作的替代性数据流。类似于图17,处理单元1801的执行单元1807是融合加法-加法单元1807,并且可操作用于对存储在由第一、第二和第三源操作数指定的寄存器中的紧缩数据元执行融合加法-加法操作。在一个实施例中,调度器1805耦合到物理寄存器堆单元1803以从相应源寄存器接收源操作数,并且调度器耦合到融合加法-加法单元1807。调度器1805从物理寄存器堆单元1803中的相应源寄存器接收源操作数,并且将源操作数分派到融合加法-加法单元1807,以执行融合加法-加法操作。
在一个实施例中,如果不存在两个融合加法-加法单元和两个可用于执行单个融合加法-加法指令的子电路,则调度器1805将所述指令分派给融合加法-加法单元两次,而不分派第二指令,直到第一指令完成(即,调度器1805分派融合加法-加法指令并且等待将来自源2操作数(1201-1501)的一个紧缩数据元素添加到源3操作数(1203-1503)的对应紧缩数据元素,生成第一结果数据元素;调度器然后第二次分派融合加法-加法指令,并且根据具有三个或四个源操作数的指令,第一结果数据元素相应地进行舍入并添加到源1/目的地操作数或源1操作数(1205-1505)的对应紧缩数据元素,生成第二结果数据元素。第二结果数据元素进行舍入并写回到源1/目的地操作数或目的地操作数(1207-1507)的对应紧缩数据元素位置。在完成操作之后,例如,在回写或引退阶段,源1/目的地操作数或目的地操作数中的结果可以被写回到物理寄存器堆单元1803。
图19展示了用于实现融合加法-加法操作的另一替代性数据流。类似于图18,处理单元1901的执行单元1907是融合加法-加法单元1907,并且可操作用于对存储在由第一、第二和第三源操作数指定的寄存器中的紧缩数据元执行融合加法-加法操作。在一个实施例中,物理寄存器堆单元1903耦合到附加执行单元,所述附加执行单元也是融合加法-加法单元1905(也可操作用于对存储在由第一、第二和第三源操作数指定的寄存器中的紧缩数据元素执行融合加法-加法操作),并且两个融合加法-加法单元是串联的(即,融合加法-加法单元1905的输出耦合到融合加法-加法单元1907的输入)。
在一个实施例中,第一融合加法-加法单元(即,融合加法-加法单元1905)执行将来自源2操作数(1201-1501)的一个紧缩数据元素与源3操作数(1203-1503)的对应紧缩数据元素相加,生成第一结果数据元素。在一个实施例中,在第一结果数据元素进行舍入之后,第二融合加法-加法单元(即,融合加法-加法单元1907)根据具有三个或四个源操作数的指令而执行将第一结果数据元素与源1/目的地操作数或源1操作数(1205-1505)的对应紧缩数据元素相加,生成第二结果数据元素。第二结果数据元素进行舍入并写回到源1/目的地操作数或目的地操作数(1207-1507)的对应紧缩数据元素位置。在完成操作之后,例如,在回写或引退阶段,源1/目的地操作数或目的地操作数中的结果可以被写回到物理寄存器堆单元1903。
在本文整个详细描述中,出于解释的目的,阐述了许多具体的细节以便提供对本发明的彻底理解。然而,对于本领域技术人员而言,可以在不具有这些具体细节中的一些细节的情况下实践本发明将是明显的。在某些情况下,为了避免模糊本发明的主题,未详细描述公知的结构和功能。因此,本发明的范围和精神应根据以下权利要求来判定。
Claims (26)
1.一种处理器,包括:
第一源寄存器,所述第一源寄存器用于存储包括第一多个紧缩数据元素的第一操作数;
第二源寄存器,所述第二源寄存器用于存储包括第二多个紧缩数据元素的第二操作数;
第三源寄存器,所述第三源寄存器用于存储包括第三多个紧缩数据元素的第三操作数;以及
融合加法-加法电路系统,所述融合加法-加法电路系统用于根据立即数值内的位位置中的对应值将所述多个紧缩数据元素解释为正或负,从而超控所述多个紧缩数据元素的现有符号位,所述融合加法-加法电路系统用于将所述第一多个紧缩数据元素中的对应数据元素添加到包括所述第二多个紧缩数据元素和所述第三多个紧缩数据元素的对应数据元素之和的第一结果数据元素以生成第二结果数据元素,所述融合加法-加法电路系统用于将所述第二结果数据元素存储在目的地中,其中,每个紧缩数据元素具有浮点数据类型。
2.如权利要求1所述的处理器,其特征在于,所述融合加法-加法电路系统包括:解码单元,所述解码单元用于对融合加法-加法指令进行解码;以及执行单元,所述执行单元用于执行所述融合加法-加法指令。
3.如权利要求2所述的处理器,其特征在于,所述解码单元用于将单个融合加法-加法指令解码为会由所述执行单元执行的多个微操作。
4.如权利要求3所述的处理器,其特征在于,具有多个子电路的所述执行单元用于使用所述微操作来根据立即数值内的位位置中的对应值将所述多个紧缩数据元素解释为正或负,将所述第一多个紧缩数据元素中的对应数据元素添加到包括所述第二多个紧缩数据元素和所述第三多个紧缩数据元素中的对应数据元素之和的第一结果数据元素从而生成第二结果数据元素,以及将所述第二结果数据元素存储在目的地中。
5.如权利要求1所述的处理器,其特征在于,所述第一操作数和所述目的地是存储所述第二结果数据元素的单个寄存器。
6.如权利要求1所述的处理器,其特征在于,所述第二结果数据元素基于所述处理器的写掩码寄存器的值被写入所述目的地。
7.如权利要求1所述的处理器,其特征在于,为了将所述多个紧缩数据元素解释为正或负,所述融合加法-加法电路系统用于读取与所述第一多个紧缩数据元素相对应的所述立即数值的第一位位置中的位值以判定所述第一多个紧缩数据元素为正还是为负,用于读取与所述第二多个紧缩数据元素相对应的所述立即数值的第二位位置中的位值以判定所述第二多个紧缩数据元素为正还是为负,并且用于读取与所述第三多个紧缩数据元素相对应的所述立即数值的第三位位置中的位值以判定所述第三多个紧缩数据元素为正还是为负。
8.如权利要求7所述的处理器,其特征在于,所述融合加法-加法电路系统进一步用于读取除了所述第一、第二和第三位位置中的所述位之外的一个或多个位的集合,以确定所述操作数中的至少一个操作数的寄存器或存储器位置。
9.一种用于数据处理的方法,包括:
将包括第一多个紧缩数据元素的第一操作数存储在第一源寄存器中;
将包括第二多个紧缩数据元素的第二操作数存储在第二源寄存器中;
将包括第三多个紧缩数据元素的第三操作数存储在第三源寄存器中;
根据指令的立即数值内的位位置中的对应值将所述多个紧缩数据元素解释为正或负,从而超控所述多个紧缩数据元素的现有符号位;以及
将所述第一多个紧缩数据元素中的对应数据元素添加到包括所述第二多个紧缩数据元素和所述第三多个紧缩数据元素的对应数据元素之和的第一结果数据元素从而生成第二结果数据元素,并且将所述第二结果数据元素存储在目的地中,其中,每个紧缩数据元素具有浮点数据类型。
10.如权利要求9所述的方法,进一步包括:
由处理器中的解码器对指定所述第一源寄存器、所述第二源寄存器和所述第三源寄存器的所述指令进行解码;以及
通过根据所述立即数值内的位位置中的所述对应值将所述多个紧缩数据元素解释为正或负来由所述处理器中的执行单元执行所述指令。
11.如权利要求10所述的方法,其特征在于,所述解码器用于将单个指令解码为会由所述执行单元执行的多个微操作。
12.如权利要求11所述的方法,进一步包括:
由具有多个子电路的所述执行单元使用所述微操作来根据立即数值内的位位置中的对应值将所述多个紧缩数据元素解释为正或负,将所述第一多个紧缩数据元素中的对应数据元素添加到包括所述第二多个紧缩数据元素和所述第三多个紧缩数据元素的对应数据元素之和的第一结果数据元素从而生成第二结果数据元素,以及将所述第二结果数据元素存储在目的地中。
13.如权利要求9所述的方法,其特征在于,所述第一操作数和所述目的地是存储所述第二结果数据元素的单个寄存器。
14.如权利要求9所述的方法,其特征在于,所述第二结果数据元素基于处理器的写掩码寄存器的值被写入所述目的地。
15.如权利要求9所述的方法,进一步包括:
通过融合加法-加法电路系统读取与所述第一多个紧缩数据元素相对应的所述立即数值的第一位位置中的位值以判定所述第一多个紧缩数据元素为正还是为负,读取与所述第二多个紧缩数据元素相对应的所述立即数值的第二位位置中的位值以判定所述第二多个紧缩数据元素为正还是为负,并且读取与所述第三多个紧缩数据元素相对应的所述立即数值的第三位位置中的位值以判定所述第三多个紧缩数据元素为正还是为负,来将所述多个紧缩数据元素解释为正或负。
16.如权利要求15所述的方法,进一步包括:
由所述融合加法-加法电路系统读取除了所述第一、第二和第三位位置中的所述位之外的一个或多个位的集合,以确定所述操作数中的至少一个操作数的寄存器或存储器位置。
17.一种用于数据处理的系统,包括:
存储器单元,所述存储器单元耦合到被配置为用于存储第一多个紧缩数据元素的第一存储位置;以及
处理器,所述处理器耦合到所述存储器单元,所述处理器包括:
寄存器堆单元,所述寄存器堆单元被配置为用于存储多个紧缩数据操作数,所述寄存器堆单元包括用于存储包括第一多个紧缩数据元素的第一操作数的第一源寄存器、用于存储包括第二多个紧缩数据元素的第二操作数的第二源寄存器、以及用于存储包括第三多个紧缩数据元素的第三操作数的第三源寄存器;
融合加法-加法电路系统,所述融合加法-加法电路系统用于根据立即数值内的位位置中的对应值将所述多个紧缩数据元素解释为正或负,从而超控所述多个紧缩数据元素的现有符号位,所述融合加法-加法电路系统用于将所述第一多个紧缩数据元素中的对应数据元素添加到包括所述第二多个紧缩数据元素和所述第三多个紧缩数据元素的对应数据元素之和的第一结果数据元素以生成第二结果数据元素,所述融合加法-加法电路系统用于将所述第二结果数据元素存储在目的地中,其中,每个紧缩数据元素具有浮点数据类型。
18.如权利要求17所述的系统,其特征在于,所述融合加法-加法电路系统包括:解码单元,所述解码单元用于对融合加法-加法指令进行解码;以及执行单元,所述执行单元用于执行所述融合加法-加法指令。
19.如权利要求18所述的系统,其特征在于,所述解码单元用于将单个融合加法-加法指令解码为会由所述执行单元执行的多个微操作。
20.如权利要求19所述的系统,其特征在于,具有多个子电路的所述执行单元用于使用所述微操作来根据立即数值内的位位置中的对应值将所述多个紧缩数据元素解释为正或负,将所述第一多个紧缩数据元素中的对应数据元素添加到包括所述第二多个紧缩数据元素和所述第三多个紧缩数据元素的对应数据元素之和的第一结果数据元素从而生成第二结果数据元素,以及将所述第二结果数据元素存储在目的地中。
21.如权利要求17所述的系统,其特征在于,所述第一操作数和所述目的地是存储所述第二结果数据元素的单个寄存器。
22.如权利要求17所述的系统,其特征在于,所述第二结果数据元素基于所述处理器的写掩码寄存器的值被写入所述目的地。
23.如权利要求17所述的系统,其特征在于,为了将所述多个紧缩数据元素解释为正或负,所述融合加法-加法电路系统用于读取与所述第一多个紧缩数据元素相对应的所述立即数值的第一位位置中的位值以判定所述第一多个紧缩数据元素为正还是为负,用于读取与所述第二多个紧缩数据元素相对应的所述立即数值的第二位位置中的位值以判定所述第二多个紧缩数据元素为正还是为负,并且用于读取与所述第三多个紧缩数据元素相对应的所述立即数值的第三位位置中的位值以判定所述第三多个紧缩数据元素为正还是为负。
24.如权利要求23所述的系统,其特征在于,所述融合加法-加法电路系统进一步用于读取除了所述第一、第二和第三位位置中的所述位之外的一个或多个位的集合,以确定所述操作数中的至少一个操作数的寄存器或存储器位置。
25.一种机器可读存储介质,所述机器可读存储介质包括代码,所述代码在被执行时使机器执行如权利要求9-16中的任一项所述的方法。
26.一种用于数据处理的设备,包括用于执行如权利要求9-16中的任一项所述的方法的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/583,050 US20160188341A1 (en) | 2014-12-24 | 2014-12-24 | Apparatus and method for fused add-add instructions |
US14/583,050 | 2014-12-24 | ||
PCT/US2015/062323 WO2016105804A1 (en) | 2014-12-24 | 2015-11-24 | Apparatus and method for fused add-add instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107003841A CN107003841A (zh) | 2017-08-01 |
CN107003841B true CN107003841B (zh) | 2021-11-23 |
Family
ID=56151346
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580063772.2A Active CN107003841B (zh) | 2014-12-24 | 2015-11-24 | 用于融合加法-加法指令的装置和方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20160188341A1 (zh) |
EP (1) | EP3238033A4 (zh) |
JP (1) | JP2018506762A (zh) |
KR (1) | KR20170099859A (zh) |
CN (1) | CN107003841B (zh) |
TW (1) | TW201643696A (zh) |
WO (1) | WO2016105804A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10262721B2 (en) | 2016-03-10 | 2019-04-16 | Micron Technology, Inc. | Apparatuses and methods for cache invalidate |
US10459726B2 (en) * | 2017-11-27 | 2019-10-29 | Advanced Micro Devices, Inc. | System and method for store fusion |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102103486A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 用于将三个源操作数相加的加法指令 |
US8626813B1 (en) * | 2013-08-12 | 2014-01-07 | Board Of Regents, The University Of Texas System | Dual-path fused floating-point two-term dot product unit |
CN103999037A (zh) * | 2011-12-23 | 2014-08-20 | 英特尔公司 | 用于响应于单个指令来执行横向相加或相减的系统、装置和方法 |
CN104137053A (zh) * | 2011-12-23 | 2014-11-05 | 英特尔公司 | 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6230257B1 (en) * | 1998-03-31 | 2001-05-08 | Intel Corporation | Method and apparatus for staggering execution of a single packed data instruction using the same circuit |
US6243803B1 (en) * | 1998-03-31 | 2001-06-05 | Intel Corporation | Method and apparatus for computing a packed absolute differences with plurality of sign bits using SIMD add circuitry |
US7539714B2 (en) * | 2003-06-30 | 2009-05-26 | Intel Corporation | Method, apparatus, and instruction for performing a sign operation that multiplies |
US7853634B2 (en) * | 2003-12-29 | 2010-12-14 | Xilinx, Inc. | Digital signal processing circuit having a SIMD circuit |
US8239439B2 (en) * | 2007-12-13 | 2012-08-07 | International Business Machines Corporation | Method and apparatus implementing a minimal area consumption multiple addend floating point summation function in a vector microprocessor |
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 |
US8909690B2 (en) * | 2011-12-13 | 2014-12-09 | International Business Machines Corporation | Performing arithmetic operations using both large and small floating point values |
DE112014006508T5 (de) * | 2014-03-26 | 2017-01-05 | Intel Corporation | Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden |
-
2014
- 2014-12-24 US US14/583,050 patent/US20160188341A1/en not_active Abandoned
-
2015
- 2015-11-20 TW TW104138531A patent/TW201643696A/zh unknown
- 2015-11-24 EP EP15874009.2A patent/EP3238033A4/en not_active Withdrawn
- 2015-11-24 KR KR1020177014065A patent/KR20170099859A/ko unknown
- 2015-11-24 CN CN201580063772.2A patent/CN107003841B/zh active Active
- 2015-11-24 JP JP2017527794A patent/JP2018506762A/ja active Pending
- 2015-11-24 WO PCT/US2015/062323 patent/WO2016105804A1/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102103486A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 用于将三个源操作数相加的加法指令 |
CN103999037A (zh) * | 2011-12-23 | 2014-08-20 | 英特尔公司 | 用于响应于单个指令来执行横向相加或相减的系统、装置和方法 |
CN104137053A (zh) * | 2011-12-23 | 2014-11-05 | 英特尔公司 | 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法 |
US8626813B1 (en) * | 2013-08-12 | 2014-01-07 | Board Of Regents, The University Of Texas System | Dual-path fused floating-point two-term dot product unit |
Also Published As
Publication number | Publication date |
---|---|
CN107003841A (zh) | 2017-08-01 |
KR20170099859A (ko) | 2017-09-01 |
US20160188341A1 (en) | 2016-06-30 |
JP2018506762A (ja) | 2018-03-08 |
TW201643696A (zh) | 2016-12-16 |
WO2016105804A1 (en) | 2016-06-30 |
EP3238033A4 (en) | 2018-07-11 |
EP3238033A1 (en) | 2017-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230137812A1 (en) | Coalescing adjacent gather/scatter operations | |
CN107741861B (zh) | 用于混洗浮点或整数值的装置和方法 | |
US20140108480A1 (en) | Apparatus and method for vector compute and accumulate | |
US9348592B2 (en) | Apparatus and method for sliding window data access | |
CN104081340B (zh) | 用于数据类型的下转换的装置和方法 | |
CN108519921B (zh) | 用于从通用寄存器向向量寄存器进行广播的装置和方法 | |
US20140089634A1 (en) | Apparatus and method for detecting identical elements within a vector register | |
KR102462174B1 (ko) | 벡터 비트 셔플을 수행하기 위한 방법 및 장치 | |
CN106030514B (zh) | 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法 | |
CN109313553B (zh) | 用于跨步加载的系统、装置和方法 | |
US20140208065A1 (en) | Apparatus and method for mask register expand operation | |
CN107003848B (zh) | 用于融合乘法-乘法指令的装置和方法 | |
US9495162B2 (en) | Apparatus and method for performing a permute operation | |
US20130332701A1 (en) | Apparatus and method for selecting elements of a vector computation | |
CN107077333B (zh) | 用于实行向量位聚集的方法和装置 | |
CN107003841B (zh) | 用于融合加法-加法指令的装置和方法 | |
US20170235516A1 (en) | Apparatus and method for shuffling floating point or integer values | |
EP3394733A1 (en) | Apparatus and method for retrieving elements from a linked structure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |