CN107003854A - 提供向量包装元组交叉比较功能的方法、装置、指令和逻辑 - Google Patents
提供向量包装元组交叉比较功能的方法、装置、指令和逻辑 Download PDFInfo
- Publication number
- CN107003854A CN107003854A CN201580065014.4A CN201580065014A CN107003854A CN 107003854 A CN107003854 A CN 107003854A CN 201580065014 A CN201580065014 A CN 201580065014A CN 107003854 A CN107003854 A CN 107003854A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data
- processor
- register
- data field
- 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.)
- Granted
Links
- 239000013598 vector Substances 0.000 title claims abstract description 340
- 238000004806 packaging method and process Methods 0.000 title claims abstract description 138
- 238000000034 method Methods 0.000 title claims description 110
- 230000000052 comparative effect Effects 0.000 claims abstract description 20
- 238000012545 processing Methods 0.000 claims description 49
- 230000005055 memory storage Effects 0.000 claims description 21
- 230000004044 response Effects 0.000 claims description 10
- 230000008569 process Effects 0.000 description 90
- 230000006870 function Effects 0.000 description 78
- 238000003860 storage Methods 0.000 description 64
- 238000010586 diagram Methods 0.000 description 23
- 238000005516 engineering process Methods 0.000 description 22
- 238000006073 displacement reaction Methods 0.000 description 21
- 238000004519 manufacturing process Methods 0.000 description 14
- 238000013461 design Methods 0.000 description 12
- 230000008878 coupling Effects 0.000 description 10
- 238000010168 coupling process Methods 0.000 description 10
- 238000005859 coupling reaction Methods 0.000 description 10
- 238000007667 floating Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 238000001514 detection method Methods 0.000 description 9
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 8
- 238000012856 packing Methods 0.000 description 8
- 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 6
- 238000004364 calculation method Methods 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 238000013500 data storage Methods 0.000 description 6
- 238000009826 distribution Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 239000000284 extract Substances 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 3
- 235000013399 edible fruits Nutrition 0.000 description 3
- 230000005611 electricity Effects 0.000 description 3
- 238000000605 extraction Methods 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 229910052754 neon Inorganic materials 0.000 description 2
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 238000011282 treatment Methods 0.000 description 2
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 102000001332 SRC Human genes 0.000 description 1
- 108060006706 SRC Proteins 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 238000009412 basement excavation Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000013604 expression vector Substances 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000004907 flux Effects 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/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/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/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Abstract
指令和逻辑提供SIMD向量包装元组交叉比较功能。一些处理器实施例包括具有可变的多个数据字段的第一和第二寄存器,数据字段中的每个用以存储第一数据类型的元素。在一些实施例中,处理器执行用于向量包装元组交叉比较的SIMD指令,其对于第一寄存器的元组中的数据字段的一部分的每个数据字段而言,将其对应元素与第二寄存器的元组中的数据字段的对应部分的每个元素相比较,并且根据对应比较,在与对应第一寄存器部分的未掩蔽元素相对应的位掩码中,设置与第二寄存器部分的元素相对应的掩码位。在一些实施例中,位掩码被移位第三寄存器的数据字段中的对应元素。比较类型由立即数操作数来指示。
Description
相关申请的交叉引用
本申请涉及:在2010年12月21日提交的申请序列号12/974,157,题为“Mechanism forConflict Detection Using SIMD”的申请;在2010年12月22日提交的申请序列号12/976,616,题为“Vector Conflict Intructions”的申请;和2012年12月29日提交的申请序列号13/731,006,题为“Method, Apparatus, Instructions and Logic to Provide VectorAddress Conflict Detection Functionality”的申请。
技术领域
本公开属于处理逻辑、微处理器、和相关联的指令集架构的领域,所述相关联的指令集架构在被处理器或者其他处理逻辑执行时执行逻辑、数学或者其他功能操作。特别地,本公开涉及用以提供单指令多数据(SIMD)向量包装元组交叉比较功能的处理器指令和逻辑。
背景技术
现代处理器通常包括用以提供操作的指令,所述操作是计算密集型的,但是提供了高水平数据并行化,其可通过使用诸如例如SIMD向量寄存器之类的各种数据存储设备的有效实现方式来利用。在SIMD执行时,单个指令对多个数据元素并发地或者同时地进行操作。这典型地通过以下来实现:扩展诸如寄存器和算术逻辑单元(ALU)之类的各种资源的宽度,从而允许它们分别保持多个数据元素或对多个数据元素进行操作。
中央处理器单元(CPU)可以提供这样的并行硬件,以支持对向量的SIMD处理。向量是持有一定数量的连续数据元素的数据结构。大小为L的向量寄存器包含大小为M的N个向量元素,其中N=L/M。例如,64字节向量寄存器可以被分成(a)64个向量元素,其中每个元素持有占据1字节的数据项,(b)32个向量元素,用以各自持有占据2字节(或者一个“字”)的数据项,(c)16个向量元素,用以各自持有占据4字节(或者一个“双字”)的数据项,或者(d)8个向量元素,用以各自持有占据8字节(或者一个“四倍字”)的数据项。
多种应用具有大量的数据级并行化,并且可以能够得益于SIMD支持。然而,一些应用将操作时的大量时间花费在一组稀疏位置上。而且,有时,对相同的稀疏位置执行顺序操作,并且因此,这些应用可能仅看到来自SIMD操作的有限益处。为了保持SIMD有效性,一些架构不仅允许SIMD算术操作,而且也允许SIMD存储器读取和写入(通过收集和分散操作)。分散缩减(scatter reduction)是许多应用中的常见操作。例如,散加(scatter-add)操作可以用于根据索引的分布(其可能通常是随机的),使得第一阵列的多个值能够被缩减到(即,加到)第二阵列的所选元素中。但是因为这一点,可能难以有效地并发处理多个元素(即,在SIMD模式中)。一种顾虑在于,在必要时确保标量程序次序被保留。另一种顾虑在于,确保当数据被分散到存储器中时,所得到的存储地址向量仅包括唯一地址(即,不存在重复地址)。
例如,直方图计算在许多图像处理应用中是常见操作。直方图可以用来跟踪图像中的像素的颜色值的分布。然而,对直方图阵列的更新可能取决于对阵列的输入数据而是随机的。特别地,相邻元素的索引可以指向相同的直方图面元(histogram bin)。因此,需要冲突检测和解决来检测对相同位置的多个相关性更新,并且确保保留了标量程序次序。这正好是可能使得非常难以并发或同时处理多个数据(即,使用SIMD操作)的那种状况。
至今,对于这样的冲突顾虑和相关处理困难的潜在解决方案还没有被足够地探索。
附图说明
作为示例而不是限制在所附附图的各图中图示本发明。
图1A是执行用以提供SIMD向量包装元组交叉比较功能的指令的系统的一个实施例的方框图。
图1B是执行用以提供SIMD向量包装元组交叉比较功能的指令的系统的另一个实施例的方框图。
图1C是执行用以提供SIMD向量包装元组交叉比较功能的指令的系统的另一个实施例的方框图。
图2是执行用以提供SIMD向量包装元组交叉比较功能的指令的处理器的一个实施例的方框图。
图3A图示了根据一个实施例的包装数据类型。
图3B图示了根据一个实施例的包装数据类型。
图3C图示了根据一个实施例的包装数据类型。
图3D图示了根据一个实施例的编码为提供SIMD向量包装元组交叉比较功能的指令。
图3E图示了根据另一个实施例的编码为提供SIMD向量包装元组交叉比较功能的指令。
图3F图示了根据另一个实施例的编码为提供SIMD向量包装元组交叉比较功能的指令。
图3G图示了根据另一个实施例的编码为提供SIMD向量包装元组交叉比较功能的指令。
图3H图示了根据另一个实施例的编码为提供SIMD向量包装元组交叉比较功能的指令。
图4A图示了用以执行提供SIMD向量包装元组交叉比较功能的指令的处理器微架构的一个实施例的元素。
图4B图示了用以执行提供SIMD向量包装元组交叉比较功能的指令的处理器微架构的另一个实施例的元素。
图5是用以执行提供SIMD向量包装元组交叉比较功能的指令的处理器的一个实施例的方框图。
图6是用以执行提供SIMD向量包装元组交叉比较功能的指令的计算机系统的一个实施例的方框图。
图7是用以执行提供SIMD向量包装元组交叉比较功能的指令的计算机系统的另一个实施例的方框图。
图8是用以执行提供SIMD向量包装元组交叉比较功能的指令的计算机系统的另一个实施例的方框图。
图9是用以执行提供SIMD向量包装元组交叉比较功能的指令的片上系统的一个实施例的方框图。
图10是用以执行提供SIMD向量包装元组交叉比较功能的指令的处理器的一个实施例的方框图。
图11是提供SIMD向量包装元组交叉比较功能的IP核开发系统的一个实施例的方框图。
图12图示了提供SIMD向量包装元组交叉比较功能的架构模拟系统的一个实施例。
图13图示了用以转译提供SIMD向量包装元组交叉比较功能的指令的系统的实施例。
图14A图示了用以使用SIMD向量前导零计数指令以用于生成用于有效向量地址冲突解决的置换控制的示例的一个实施例的流程图。
图14B图示了用以使用SIMD向量地址冲突掩码以用于有效向量地址冲突解决的示例的一个实施例的流程图。
图15A图示了针对用以执行用以提供SIMD向量包装元组交叉比较功能的指令的处理器中的过程的一个实施例的流程图。
图15B图示了针对用以使用SIMD向量地址冲突掩码以用于有效向量地址冲突解决的过程的一个实施例的流程图。
图16图示了用于执行用以提供SIMD向量前导零计数功能的指令的装置的现有技术实施例,所述SIMD向量前导零计数功能对于生成用于有效向量地址冲突解决的置换控制是有用的。
图17A-17C图示了用以提供SIMD向量包装元组交叉比较功能的指令的一些替代实施例。
图18图示了将指令的结果进行组合以生成用于有效向量地址冲突解决的地址冲突掩码的方法的实施例,所述指令用以提供SIMD向量包装元组交叉比较功能。
图19A图示了用于执行用以提供SIMD向量包装元组交叉比较功能的指令的装置的实施例。
图19B图示了用于执行用以提供SIMD向量包装元组交叉比较功能的指令的装置的替代实施例。
具体实施方式
以下描述公开了用以在处理器、计算机系统或者其他处理装置内或者与处理器、计算机系统或者其他处理装置相关联地提供SIMD向量包装元组交叉比较功能的指令和处理逻辑。指令和逻辑在本文中被公开为提供SIMD向量包装元组交叉比较功能。一些实施例包括具有第一和第二寄存器的处理器,所述第一和第二寄存器具有可变的多个数据字段,数据字段中的每一个用以存储第一数据类型的元素。处理器在一些实施例中执行用于向量包装元组交叉比较的SIMD指令,其对于第一寄存器的元组中的数据字段的一部分中的每个数据字段而言,将其对应元素与第二寄存器的元组中的数据字段的对应部分的每个元素相比较,并且根据对应比较,在与对应第一寄存器部分的每个未掩蔽元素相对应的位掩码(bit-mask)中,设置与第二寄存器部分的每个元素相对应的掩码位(mask bit)。在一些实施例中,包装元组可以各自包括两个、四个或者八个元素。在一些实施例中,位掩码也可以在被存储在目的地寄存器中之前由第三寄存器的数据字段中的对应元素移位。比较类型可以通过由指令指定的立即数操作数(immediate operand)来指示。在一些实施例中,第三寄存器可以是与目的地寄存器相同的寄存器。
当正被比较的元素(例如,索引)与被需要来表示比较结果的掩码(例如,在256位寄存器中的16个16位元素)是相同大小时,则执行用以对所有元素交叉比较的指令可能是适当的。但是当用于比较的元素多于可用于表示比较结果的位时,可能需要替代解决方案。将领会的是,如本文公开的SIMD向量包装元组比较指令可以用作用于可变大小元素和存储器偏移的替代解决方案,以提供SIMD向量地址冲突检测功能和被组合以生成用于有效SIMD地址冲突解决的冲突掩码的结果。还将领会的是,SIMD向量包装元组比较指令可以具有更多的通用可适用性(例如,当各种各样的不同比较操作中的任何一项可能有用时),并且相比于用以对所有元素交叉比较的指令在区域和功率方面需要更低的实现成本。
在以下描述中,诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等等的许多具体细节被阐述,以便提供对本发明的实施例的更透彻的理解。然而,将由本领域技术人员领会的是,本发明可以在没有这样的具体细节的情况下实践。另外,一些众所周知的结构、电路等等尚未被详细示出,以避免不必要地使本发明的实施例晦涩难懂。
虽然参考处理器来描述以下实施例,但是其他实施例可适用于其他类型的集成电路和逻辑设备。本发明的实施例的相似技术和教导可以被应用于可得益于较高流水线吞吐量和改进性能的其他类型的电路或者半导体设备。本发明的实施例的教导可适用于执行数据操纵的任何处理器或者机器。然而,本发明不限于执行512位、256位、128位、64位、32位或者16位数据操作的处理器或者机器,并且可以被应用于执行数据的操纵和管理的任何处理器和机器。另外,以下描述了提供了示例,并且为了图示的目的,附图示出了各种示例。然而,这些示例不应该以限制性意义来解读,因为它们仅意图提供本发明的实施例的示例,而不是提供本发明的实施例的所有可能实施方式的穷尽性列表。
虽然以下示例在执行单元和逻辑电路的情境中描述了指令处理和分布,但是本发明的其他实施例可以借助于存储在机器可读、有形介质上的数据和/或指令来完成,所述数据和/或指令在被机器执行时促使该机器执行与本发明的至少一个实施例一致的功能。在一个实施例中,与本发明的实施例相关联的功能被体现在机器可执行指令中。指令可以用于促使利用指令编程的通用或者专用处理器执行本发明的步骤。本发明的实施例可以被提供为计算机程序产品或软件,该计算机程序产品或软件可以包括具有存储在其上的指令的机器可读介质或计算机可读介质,所述指令可用于对计算机(或者其他电子设备)进行编程以根据本发明的实施例执行一个或者多个操作。可替代地,本发明的实施例的步骤可以由包含用于执行步骤的固定函数逻辑的特定硬件部件来执行,或者由经编程的计算机部件和固定函数硬件部件的任何组合来执行。
用于对逻辑编程以执行本发明的实施例的指令可以被存储在系统的存储器内,该存储器诸如是DRAM、高速缓存、闪速存储器、或者其他存储装置。此外,可以经由网络或者借助于其他计算机可读介质来分布指令。因此,机器可读介质可以包括用于存储或者传输以由机器(例如,计算机)可读的形式的信息的任何机制,但是不限于软盘、光盘、紧凑盘、只读存储器(CD-ROM)、以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电子可擦除可编程只读存储器(EEPROM)、磁卡或者光卡、闪速存储器或者用于通过互联网经由电、光、声、或者其他形式的传播信号(例如,载波、红外信号、数字信号等等)传输信息的有形机器可读存储装置。因此,计算机可读介质包括适用于存储或者传输以由机器(例如,计算机)可读的形式的电子指令或信息的任何类型的有形机器可读介质。
一种设计可以经历从创建到仿真到制造的各种阶段。表示设计的数据可以以多种方式来表示设计。首先,正如在仿真时有用的,硬件可以使用硬件描述语言或者另一功能描述语言来表示。附加地,具有逻辑和/或晶体管门的电路级模型可以在设计过程的一些阶段产生。此外,大多数设计在某个阶段达到表示在硬件模型中的各种设备的物理放置的数据级别。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定各种特征在用于被用来生产集成电路的掩模的掩模层上的存在或者不存在的数据。在设计的任何表示中,可以以任何形式的机器可读介质来存储数据。存储器或者磁性或光学存储装置(诸如盘)可以是用以存储经由光波或者电波传输的信息的机器可读介质,所述光波或者电波被调制或者以其他方式生成以传输这样的信息。当传输指示或承载代码或者设计的电载波时,在执行复制拷贝、缓冲或者重新传输电信号的程度上,新副本被制作。因此,通信提供商或者网络提供商可以在有形机器可读介质上至少临时存储体现本发明的实施例的技术的制品,诸如编码成载波的信息。
在现代处理器中,多个不同的执行单元用于处理和执行各种各样的代码和指令。并不是所有指令都被等同地创建,因为一些指令会更快完成,而其他指令可能会花费多个时钟周期来完成。指令的吞吐量越快,处理器的总体性能就越好。因此,使得许多指令尽可能快地执行将是有利的。然而,存在某些指令,其具有更高复杂度并且在执行时间和处理器资源方面需要更多。例如,存在浮点指令、加载/存储操作、数据移动等等。
随着更多计算机程序用于互联网、文本和多媒体应用中,附加处理器支持已经随时间而引入。在一个实施例,指令集可以与一个或者多个计算机架构相关联,所述计算机架构包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理和外部输入和输出(I/O)。
在一些实施例中,指令集架构(ISA)可由一个或者多个微架构来实现,所述一个或者多个微架构包括用于实现一个或者多个指令集的处理器逻辑和电路。相应地,具有不同微架构的处理器可以共享共用指令集的至少一部分。例如,IntelPentium 4 处理器、Intel CoreTM处理器、和来自加州的Sunnyvale的Advanced Micro Devices, Inc.的处理器实现x86指令集的近乎相同版本(具有已经与较新版本一起添加的一些扩展),但是具有不同的内部设计。相似地,由其他处理器开发公司(诸如ARM股份有限公司、MIPS)或者他们的被许可方或者采纳方设计的处理器可以至少共享共用指令集的一部分,但是可以包括不同的处理器设计。例如,ISA的相同寄存器架构可以使用新的或者众所周知的技术以不同方式实现在不同微架构中,所述技术包括专用物理存储器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)和引退寄存器文件)的一个或者多个动态分配物理寄存器。在一个实施例中,寄存器可以包括一个或者多个寄存器、寄存器架构、寄存器文件或者可以或者可以不被软件程序员可寻址的其他寄存器集合。
在一个实施例中,指令可以包括一个或者多个指令格式。在一个实施例中,指令格式可以指示各种字段(位的数目、位的位置等等)以除了别的以外指定要执行的操作和要对其执行操作的(一个或者多个)操作数等等。一些指令格式可以被进一步由指令模板(或者子格式)分解定义。例如,给定指令格式的指令模板可以被定义为具有指令格式字段的不同子集和/或被定义为具有被不同地解译的给定字段。在一个实施例中,使用指令格式(并且如果被定义的话,则是在该指令格式的指令模板中的给定一个中)来表达指令,并且指定或者指示操作和将对其运行操作的操作数。
科学、金融、自动向量通用、RMS(识别、挖掘、和合成)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)可能要求对大量数据项执行相同操作。在一个实施例中,单指令多数据(SIMD)指代促使处理器对多个数据元素执行操作的指令类型。SIMD技术可以用于如下处理器中:该处理器可以逻辑地将寄存器中的位划分成多个固定大小或者可变大小的数据元素,其中的每个表示单独值。例如,在一个实施例中,在64位寄存器中的位可以被组织为包含四个单独16位数据元素的源操作数,其中的每个表示单独的16位值。这种类型的数据可以被称为“包装”数据类型或者“向量”数据类型,并且这种数据类型的操作数被称为包装数据操作数或者向量操作数。在一个实施例中,包装数据项或者向量可以是被存储在单个寄存器内的包装数据元素的序列,并且包装数据操作数或者向量操作数可以是SIMD指令(或者“包装数据指令”或者“向量指令)的源或目的地操作数。在一个实施例中,SIMD指令指定了单个向量操作,要对两个源向量操作数执行该单个向量操作,以生成具有相同或者不同大小的目的地向量操作数(也被称为结果向量操作数),其具有相同或者不同数目的数据元素,并且处于相同或者不同的数据元素次序。
诸如由具有包括x86、MMXTM、流传输SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令在内的指令集的IntelCoreTM处理器、ARM处理器(诸如具有包括向量浮点(VFP)和/或NEON指令在内的指令集的ARMCortex族处理器)和MIPS处理器(诸如由中国科学院计算技术所(ICT)开发的Loongson族处理器)所采用的那些SIMD技术已经使得能够实现在应用性能方面的显著改进(CoreTM和MMXTM是注册商标或者加州的Santa Clara的Intel公司的商标)。
在一个实施例中,目的地和源寄存器/数据是用以表示对应数据或者操作的源和目的地的通用术语。在一些实施例中,它们可以由具有除了所描述的那些内容外的名称或者功能的寄存器、存储器或者其他存储区域来实现。例如,在一个实施例中,“DEST 1”可以是临时存储寄存器或者其他存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或者其他存储区域等等。在其他实施例中,SRC和DEST存储区域中的两个或者更多个可以对应于相同存储区域(例如,SIMD寄存器)内的不同数据存储元素。在一个实施例中,源寄存器之一也可以例如通过将对第一和第二源数据执行的操作的结果写回到用作目的地寄存器的两个源寄存器之一来充当目的地寄存器。
图1A是根据本发明的一个实施例的利用包括用以执行指令的指令单元的处理器所形成的示例性计算机系统的方框图。系统100包括诸如处理器102之类的部件,以采用包括用以执行用于根据本发明(诸如在本文中描述的本实施例中)处理数据的算法的逻辑的执行单元。系统100表示基于从加州的Santa Clara的Intel公司可得的PENTIUM®III、PENTIUM®4、XeonTM、Itanium®、XScaleTM和/或StrongARMTM微处理器的处理系统,但是也可以使用其他系统(包括具有其他微处理器的PC、工程工作站、机顶盒等等)。在一个实施例中,样本系统100可以执行从华盛顿Redmond的Microsoft Corporation可得的WINDOWSTM操作系统的某个版本,但是也可以使用其他操作系统(例如UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本发明的实施例不限于硬件电路和软件的任何特定组合。
实施例不限于计算机系统。本发明的替代实施例可以用于诸如手持式设备和嵌入式应用之类的其他设备中。手持式设备的一些示例包括蜂窝电话、互联网协议设备、数字相机、个人数字助理(PDA)、以及手持式PC。嵌入式应用可以包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机或者可以根据至少一个实施例执行一个或者多个指令的任何其他系统。
图1A是根据本发明的一个实施例的利用处理器102形成的计算机系统100的方框图,所述处理器102包括用以执行算法来执行至少一个指令的一个或者多个执行单元108。一个实施例可以在单处理器台式或服务器系统的情境中描述,但是替代实施例可以被包括在多处理器系统中。系统100是“中枢”系统架构的示例。计算机系统100包括用以处理数字信号的处理器102。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实施指令集的组合的处理器、或者任何其他处理器设备,诸如例如数字信号处理器。处理器102耦合到可以在系统100中的处理器102和其他部件之间传输数据信号的处理器总线110。系统100的元件执行其对本领域技术人员而言众所周知的常规功能。
在一个实施例中,处理器102包括1级(L1)内部高速缓存存储器104。取决于架构,处理器102可以具有单个内部高速缓存或者多个级别的内部高速缓存。可替代地,在另一个实施例中,高速缓存存储器可以驻留于处理器102的外部。取决于特定实施方式和需求,其他实施例还可以包括内部和外部高速缓存两者的组合。寄存器文件106可以将不同类型的数据存储在包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器的各种寄存器中。
包括用以执行整数操作和浮点操作的逻辑的执行单元108也驻留于处理器102中。处理器102还包括微代码(ucode)ROM,其存储用于某些宏指令的微代码。对于一个实施例而言,执行单元108包括用以处理包装指令集109的逻辑。通过将包装指令集109包括在通用处理器102(连同用以执行指令的相关联电路)的指令集中,由许多多媒体应用使用的操作可以通过使用通用处理器102中的包装数据来执行。因此,许多多媒体应用可以通过使用用于对包装数据执行操作的处理器数据总线的完整宽度而被加速并且更有效地执行。这可以消除对于以下的需要:跨越处理器数据总线传输较小的数据单元以每次对一个数据元素执行一个或者多个操作。
执行单元108的替代实施例还可以用于微控制器、嵌入式处理器、图形设备、DSP和其他类型的逻辑电路。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备或者其他存储器设备。存储器120可以存储由可被处理器102执行的数据信号所表示的指令和/或数据。
系统逻辑芯片116耦合到处理器总线110和存储器120。在所图示的实施例中的系统逻辑芯片116是存储器控制器中枢(MCH)。处理器102可以经由处理器总线110与MCH 116通信。MCH 116向存储器120提供高带宽存储器路径118,以用于指令和数据存储并且用于存储图形命令、数据和结构(texture)。MCH 116用以在系统100中的处理器102、存储器120和其他部件之间引导数据信号,并且用以在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可以提供用于耦合到图形控制器112的图形端口。MCH 116通过存储器接口118耦合到存储器120。图形卡112通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100使用专有中枢接口总线122来将MCH 116耦合到I/O控制器中枢(ICH)130。ICH 130经由本地I/O总线向一些I/O设备提供直接连接。本地I/O总线是用于将外围设备连接到存储器120、芯片集和处理器120的高速I/O总线。一些示例是音频控制器、固件中枢(闪速BIOS)128、无线收发机126、数据存储装置124、包含用户输入和键盘接口的旧有I/O控制器、串行扩展端口(诸如通用串行总线(USB))、和网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪速存储器设备或者其他大容量存储设备。
对于系统的另一实施例而言,根据一个实施例的指令可以与片上系统一起使用。片上系统的一个实施例包括处理器和存储器。用于一个这样的系统的存储器是闪速存储器。闪速存储器可以位于与处理器和其他系统部件相同的管芯上。附加地,诸如存储器控制器或者图形控制器之类的其他逻辑块也可以位于片上系统上。
图1B图示了实现本发明的一个实施例的原理的数据处理系统140。由本领域技术人员将容易领会的是,本文描述的实施例可以与替代处理系统一起使用,而不会偏离本发明的实施例的范围。
计算机系统140包括能够执行根据一个实施例的至少一个指令的处理核159。对于一个实施例而言,处理核159表示任何类型架构的处理单元,所述架构包括但不限于CISC、RISC、或者VLIM类型架构。处理核159还可以适合于以一种或者多种工艺技术进行制造,以及通过以足够细节在机器可读介质上表示,该处理核159可以适合于促进所述制造。
处理器159包括执行单元142、(一个或者多个)寄存器文件145的集合、和解码器144。处理核159还包括附加电路(未示出),其对于理解本发明的实施例而言不是必需的。执行单元142用于执行由处理核159接收到的指令。除了执行典型的处理器指令之外,执行单元142可以执行包装指令集143中的指令,以用于对包装数据格式执行操作。包装指令集143包括用于执行本发明的实施例的指令和其他包装指令。执行单元142通过内部总线耦合到寄存器文件145。寄存器文件145表示处理核159上的存储区域,用于存储包括数据的信息。如先前提及的,要理解,用于存储包装数据的存储区域不是关键的。执行单元142耦合到解码器144。解码器144用于将由处理核159接收到的指令解码成控制信号和/或微代码入口点。响应于这些控制信号和/或微代码入口点,执行单元142执行适当操作。在一个实施例中,解码器用于解译指令的操作码,其将指示应该对在指令内指示的对应数据执行什么操作。
处理核159与总线141耦合,以用于与各种其他系统设备通信,所述其他系统设备可以包括但不限于例如同步动态随机存取存储器(SDRAM)控制146、静态随机存取存储器(SRAM)控制147、突发式闪速存储器接口148、个人计算机存储器卡国际协会(PCMCIA)/紧凑闪速(CF)卡控件149、液晶显示器(LCD)控件150、直接存储器访问(DMA)控制器151和替代的总线主接口152。在一个实施例中,数据处理系统140还可以包括用于经由I/O总线153与各种I/O设备通信的I/O桥154。这样的I/O设备可以包括但不限于例如通用异步接收机/发射机(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例提供了移动网络和/或无线通信,以及能够执行包括字符串比较操作的SIMD操作的处理核159。处理核159可以利用各种音频、视频、成像和通信算法来编程,所述算法包括诸如Walsh-Hadamard变换、快速傅里叶变换(FFT)、离散余弦变换(DCT)和它们的相应逆变换之类的离散变换;诸如颜色空间变换、视频编码运动估计或者视频解码运动补偿之类的压缩/解压缩技术;以及诸如脉冲编码调制(PCM)之类的调制/解调(MODEM)函数。
图1C图示了能够执行指令以提供SIMD向量包装元组交叉比较功能的数据处理系统的另一替代实施例。根据一个替代实施例,数据处理系统160可以包括主处理器166、SIMD协处理器161、高速缓存存储器167、和输入/输出系统168。输入/输出系统168可以可选地耦合到无线接口169。SIMD协处理器161能够执行包括根据一个实施例的指令的操作。处理核170可以适合于以一种或者多种工艺技术进行制造,以及通过以足够细节在机器可读介质上表示,处理核170可以适合于促进包括处理核170的数据处理系统160的全部或者一部分的制造。
对于一个实施例而言,SIMD协处理器161包括执行单元162和(一个或多个)寄存器文件164的集合。主处理器166的一个实施例包括用以识别指令集163的指令的解码器165,所述指令集163包括根据一个实施例的用于由执行单元162执行的指令。对于替代实施例而言,SIMD协处理器161还包括用以对指令集163的指令解码的解码器165B的至少一部分。处理核170还包括附加电路(未示出),其对于理解本发明的实施例而言不是必需的。
在操作时,主处理器166执行控制通用类型的数据处理操作的数据处理指令流,所述数据处理操作包括与高速缓存存储器167和输入/输出系统168的交互。嵌入在数据处理指令流内的是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为具有应该由所附接的SIMD协处理器161执行的类型。因此,主处理器166在协处理器总线171上发布这些SIMD协处理器指令(或者表示SIMD协处理器指令的控制信号),由任何所附接的SIMD协处理器从该协处理器总线171接收这些SIMD协处理器指令。在该情况下,SIMD协处理器161将接受和执行意图用于其的任何接收到的SIMD协处理器指令。
可以经由无线接口169接收数据,以用于由SIMD协处理器指令进行处理。对于一个示例而言,语音通信可以以数字信号的形式被接收,所述数字信号可以被SIMD协处理器指令处理,以重新生成表示语音通信的数字音频样本。对于另一示例而言,压缩的音频和/或视频可以以数字位流的形式被接收,所述数字位流可以被SIMD协处理器指令处理,以重新生成数字音频样本和/或运动视频帧。对于处理核170的一个实施例而言,主处理器166和SIMD协处理器161被集成到单个处理核170中,所述单个处理核170包括执行单元162、(一个或者多个)寄存器文件164的集合和解码器165,以识别包括根据一个实施例的指令的指令集163的指令。
图2是用于处理器200的微架构的方框图,所述处理器200包括用以执行根据本发明的一个实施例的指令的逻辑电路。在一些实施例中,根据一个实施例的指令可以被实现为对具有字节、字、双字、四倍字等等大小以及诸如单精度和双精度整数和浮点数据类型之类的数据类型的数据元素进行操作。在一个实施例中,有序前端201是处理器200的部分,其提取要被执行的指令并且将它们准备好以随后用于处理器流水线中使用。前端201可以包括若干个单元。在一个实施例中,指令预提取器226从存储器提取指令,并且将它们馈送到指令解码器228中,指令解码器228进而对它们进行解码或者解译。例如,在一个实施例中,解码器将接收到的指令解码成机器可以执行的被称为“微指令”或者“微操作”(也被称为微op或者uop)的一个或者多个操作。在其他实施例中,解码器将指令解析成由微架构用于执行根据一个实施例的操作的操作码和对应的数据和控制字段。在一个实施例中,轨迹高速缓存230取得已解码的微操作,并且将其组装成微操作队列234中的程序排序的序列或者轨迹以用于执行。当轨迹高速缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需要的微操作。
一些指令被转换成单个微操作,而其他指令需要若干个微操作来完成完整操作。在一个实施例中,如果需要多于四个微操作来完成指令,则解码器228访问微代码ROM 232来进行该指令。对于一个实施例而言,指令可以被解码成少量微操作以用于在指令解码器228处进行处理。在另一实施例中,如果需要多个微操作来完成操作,则指令可以被存储在微代码ROM 232内。轨迹高速缓存230指代入口点可编程逻辑阵列(PLA),用以确定用于读取微代码序列的正确微指令指针,以完成来自微代码ROM 232的根据一个实施例的一个或者多个指令。在微代码ROM 232完成针对指令将微操作进行定序之后,机器的前端201恢复从轨迹高速缓存230提取微操作。
无序执行引擎203是其中将指令准备好用于执行的地方。无序执行逻辑具有多个缓冲器,用以使指令流平滑并对其重新排序,以随着指令沿流水线传下去而对性能进行优化并且为了执行而受到调度。分配器逻辑分配每个微操作为了执行而需要的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。分配器还在指令调度器之前针对两个微操作队列(一个用于存储器操作,而一个用于非存储器操作)之一中的每个微操作分配条目,所述指令调度器是:存储器调度器、快速调度器202、慢速/通用浮点调度器204、和简单浮点调度器206。微操作调度器202、204、206基于其相关性输入寄存器操作数源的准备就绪和微操作完成其操作所需要的执行资源的可用性来确定何时微操作已经准备好进行执行。一个实施例的快速调度器202可以对每半个主时钟周期进行调度,而其他调度器可以仅每个主处理器时钟周期调度一次。调度器对分派端口进行仲裁,以调度微操作以用于执行。
寄存器文件208、210位于调度器202、204、206和执行块211中的执行单元212、214、216、218、220、222、224之间。存在分别用于整数和浮点操作的单独的寄存器文件208、210。一个实施例的每个寄存器文件208、210还包括分流网络(bypass network),其可以向新的相关性微指令分流或转发还没有被写入到寄存器文件中的刚完成的结果。整数寄存器文件208和浮点寄存器文件210也能够与彼此传送数据。对于一个实施例而言,整数寄存器文件208被拆分成两个单独的寄存器文件,一个寄存器文件用于数据的低序位32位,而第二个寄存器文件用于数据的高序位32位。一个实施例的浮点寄存器文件210具有128位宽的条目,因为浮点指令通常具有在宽度上从64到128位的操作数。
执行块211包含执行单元212、214、216、218、220、222、224,在其中指令被实际执行。该部分包括存储微指令为了执行所需要的整数和浮点数据操作数值。一个实施例的处理器200包括多个执行单元:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。对于一个实施例而言,浮点执行块222、224执行浮点操作、MMX操作、SIMD操作和SSE操作或者其他操作。一个实施例的浮点ALU 222包括64位乘64位的浮点除法器,用以执行对微操作的除法、平方根、和求余数。对于本发明的实施例而言,涉及浮点值的指令可以利用浮点硬件来处理。在一个实施例中,ALU操作去往高速ALU执行单元216、218。一个实施例的快速ALU 216、218可以以半个时钟周期的有效延迟来执行快速操作。对于一个实施例而言,大多数复杂整数操作去往慢速ALU 220,因为慢速ALU 220包括用于长延迟类型的操作(诸如乘法器、移位、标志逻辑和分支处理)的整数执行硬件。存储器加载/存储操作由AGU 212、214执行。对于一个实施例而言,在对64位数据操作数执行整数操作的情境中描述整数ALU 216、218、220。在替代实施例中,ALU 216、218、220可以被实现为支持各种各样的数据位,包括16、32、128、256等等。相似地,浮点单元222、224可以被实现为支持具有各种宽度的位的操作数范围。对于一个实施例而言,浮点单元222、224可以结合SIMD和多媒体指令对128位宽度的包装数据操作数进行操作。
在一个实施例中,微操作调度器202、204、206在亲代加载已经完成执行之前分派相关性操作。因为微操作在处理器200中被推测性地调度和执行,所以处理器200也包括用以处理存储器丢失的逻辑。如果数据加载在数据高速缓存中丢失,则在流水线中可能有在途中(in flight)的相关性操作,其已经为调度器中留有暂时不正确的数据。重放机制可以跟踪和重新执行使用不正确数据的指令。只有相关性操作需要被重放,并且允许独立性操作完成。处理器的一个实施例的调度器和重放机制也被设计成捕获提供SIMD向量包装元组交叉比较功能的指令。
术语“寄存器”可以指代机载处理器存储位置,其被用作用以标识操作数的指令的一部分。换言之,寄存器可以是可从处理器外部(从程序员的角度而言)使用的那些。然而,一个实施例的寄存器不应该在含义上被限制为特定类型的电路。而是,一个实施例的寄存器能够存储和提供数据,并且执行本文描述的功能。本文描述的寄存器可以由处理器内的电路使用任何数量的不同技术来实现,所述技术诸如是专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用物理寄存器和动态分配物理寄存器的组合等等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器文件还包含用于包装数据的8个多媒体SIMD寄存器。对于以下的讨论,寄存器被理解为是被设计成保持包装数据的数据寄存器,诸如在利用来自加州的Santa Clara的Intel公司的MMX技术能够实现的微处理器中的64位宽的MMXTM寄存器(其在一些实例中也被称为“mm”)。以整数和浮点形式都可用的这些MMX寄存器可以利用伴有SIMD和SSE指令的包装数据元素进行操作。相似地,与SSE2、SSE3、SSE4或者之后的(被概括称为“SSEx”)技术相关的128位宽XMM寄存器也可以用于保持这样的包装数据操作数。在一个实施例中,在存储包装数据和整数数据时,寄存器不需要在两种数据类型之间进行区分。在一个实施例中,整数和浮点被包含在相同寄存器文件或者不同寄存器文件中。此外,在一个实施例中,浮点和整数数据可以被存储在不同寄存器中或者相同寄存器中。
在以下附图的示例中,描述了多个数据操作数。图3A图示了根据本发明的一个实施例的在多媒体寄存器中的各种包装数据类型表示。图3A图示了用于128位宽操作数的包装字节310、包装字320和包装双字(dword)330的数据类型。该示例的包装字节格式310是128位长的,并且包含16个包装字节数据元素。字节在此处被定义为数据的8位。针对每个字节数据元素的信息被如下存储:对于字节0而言被存储在位7到位0中,对于字节1而言被存储在位15到位8中,对于字节2而言被存储在位23到位16中,并且最终对于字节15而言被存储在位120到位127中。因此,所有可用的位在寄存器中使用。这种存储布置增加了处理器的存储效率。同样,在访问16个数据元素的情况下,现在可以对16个数据元素并行执行一个操作。
一般地,数据元素是存储在单个寄存器或者存储器位置中的单个一段数据,其中其他数据元素具有相同长度。在与SSEx技术相关的包装数据序列中,存储在XMM寄存器中的数据元素的数量是128位除以单个数据元素的位长度。相似地,在与MMX和SSE技术相关的包装数据序列中,存储在MMX寄存器中的数据元素的数量是64位除以单个数据元素的位长度。虽然在图3A中图示的数据类型是128位长,但是本发明的实施例也可以利用64位宽、256位宽、或者其他大小的操作数来操作。该示例的包装字格式320是128位长,并且包含八个包装字数据元素。每个包装字包含16位信息。图3A的包装双字格式330是128位长,并且包含四个包装双字数据元素。每个包装双字数据元素包含32位信息。包装四倍字是128位长,并且包含两个包装四倍字数据元素。
图3B图示了替代的寄存器内数据存储格式。每个包装数据可以包括多于一个独立数据元素。三个包装数据格式被图示:包装半字(packed half)341、包装单字(packedsingle)342、和包装双字(packed double)343。包装半字341、包装单字342、和包装双字343的一个实施例包含固定点数据元素。对于替代实施例而言,包装半字341、包装单字342、和包装双字343中的一项或者多项可以包含浮点数据元素。包装半字341的一个替代实施例是包含8个16位数据元素的128位长。包装单字342的一个实施例是128位长并且包含4个32位数据元素。包装双字343的一个实施例是128位长并且包含2个64位数据元素。将领会,这样的包装数据格式可以被进一步扩展成其他寄存器长度,例如96位、160位、192位、224位、256位、512位或更多。
图3C图示了根据本发明的一个实施例的在多媒体寄存器中的各种有符号和无符号包装数据类型表示。无符号包装字节表示344图示了在SIMD寄存器中的无符号包装字节的存储。针对每个字节数据元素的信息被如下存储:对于字节0被存储在位7到位0,对于字节1被存储在位15到位8,对于字节2被存储在位23到位16等等,并且最后,对于字节15被存储在位120到位127。因此,所有可用的位在寄存器中被使用。这种存储布置增加了处理器的存储效率。同样,在访问16个数据元素的情况下,现在可以对16个数据元素以并行方式执行一个操作。有符号包装字节表示345图示了有符号包装字节的存储。要指出,每个字节数据元素的第八位是符号指示符。无符号包装字表示346图示了字7到字0如何被存储在SIMD寄存器中。有符号包装字表示347类似于无符号包装字寄存器内表示346。要指出,每个字数据元素的第16位是符号指示符。无符号包装双字表示348示出了双字数据元素如何被存储。有符号包装双字表示349类似于无符号包装双字寄存器内表示348。要指出,必要的符号位是每个双字数据元素的第32位。
图3D是操作编码(操作码)格式360的一个实施例的描绘,所述操作编码格式360具有32或更多个位,以及下述寄存器/存储器操作数寻址模式:该寄存器/存储器操作数寻址模式与在intel.com/products/processor/manuals/处在万维网(www)上从加州的SantaClara的Intel公司可得的“Intel 64 and IA-32 Intel Architecture SoftwareDeveloper's Manual Combined Volumes 2A and 2B: Instruction Set Reference A-Z”中描述的操作码格式类型相对应。在一个实施例中,指令可以由字段361和362中的一项或者多项来编码。每个指令的多达两个操作数位置可以被标识,其包括多达两个源操作数标识符364和365。对于一个实施例,目的地操作数标识符366与源操作数标识符364相同,而在其他实施例中,它们是不同的。对于替代实施例而言,目的地操作数标识符366与源操作数标识符365相同,而在其他实施例中,它们是不同的。在一个实施例中,由源操作数标识符364和365标识的源操作数之一由指令的结果覆写,而在其他实施例中,标识符364对应于源寄存器元素,并且标识符365对应于目的地寄存器元素。对于一个实施例而言,操作数标识符364和365可以用于标识32位或者64位源和目的地操作数。
图3E是具有四十或者更多个位的另一替代操作编码(操作码)格式370的描绘。操作码格式370对应于操作码格式360,并且包括可选前缀字节378。根据一个实施例的指令可以由字段378、371和372中的一项或者多项来编码。每个指令的多达两个操作数位置可以由源操作数标识符374和375以及由前缀字节378标识。对于一个实施例而言,前缀字节378可以被用来标识32位或者64位源和目的地操作数。对于一个实施例而言,目的地操作数标识符376与源操作数标识符375相同,而在其他实施例中,它们是不同的。对于替代实施例而言,目的地操作数标识符376与源操作数标识符375相同,而在其他实施例中,它们是不同的。在一个实施例中,指令对由操作数标识符374和375标识的操作数中的一项或者多项进行操作,并且由操作数标识符374和375所标识的一个或者多个操作数被指令的结果所覆写,而在其他实施例中,由标识符374和375标识的操作数被写入到另一寄存器中的另一数据元素。操作码格式360和370允许部分地由MOD字段363和373以及由可选的缩放索引基数和位移(scale-index-base and displacements)字节所指定的寄存器对寄存器寻址、存储器对寄存器寻址、经由存储器的寄存器寻址、经由寄存器的寄存器寻址、经由立即数的寄存器寻址、寄存器对存储器寻址。
接下来转向图3F,在一些替代实施例中,64位(或者128位、或者256位、或者512位或者更多)单指令多数据(SIMD)算术操作可以通过协处理器数据处理(CDP)指令来执行。操作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一个这样的CDP指令。对于替代实施例而言,CDP指令类型的操作可以由字段383、384、387和388中的一项或者多项来编码。每个指令的多达三个操作数位置可以被标识,其包括多达两个源操作数标识符385和390,以及一个目的地操作数标识符386。协处理器的一个实施例可以对8、16、32、和64位值进行操作。对于一个实施例而言,对整数数据元素执行指令。在一些实施例中,可以使用条件字段381有条件地执行指令。对于一些实施例而言,源数据大小可以由字段383编码。在一些实施例中,零(Z)、负(N)、进位(C)、和溢出(V)检测可以在SIMD字段上进行。对于一些指令而言,饱和类型可以由字段384编码。
接下来转向图3G,其是用以提供根据另一实施例的SIMD向量包装元组交叉比较功能的另一替代操作编码(操作码)格式397的描绘,所述另一替代操作编码(操作码)格式397与在intel.com/products/processor/manuals/处在万维网(www)上从加州的Santa Clara的Intel公司可得的“Intel Advanced Vector Extensions Programming Reference”中描述的操作码格式类型相对应。
原始x86指令集提供1字节操作码,其具有各种格式的被包含在附加字节中的地址字节(address syllable)和立即数操作数,所述附加字节的存在从第一“操作码”字节中已知。附加地,存在被预留为对于操作码的修饰符的特定字节值(被称为前缀,因为其必须被置于指令之前)。当256操作码字节的原始调色码(palette)(包括这些特殊的前缀值)被耗尽时,单个字节专用为对于新的一组256个操作码的换码。随着向量指令(例如,SIMD)被添加,生成了对于更多操作码的需要,并且“两个字节”的操作码映射也是不足的,即便当通过使用前缀进行扩展时。为了这个目的,新指令被添加到使用2字节加上作为标识符的可选前缀的附加映射中。
附加地,为了促成64位模式中的附加寄存器,可以在前缀和操作码(以及确定操作码必需的任何换码字节)之间使用附加前缀(被称为“REX”)。在一个实施例中,REX可以具有4个“有效负荷”位,以指示在64位模式中的附加寄存器的使用。在其他实施例中,其可以少于或者多于4个位。至少一个指令集的一般格式(其一般对用于格式360和/或格式370)被一般地说明如下:
[前缀] [rex] 换码 [换码2] 操作码 modrm(等等)。
操作码格式397对应于操作码格式370,并且包括可选的VEX前缀字节391(在一个实施例中以C4十六进制开始),以代替大多数其他常用的旧有指令前缀字节和换码。例如,以下说明了使用两个字段来编码指令的实施例,这可以以下的时候被使用:当第二换码存在于原始指令中的时候,或者在REX字段中的额外位(例如,XB和W字段)需要被使用的时候。在以下图示的实施例中,旧有换码由新换码值来表示,旧有前缀被完全压缩成“有效负荷”字节的一部分,旧有前缀被收回并且可用于未来扩展,第二换码在“映射”字段中被压缩,并且未来映射或者特征空间是可用的,并且新特征被添加(例如,增大的向量长度和附加的源寄存器说明符)。
根据一个实施例的指令可以由字段391和392中的一项或者多项编码。每个指令的多达四个操作数位置可以由字段391与源操作数标识符374和375相结合地以及与可选的缩放索基数(SIB)标识符393、可选的位移标识符394和可选的立即数字节395相结合地来标识。对于一个实施例而言,VEX前缀字节391可以用于标识32位或者64位源和目的地操作数和/或128位或者256位SIMD寄存器或存储器操作数。对于一个实施例而言,由操作码格式397提供的功能可以对于操作码格式370而言是冗余的,而在其他实施例中,它们是不同的。操作码格式370和397允许部分地由MOD字段373以及由可选的(SIB)标识符393、可选的位移标识符394、和可选的立即数字节395所指定的寄存器对寄存器寻址、存储器对寄存器寻址、经由存储器的寄存器寻址、经由寄存器的寄存器寻址、经由立即数的寄存器寻址、寄存器对存储器寻址。
接下来转向图3H,其是用以提供根据另一实施例的SIMD向量包装元组交叉比较功能的另一替代操作编码(操作码)格式398的描绘。操作码格式398对应于操作码格式370和397,并且包括可选的EVEX前缀字节396(在一个实施例中以62十六进制开始),以替代大多数其他常用的旧有指令前缀字节和换码,并且提供附加的功能。根据一个实施例的指令可以由字段396和392中的一项或者多项来编码。每个指令多达四个操作数位置和掩码可以由字段396与源操作数标识符374和375相结合地以及与可选的缩放索引基数(SIB)标识符393、可选的位移标识符394、和可选的立即数字节395相结合地来标识。对于一个实施例而言,EVEX前缀字节396可以用于标识32位或者64位源和目的地操作数和/或128位、256位或者512位SIMD寄存器或者存储器操作数。对于一个实施例而言,由操作码格式398提供的功能可以对于操作码格式370或者397是冗余的,而在其他实施例中,它们是不同的。操作码格式398允许部分地由MOD字段373以及由可选的(SIB)标识符393、可选的位移标识符394、和可选的立即数字节395所指定的利用掩码的寄存器对寄存器寻址、存储器对寄存器寻址、经由存储器的寄存器寻址、经由寄存器的寄存器寻址、经由立即数的寄存器寻址、寄存器对存储器寻址。至少一个指令集的一般格式(其一般对应于格式360和/或格式370)被一般地说明如下:
evex 1 RXBmmmmm WvvvLpp evex4 操作码 modrm [sib][disp][imm]。
对于一个实施例而言,根据EVEX格式398编码的指令可以具有附加的“有效负荷”位,其可以用于提供具有附加的新特征的SIMD向量包装元组交叉比较功能,该附加的新特征诸如例如是用户可配置掩码寄存器、或者附加操作数、或者从128位、256位或者512位向量寄存器当中进行的选择、或者要从其选择的更多寄存器,等等。
例如,在VEX格式397可以用于提供不具有掩码的SIMD向量包装元组交叉比较功能的情况下,EVEX格式398可以用于提供具有显式用户可配置掩码的SIMD向量包装元组交叉比较功能。附加地,在VEX格式397可以用于在128位或者256位向量寄存器上提供SIMD向量包装元组交叉比较功能的情况下,EVEX格式398可以用于在128位、256位、512位向量寄存器上提供SIMD向量包装元组交叉比较功能。
用以提供SIMD向量包装元组交叉比较功能以用于有效的向量地址冲突解决的示例指令由以下示例来说明:
指令 | 目的地/源1 | 源2 | 源3 | 源4 | 源5 | 描述 |
VPDCMPUW向量包装二元组比较无符号字 | Vmm1 | Vmm2 | Vmm3/Mem1 | Mask1 | Imm8 | 将寄存器Vmm2中的每个二元组(2元组)的每个16位无符号元素(如果Mask1中的对应掩码位是1)与寄存器Vmm3中的或者存储器位置Mem1处(根据Imm8中的比较类型)的对应二元组中的每个元素相比较,并且将比较掩码存储为目的地寄存器Vmm1中的对应元素。 |
VPQCMPD向量包装四元组比较[有符号]双字 | Vmm1 | Vmm2/Mem1 | Mask1 | Imm8 | 将源/目的地寄存器Vmm1中的每个四元组(4元组)的每个32位有符号元素(如果Mask1中的对应掩码位是1)与寄存器Vmm2中的或者存储器位置Mem1处(根据Imm8中的比较类型)的对应四元组中的每个元素相比较,并且将比较掩码存储为寄存器Vmm1中的对应元素。 | |
VPOSHCMPB向量包装八元组移位比较[有符号]字节 | Vmm1 | Vmm2 | Vmm3/Mem1 | Mask1 | Imm8 | 将寄存器Vmm2中的每个八元组(8元组)的每个8位有符号元素(如果Mask1中的对应掩码位是1)与寄存器Vmm3中的或者存储器位置Mem1处(根据Imm8中的比较类型)的对应八元组中的每个元素相比较,将结果得到的比较掩码分别左移位源/目的地寄存器Vmm1中的移位计数。将左移位的比较掩码存储为寄存器Vmm1中的元素。 |
VPDCMPQ向量包装二元组比较[有符号]四倍字 | Vmm1 | Vmm2 | Vmm3/Mem1 | Mask1 | Imm8 | 将寄存器Vmm2中的每个二元组(2元组)的每个64位有符号元素(如果Mask1中的对应掩码位是1)与寄存器Vmm3中的或者存储器位置Mem1处(根据Imm8中的比较类型)的对应二元组中的每个元素相比较,并且将比较掩码存储为目的地寄存器Vmm1中的对应元素。 |
在正被比较的元素(例如索引)与表示比较结果所需要的掩码(例如在256位寄存器中的16个16位元素)是相同大小时,则执行用以交叉比较所有元素的指令可能是合适的。但是存在比可用于表示比较结果的位更多的元素时,可能需要替代的解决方案。将领会,如以上示例中的SIMD向量包装元组比较指令可以用作一种用于可变大小的元素和存储器偏移量的替代解决方案,以提供SIMD向量地址冲突检测功能以及被组合来生成用于有效SIMD地址冲突解决的冲突掩码的结果。
示例包括具有第一和第二寄存器的处理器,所述第一和第二寄存器具有可变的多个数据字段,数据字段中的每一项用以存储第一数据类型的元素。在一些实施例中,处理器执行用于向量包装元组(例如,双元组、四元组、或者八元组)交叉比较的SIMD指令(其针对由第一寄存器的元组构成的数据字段的一部分中的每个数据字段),将其对应元素与第二寄存器中的元组(或者存储器中的向量)的数据字段的对应部分的每个元素相比较,并且根据对应比较,在与对应的第一寄存器部分的每个非掩码元素相对应的位掩码中,设置与第二向量部分的每个元素相对应的掩码位。包装元组可以各自包括两个、四个或者八个元素,其中,元素可以是有符号的或者无符号的包装字节(8位)、字(16位)、双字(32位)或者四倍字(64位)。在一些实施例中,任何比较位掩码还可以在被存储到源/目的地寄存器中之前被左移位另一源/目的地寄存器的数据字段中的对应元素。比较类型可以典型地通过由指令所指定的立即数操作数来指示(例如,指示为等于、小于、小于或等于、总为假、不等于、不小于、不小于或等于以及总为真中的一项)。还将领会,SIMD向量前导零计数指令(SIMDvector leading zero count instruction)可以与可变大小的元素和冲突掩码一起使用,以提供SIMD置换控制(permute control),这将在以下(例如,关于图14A)更详细地描述,从而在没有通过存储器执行相关性计算的情况下准许寄存器中的有效SIMD地址冲突解决。因此,本文公开的指令提供了尤其在收集-修改-分散应用中的有效SIMD地址冲突解决。
图4A是图示了根据本发明的至少一个实施例的有序流水线和寄存器重命名级、无序发布/执行流水线的方框图。图4B是图示了根据本发明的至少一个实施例的要被包括在处理器中的有序架构核和寄存器重命名逻辑、无序发布/执行逻辑的方框图。图4A中的实线框图示了有序流水线,而虚线框图示了寄存器重命名、无序分发/执行流水线。相似地,图4B中的实线框图示了有序架构逻辑,而虚线框图示了寄存器重命名逻辑和无序发布/执行逻辑。
在图4A中,处理器流水线400包括提取级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为分派或者发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处理级422和提交级424。
在图4B中,箭头表示了在两个和更多单元之间的耦合,并且箭头的方向指示了在那些单元之间的数据流方向。图4B示出了处理器核490,其包括耦合到执行引擎单元450的前端单元430,并且引擎单元450和前端单元430两者都耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或者替代核类型。作为又一个选项,核490可以是专用核,诸如例如是网络或者通信核、压缩引擎、图形核等等。
前端单元430包括耦合到指令高速缓存单元434的分支预测单元432,该指令高速缓存单元434耦合到指令转译后备缓冲器(TLB)436,该指令转译后备缓冲器(TLB)436耦合到指令提取单元438,该指令提取单元438耦合到解码单元440。解码单元或者解码器可以解码指令,并且作为输出生成一个或者多个微操作、微代码入口点、微指令、其他指令、或者其他控制信号,其是从原始指令解码的、或者以其他方式反映原始指令、或者从原始指令导出的。解码器可以使用各种不同机制来实现。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。指令高速缓存单元434进一步耦合到存储器单元470中的2级(L2)高速缓存单元476。解码单元440耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括耦合到引退单元(retirement unit)454和一个或多个调度器单元456的集合的重命名/分配器单元452。(一个或者多个)调度器单元456表示任何数目的不同调度器,其包括保留站、中央指令窗等等。(一个或者多个)调度器单元456耦合到(一个或者多个)物理寄存器文件单元458。(一个或者多个)物理寄存器文件单元458中的每一个表示一个或者多个物理寄存器文件,其中的不同物理寄存器文件存储一个或者多个不同数据类型(诸如标量整数、标量浮点、包装整数(packed integer)、包装浮点、向量整数、向量浮点等等)、状态(例如,作为要执行的下一指令的地址的指令指针)等等。(一个或者多个)物理寄存器文件单元458被引退单元454覆盖以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或者多个)重排序缓冲器和(一个或者多个)引退寄存器文件、使用(一个或者多个)未来文件、(一个或者多个)历史缓冲器和(一个或者多个)引退寄存器文件;使用寄存器映射和寄存器池等等)。一般地,架构寄存器从处理器外是可见的,或者从程序员的视角是可见的。寄存器不限于任何已知特定类型的电路。各种不同类型的寄存器是适当的,只要它们能够存储和提供数据,如本文所描述的。适当寄存器的示例包括但不限于:专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等等。引退单元454和(一个或者多个)物理寄存器文件单元458耦合到(一个或者多个)执行集群460。(一个或者多个)执行集群460包括一个或者多个执行单元462的集合和一个或者多个存储器访问单元464的集合。执行单元462可执行各种操作(例如,移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、包装整数、包装浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于具体功能或者功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或者全部都执行全部功能的多个执行单元。(一个或者多个)调度器456、(一个或者多个)物理寄存器文件单元458和(一个或者多个)执行集群460可能被示为可能是复数个,因为特定实施例针对某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/包装整数/包装浮点/向量整数/向量浮点流水线、和/或各自具有其自己的调度器单元、物理寄存器(多个)文件单元和/或执行集群的存储器访问流水线,并且在单独的存储器访问流水线的情况下,实现某些实施例,其中只有该流水线的执行集群具有(一个或者多个)存储器访问单元464)。还应该理解,在使用单独流水线的情况下,这些流水线中的一个或者多个可以是无序发布/执行的,并且其余是有序的。
存储器访问单元464的集合耦合到存储器单元470,存储器单元470包括耦合到数据高速缓存单元474的数据TLB单元472,该数据高速缓存单元474耦合到2级(L2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可以包括加载单元、存储地址单元、和存储数据单元,这些中的每一个耦合到存储器单元470中的数据TLB单元472。L2高速缓存单元476耦合到一个或者多个其他级别的高速缓存,并且最终耦合到主存储器。
作为示例,示例性寄存器重命名、无序发布/执行核架构可以将如下来实现流水线400:1)指令提取438执行提取和长度解码级402和404;2)解码单元440执行解码级406;3)重命名/分配器单元452执行分配级408和重命名级410;4)(一个或者多个)调度器单元456执行调度级412;5)(一个或者多个)物理寄存器文件单元458和存储器单元470执行寄存器读取/存储器读取级414;执行集群460执行该执行级416;6)存储器单元470和(一个或者多个)物理寄存器文件单元458执行写回/存储器写入级418;7)各种单元可以被牵涉于异常处理级422中;以及8)引退单元454和(一个或者多个)物理寄存器文件单元458执行提交级424。
核490可以支持一个或者多个指令集(例如,x86指令集(具有已经被添加有较新版本的一些扩展);加州的Sunnyvale的MIPS技术公司的MIPS指令集;加州的Sunnyvale的ARM控股公司的ARM指令集(具有可选的附加扩展,诸如NEON)。
应该理解,所述核可以支持多线程(执行操作或者线程的两个或者更多个并行集合),并且可以以各种各样的方式进行,这些方式包括时间片段化多线程、同时多线程(其中,单个物理核为物理核正在同时进行多线程的线程中的每一个提供逻辑核)、或者其组合(例如,时间片段化提取和解码以及此后的同时多线程,诸如在Intel Hyperthreading技术中)。
虽然在无序执行的情境中描述了寄存器重命名,但是应该理解,寄存器重命名可以用于有序架构中。虽然处理器的所图示的实施例还包括单独的指令和数据高速缓存单元434/474和共享L2高速缓存单元476,但是替代实施例可具有用于指令和数据两者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存、或者多个级别的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。可替代地,所有的高速缓存都可以在核和/或处理器外部。
图5是根据本发明的实施例的具有集成存储器控制器和图形单元(graphics)的单核处理器和多核处理器500的方框图。图5中的实线框图示了具有单核502A、系统代理510、一个或者多个总线控制器单元516的集合的处理器500,而虚线框的可选附加项图示了具有多核502A-N、系统代理单元510中的一个或者多个集成存储器控制器单元514的集合和专用图形逻辑508的替代存储器500。
存储器层级包括核内的一个或者多个级别的高速缓存、一个或者多个共享高速缓存单元506的集合、和耦合到集成存储器控制器单元514的集合的外部存储器(未示出)。共享高速缓存单元506的集合可以包括一个或者多个中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)、或者其他级别的高速缓存、末级高速缓存(LLC)、和/或其组合。虽然在一个实施例中,基于环的互连单元512将集成图形逻辑508、共享高速缓存单元506的集合、以及系统代理单元510进行互连,但是替代实施例可以使用用于互连这样的单元的任何数量的众所周知的技术。
在一些实施例中,核502 A-N中的一个或者多个能够进行多线程。系统代理510包括协调和操作所述核502 A-N的那些部件。系统代理单元510可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或者可以包括调节核502 A-N和集成图像逻辑508的功率状态所需要的逻辑和部件。显示单元用于驱动一个或者多个外部连接的显示器。
在架构和/或指令集方面,核502 A-N可以是同构的或者异构的。例如,核502 A-N中的一些可以是有序的,而其他可以是无序的。作为另一个示例,核502 A-N中的两个或者更多个可以能够执行相同的指令集,而其他可以能够仅执行该指令集的子集或者执行不同的指令集。
处理器可以是通用处理器,诸如从加州的Santa Clara的Intel公司可得的CoreTMi3、i5、i7、2 Duo和Quad、XeonTM、ItaniumTM、XScaleTM或者StrongARMTM处理器。可替代地,处理器可以来自其他公司,诸如ARM股份有限公司、MIPS公司等等。处理器可以是专用处理器,诸如例如网络或者通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等等。处理器可以在一个或者多个芯片上实现。处理器500可以是使用多种工艺技术(诸如例如BiCOMS、CMOS、或者NMOS)中的任一种的一个或者多个基板的一部分和/或在所述基板上实现。
图6-8是适合于包括处理器500的示例性系统,而图9是可以包括核502中的一个或者多个的示例性片上系统(SoC)。用于膝上型电脑、台式电脑、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的本领域中已知的其他系统设计和配置也是适当的。一般而言,能够结合本文公开的处理器和/或其他执行逻辑的多种多样的系统或者电子设备一般是适当的。
现在参考图6,示出了根据本发明的一个实施例的系统600的方框图。系统600可以包括一个或者多个处理器610、615,其耦合到图形存储器控制器中枢(GMCH)620。附加处理器615的可选性质在图6中用虚线来表示。
每个处理器610、615可以是处理器600的某种版本。然而,应该指出,不太可能的是,集成图形逻辑和集成存储器控制单元将会存在于处理器610、615中。图6图示了GMCH620可以耦合到可以是例如动态随机存取存储器(DRAM)的存储器640。对于至少一个实施例而言,DRAM可以与非易失性高速缓存相关联。
GMCH 620可以是芯片集或者芯片集的一部分。GMCH 620可以与(一个或者多个)处理器610、615通信,并且控制(一个或者多个)处理器610、615和存储器之间的交互。GMCH620还可以充当系统600的(一个或者多个)处理器610、615和其他元件之间的加速总线接口。对于至少一个实施例而言,GMCH 620经由诸如前端总线(FSB)695之类的多点分支总线与(一个或者多个)处理器610、615通信。
此外,GMCH 620耦合到显示器645(诸如平面板显示器)。GMCH 620可以包括集成图形加速器。GMCH 620进一步耦合到输入/输出(I/O)控制器中枢(ICH)650,其可以用于将各种外围设备耦合到系统600。例如在图6的实施例中所示的是外部图形设备660(其可以是耦合到ICH 650的离散图形设备)以及另一外围设备670。
可选地,附加或者不同的处理器也可以存在于系统600中。例如,(一个或者多个)附加处理器615可以包括与处理器610相同的(一个或者多个)附加处理器、与处理器610异构的或者不对称的(一个或者多个)附加处理器、加速器(诸如例如,图形加速器或者数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器。在优点度量范围(包括架构的、微架构的、热学的、功率消耗特性等等)方面,在物理资源610、615之间可能存在各种各样的区别。这些区别可以有效地将它们自己表明为在处理器610、615之间的不对称性和异构性。对于至少一个实施例而言,各种处理器610、615可以驻留于相同的管芯封装中。
现在参考图7,示出了根据本发明的实施例的第二系统700的方框图。如在图7中示出的,多处理器系统700是点对点互连系统,并且包括经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某种版本,如处理器610、615中的一个或者多个。
虽然仅示出了两个处理器770、780,但是要理解,本发明的范围不被如此限制。在其他实施例中,可以在给定处理器中存在一个或者多个附加处理器。
处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还包括作为其总线控制器单元的一部分的点对点(P-P)接口776和778;相似地,第二控制器780包括P-P接口786和788。处理器770、780可以经由点对点(P-P)接口750使用P-P接口电路778、788来交换信息。如图7中示出的,IMC 772和782将处理器耦合到相应存储器,即存储器732和存储器734,其可以是本地附接到相应处理器的主存储器的部分。
处理器770、780可以各自经由单个P-P接口752、754使用点对点接口电路776、794、786、798与芯片集790交换信息。芯片集790还可以经由高性能图形接口739与高性能图形电路738交换信息。
共享高速缓存(未示出)可以被包括在任一处理器中,或者在两个处理器之外,但是经由P-P互连与处理器连接,以使得如果处理器被置于低功率模式中,任一处理器或者两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片集790可以经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外围部件互连(PCI)总线、或者诸如是PCI Express总线或者另一第三代I/O互连总线之类的总线,但是本发明的范围并不被如此限制。
如图7中示出的,各种I/O设备714与总线桥718一起可以耦合到第一总线716,所述总线桥718将第一总线718耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。各种设备可以耦合到第二总线720,在一个实施例中,所述设备包括例如键盘和/或鼠标722、通信设备727和可以包括指令/代码和数据730的存储单元728(诸如盘驱动器或者其他大容量存储设备)。此外,音频I/O 724可以耦合到第二总线720。要指出,其他架构是可能的。例如,代替图7的点对点架构,系统可以实现多点分支总线或者其他这样的架构。
现在参考图8,示出了根据本发明的实施例的第三系统800的方框图。在图7和8中的类似元件具有类似的附图标记,并且已经将图7的某些方面从图8中省略,以便避免使图8的其他方面晦涩难懂。
图8图示了处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。对于一个实施例而言,CL 872、882可以包括集成存储器控制器单元,诸如以上结合图5和7所描述的。另外,CL 872、882还包括I/O控制逻辑。图8图示了不仅存储器832、834被耦合到CL 872、882,而且I/O设备814也耦合到控制逻辑872、882。旧有I/O设备815被耦合到芯片集890。
现在参考图9,示出了根据本发明的实施例的SoC 900的方框图。在图5中的相似元件具有类似的附图标记。另外,虚线框是更高级的SoC上的可选特征。在图9中,(一个或者多个)互连单元902耦合到:包括一个或者多个核502A-N的集合和(一个或者多个)共享高速缓存单元506的应用处理器910;系统代理单元510;(一个或者多个)总线控制器单元516;(一个或者多个)集成存储器控制器单元514;一个或多个媒体处理器920的集合,其可以包括集成图形逻辑508、用于提供静止和/或视频相机功能的图像处理器924、用于提供硬件音频加速的音频处理器926、和用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(SRAM)单元930;直接存储器访问(DMA)单元932;以及用于耦合到一个或者多个外部显示器的显示单元940。
图10图示了包含中央处理单元(CPU)和图形处理单元(GPU)的处理器,其可以执行根据一个实施例的至少一个指令。在一个实施例中,用以执行根据至少一个实施例的操作的指令可以由CPU来执行。在另一实施例中,指令可以由GPU来执行。在又一实施例中,指令可以通过由GPU和CPU执行的操作的组合来执行。例如,在一个实施例中,根据一个实施例的指令可以被接收和解码,以用于在GPU上执行。然而,在已解码指令内的一个或者多个操作可以由CPU来执行,并且将结果返回给GPU以用于最终的指令引退。相反,在一些实施例中,CPU可以充当主处理器,并且GPU充当协处理器。
在一些实施例中,受益于高度并行吞吐量处理器的指令可以由GPU来执行,而受益于从深度流水线化架构受益的处理器性能的指令可以由CPU来执行。例如,图形、科学应用、金融应用和其他并行工作量可以受益于GPU的性能,并且被相应地执行,而诸如操作系统内核或者应用代码之类的更加有顺序的应用可能更适于CPU。
在图10中,处理器1000包括CPU 1005、GPU 1010、图形处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示设备1040、高清晰度多媒体接口(HDMI)控制器1045、MIPI控制器1050、闪速存储器控制器1055、双数据速率(DDR)控制器1060、安全引擎1065、和I2S/I2C(集成芯片间声音/内部集成电路)接口1070。其他逻辑和电路可以被包括在图10的处理器中,其包括更多CPU或者GPU以及其他外围接口控制器。
至少一个实施例的一个或者多个方面可以由存储在表示处理器内的各种逻辑的机器可读介质上的代表性数据来实现,所述代表性数据当被机器读取时促使该机器制造用以执行本文描述的技术的逻辑。称为“IP核”的这样的表示可以被存储在有形、机器可读介质(“磁带(tape)”)上,并且供应给各种消费者或者加工设施,以加载到实际制作逻辑或者处理器的制造机器中。例如,诸如由ARM股份有限公司开发的CortexTM族的处理器和由中国科学院的计算技术所(ICT)开发的Loongson IP核之类的IP核可以被许可或者售卖给各种消费者或者被许可方,诸如Texas Instruments、Qualcomm、Apple或者Samsung,并且被实现在由这些消费者或者被许可方生产的处理器中。
图11示出了图示出根据一个实施例的IP核的开发的方框。存储装置1130包括仿真软件1120和/或硬件或者软件模型1110。在一个实施例中,表示IP核设计的数据可以经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或者无线连接1160提供给存储装置1130。由仿真工具和模型生成的IP核信息然后可以被传输到制造设施,在那里其可以被第三方制造,以执行根据至少一个实施例的至少一个指令。
在一些实施例中,一个或者多个指令可以对应于第一类型或架构(例如,x86),并且在不同类型或架构(例如,ARM)的处理器上被转译或者模拟。根据一个实施例的指令可以因此在包括ARM、x86、MIPS、GPU或者其他处理器类型或架构的任何处理器或者处理器类型上执行。
图12图示了根据一个实施例的第一类型的指令如何被不同类型的处理器模拟。在图12中,程序1205包含可以与根据一个实施例的指令执行相同或者基本相同功能的一些指令。然而,程序1205的指令可以具有不同于处理器1215或者与处理器1215不兼容的类型和/或格式,这意味着在程序1205中的类型的指令可能不能够由处理器1215原生地执行。然而,在模拟逻辑1210的帮助下,程序1205的指令被转译成原生地能够由处理器1215执行的指令。在一个实施例中,模拟逻辑被体现在硬件中。在另一实施例中,模拟逻辑被嵌入在有形、机器可读介质中,所述机器可读介质包含软件,其用以将程序1205中的类型的指令转译成可由处理器1215原生地执行的类型。在其他实施例中,模拟逻辑是固定功能或者可编程硬件和存储在有形、机器可读介质上的程序的组合。在一个实施例中,处理器包含模拟逻辑,而在其他实施例中,模拟逻辑存在于处理器外,并且由第三方提供。在一个实施例中,处理器能够通过执行被包含在该处理器中或者与该处理器相关联的微代码或者固件来加载体现在包含软件的有形机器可读介质中的模拟逻辑。
图13是对照了根据本发明的实施例的使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的方框图。在所图示的实施例中,指令转换器是软件指令转换器,但是可替代地,指令转换器可以被实现在软件、固件、硬件或者其各种组合中。图13示出了以高级语言1302的程序可以使用x86编译器1304来编译,以生成可以由具有至少一个x86指令集核1316的处理器原生地执行的x86二进制代码1306。具有至少一个x86指令集核1316的处理器表示下述的任何处理器,其可通过兼容地执行或者以其他方式处理以下各项而基本上执行与具有至少一个x86指令集核的Intel处理器相同的功能:(1)Intel x86指令集核的指令集的主要部分,或者(2)目标在于运行于具有至少一个x86指令集核的Intel处理器上以便基本实现与具有至少一个x86指令集核的Intel处理器相同的结果的应用或其他软件的目标代码版本。x86编译器1304表示可操作为生成x86二进制代码1306(例如,目标代码)的编译器,所述x86二进制代码1306可以在具有或者不具有附加联动处理的情况下在具有至少一个x86指令集核1316的处理器上被执行。相似地,图13示出了以高级语言1302的程序可以通过使用替代指令集编译器1308来编译,以生成替代指令集二级制代码1310,其可以由不具有至少一个x86指令集核1314的处理器(例如,具有执行加州的Sunnyvale的MIPS技术公司的MIPS指令集的核和/或执行加州的Sunnyvale的ARM控股公司的ARM指令集的核的处理器)原生地执行。指令转换器1312用于将x86二进制代码1306转换成可以由不具有x86指令集核1314的处理器原生地执行的代码。这种经转换的代码不太可能与替代指令集二进制代码1310相同,因为能够进行这一点的指令转换器是难以制作的;然而,经转换的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1312通过模拟、仿真或者任何其他过程来表示软件、固件、硬件或者其组合,允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1306。
图14A图示了用于使用SIMD向量前导零计数指令以便生成用于有效向量地址冲突解决的置换控制的过程1401的示例的一个实施例的流程图。本文公开的过程1401和其他过程由处理块来执行,所述处理块可以包括可由通用机器或者由专用机器或者由两者的组合执行的专用硬件或者软件或者固件操作代码。
在过程1401的处理块1410中,初始化索引的集合,例如初始化为值7、2、7、1和7。将领会,偏移量索引的数量和偏移量索引的值意图是说明性的,并且不限制本发明的实施例。特别地,在寄存器中的偏移量索引的数量可以由特定应用和/或对应于索引的数据元素的大小来确定。偏移量索引的示例值仅意图图示相关性冲突的解决。在处理块1415中,元素左掩码被设置为全1(例如,五个1)。在处理块1420中,相关性掩码可以根据过程1405的技术(其将在以下关于图18更详细描述)来设置,以反映所有匹配的偏移量索引。然后在处理块1425中,初始化次序掩码的集合。在处理块1430中,通过在相关性掩码和次序掩码之间执行按位的和运算(AND)来计算冲突掩码。
接下来进行到处理块1439,通过如下来计算前导零计数:通过针对冲突掩码的每个数据字段对被设置为零的最高有效连续位的数量进行计数,并且将每个计数存储为前导零计数的对应数据字段中的值,对冲突掩码使用向量包装前导零计数指令VPLZCNT。在处理块1440中,最大计数被初始化为全为4,这是比用于表示所图示的示例中的冲突掩码的位数量小1的值。在处理块1445中,通过以下来计算置换索引的集合:通过执行SIMD包装减法PSUB(从对应的最大计数值(其比用于表示冲突掩码的位数量小1)减去每个前导零计数的值)以生成最大计数减去前导零计数的对应差值。将领会,对应于与先前计算无关的偏移量索引的那些位置具有为-1的置换索引,这也可以被有利地使用。
在处理块1450中,根据偏移量索引和(可选地)全为1的元素左掩码来从存储器收集数据。接下来在处理块1455中,通过以下来重新计算元素左掩码:使用包装比较不相等(packed compare not equal)指令PCMPNEQ,其有利地将置换索引与所有-1相比较。在处理块1460中,做出元素左掩码是否是零(0)的确定。如果是这样,则在处理块1465中,使用偏移量索引将数据分散到存储器,并且对这个SIMD数据集合的处理在处理块1499中结束。
否则,在处理块1470中,通过以下来置换数据:执行SIMD向量包装置换VPERM,其将置换索引和元素左掩码用作完成掩码来有利地仅更新过程左边的元素。在处理块1475,使用元素左掩码作为完成掩码来对过程左边的数据元素执行所需的计算。然后,在先前的技术过程1406中,通过将元素左掩码广播到处理块1480中的所有元素来初始化起冲突(conflicted out)元素的集合。然后,通过对先前的冲突掩码和新的起冲突元素使用向量包装和运算(AND)指令来重新计算冲突掩码的集合。然后通过以下来计算新的元素左掩码:使用包装比较不相等指令PCMPNEQ,其将每个冲突掩码与全零相比较。处理然后重新迭代,其在处理块1460中开始于测试新的元素左掩码。将领会,如本文所描述的SIMD向量前导零计数指令可以有利地与可变大小的元素和冲突掩码一起使用来提供SIMD置换控制,从而在没有通过存储器执行相关性计算的情况下准许寄存器中的有效SIMD地址冲突解决。
图14B图示了用于使用SIMD向量地址冲突掩码以用于有效向量地址冲突解决的示例的一个实施例的流程图。在过程1402的处理块1410中,初始化偏移量索引的集合,例如初始化为值7、2、7、1和7。将再次领会,偏移量索引的数量和偏移量索引的值意图是说明性的,并且不限制本发明的实施例。特别地,在寄存器中的偏移量索引的数量可以由特定应用和/或对应于索引的数据元素的大小来确定。偏移量索引的示例值仅意图图示相关性冲突的解决。在处理块1415中,元素左掩码被设置为全1(例如,五个1)。在处理块1420中,相关性掩码可以根据过程1405的技术(其将在以下关于图18更详细描述)来设置,以包括匹配的偏移量索引。然后在处理块1425中,初始化次序掩码的集合。在处理块1430中,通过在相关性掩码和次序掩码之间执行按位的和运算(AND)来计算冲突掩码。
在处理块1450中,根据偏移量索引和(可选地)全1的元素左掩码从存储器收集数据。接下来,在处理块1460中,通过将元素左掩码广播到处理块1480中的所有元素来初始化起冲突元素的集合。在处理块1485中,对先前的冲突掩码和新的起冲突元素使用向量包装和运算(AND)指令来重新计算冲突掩码的集合。然后通过以下来在处理块1490中计算新的元素左掩码:使用包装比较不相等指令PCMPNEQ,其将每个冲突元素与所有零相比较。在处理块1462中,元素左掩码被否定,以形成已完成这些(did these)掩码,并且在处理块1466中根据偏移量索引将数据元素分散到存储器。在处理块1460中,做出元素左掩码是否是零(0)的确定。如果是这样,则对这个SIMD数据集合的处理在处理块1499中结束。否则,处理重现迭代,开始于过程1402的处理块1450。
图15A图示了针对用以执行用以提供SIMD向量包装元组交叉比较功能的指令的处理器中的过程1501的一个实施例的流程图。包装元组可以各自包括两个、四个或者八个元素。在一些实施例中,比较类型可以通过由指令指定的立即数操作数来指示(例如,指示为等于、小于、小于或等于、假、不等于、不小于、不小于或等于以及真中的一个)。在处理块1510中,第一数据类型的元素被存储在向量寄存器的多个n个数据字段中的每个中。在处理块1520中,第一数据类型的元素被存储在第二向量的n个数据字段的每个中,在处理块1530中,用于向量包装元组交叉比较的SIMD指令在处理器中被解码。响应于用于向量包装元组交叉比较的SIMD指令,处理在过程1503中以处理块1540继续进行。
在处理块1540中,向量寄存器中的下一元组被选择用于处理。在处理块1550中,将元组中的下一元素与第二寄存器的多个n个数据字段的对应元组的每个元素相比较。在处理块1560中,根据对应比较,在与同时与被选择用于处理的向量寄存器元组相比较的元素相对应的下一位掩码中,设置与第二向量的每个元组元素相对应的掩码位。在一些实施例中,与向量寄存器的元素相对应的所有位掩码可以与向量寄存器中其对应元素的最低有效位相对齐地被存储在目的地寄存器中。在一些替代实施例中,与向量寄存器的元素相对应的位掩码可以代替地根据存储在源/目的地寄存器的对应元素中的移位计数而重新对齐地被存储在源/目的地寄存器中。在处理块1570中,做出关于是否已经完成针对当前被选用于处理的元组的所有比较的确定。如果不是,则处理重新迭代,开始于处理块155,直到已经完成当前被选择用于处理的元组的每个数据字段为止。在一些实施例中,向量寄存器的数据字段可以是隐式未掩蔽的,要求其每一项被交叉比较。在一些替代实施例中,向量寄存器的数据字段可以是显式掩蔽或未掩蔽的(例如,在由指令指定的掩码寄存器中),要求仅未掩蔽的数据字段中的元素被交叉比较。此时,对于当前所选元组已经完成所有所需的比较,处理进行到处理块1580,在那里做出关于是否已经完成向量寄存器的所有n个数据字段的处理的确定。如果不是,则处理重新迭代,开始于处理块1540,在那里将向量寄存器中的另一元组选择用于处理。否则,处理在处理块1590中结束。
将领会,如在本文所描述的实施例中的SIMD向量包装元组交叉比较指令可以用于可变大小的元素和存储器偏移量,以提供SIMD向量地址冲突检测功能以及生成冲突掩码以用于有效的SIMD地址冲突解决。还将领会,如本文所描述的实施例中,SIMD向量包装元组交叉比较指令可以与SIMD向量前导零计数指令相结合地使用,以提供SIMD置换控制,以用于有效SIMD地址冲突解决,尤其是在没有通过存储器执行相关性计算的情况下在准许寄存器中的地址冲突解决的收集-修改-分散应用中。
图15B图示了针对用以使用SIMD向量地址冲突掩码以用于有效向量地址冲突解决的过程1502的一个实施例的流程图。在处理块1505中,将第一寄存器或存储器向量源的每个元素中的偏移量与向量源的每个较低有效元素中的偏移量相比较,以确定它们是否保持匹配的偏移量。在处理块1515中,将对应于保持与对应于第一向量目的地中的掩码的元素中的偏移量匹配的偏移量的第一向量源中的较低有效元素的掩码位设置为1(例如,如在过程1801中所示那样)。在处理块1525中,目的地寄存器中的任何其他位被设置为第二值(例如,0)(例如,如过程1405中所示的)。
在处理块1535中,将存储在第一目的地寄存器中的掩码中的每一个的值与另一向量中的特定值(例如,0)的对应副本相比较,以便生成取决于较低有效元素的计算的元素的掩码。在处理块1545中,取决于对较低有效元素的不完整计算的元素掩码被用来检测准备好进行处理的元素,并且生成完成掩码。在处理块1555中,使用完成掩码对数据执行SIMD计算。然后在处理块1565中,取决于对较低有效元素的不完整计算的元素掩码被更新。在处理块1575中,做出是否完成对所有元素的处理的确定,并且如果是这样,则对这些元素的处理在处理块1595中结束。否则,处理重新迭代,开始于处理块1545。还将领会,虽然所图示的过程1502没有假设已处理的元素需要被存储到存储器,但是任何这样的存储或者分散到存储器与过程1502的附加随后迭代一起可以根据本发明的替代实施例来执行。
图16图示了用于执行用以提供SIMD向量前导零计数功能的指令的装置1601的现有技术实施例,所述SIMD向量前导零计数功能对于生成用于有效向量地址冲突解决的置换控制是有用的。装置1601的实施例可以是流水线400的一部分(例如,执行级416)或者核490的一部分(例如,(一个或者多个)执行单元462),以用于执行用以提供SIMD向量前导零计数功能的指令。装置1601的实施例可以与解码级(例如,解码406)或者解码器(例如,解码单元440)耦合,以解码用于SIMD向量前导零计数的指令,所述SIMD向量前导零计数可以准许有效向量地址冲突解决。一个或者多个执行单元(例如,执行装置1601)响应于经解码的指令来读取存储器向量操作数或者向量寄存器1610或1620中的数据字段中的每个数据字段的多个位,并且对于存储器向量操作数或者向量寄存器1610或1620的每个数据字段而言,对被设置为零的最高有效连续位的数目进行计数,并且将该计数存储为SIMD目的地寄存器1650或1660中的对应数据字段中的值。
例如,装置1601的实施例可以与向量寄存器(例如,(一个或者多个)物理寄存器文件单元458)耦合,所述向量寄存器包括可变的多个n个可变大小数据字段,以存储可变的多个n个可变大小数据元素的值。用以提供SIMD向量前导零计数功能的指令的实施例指定了向量前导零计数操作和数据字段大小,以用于针对存储器向量操作数或者向量寄存器(例如,1610或1620)执行SIMD向量前导零计数,并且将计数存储为SIMD目的地寄存器(例如,1650或1660)中的所指定的大小的对应数据字段中的值。
例如,用于执行用以提供SIMD向量前导零计数功能的指令的装置1601的一个实施例读取存储器向量操作数或者向量寄存器1620中的第一大小(例如,16位或者32位)的数据字段中的每个数据字段的多个位,并且对前导零计数电路1603的前导零计数器1630-1637中的被设置为零的最高有效连续位的数目进行计数,然后将该计数存储为SIMD目的地寄存器1660中的相同指定大小的对应数据字段中的值。用于执行用以提供SIMD向量前导零计数的指令的装置1601的另一个实施例读取存储器向量操作数或者向量寄存器1610中的第二大小(例如,32位或者64位)的数据字段中的每个数据字段的多个位,并且在前导零计数组合电路1604的选择性加法器电路1640到1643中,从奇数前导零计数器1631到1637中选择被设置为0的最高有效连续位的计数,或者分别将值m加到来自偶数前导零计数器1630到1636的计数,并且将所组合的计数存储为SIMD目的地寄存器1650中的指定大小的对应数据字段中的值。将领会,用于执行用以提供SIMD向量前导零计数的指令的装置1601的替代实施例可以能够执行第一数据字段大小的SIMD向量前导零计数和第二数据字段大小的SIMD向量前导零计数两者,如在图16中所示的,或者可以被修改成针对各种各样的指定的数据字段大小而执行SIMD向量前导零计数。如在本文所描述的实施例中,SIMD向量前导零计数指令可以与可变大小的元素和冲突掩码一起使用,以提供SIMD置换控制,从而在没有通过存储器执行相关性计算的情况下准许寄存器中的更有效的SIMD地址冲突解决。因此,本文公开的SIMD向量前导零计数指令和逻辑提供了有效SIMD地址冲突解决,尤其在某些收集-修改-分散应用中,例如,如关于图14A所讨论的。
当例如索引的正被比较元素与被需要来表示比较结果的掩码(例如,在256位寄存器中的16个16位元素)是相同大小时,则执行用以对所有元素交叉比较的指令可能是适当的。但是当存在比可用于表示比较结果的位更多的要比较的元素时,可能需要替代解决方案。将领会的是,如本文公开的SIMD向量包装元组比较指令可以用作用于可变大小元素和存储器偏移的替代解决方案,以提供SIMD向量地址冲突检测功能和被组合以生成用于有效SIMD地址冲突解决的冲突掩码的结果。还将领会的是,SIMD向量包装元组比较指令可以具有更多的通用可适用性(例如,当各种各样的不同比较操作中的任何一项可能有用时),并且相比于用以对所有元素交叉比较的指令在区域和功率方面需要更低的实现成本。
图17A图示了用以提供SIMD向量包装双交叉比较功能的示例指令1701的一个实施例。在一些实施例中,指令1701的编码可以被记录在一些机器可读介质上,以记录功能描述性材料,以用于由专用机器或者由通用处理机器执行。在一些实施例中,指令1701的编码可以指定第一向量寄存器1710,其包括第一多个数据字段(例如,n个数据字段),所述第一多个数据字段被划分成第一部分,每个第一部分具有第二多个数据字段(例如,两个数据字段),每个数据字段将是掩蔽的或者未掩蔽的。在一些实施例中,第一向量寄存器1710的数据字段可以是隐式未掩蔽的,从而需要比较它们中的每一个。在一些替代实施例中,第一向量寄存器1710的数据字段可以是显式掩蔽或者未掩蔽的(例如,在由指令1701指定的掩码寄存器中),从而仅需要比较未掩蔽数据字段中的元素。指令1701还可以指定第二向量寄存器1720或者存储器存储集合,其表示对应于第一多个数据字段的第三多个数据字段,所述第三多个数据字段被划分成第二部分,每个第二部分也具有所述第二多个数据字段(例如,两个数据字段)。在一些实施例中,包装元素可以是有符号或者无符号包装字节(8位)、字(16位)、双字(32位)、或者四倍字(64位)。指令1701还可以指定对特定类型的比较(例如,大于或等于,≥)进行编码的立即数字节操作数1731和包括被划分成对应第一部分的对应第一多个数据字段(例如,n个数据字段)的目的地向量寄存器1771,每个对应第一部分具有第二多个数据字段(例如,两个数据字段)。在一些实施例中,比较类型可以被立即数操作数1731指示为以下之一:等于、小于、小于或等于、总为假、不等于、不小于、不小于或等于、以及总为真。
对于第一向量寄存器1710中的第一多个n个数据字段的第一部分(例如,2元组)的数据字段中存储的每个元素而言,指令1701将该元素与表示第二向量寄存器1720或者存储器存储集合的所述第三多个n个数据字段的对应部分(例如,2元组)的每个元素相比较。在目的地向量寄存器1771中,指令1701根据对应比较,在与对应的第一寄存器1710部分的每个未掩蔽元素相对应的位掩码中,设置与第二向量1720部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与第一向量寄存器1710的元素相对应的所有位掩码可以与第一向量寄存器1710中其对应元素的最低有效位相对齐地被存储在目的地向量寄存器1771中。在一些替代实施例中,与第一向量寄存器1710的元素相对应的位掩码可以代替地根据存储在源/目的地向量寄存器1771的对应元素中的移位计数而重新对齐地存储在源/目的地向量寄存器1771中。
图17B图示了用以提供SIMD向量包装四元组交叉比较功能的指令1702的替代实施例。在一些实施例中,指令1702的编码也可以被记录在一些机器可读介质上,以记录功能描述性材料,以用于由专用机器或者由通用处理机器执行。在一些实施例中,指令1702的编码可以指定第一向量寄存器1710,其包括第一多个数据字段(例如,n个数据字段),所述第一多个数据字段被划分成第一部分,每个第一部分具有第二多个数据字段(例如,四个数据字段),每个数据字段是掩蔽的或者未掩蔽的。在一些实施例中,第一向量寄存器1710的数据字段可以是隐式未掩蔽的,从而需要比较它们中的每一个。在一些替代实施例中,第一向量寄存器1710的数据字段可以是显式掩蔽或者未掩蔽的(例如,在由指令1702指定的掩码寄存器中),从而仅需要比较未掩蔽数据字段中的元素。指令1702还可以指定第二向量寄存器1720或者存储器存储集合,其表示对应于第一多个数据字段的第三多个数据字段,所述第三多个数据字段被划分成第二部分,每个第二部分也具有所述第二多个数据字段(例如,四个数据字段)。在一些实施例中,包装元素可以是有符号或者无符号包装字节(8位)、字(16位)、双字(32位)、或者四倍字(64位)。指令1702还可以指定对特定类型的比较(例如,小于,<)进行编码的立即数字节操作数1732和包括被划分成对应第一部分的对应第一多个数据字段(例如,n个数据字段)的目的地向量寄存器1772,每个对应第一部分具有第二多个数据字段(例如,四个数据字段)。在一些实施例中,比较类型可以被立即数操作数1732指示为以下之一:等于、小于、小于或等于、总为假、不等于、不小于、不小于或等于、以及总为真。
对于第一向量寄存器1710中的第一多个n个数据字段的第一部分(例如,4元组)的数据字段中存储的每个元素而言,指令1702将该元素与表示第二向量寄存器1720或者存储器存储集合的所述第三多个n个数据字段的对应部分(例如,4元组)的每个元素相比较。在目的地向量寄存器1772中,指令1702根据对应比较,在与对应的第一寄存器1710部分的每个未掩蔽元素相对应的位掩码中,设置与第二向量1720部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与第一向量寄存器1710的元素相对应的所有位掩码可以与第一向量寄存器1710中其对应元素的最低有效位相对齐地被存储在目的地向量寄存器1772中。在一些替代实施例中,与第一向量寄存器1710的元素相对应的位掩码可以代替地根据存储在源/目的地向量寄存器1772的对应元素中的移位计数而重新对齐地存储在源/目的地向量寄存器1772中。
图17C图示了用以提供SIMD向量包装八元组交叉比较功能的指令1703的替代实施例。在一些实施例中,指令1703的编码也可以被记录在一些机器可读介质上,以记录功能描述性材料,以用于由专用机器或者由通用处理机器执行。在一些实施例中,指令1703的编码可以指定第一向量寄存器1710,其包括第一多个数据字段(例如,n个数据字段),所述第一多个数据字段被划分成第一部分,每个第一部分具有第二多个数据字段(例如,八个数据字段),每个数据字段是被掩蔽的或者未掩蔽的。在一些实施例中,第一向量寄存器1710的数据字段可以是隐式未掩蔽的,从而需要比较它们中的每一个。在一些替代实施例中,第一向量寄存器1710的数据字段可以是显式掩蔽或者未掩蔽的(例如,在由指令1703指定的掩码寄存器中),从而仅需要比较未掩蔽数据字段中的元素。指令1703还可以指定第二向量寄存器1720或者存储器存储集合,其表示与第一多个数据字段相对应的第三多个数据字段,所述第三多个数据字段被划分成第二部分,每个第二部分也具有所述第二多个数据字段(例如,八个数据字段)。在一些实施例中,包装元素可以是有符号或者无符号包装字节(8位)、字(16位)、双字(32位)、或者四倍字(64位)。指令1703还可以指定对特定类型的比较(例如,等于,=)进行编码的立即数字节操作数1733和包括被划分成对应第一部分的对应第一多个数据字段(例如,n个数据字段)的目的地向量寄存器1773,每个对应第一部分具有第二多个数据字段(例如,八个数据字段)。在一些实施例中,比较类型可以被立即数操作数1733指示为以下之一:等于、小于、小于或等于、总为假、不等于、不小于、不小于或等于、以及总为真。
对于第一向量寄存器1710中的第一多个n个数据字段的第一部分(例如,8元组)的数据字段中存储的每个元素而言,指令1703将该元素与表示第二向量寄存器1720或者存储器存储集合的所述第三多个n个数据字段的对应部分(例如,8元组)的每个元素相比较。在目的地向量寄存器1773中,指令1703根据对应比较,在与对应的第一寄存器1710部分的每个未掩蔽元素相对应的位掩码中,设置与第二向量1720部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与第一向量寄存器1710的元素相对应的所有位掩码可以与在第一向量寄存器1710中其对应元素的最低有效位相对齐地被存储在目的地向量寄存器1773。在一些替代实施例中,与第一向量寄存器1710的元素相对应的位掩码可以代替地根据存储在源/目的地向量寄存器1773的对应元素中的移位计数而重新对齐地存储在源/目的地向量寄存器1773中。
图18图示了将指令的结果进行组合以生成用于有效向量地址冲突解决的地址冲突掩码的方法的实施例,所述指令用以提供SIMD向量包装元组交叉比较功能。对于第一向量包装二元组交叉比较1802而言,第一数据类型的元素被存储在向量寄存器1810的n个数据字段中的每个数据字段中。第一数据类型的元素还被存储在向量1820的n个数据字段的每个数据字段中,所述向量1820可以被存储在向量寄存器中或者被存储在表示向量1820的存储器集合中。在处理器中,对用于向量包装二元组交叉比较1802的SIMD指令进行解码。
响应于用于向量包装二元组交叉比较1802的SIMD指令,对于向量寄存器1810中的n个数据字段的每个部分(例如,2元组)的数据字段中存储的每个元素,指令1802将该元素与表示向量1820的n个字段的向量寄存器或者存储器存储集合的对应部分(例如,2元组)的每个元素相比较。在目的地向量寄存器1830中,指令1802根据所执行的对应比较(例如,针对相等),在与对应的寄存器1810部分的每个未掩蔽元素相对应的位掩码中,设置与向量1820部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与向量寄存器1810的元素相对应的所有位掩码可以与第一向量寄存器1810中其对应元素的最低有效位相对齐地被首先存储在目的地向量寄存器1830中,并且然后包装移位1812可以根据单独的SIMD指令来执行。在一些替代实施例中,与第一向量寄存器1810的元素相对应的位掩码可以代替地根据存储在源/目的地向量寄存器1830的对应元素中的移位计数而重新对齐地存储在源/目的地向量寄存器1830中。
对于第二向量包装二元组交叉比较1803而言,第一数据类型的元素被存储在向量寄存器1815的n个数据字段的每个数据字段中。第一数据类型的元素还被存储在向量1825的n个数据字段的每个数据字段中,所述向量1825可以被存储在向量寄存器中或者被存储在表示向量1825的存储器集合中。对用于向量包装二元组交叉比较1803的第二SIMD指令进行解码。响应于用于向量包装二元组交叉比较1803的第二SIMD指令,对于向量寄存器1815中的n个数据字段的每个部分(例如,2元组)的数据字段中存储的每个元素,指令1803将该元素与表示向量1825的n个字段的向量寄存器或者存储器存储集合的对应部分(例如,2元组)的每个元素相比较。在目的地向量寄存器1835中,指令1803根据所执行的对应比较(例如,针对相等),在与对应的寄存器1815部分的每个未掩蔽元素相对应的位掩码中,设置与向量1825部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与向量寄存器1815的元素相对应的所有位掩码可以与第一向量寄存器1815中其对应元素的最低有效位相对齐地被首先存储在目的地向量寄存器1835中,并且然后包装移位1813可以根据单独的SIMD指令来执行。在一些替代实施例中,与第一向量寄存器1815的元素相对应的位掩码可以代替地根据存储在源/目的地向量寄存器1835的对应元素中的移位计数而重新对齐地存储在源/目的地向量寄存器1835中。然后可以根据置换向量1840和单独的SIMD向量置换指令对向量寄存器1835的位掩码元素执行向量置换,以生成临时结果向量寄存器1845。
对于第三向量包装二元组交叉比较1804而言,第一数据类型的元素被存储在向量1850的n个数据字段的每个数据字段中,所述向量1850可以被存储在向量寄存器中或者被存储在表示向量1850的存储器集合中。对用于向量包装二元组交叉比较1804的第三SIMD指令进行解码。响应于用于向量包装二元组交叉比较1804的第三SIMD指令,对于向量寄存器1815中的n个数据字段的每个部分(例如,2元组)的数据字段中存储的每个元素,指令1804将该元素与表示向量1850的n个字段的向量寄存器或者存储器存储集合的对应部分(例如,2元组)的每个元素相比较。在目的地向量寄存器1860中,指令1804根据所执行的对应比较(例如,针对相等),在与对应的寄存器1815部分的每个未掩蔽元素相对应的位掩码中,设置与向量1850部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与向量寄存器1815的元素相对应的所有位掩码可以与在向量寄存器1815中其对应元素的最低有效位相对齐地被首先存储在目的地向量寄存器1860中,并且然后包装移位1814可以根据单独的SIMD指令来执行。在一些替代实施例中,与第一向量寄存器1815的元素相对应的位掩码可以代替地根据存储在源/目的地向量寄存器1860的对应元素中的移位计数而重新对齐地存储在源/目的地向量寄存器1860中。
与向量寄存器1815的元素相对应的存储在源/目的地向量寄存器1860中的位掩码分别与存储在临时结果向量寄存器1845中的位掩码相组合(例如,根据单独的SIMD向量包装加法指令),以生成第二临时结果向量寄存器1870。与向量寄存器1815的元素相对应的存储在源/目的地向量寄存器1835中的位掩码分别与存储在第二临时结果向量寄存器1870中的位掩码相组合(例如,根据另一单独的SIMD向量包装加法指令),以生成第三临时结果向量寄存器1880。与向量寄存器1810的元素相对应的存储在源/目的地向量寄存器1830中的位掩码分别与存储在第三临时结果向量寄存器1880中的位掩码相组合(例如,根据另一单独的SIMD向量包装加法指令),以生成结果向量寄存器1890,其具有与向量寄存器1810的元素相对应的地址冲突掩码(例如,诸如1420)。
将领会,如本文公开的SIMD向量包装元组比较指令可以用作用于可变大小元素和存储器偏移量的替代解决方案,以提供SIMD向量地址冲突检测功能和被组合以生成用于有效SIMD地址冲突解决的冲突掩码的结果。还将领会,SIMD向量包装元组比较指令可以具有更多的通用可适用性(例如,当各种各样不同比较操作中的任何一个可能有用时),并且相比用以对所有元素交叉比较的指令在区域和功率方面需要更低的实现成本。
图19A图示了用于执行用以提供SIMD向量包装元组交叉比较功能的指令的装置1901的实施例。装置1901的实施例可以是用于执行用以提供SIMD向量包装元组交叉比较功能的指令的流水线400的一部分(例如,执行级416)或者核490的一部分(例如,(一个或者多个)执行单元462)。装置1901的一些实施例包括包装元组比较装置1903,其包括控制逻辑1940和比较器阵列1942,并且可选地包括移位装置1905,其包括移位器1950、1951、1952和1953等等。装置1901的实施例可以与解码级(例如,解码406)或者解码器(例如,解码单元440)耦合,以对用于SIMD向量包装元组交叉比较的指令进行解码,该指令可以准许有效向量地址冲突解决。一个或者多个执行单元(例如,执行装置1901)响应于经解码的指令,对于向量寄存器1910中的n个数据字段的每个部分(例如,2元组)的数据字段中存储的每个元素,将该元素与表示向量1920的n个数据字段的向量寄存器或者存储器存储集合的对应部分(例如,2元组)的每个元素相比较。装置1901的实施例可以与包括用以存储可变的多个n个可变大小数据元素的值的可变的多个n个可变大小数据字段的向量寄存器(例如,(一个或者多个)物理寄存器文件单元458)耦合。在目的地向量寄存器1970中,装置1901根据所执行的对应比较(例如,由立即数操作数1930指定的),在与对应寄存器1910部分的每个未掩蔽元素相对应的位掩码中,设置与向量1920部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与向量寄存器1910的元素相对应的所有位掩码可以与向量寄存器1910中其对应元素的最低有效位相对齐地被存储在目的地向量寄存器1970中。在一些替代实施例中,与第一向量寄存器1910的元素相对应的位掩码可以可选地根据存储在源/目的地向量寄存器1970的对应元素中的移位计数而(例如,通过移位装置1905)重新对齐地存储在源/目的地向量寄存器1970中。
图19B图示了用于执行用以提供SIMD向量包装元组交叉比较功能的指令的装置1902的替代实施例。装置1902的实施例可以是用于执行用以提供SIMD向量包装元组交叉比较功能的指令的流水线400的一部分(例如,执行级416)或者核490的一部分(例如,(一个或者多个)执行单元462)。装置1902的一些实施例包括包装元组比较装置1904,其包括控制逻辑1940和比较器阵列1944,并且可选地包括移位装置1906,其包括移位器1960、1961、1962、1963等等。装置1902的实施例可以与解码级(例如,解码406)或者解码器(例如,解码单元440)耦合,以对用于SIMD向量包装元组交叉比较的指令进行解码,该指令可以准许有效向量地址冲突解决。一个或者多个执行单元(例如,执行装置1902)响应于经解码的指令,对于向量寄存器1910中的n个数据字段的每个部分(例如,4元组)的数据字段中存储的每个元素,将该元素与表示向量1920的n个数据字段的向量寄存器或者存储器存储集合的对应部分(例如,4元组)的每个元素相比较。装置1902的实施例可以与包括用以存储可变的多个n个可变大小数据元素的值的可变的多个n个可变大小数据字段的向量寄存器(例如,(一个或者多个)物理寄存器文件单元458)耦合。在目的地向量寄存器1970中,装置1902根据所执行的对应比较(例如,由立即数操作数1930指定的),在与对应寄存器1910部分的每个未掩蔽元素相对应的位掩码中,设置与向量1920部分的每个元素相对应的掩码位,并且将目的地寄存器中的任何其他位(例如,位掩码中的更高有效位)设置为零值。在一些实施例中,与向量寄存器1910的元素相对应的所有位掩码可以与向量寄存器1910中其对应元素的最低有效位相对齐地被存储在目的地向量寄存器1970中。在一些替代实施例中,与第一向量寄存器1910的元素相对应的位掩码可以可选地根据存储在源/目的地向量寄存器1970的对应元素中的移位计数而(例如,通过移位装置1906)重新对齐地存储在源/目的地向量寄存器1970中。
使用SIMD向量包装元组比较指令准许了包括有符号或者无符号包装字节(8位)、字(16位)、双字(32位)和四倍字(64位)的可变的多个n个可变大小数据元素。将领会,SIMD向量包装元组比较指令可以具有比向量冲突指令更多的通用可适用性(例如,当各种各样不同比较操作中的任何一个可能有用时),并且相比用以对所有元素交叉比较的指令在区域和功率方面需要更低的实现成本。
本文公开的机制的实施例可以以硬件、软件、固件或者这样的实现方法的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或者程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
程序代码可以被应用于用以执行本文描述的功能的输入指令并且生成输出信息。所输出的信息可以以已知方式被应用于一个或者多个输出设备。出于这种应用的目的,处理系统包括具有处理器的任何系统,处理器诸如例如是数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或者微处理器。
程序代码可以以高级过程或面向对象的编程语言来实现,以与处理系统通信。如果期望的话,程序代码也可以以汇编语言或者机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定编程语言。在任何情况下,语言可以是经编译的阈值或者经解译的语言。
至少一个实施例的一个或者多个方面可以由存储在表示处理器内的各种逻辑的机器可读介质上的代表性指令来实现,所述指令当被机器读取时促使该机器制造用于执行本文描述的技术的逻辑。这样的称为“IP核”的表示可以被存储在有形、机器可读介质上,并且供应给各种消费者或者制造设施,以加载到实际制作逻辑或者处理器的制造机器中。
这样的机器可读介质可以包括但是不限于由机器或者设备制造或者形成的制品的非瞬时性、有形布置,其包括存储介质,诸如硬盘、任何其他类型的盘(包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、紧凑可重写盘(CD-RW)、和磁光盘)、半导体设备(诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM))、磁卡或者光学卡、或者适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非瞬时性有形机器可读介质,其包含指令或者包含设计数据,诸如定义了本文描述的结构、电路、装置、处理器和/或系统特征的硬件描述语言(HDL)。这样的实施例也可以被称为程序产品。
在一些情况下,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、模拟或者以其他方式转换成要由核来处理的一个或者多个其他指令。指令转换器可以以软件、硬件、固件或者其组合来实现。指令转换器可以在处理器上、在处理器外或者部分在处理器上且部分在处理器外。
因此,公开了用于执行根据至少一个实施例的一个或者多个指令的技术。虽然已经在附图中描述且示出了某些示例性实施例,但是要理解,这样的实施例仅仅说明宽泛发明而并不对宽泛发明进行限制,并且本发明不限于所示出和描述的具体构造和布置,因为各种其他修改可以由本领域技术人员在研究本公开时想到。在诸如本文的技术领域中,在发展很快并且进一步的进步不容易预见的情况下,所公开的实施例在不偏离本公开的原理或者随附权利要求的范围的情况下可以是通过使得能够实现技术进步所促成的在布置和细节方面可容易修改的。
Claims (28)
1.一种处理器,包括:
第一向量寄存器,用以在多个n个数据字段中的每个数据字段中存储第一数据类型的元素;
第二向量寄存器或者存储器存储集合,用以在多个n个数据字段中的每个数据字段中存储第一数据类型的对应元素;
解码级,用以对指定向量包装元组交叉比较操作和元组大小的第一指令进行解码;以及
一个或者多个执行单元,响应于经解码的第一指令,用以:
对于第一向量寄存器中的所述多个n个数据字段的元组大小部分的每个数据字段,将其对应元素与所述第二向量寄存器或者存储器存储集合的多个n个数据字段的对应元组大小部分的每个元素相比较,以及
根据对应比较,在与对应第一向量寄存器元组大小部分的每个未掩蔽元素相对应的位掩码中,设置与所述第二向量寄存器或者存储器存储集合元组大小部分的每个元素相对应的掩码位。
2.如权利要求1所述的处理器,其中,用于交叉比较操作的比较类型通过由所述第一指令所指定的立即数操作数来指示。
3.如权利要求2所述的处理器,其中,用于交叉比较操作的比较类型从由以下各项构成的组中选择:等于、小于、小于或等于、假、不等于、不小于、不小于或等于、以及真。
4.如权利要求1所述的处理器,其中,所述第一指令是用以将第一向量寄存器的数据字段的对与第二向量寄存器或者存储器存储集合的数据字段的对进行交叉比较的向量包装二元组比较指令。
5.如权利要求1所述的处理器,其中,所述第一指令是用以将第一向量寄存器的数据字段的四元组与第二向量寄存器或者存储器集合的数据字段的四元组进行交叉比较的向量包装四元组比较指令。
6.如权利要求1所述的处理器,其中,所述第一指令是用以将第一向量寄存器的数据字段的八元组与第二向量寄存器或者存储器集合的数据字段的八元组进行交叉比较的向量包装八元组比较指令。
7.如权利要求1所述的处理器,其中,所述多个n个数据字段是64个数据字段。
8.如权利要求1所述的处理器,其中,所述多个n个数据字段是32个数据字段。
9.如权利要求1所述的处理器,其中,所述多个n个数据字段是16个数据字段。
10.如权利要求1所述的处理器,其中,所述多个n个数据字段是8个数据字段。
11.如权利要求1所述的处理器,其中,数据字段的多个n个数据字段中的每个数据字段是8位。
12.如权利要求1所述的处理器,其中,数据字段的多个n个数据字段中的每个数据字段是16位。
13.如权利要求1所述的处理器,其中,与所述第二向量寄存器或者存储器存储集合元组大小部分的每个元素相对应的多个掩码位的集合包括2位。
14.如权利要求1所述的处理器,其中,与所述第二向量寄存器或者存储器存储集合元组大小部分的每个元素相对应的多个掩码位的集合包括4位。
15.如权利要求1所述的处理器,其中,与所述第二向量寄存器或者存储器存储集合元组大小部分的每个元素相对应的多个掩码位的集合包括8位。
16.如权利要求1所述的处理器,其中,所述第一指令指定了掩码寄存器操作数,所述掩码寄存器操作数具有用以指示第一向量寄存器中的多个n个数据字段中的每个数据字段分别是掩蔽还是未掩蔽的位。
17.一种方法,包括:
将第一数据类型的元素存储在第一向量寄存器的多个n个数据字段中的每个数据字段中;
将第一数据类型的对应元素存储在第二向量寄存器的多个n个数据字段中的每个数据字段中;
在处理器中执行用于向量包装元组交叉比较的SIMD指令;以及
对于第一向量寄存器中的所述多个n个数据字段的元组大小部分的每个数据字段,将其对应元素与所述第二向量寄存器或者存储器存储集合的多个n个数据字段的对应元组大小部分的每个元素相比较,以及
根据对应比较,在与对应第一向量寄存器元组大小部分的每个未掩蔽元素相对应的位掩码中,设置与所述第二向量寄存器或者存储器存储集合元组大小部分的每个元素相对应的掩码位。
18.如权利要求17所述的方法,其中,第一寄存器的每个元素是隐式未掩蔽的。
19.如权利要求17所述的方法,其中,掩码寄存器的n个位被设置为1或者0,以显式地指示第一寄存器的对应元素分别是未掩蔽的或掩蔽的。
20.如权利要求17所述的方法,其中,所述多个n个数据字段的所述部分包括两个数据字段。
21.如权利要求17所述的方法,其中,所述多个n个数据字段的所述部分包括四个数据字段。
22.如权利要求17所述的方法,其中,所述多个n个数据字段的所述部分包括八个数据字段。
23.一种处理系统,包括:
存储器;以及
多个处理器,每个处理器包括:
第一向量寄存器,用以在多个n个数据字段中的每个数据字段中存储第一数据类型的元素;
第二向量寄存器或者存储器存储集合,用以在多个n个数据字段中的每个数据字段中存储第一数据类型的对应元素;
解码级,用以对指定向量包装元组交叉比较操作和元组大小的第一指令进行解码;以及
一个或者多个执行单元,响应于经解码的第一指令,用以:
对于第一向量寄存器中的所述多个n个数据字段的元组大小部分的每个数据字段,将其对应元素与所述第二向量寄存器或者存储器存储集合的多个n个数据字段的对应元组大小部分的每个元素相比较,以及
根据对应比较,在与对应第一向量寄存器元组大小部分的每个未掩蔽元素相对应的位掩码中,设置与所述第二向量寄存器或者存储器存储集合元组大小部分的每个元素相对应的掩码位。
24.如权利要求23所述的处理系统,其中,用于交叉比较操作的比较类型通过由所述第一指令指定的立即数操作数来指示。
25.如权利要求23所述的处理系统,其中,用于交叉比较操作的比较类型从由以下各项构成的组中选择:等于、小于、小于或等于、假、不等于、不小于、不小于或等于、以及真。
26.如权利要求23所述的处理系统,其中,所述第一指令是用以将第一向量寄存器的数据字段的对与第二向量寄存器或者存储器存储集合的数据字段的对进行交叉比较的向量包装二元组比较指令。
27.如权利要求23所述的处理系统,其中,所述第一指令是用以将第一向量寄存器的数据字段的四元组与第二向量寄存器或者存储器集合的数据字段的四元组进行交叉比较的向量包装四元组比较指令。
28.如权利要求23所述的处理系统,其中,所述第一指令是用以将第一向量寄存器的数据字段的八元组与第二向量寄存器或者存储器集合的数据字段的八元组进行交叉比较的向量包装八元组比较指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/588247 | 2014-12-31 | ||
US14/588,247 US10203955B2 (en) | 2014-12-31 | 2014-12-31 | Methods, apparatus, instructions and logic to provide vector packed tuple cross-comparison functionality |
PCT/US2015/065514 WO2016109170A1 (en) | 2014-12-31 | 2015-12-14 | Methods, apparatus, instructions and logic to provide vector packed tuple cross-comparison functionality |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107003854A true CN107003854A (zh) | 2017-08-01 |
CN107003854B CN107003854B (zh) | 2021-10-15 |
Family
ID=56164261
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580065014.4A Active CN107003854B (zh) | 2014-12-31 | 2015-12-14 | 提供向量包装元组交叉比较功能的方法、装置、指令和逻辑 |
Country Status (9)
Country | Link |
---|---|
US (1) | US10203955B2 (zh) |
EP (1) | EP3241120B1 (zh) |
JP (1) | JP6745022B2 (zh) |
KR (1) | KR102472894B1 (zh) |
CN (1) | CN107003854B (zh) |
BR (1) | BR112017011515A2 (zh) |
SG (1) | SG11201704466QA (zh) |
TW (1) | TWI610233B (zh) |
WO (1) | WO2016109170A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10228941B2 (en) * | 2013-06-28 | 2019-03-12 | Intel Corporation | Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register |
US9606803B2 (en) * | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
CN107315563B (zh) * | 2016-04-26 | 2020-08-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量比较运算的装置和方法 |
EP3491515A4 (en) * | 2016-07-27 | 2020-07-15 | Intel Corporation | VECTOR COMPARISON MULTIPLEXING SYSTEM AND METHOD |
US10564964B2 (en) * | 2016-08-23 | 2020-02-18 | International Business Machines Corporation | Vector cross-compare count and sequence instructions |
WO2018182445A1 (en) * | 2017-03-31 | 2018-10-04 | Intel Corporation | Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements |
TWI626548B (zh) * | 2017-03-31 | 2018-06-11 | 東森信息科技股份有限公司 | 資料收集與儲存系統及其方法 |
US11442726B1 (en) | 2021-02-26 | 2022-09-13 | International Business Machines Corporation | Vector pack and unpack instructions |
KR102370851B1 (ko) * | 2021-08-18 | 2022-03-07 | 주식회사 로그프레소 | 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080016327A1 (en) * | 2006-06-27 | 2008-01-17 | Amitabh Menon | Register File Bypass With Optional Results Storage and Separate Predication Register File in a VLIW Processor |
US20080077773A1 (en) * | 2006-09-22 | 2008-03-27 | Julier Michael A | Instruction and logic for processing text strings |
US20100274988A1 (en) * | 2002-02-04 | 2010-10-28 | Mimar Tibet | Flexible vector modes of operation for SIMD processor |
US8023299B1 (en) * | 2009-04-09 | 2011-09-20 | Netlogic Microsystems, Inc. | Content addressable memory device having spin torque transfer memory cells |
US20120144172A1 (en) * | 2010-12-07 | 2012-06-07 | De Cesare Josh P | Interrupt Distribution Scheme |
US20120259907A1 (en) * | 2011-04-07 | 2012-10-11 | Olson Christopher H | Pipelined divide circuit for small operand sizes |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9436468B2 (en) | 2005-11-22 | 2016-09-06 | Intel Corporation | Technique for setting a vector mask |
US20070186210A1 (en) | 2006-02-06 | 2007-08-09 | Via Technologies, Inc. | Instruction set encoding in a dual-mode computer processing environment |
US8078847B2 (en) * | 2007-05-14 | 2011-12-13 | Apple Inc. | Detecting memory-hazard conflicts during vector processing |
US8984262B2 (en) * | 2008-08-15 | 2015-03-17 | Apple Inc. | Generate predicates instruction for processing vectors |
US8605015B2 (en) * | 2009-12-23 | 2013-12-10 | Syndiant, Inc. | Spatial light modulator with masking-comparators |
US8972698B2 (en) * | 2010-12-22 | 2015-03-03 | Intel Corporation | Vector conflict instructions |
US9665371B2 (en) | 2011-11-30 | 2017-05-30 | Intel Corporation | Providing vector horizontal compare functionality within a vector register |
WO2013095554A1 (en) | 2011-12-22 | 2013-06-27 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of consecutive integers in numerical order |
EP2798504A4 (en) * | 2011-12-29 | 2016-07-27 | Intel Corp | PROCESSORS HAVING FULLY CONNECTED INTERCONNECTIONS SHARED BY VECTORIAL CONFLICT INSTRUCTIONS AND PERMUTATION INSTRUCTIONS |
WO2013101124A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Packed data operation mask comparison processors, methods, systems, and instructions |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US20140281418A1 (en) | 2013-03-14 | 2014-09-18 | Shihjong J. Kuo | Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions |
CN105653499B (zh) | 2013-03-15 | 2019-01-01 | 甲骨文国际公司 | 用于单指令多数据处理器的高效硬件指令 |
US9891913B2 (en) * | 2014-12-23 | 2018-02-13 | Intel Corporation | Method and apparatus for performing conflict detection using vector comparison operations |
-
2014
- 2014-12-31 US US14/588,247 patent/US10203955B2/en active Active
-
2015
- 2015-11-26 TW TW104139445A patent/TWI610233B/zh not_active IP Right Cessation
- 2015-12-14 EP EP15875951.4A patent/EP3241120B1/en active Active
- 2015-12-14 SG SG11201704466QA patent/SG11201704466QA/en unknown
- 2015-12-14 CN CN201580065014.4A patent/CN107003854B/zh active Active
- 2015-12-14 KR KR1020177014340A patent/KR102472894B1/ko active IP Right Grant
- 2015-12-14 JP JP2017528898A patent/JP6745022B2/ja active Active
- 2015-12-14 WO PCT/US2015/065514 patent/WO2016109170A1/en active Application Filing
- 2015-12-14 BR BR112017011515-8A patent/BR112017011515A2/pt not_active Application Discontinuation
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100274988A1 (en) * | 2002-02-04 | 2010-10-28 | Mimar Tibet | Flexible vector modes of operation for SIMD processor |
US20080016327A1 (en) * | 2006-06-27 | 2008-01-17 | Amitabh Menon | Register File Bypass With Optional Results Storage and Separate Predication Register File in a VLIW Processor |
US20080077773A1 (en) * | 2006-09-22 | 2008-03-27 | Julier Michael A | Instruction and logic for processing text strings |
US8023299B1 (en) * | 2009-04-09 | 2011-09-20 | Netlogic Microsystems, Inc. | Content addressable memory device having spin torque transfer memory cells |
US20120144172A1 (en) * | 2010-12-07 | 2012-06-07 | De Cesare Josh P | Interrupt Distribution Scheme |
US20120259907A1 (en) * | 2011-04-07 | 2012-10-11 | Olson Christopher H | Pipelined divide circuit for small operand sizes |
Also Published As
Publication number | Publication date |
---|---|
WO2016109170A1 (en) | 2016-07-07 |
TW201643707A (zh) | 2016-12-16 |
CN107003854B (zh) | 2021-10-15 |
KR20170102865A (ko) | 2017-09-12 |
JP2018504667A (ja) | 2018-02-15 |
TWI610233B (zh) | 2018-01-01 |
SG11201704466QA (en) | 2017-07-28 |
JP6745022B2 (ja) | 2020-08-26 |
BR112017011515A2 (pt) | 2018-02-27 |
EP3241120B1 (en) | 2020-07-08 |
US10203955B2 (en) | 2019-02-12 |
EP3241120A1 (en) | 2017-11-08 |
KR102472894B1 (ko) | 2022-12-02 |
EP3241120A4 (en) | 2018-08-22 |
US20160188336A1 (en) | 2016-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104919416B (zh) | 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑 | |
CN103793201B (zh) | 提供向量压缩和旋转功能的指令和逻辑 | |
KR101790428B1 (ko) | 조건부 루프들을 벡터화하기 위한 명령어들 및 로직 | |
CN104915181B (zh) | 用于条件存储器错误帮助抑制的方法、处理器和处理系统 | |
CN104011662B (zh) | 用于提供向量混合和置换功能的指令和逻辑 | |
CN104050077B (zh) | 利用多个测试源来提供测试的处理器、处理系统和方法 | |
CN104049945B (zh) | 用于融合指令以在多个测试源上提供或(or)测试和与(and)测试功能的方法和装置 | |
CN103827814B (zh) | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 | |
TWI731892B (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
CN108369509B (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN104321741B (zh) | 双舍入组合浮点乘法和加法 | |
CN107003854A (zh) | 提供向量包装元组交叉比较功能的方法、装置、指令和逻辑 | |
CN104657112B (zh) | 用于处理文本串的指令和相关联的处理器 | |
TWI659356B (zh) | 用以提供向量水平式多數決投票功能之指令與邏輯(二) | |
CN104137060B (zh) | 高速缓存协处理单元 | |
CN107430508A (zh) | 用于提供原子范围操作的指令和逻辑 | |
CN107094369A (zh) | 用于提供simd sm3密码散列函数的指令和逻辑 | |
CN104025033B (zh) | 利用控制操纵的simd可变移位和循环 | |
CN107209722A (zh) | 用于在安全飞地页面高速缓存中使安全飞地的进程分叉和建立子飞地的指令和逻辑 | |
CN108292215A (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN107003921A (zh) | 具有有限状态机控制的可重配置测试访问端口 | |
CN104137053B (zh) | 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法 | |
CN106575216A (zh) | 数据元素选择和合并处理器、方法、系统和指令 | |
TWI720056B (zh) | 用於設置多重向量元素操作之指令及邏輯 | |
CN108292229A (zh) | 用于重新出现的相邻聚集的指令和逻辑 |
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 |