CN108431770A - 用于加速集合运算的硬件内容关联数据结构 - Google Patents
用于加速集合运算的硬件内容关联数据结构 Download PDFInfo
- Publication number
- CN108431770A CN108431770A CN201680074273.8A CN201680074273A CN108431770A CN 108431770 A CN108431770 A CN 108431770A CN 201680074273 A CN201680074273 A CN 201680074273A CN 108431770 A CN108431770 A CN 108431770A
- Authority
- CN
- China
- Prior art keywords
- key
- value pair
- instruction
- value
- logic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003860 storage Methods 0.000 claims description 181
- 238000000034 method Methods 0.000 claims description 136
- 235000013399 edible fruits Nutrition 0.000 claims description 10
- 229920002755 poly(epichlorohydrin) Polymers 0.000 claims description 6
- 238000012217 deletion Methods 0.000 claims description 5
- 230000037430 deletion Effects 0.000 claims description 5
- 230000015654 memory Effects 0.000 description 159
- 238000010586 diagram Methods 0.000 description 52
- 238000012545 processing Methods 0.000 description 51
- 230000006870 function Effects 0.000 description 26
- 230000007246 mechanism Effects 0.000 description 26
- 230000008569 process Effects 0.000 description 23
- 230000009467 reduction Effects 0.000 description 23
- 238000005516 engineering process Methods 0.000 description 22
- 238000004891 communication Methods 0.000 description 19
- 239000000872 buffer Substances 0.000 description 18
- 238000004519 manufacturing process Methods 0.000 description 15
- 238000013461 design Methods 0.000 description 13
- 238000003491 array Methods 0.000 description 12
- 238000004422 calculation algorithm Methods 0.000 description 12
- 239000003795 chemical substances by application Substances 0.000 description 12
- 238000007667 floating Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 10
- 238000009826 distribution Methods 0.000 description 10
- 238000007405 data analysis Methods 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 8
- 238000005056 compaction Methods 0.000 description 6
- 230000003252 repetitive effect Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 5
- 230000008878 coupling Effects 0.000 description 5
- 238000010168 coupling process Methods 0.000 description 5
- 238000005859 coupling reaction Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000007792 addition Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000000151 deposition Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 230000000712 assembly Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000001052 transient effect Effects 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012544 monitoring process Methods 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
- 238000012163 sequencing technique Methods 0.000 description 2
- 241000894007 species Species 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 239000010752 BS 2869 Class D Substances 0.000 description 1
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 206010020675 Hypermetropia Diseases 0.000 description 1
- 102000001332 SRC Human genes 0.000 description 1
- 108060006706 SRC Proteins 0.000 description 1
- 235000012377 Salvia columbariae var. columbariae Nutrition 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000009172 bursting Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 240000001735 chia Species 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000003801 milling Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000013442 quality metrics Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000000844 transformation Methods 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- 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/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Algebra (AREA)
- Pure & Applied Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
一种处理器包括:前端,用于接收指令;解码器,用于对所述指令进行解码;集合运算逻辑单元(SOLU),用于执行所述指令;以及引退单元。所述SOLU包括用于进行以下操作的逻辑:将第一键值对集合存储在内容关联数据结构中,接收第二键值对集合,以及识别所述两个集合中具有匹配键的键值对。所述SOLU包括用于进行以下操作的逻辑:将所述第二键值对集合添加到所述第一集合中以产生输出集合,以及将运算应用于具有匹配键的键值对的值,从而生成所述匹配键的单个值。所述SOLU包括用于进行以下操作的逻辑:产生包括来自所述第一集合的具有匹配键的输出集合,以及丢弃来自所述第一集合的具有唯一键的键值对。
Description
技术领域
本公开涉及处理逻辑、微处理器和相关联的指令集架构领域,所述指令集架构当由处理器或其他处理逻辑执行时执行逻辑、数学或其他函数运算。
相关技术说明
多处理器系统正变得越来越普遍。多处理器系统的应用包括动态域分区一直延续到桌面计算。为了利用多处理器系统,可以将待执行的代码分成多个线程以供由各种处理实体执行。可以彼此并行地执行每个线程。当指令在处理器上接收时其可以被解码为原生或更原生的词语或指令字以供在处理器上执行。处理器可以在片上系统中实施。图处理是大数据分析应用的核心。一些图形处理框架基于集合运算,包括集合并运算(set unionoperation)和集合交运算(set intersection operation)。
附图说明
在附图中的诸个图中通过示例而非限制地示出各个实施例:
图1A是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为具有可以包括用于执行指令的执行单元的处理器;
图1B示出了根据本公开的实施例的数据处理系统;
图1C示出了用于执行文本串比较操作的数据处理系统的其他实施例;
图2是根据本公开的实施例的处理器的微架构的框图,处理器可以包括用于执行指令的逻辑电路;
图3A示出了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示;
图3B示出了根据本公开的实施例的可能的寄存器内数据存储格式;
图3C示出了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示;
图3D示出了操作编码格式的实施例;
图3E示出了根据本公开的实施例的具有四十位或更多位的另一可能的操作编码格式;
图3F示出了根据本公开的实施例的又一可能的操作编码格式;
图4A是示出根据本公开的实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图;
图4B是示出根据本公开的实施例的、要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑的框图;
图5A是根据本公开的实施例的处理器的框图;
图5B是根据本公开的实施例的核的示例实现的框图;
图6是根据本公开的实施例的系统的框图;
图7是根据本公开的实施例的第二系统的框图;
图8是根据本公开的实施例的第三系统的框图;
图9是根据本公开的实施例的芯片上系统的框图;
图10示出了根据本公开的实施例的处理器,包括中央处理单元和图形处理单元,该处理器可执行至少一条指令;
图11是示出根据本公开的实施例的IP核开发的框图;
图12示出了根据本公开的实施例的不同类型的处理器可以如何仿真第一类型的指令;
图13示出了根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;
图14是根据本公开的实施例的处理器的指令集架构的框图;
图15是根据本公开的实施例的处理器的指令集架构的更具体的框图;
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;
图17是根据本公开的实施例的用于利用处理器的电子设备的框图;
图18是根据本公开的实施例的用于加速执行集合运算的示例系统的图示;
图19是根据本公开的实施例的用于加速执行集合运算的另一示例系统的图示;
图20是框图,展示了根据本公开的实施例的集合运算逻辑单元;
图21是根据本公开的实施例的用于将键值对集合添加到硬件内容关联数据结构中的运算的图示;
图22是根据本公开的实施例的用于将键值对集合添加到硬件内容关联数据结构(CAM)的内容中的方法的图示;
图23是根据本公开的实施例的用于判定输入键值对集合中的键中的任何键是否与当前存储在硬件内容关联数据结构(CAM)中的键值对中的键相匹配的运算的图示;
图24是根据本公开的实施例的用于判定输入键值对集合中的键中的任何键是否与当前存储在硬件内容关联数据结构(CAM)中的键值对中的键相匹配的方法的图示;
图25是根据本公开的实施例的用于确定硬件内容关联数据结构(CAM)的当前长度的运算的图示;
图26是根据本公开的实施例的用于确定硬件内容关联数据结构(CAM)的当前长度的方法的图示;
图27是根据本公开的实施例的用于重置硬件内容关联数据结构(CAM)的内容的运算的图示;
图28是根据本公开的实施例的用于重置硬件内容关联数据结构(CAM)的内容的方法的图示;
图29是根据本公开的实施例的用于将硬件内容关联数据结构(CAM)的内容移动到存储器中的运算的图示;
图30是根据本公开的实施例的用于将硬件内容关联数据结构(CAM)的内容移动到存储器中的方法的图示;
图31是根据本公开的实施例的用于使用硬件内容关联数据结构(CAM)来选择性地执行集合运算的方法的图示。
具体实施方式
以下说明描述了用于加速在处理设备上执行集合运算的指令和处理逻辑。这种处理设备可以包括乱序处理器。在以下描述中,阐述了如处理逻辑、处理器类型、微架构条件、事件、启用机制等许多具体细节以便提供对本公开的实施例的更全面理解。然而,本领域的技术人员应理解的是,可以在没有这种具体细节的情况下实践实施例。另外,未详细示出一些熟知的结构、电路等以避免不必要地模糊本公开的实施例。
虽然参照处理器来描述下列各实施例,但是,其他实施例也适用于其他类型的集成电路和逻辑器件。本公开的实施例的类似技术和教导可应用于可受益于更高的流水线吞吐量和改善的性能的其他类型的电路或半导体器件。本公开的诸个实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并可以应用于其中可以执行对数据的操纵或管理的任何处理器和机器。另外,下列描述提供了示例,并且为了进行说明,所附附图示出各种示例。然而,这些示例不应当以限制性意义来解释,因为它们仅仅旨在提供本公开的诸个实施例的示例,而并非对本公开的实施例的所有可能实现方式进行穷举。
虽然下述的示例是在执行单元和逻辑电路情境下描述指令处理和分配,但本公开的其他实施例也可通过存储在机器可读有形介质上的数据和/或指令来完成,这些数据和/或指令在被机器执行时使得机器执行与本公开至少一个实施例相一致的功能。在一个实施例中,与本公开的实施例相关联的功能被具体化在机器可执行指令中。这些指令可用来使可以通过这些指令而被编程的通用处理器或专用处理器执行本公开的步骤。本公开的诸个实施例也可以作为计算机程序产品或软件来提供,该计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,这些指令可被用来对计算机(或其他电子设备)进行编程来执行根据本公开的实施例的一个或多个操作。此外,本公开的多个实施例的多个步骤可由包含用于执行这些步骤的固定功能逻辑的专用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。
被用于对逻辑进行编程以执行本公开的诸个实施例的指令可被存储在系统的存储器(诸如,DRAM、高速缓存、闪存、或其他存储器)中。此外,指令可经由网络或通过其他计算机可读介质来分配。因此,机器可读介质可包括用于以机器(诸如,计算机)可读形式存储或发送信息的任何机制,但不限于:软盘、光盘、紧凑盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或在经由互联网通过电、光、声、或其他形式的传播信号(诸如,载波、红外信号、数字信号等)发送信息中所用的有形机器可读存储器。因此,计算机可读介质可以包括适用于以机器(例如,计算机)可读形式存储或发送电子指令或信息的任何类型的有形的机器可读介质。
设计会经历多个阶段,从创造到仿真到制造。表示设计的数据可用多种方式来表示该设计。首先,像仿真中可以有用的那样,可以使用硬件描述语言或另一功能性描述语言来表示硬件。此外,可在设计过程的某些阶段产生具有逻辑和/或晶体管门电路的电路级模型。此外,设计在某个阶段可以达到表示硬件模型中各种设备的物理布置的数据的层级。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于制造集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在任何设计表示中,数据可以被存储在任何形式的机器可读介质中。存储器或者磁或光存储设备(诸如,盘)可以是存储经由光或电波发送的信息的机器可读介质,调制或以其他方式生成这些光或电波以发送这些信息。当发送指示或承载代码或设计的电载波达到实现该电信号的复制、缓冲或重新发送的程度时,可以产生新的副本。因此,通信提供商或网络提供商会在有形机器可读介质上至少临时地存储具体化本公开的诸个实施例的技术的物品(诸如,编码在载波中的信息)。
在现代处理器中,可以将多个不同的执行单元用于处理和执行各种代码和指令。一些指令可以更快地完成,而其他指令可能需要多个时钟周期来完成。指令的吞吐量越快,则处理器的总体性能越好。因此,使尽可能多的指令尽可能快地执行将会是有利的。然而,可能存在具有较大的复杂度并且在执行时间和处理器资源方面要求更多的某些指令,诸如浮点指令、加载/存储操作、数据移动等等。
因为更多的计算机系统被用于互联网、文本以及多媒体应用,所以已逐渐地引进了附加的处理器支持。在一个实施例中,指令集可与一个或多个计算机架构相关联,一个或多个计算机架构包括:数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构来实现,微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的多个处理器可共享公共指令集的至少一部分。例如, 奔腾四(Pentium 4)处理器、酷睿(CoreTM)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices,Inc.)的多个处理器实现几乎相同版本的x86指令集(具有已随更新的版本加入的一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如,ARM控股有限公司、MIPS或它们的授权方或兼容方)设计的多个处理器可共享至少一部分公共指令集,但可包括不同的处理器设计。例如,ISA的相同寄存器架构在不同的微架构中可使用新的或公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可包括:可由软件编程者寻址或不可由软件编程者寻址的一个或多个寄存器、寄存器架构、寄存器堆、或其他寄存器集合。
指令可以包括一个或多个指令格式。在一个实施例中,指令格式可指示多个字段(位的数量、位的位置等)以指定将要被执行的操作以及将要对其执行操作的操作数等。在进一步的实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可被定义为具有指令格式字段的不同的子集,和/或被定义为具有以不同方式进行解释的给定字段。在一个实施例中,可以使用指令格式(并且,如果定义过,则以该指令格式的指令模板中的给定的一个)来表示指令,并且该指令指定或指示操作以及该操作将操作的操作数。
科学应用、金融应用、自动向量化通用应用、RMS(识别、挖掘和合成)应用以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(SIMD)指的是使得处理器对多个数据元素执行一个操作的指令类型。可将SIMD技术用于可将寄存器中的多个位逻辑地划分为多个固定尺寸或可变尺寸的数据元素(每个数据元素表示单独的值)的处理器中。例如,在一个实施例中,可将64位寄存器中的多个位组织为包含四个单独的16位数据元素的源操作数,每个数据元素表示单独的16位的值。该数据类型可被称为‘紧缩’数据类型或‘向量’数据类型,并且该数据类型的操作数可被称为紧缩数据操作数或向量操作数。在一个实施例中,紧缩数据项或向量可以是存储在单个寄存器中的紧缩数据元素的序列,并且紧缩数据操作数或向量操作数可以是SIMD指令(或“紧缩数据指令”或“向量指令”)的源操作数或目的地操作数。在一个实施例中,SIMD指令指定了将要对两个源向量操作数执行以生成具有相同或不同尺寸的、具有相同或不同数量的数据元素的、具有相同或不同数据元素顺序的目的地向量操作数(也被称为结果向量操作数)的单个向量操作。
诸如由酷睿(CoreTM)处理器(具有包括x86、MMXTM、流SIMD扩展(SSE)、SSE2、SSE3、SSE4.1、SSE4.2指令的指令集)、ARM处理器(诸如,ARM处理器族,具有包括向量浮点(VFP)和/或NEON指令的指令集)和MIPS处理器(诸如,中国科学院计算机技术研究所(ICT)开发的龙芯处理器族)所采用的SIMD技术之类的SIMD技术在应用性能上带来了极大的提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。
在一个实施例中,目的地寄存器/数据和源寄存器/数据可以是表示对应数据或操作的源和目的地的通用术语。在一些实施例中,它们可由寄存器、存储器或具有与所描绘的那些名称或功能不同的名称或功能的其他存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其他存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其他存储区域,等等。在其他实施例中,SRC和DEST存储区域中的两个或更多可对应于相同存储区域中的不同数据存储元素(例如,SIMD寄存器)。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回至两个源寄存器中作为目的地寄存器的那个寄存器,源寄存器中的一个也可以作为目的地寄存器。
图1A是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为具有可以包括用于执行指令的执行单元的处理器。根据本公开,诸如在本文中所描述的实施例中,系统100可以包括诸如处理器102之类的组件,该处理器102用于使用包括逻辑的执行单元以执行算法来处理数据。系统100可以代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的III、4、XeonTM、、XScaleTM和/或StrongARMTM微处理器的处理系统,不过也可使用其他系统(包括具有其他微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWSTM操作系统的一个版本,不过也可使用其他操作系统(例如UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本公开的各实施例不限于硬件电路和软件的任何特定组合。
诸实施例不限于计算机系统。本公开的实施例可用于其他设备,诸如手持式设备和嵌入式应用。手持式设备的某些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(PDA)以及手持式PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或可执行根据至少一个实施例的一条或多条指令的任何其他系统。
计算机系统100可包括处理器102,处理器102可包括一个或多个执行单元108,用于执行算法以执行根据本公开的一个实施例的至少一个指令。可在单处理器桌面或服务器系统的情境中描述一个实施例,但是可将其他实施例包括在多处理器系统中。系统100可以是“中枢”系统架构的示例。系统100可以包括处理器102以用于处理数据信号。处理器102可以包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现多个指令集组合的处理器或任意其他处理器设备(例如,数字信号处理器)。在一个实施例中,处理器102可以耦合至处理器总线110,处理器总线110可以在处理器102与系统100中的其他组件之间传输数据信号。系统100的多个要素可以执行为熟悉本领域的人员所公知的它们的常规功能。
在一个实施例中,处理器102可以包括第一级(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,用于指令和数据存储,并且用于图形命令、数据和纹理的存储。MCH 116可以引导处理器102、存储器120以及系统100内的其他组件之间的数据信号,并用于在处理器总线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、芯片组以及处理器102的高速I/O总线。示例可包括音频控制器、固件中枢(闪存BIOS)128、无线收发机126、数据存储设备124、包括用户输入和键盘接口的传统I/O控制器、串行扩展端口(诸如,通用串行总线(USB))以及网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或其他大容量存储设备。
对于系统的另一个实施例,根据一个实施例的指令可以与芯片上系统一起使用。芯片上系统的一个实施例包括处理器和存储器。用于一个这样的系统的存储器可以包括闪存。闪存可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可位于芯片上系统上。
图1B示出数据处理系统140,该数据处理系统140实现本公开的实施例的原理。本领域的技术人员将容易理解,本文描述的多个实施例可利用替代的处理系统来操作,而不背离本公开的多个实施例的范围。
计算机系统140包括用于执行根据一个实施例的至少一条指令的处理核159。在一个实施例中,处理核159表示任何类型的架构(包括但不限于,CISC、RISC或VLIW类型架构)的处理单元。处理核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桥154,用于经由I/O总线153与各种I/O设备进行通信。此类I/O设备可包括但不限于:例如,通用异步接收机/发射机(UART)155、通用串行总线(USB)156、蓝牙无线UART 157、以及I/O扩展接口158。
数据处理系统140的一个实施例提供了移动通信、网络通信和/或无线通信,并提供了可执行包括文本串比较操作的SIMD操作的处理核159。可利用各种音频、视频、成像和通信算法对处理核159进行编程,这些算法包括:离散变换(诸如Walsh-Hadamard变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)以及它们相应的逆变换);压缩/解压缩技术(例如,色彩空间变换、视频编码运动估计或视频解码运动补偿);以及调制/解调(MODEM)功能(例如,脉冲编码调制(PCM))。
图1C示出了执行SIMD文本串比较操作的数据处理系统的其他实施例。在一个实施例中,数据处理系统160可包括主处理器166、SIMD协处理器161、高速缓存存储器167以及输入/输出系统168。输入/输出系统168可以可选地耦合至无线接口169。SIMD协处理器161可以执行包括根据一个实施例的指令的操作。在一个实施例中,处理核170可适用于以一种或多种工艺技术来制造,并且通过足够详细地表示在机器可读介质上,可适用于促进包括处理核170的数据处理系统160的全部或部分的制造。
在一个实施例中,SIMD协处理器161包括执行单元162以及一组寄存器堆164。主处理器166的一个实施例包括解码器165,该解码器165用于识别包括根据一个实施例的、用于由执行单元162执行的指令的指令集163中的多条指令。在其他实施例中,SIMD协处理器161也包括用于对指令集163中的多条指令进行解码的解码器165的至少部分。处理核170也可以包括对于理解本公开的实施例不是必需的附加电路(未示出)。
在操作中,主处理器166执行控制通用类型的数据处理操作(包括与高速缓存存储器167和输入/输出系统168之间的交互)的数据处理指令流。SIMD协处理器指令可以被嵌入到该数据处理指令流中。主处理器166的解码器165将这些SIMD协处理器指令识别为应当由附连的SIMD协处理器161来执行的类型。因此,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。可以由任何附连的SIMD协处理器从协处理器总线166接收这些指令。在这种情况下,SIMD协处理器161可以接受并执行任何接收到的针对该SIMD协处理器的SIMD协处理器指令。
可经由无线接口169接收数据以通过SIMD协处理器指令进行处理。对于一个示例,能以数字信号的形式接收到语音通信,可由SIMD协处理器指令处理该数字信号以便重新生成表示该语音通信的数字音频样本。对于另一个示例,能以数字位流的形式接收到被压缩的音频和/或视频,可由SIMD协处理器指令处理该数字位流以便重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和SIMD协处理器161可被集成在单个处理核170中,该单个处理核170包括执行单元162、一组寄存器堆164以及用于识别包括根据一个实施例的多条指令的指令集163中的多条指令的解码器165。
图2是根据本公开的实施例的处理器200的微架构的框图,处理器200可以包括用于执行指令的逻辑电路。在一些实施例中,可将根据一个实施例的指令实现为对具有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸多数据类型(例如,单精度和双精度整数和浮点数据类型)的数据元素进行操作。在一个实施例中,有序前端201可以实现处理器200的部分,该部分可以取出要被执行的指令,并准备这些指令以便稍后在处理器流水线中使用。前端201可以包括若干单元。在一个实施例中,指令预取器226从存储器中取出指令,并将这些指令馈送至指令解码器228,指令解码器228进而解码或解释这些指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可执行的被称为“微指令”或“微操作”(也称为微op或uop)的一个或多个操作。在其他实施例中,该解码器将指令解析为可由微架构用于执行根据一个实施例的多个操作的操作码以及对应的数据和控制字段。在一个实施例中,追踪高速缓存230可以在uop队列234中将经解码的uop组合为程序排序的序列或踪迹,以用于执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需的uop。
一些指令可以被转换为单个微op,而其他指令需要若干个微op以完成完整的操作。在一个实施例中,如果需要多于四个微op来完成指令,则解码器228可以访问微代码ROM232以执行该指令。在一个实施例中,可将指令解码为少量的微op,以便在指令解码器228处进行处理。在另一实施例中,如果需要许多微op来完成操作,则可将指令存储在微代码ROM232中。追踪高速缓存230参考进入点可编程逻辑阵列(PLA)来确定正确的微指令指针,以从微代码ROM 232中读取微代码序列来完成根据一个实施例的一条或多条指令。在微代码ROM232完成对指令的微op进行的序列化操作之后,该机器的前端201可以恢复从追踪高速缓存230中取出微op。
乱序执行引擎203可以准备指令以供执行。乱序执行逻辑具有若干个缓冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以供执行。分配器逻辑分配每个uop需要的机器缓冲器和资源,以用于执行。寄存器重命名逻辑将诸个逻辑寄存器重命名为寄存器堆中的条目。在指令调度器(存储器调度器、快速调度器202、慢速/通用浮点调度器204、简单浮点调度器206)之前,分配器也将每个微操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作,另一个微操作队列用于非存储器操作。uop调度器202、204、206基于它们的从属输入寄存器操作数源的准备就绪以及uop完成它们的操作所需的执行资源的可用性来确定uop何时准备好用于执行。一个实施例的快速调度器202可以在主时钟周期的每半个时钟周期上进行调度,而其他调度器在每个主处理器时钟周期上仅可调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。
寄存器堆208、210可以设置在调度器202、204、206与执行块211中的执行单元212、214、216、218、220、222、224之间。寄存器堆208、210中的每一个分别执行整数和浮点操作。每个寄存器堆208、210可以包括旁路网络,该旁路网络可以绕开还未被写入到寄存器堆中的、刚完成的结果或者将这些结果转发到新的从属uop中。整数寄存器堆208和浮点寄存器堆210可以彼此传递数据。在一个实施例中,可以将整数寄存器堆208划分为两个单独的寄存器堆,一个寄存器堆用于数据的低阶32位,第二个寄存器堆用于数据的高阶32位。浮点寄存器堆210可以包括128位宽的条目,因为浮点指令通常具有从64至128位宽度的操作数。
执行块211可以包括执行单元212、214、216、218、220、222和224。执行单元212、214、216、218、220、222和224可以执行指令。执行块211可以包括存储微指令执行所需的整数和浮点数据操作数值的寄存器堆208和210。在一个实施例中,处理器200可以包括许多执行单元:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。在另一个实施例中,浮点执行块222和224可以执行浮点、MMX、SIMD、SSE以及其他操作。在又一个实施例中,浮点ALU 222可以包括用于执行除法、平方根和余数微op的64位除64位的浮点除法器。在各实施例中,可利用浮点硬件来处置涉及浮点值的指令。在一个实施例中,可以将ALU操作传递到高速ALU执行单元216和218。高速ALU216和218可以执行有效等待时间为半个时钟周期的快速操作。在一个实施例中,大多数复杂的整数操作去往慢速ALU 220,因为慢速ALU 220可以包括用于长等待时间类型操作的整数执行硬件,例如,乘法器、移位器、标志逻辑和分支处理设备。存储器加载/存储操作可以由AGU 212和214来执行。在一个实施例中,整数ALU 216、218和220可以对64位数据操作数执行整数操作。在其他实施例中,ALU 216、218和220可实现为支持包括16、32、128以及256等的各种数据位尺寸。类似地,浮点单元222和224可实现为支持具有各种宽度的位的一系列操作数。在一个实施例中,浮点单元222和224可结合SIMD和多媒体指令来对128位宽的紧缩数据操作数进行操作。
在一个实施例中,在父加载完成执行之前,uop调度器202、204和206就分派从属操作。由于可以在处理器200中推测性地调度并执行uop,因此处理器200也可以包括用于处置存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存在已带着临时错误的数据离开调度器的运行中的依赖性操作。重放机制跟踪使用错误数据的指令,并重新执行这些指令。仅仅依赖性操作可能需要被重放,而可以允许独立操作完成。也可将处理器的一个实施例的调度器和重放机制设计成用于捕捉指令序列,以用于文本串比较操作。
术语“寄存器”可以是指可以被用作标识操作数的指令的部分的板上处理器存储器位置。换句话说,寄存器可以是从处理器外部(从编程者的角度来看)可用的那些处理器存储位置。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可以存储数据、提供数据以及执行本文中所描述的功能。本文所描述的寄存器可利用任何数量的不同技术,由处理器中的电路来实现,这些不同技术诸如,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆也包含八个多媒体SIMD寄存器,用于紧缩数据。对于以下讨论,寄存器可以被理解为设计成保存紧缩数据的数据寄存器,诸如来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了MMX技术的微处理器的64位宽MMXTM寄存器(在一些实例中也称为“mm”寄存器)。这些MMX寄存器(在整数和浮点形式两者中是可用的)可与伴随SIMD和SSE指令的紧缩数据元素一起操作。类似地,涉及SSE2、SSE3、SSE4或以外的(统称为“SSEx”)技术的128位宽的XMM寄存器可以保存这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点数据可被包括在相同的寄存器堆中,或被包括在不同的寄存器堆中。进一步地,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。
在下述附图的示例中,可以描述多个数据操作数。图3A示出了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示。图3A示出用于128位宽操作数的紧缩字节310、紧缩字320以及紧缩双字(dword)330的数据类型。本示例的紧缩字节格式310可以是128位长,并且包含十六个紧缩字节数据元素。字节可以被定义为,例如,数据的八位。每一个字节数据元素的信息可以被存储为:对于字节0存储在位7到位0,对于字节1存储在位15到位8,对于字节2存储在位23到位16,最后对于字节15存储在位120到位127。因此,可以在该寄存器中使用所有可用的位。该存储配置提高了处理器的存储效率。同样,因为访问了十六个数据元素,所以现在可并行地对十六个数据元素执行一个操作。
通常,数据元素可以包括与具有相同长度的其他数据元素一起被存储在单个寄存器或存储器位置中的单独的数据片。在涉及SSEx技术的紧缩数据序列中,存储在XMM寄存器中的数据元素的数目可以是128位除以单独的数据元素的位长。类似地,在涉及MMX和SSE技术的紧缩数据序列中,存储在MMX寄存器中的数据元素的数目可以是64位除以单独的数据元素的位长。虽然图3A中示出的数据类型可以是128位长,但是本公开的实施例还可以利用64位宽或其他尺寸的操作数来操作。本示例中的紧缩字格式320可以是128位长,并且包含八个紧缩字数据元素。每个紧缩字包含十六位的信息。图3A的紧缩双字格式330可以是128位长,并且包含四个紧缩双字数据元素。每个紧缩双字数据元素包含三十二位的信息。紧缩四字可以是128位长,并包含两个紧缩四字数据元素。
图3B示出了根据本公开的实施例的可能的寄存器内数据存储格式。每个紧缩数据可包括多于一个的独立数据元素。示出了三种紧缩数据格式:紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343。紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343的一个实施例包含固定点数据元素。对于另一个实施例,紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343中的一个或多个可包含浮点数据元素。紧缩半数据元素341的一个实施例可以是128位长,包含八个16位数据元素。紧缩单数据元素342的一个实施例可以是128位长,并且包含四个32位数据元素。紧缩双数据元素343的一个实施例可以是128位长,并且包含两个64位数据元素。将会理解,可进一步将此类紧缩数据格式扩展至其他寄存器长度,例如,96位、160位、192位、224位、256位或更长。
图3C示出了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示。无符号紧缩字节表示344示出将无符号紧缩字节存储在SIMD寄存器中。每一个字节数据元素的信息可以被存储为:对于字节0存储在位7到位0,对于字节1存储在位15到位8,对于字节2存储在位23到位16,最后对于字节15存储在位120到位127。因此,可以在该寄存器中使用所有可用的位。该存储配置可提高处理器的存储效率。同样,因为访问了十六个数据元素,所以现在可以并行方式对十六个数据元素执行一个操作。有符号紧缩字节表示345示出了有符号紧缩字节的存储。注意,每个字节数据元素的第八位可以是符号指示符。无符号紧缩字表示346示出了如何可以将字7到字0存储在SIMD寄存器中。有符号紧缩字表示347可以类似于无符号紧缩字寄存器内表示346。注意,每个字数据元素的第十六位可以是符号指示符。无符号紧缩双字表示348示出了如何存储双字数据元素。有符号紧缩双字表示349可以类似于无符号紧缩双字寄存器内表示348。注意,必要的符号位可以是每个双字数据元素的第三十二位。
图3D示出了操作编码(操作码)的实施例。此外,格式360可以包括与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/design/litcentr上获得的“IA-32英特尔架构软件开发者手册卷2:指令集参考(IA-32Intel Architecture SoftwareDeveloper's Manual Volume 2:Instruction Set Reference)”中描述的操作码格式类型相对应的寄存器/存储器操作数寻址模式。在一个实施例中,可通过字段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可以与源操作数标识符374相同,而在其他实施例中它们可以不相同。对于另一个实施例,目的地操作数标识符376可以与源操作数标识符375相同,而在其他实施例中它们可以不相同。在一个实施例中,指令对由操作数标识符374和375所标识的操作数中的一个或多个进行操作,并且可以通过该指令的结果覆写由操作数标识符374和375所标识的一个或多个操作数,而在其他实施例中,可以将由标识符374和375标识的操作数写入另一寄存器中的另一数据元素中。操作码格式360和370允许由MOD字段363和373以及由可选的比例-索引-基址(scale-index-base)和位移(displacement)字节部分地指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻址、寄存器到存储器寻址。
图3F示出了根据本公开的实施例的又一可能的操作编码(操作码)格式。可以通过协处理器数据处理(CDP)指令来执行64位单指令多数据(SIMD)算术操作。操作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一条此类CDP指令。对于另一实施例,可由字段383、384、387和388中的一个或多个对CDP指令操作的这种类型进行编码。可以对每个指令标识多至三个操作数位置,包括多至两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可对8位、16位、32位和64位的值进行操作。在一个实施例中,可以对整数数据元素执行指令。在一些实施例中,可使用条件字段381,有条件地执行指令。对于一些实施例,可通过字段383来对源数据尺寸进行编码。在一些实施例中,可对SIMD字段执行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,可通过字段384对饱和类型进行编码。
图4A是示出根据本公开的实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。图4B是示出根据本公开的实施例的、要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑的框图。图4A中的实线框示出了有序流水线,而虚线框示出了寄存器重命名的、乱序发布/执行流水线。类似地,图4B中的实线框示出了有序架构逻辑,而虚线框示出了寄存器重命名逻辑以及乱序发布/执行逻辑。
在图4A中,处理器流水线400可以包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处置级422和提交级424。
在图4B中,箭头指示两个或更多个单元之间的耦合,且箭头的方向指示那些单元之间的数据流的方向。图4B示出了包括耦合到执行引擎单元450的前端单元430的处理器核490,且执行引擎单元和前端单元两者都可以耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或其他核类型。在一个实施例中,核490可以是专用核,诸如例如,网络或通信核、压缩引擎、图形核等。
前端单元430可以包括耦合至指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可以耦合至指令转换后备缓冲器(TLB)436。TLB 436可以耦合至指令取出单元438,指令取出单元耦合至解码单元440。解码单元440可解码指令,并生成可从原始指令中解码出的、或以其他方式反映原始指令的、或可从原始指令中导出的一个或多个微操作、微代码进入点、微指令、其他指令或其他控制信号作为输出。可使用各种不同的机制来实现解码器。合适的机制的示例包括但不仅限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。在一个实施例中,指令高速缓存单元434可以进一步耦合到存储器单元470中的第2级(L2)高速缓存单元476。解码单元440可以耦合至执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450可以包括耦合至引退单元454的重命名/分配器单元452以及一组一个或多个调度器单元456。调度器单元456表示任意数量的不同调度器,包括预留站、中央指令窗等。调度器单元456可以耦合到物理寄存器堆单元458。每个物理寄存器堆单元458表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型(诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,等等)、状态(诸如,作为要被执行的下一条指令的地址的指令指针)等等。物理寄存器堆单元458可以被引退单元454所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用一个或多个重排序缓冲器和一个或多个引退寄存器堆、使用一个或多个未来文件(future file)、一个或多个历史缓冲器以及一个或多个引退寄存器堆;使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看可以是可见的。寄存器可能不限于任何已知特定类型的电路。各种不同类型的寄存器可适用,只要它们存储并提供本文中所述的数据。合适寄存器的示例包括但可能不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配的物理寄存器的组合,等等。引退单元454和物理寄存器堆单元458可以耦合至执行集群460。执行集群460可以包括一组一个或多个执行单元462和一组一个或多个存储器访问单元464。执行单元462可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。调度器单元456、物理寄存器堆单元458和执行集群460被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了多个单独流水线(例如,均具有各自调度器单元、物理寄存器堆单元和/或执行集群的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线;以及在单独的存储器访问流水线的情况下,某些实施例可以被实现为仅仅该流水线的执行集群具有存储器访问单元464)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元464的集合可以耦合到存储器单元470,该存储器单元可以包括耦合到数据高速缓存单元474的数据TLB单元472,其中数据高速缓存单元耦合到第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指令集(具有增加有更新版本的一些扩展)、加利福尼亚州桑尼威尔的MIPS技术公司的MIPS指令集、加利福尼亚州桑尼威尔的ARM控股公司的ARM指令集(具有可选附加扩展,诸如NEON))。
应当理解,核可以按各种方式来支持多线程操作(执行两个或更多个并行的操作或线程的集合)。可以由例如包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程提供逻辑核)或其组合来执行多线程操作支持。此类组合可以包括,例如,时分取出和解码以及此后诸如利用超线程技术的同步多线程操作。
尽管可以在乱序执行的上下文中描述寄存器重命名,但是,应当理解,寄存器重命名可以用于有序架构中。虽然处理器的所示出的实施例也可以包括单独的指令和数据高速缓存单元434/474以及共享的L2高速缓存单元476,但其他实施例可具有用于指令和数据两者的单个的内部高速缓存,诸如例如,第1级(L1)内部高速缓存或多个层级的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及可以在核和/或处理器外部的外部高速缓存的组合。在其他实施例中,全部高速缓存都可以在核和/或处理器的外部。
图5A是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可以包括多核处理器。处理器500可以包括通信地耦合至一个或多个核502的系统代理510。此外,核502和系统代理510可以通信地耦合至一个或多个高速缓存506。核502、系统代理510和高速缓存506可以经由一个或多个存储器控制单元552通信地耦合。此外,核502、系统代理510和高速缓存506可以经由存储器控制单元552通信地耦合至图形模块560。
处理器500可以包括用于将核502、系统代理510、以及高速缓存506、以及图形模块560互连的任何合适的机制。在一个实施例中,处理器500可以包括基于环的互连单元508以用于将核502、系统代理510、以及高速缓存506、以及图形模块560互连。在其他实施例中,处理器500可以包括任何数量的公知技术来将这些单元互连。基于环的互连单元508可以利用存储器控制单元552来促进互连。
处理器500可以包括存储器层级结构,该存储器层级结构包括核内的一个或多个层级的高速缓存、一个或多个共享高速缓存单元(例如高速缓存506)、或耦合到集成存储器控制器单元552的集合的外部存储器(未示出)。高速缓存506可以包括任何合适的高速缓存。在一个实施例中,高速缓存506可以包括一个或多个中级高速缓存,诸如,第2级(L2)、第3级(L3)、第4级(L4),或其他层级的高速缓存,末级高速缓存(LLC),和/或上述各项的组合。
在各实施例中,核502中的一个或多个可以执行多线程操作。系统代理510可以包括用于协调和操作核502的组件。系统代理单元510可以包括例如功率控制单元(PCU)。PCU可以是或可以包括用于调节核502的功率状态所需的逻辑和组件。系统代理510可以包括显示引擎512,用于驱动一个或多个外部连接的显示器或图形模块560。系统代理510可以包括用于通信总线的接口514以用于图形。在一个实施例中,接口514可以由PCI快速(PCIe)实现。在进一步的实施例中,接口514可以由PCI快速图形(PEG)实现。系统代理510可以包括直接媒体接口(DMI)516。DMI 516可以提供母板上的或计算机系统的其他部分上的不同桥之间的链路。系统代理510可以包括PCIe桥518以用于将PCIe链路提供到计算系统的其他元件。可以使用存储器控制器520和一致性逻辑522来实现PCIe桥518。
核502可以以任何合适的方式来实现。核502可以是在架构和/或指令集上同构的或异构的。在一个实施例中,核502中的一些可以是有序的,而另一些可以是乱序的。在另一实施例中,核502中的两个或更多可以执行相同的指令集,而其他核仅可执行该指令集的子集或不同的指令集。
处理器500可以包括通用处理器,诸如酷睿(CoreTM)i3、i5、i7、2Duo和Quad、至强(XeonTM)、安腾(ItaniumTM)、XScaleTM或StrongARMTM处理器,这些均可以从加利福尼亚州圣克拉拉市的英特尔公司获得。处理器500可以提供自另一个公司,诸如,来自ARM控股公司、MIPS等。处理器500可以是专用处理器,诸如,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器、等等。处理器500可以被实现在一个或多个芯片上。处理器500可以是一个或多个衬底的一部分,和/或可以使用多种工艺技术中的任何一种(诸如,例如,BiCMOS、CMOS或NMOS)实现在一个或多个衬底上。
在一个实施例中,高速缓存506中的给定的一个可以被核502中的多个核共享。在另一实施例中,高速缓存506中的给定的一个可以专用于核502中的一个核。将高速缓存506分配到核502可以由高速缓存控制器或其他合适的机制处置。高速缓存506中的给定的一个可以通过实现给定高速缓存506的时分而被两个或更多核502共享。
图形模块560可以实现集成图形处理子系统。在一个实施例中,图形模块560可以包括图形处理器。此外,图形模块560可以包括媒体引擎565。媒体引擎565可以提供媒体编码和视频解码。
图5B是根据本公开的实施例的核502的示例实现的框图。核502可以包括通信地耦合至乱序引擎580的前端570。核502可以通过高速缓存层级结构503通信地耦合至处理器500的其他部分。
前端570可以以任何合适的方式实现,例如全部或部分地由如上所述的前端201。在一个实施例中,前端570可以通过高速缓存层级结构503与处理器500的其他部分通信。在进一步的实施例中,前端570可以从处理器500的部分取出指令并将这些指令准备好以供稍后当这些指令被传递到乱序执行引擎580时在处理器流水线中使用。
乱序执行引擎580可以以任何合适的方式实现,例如全部或部分地由如上所述的乱序执行引擎203。乱序执行引擎580可以将接收自前端570的指令准备好以供执行。乱序执行引擎580可以包括分配模块582。在一个实施例中,分配模块582可以分配处理器500的资源或其他资源(诸如寄存器或缓冲器)以执行给定的指令。分配模块582可以在调度器(诸如存储器调度器、快速调度器或浮点调度器)中进行分配。此类调度器在图5B中可以由资源调度器584表示。分配模块582可以全部或部分地由结合图2所描述的分配逻辑实现。资源调度器584可以基于给定资源的源的准备就绪以及执行指令所需的执行资源的可用性来确定指令何时准备好用于执行。资源调度器584可以由例如上文所讨论的调度器202、204和206实现。资源调度器584可以将指令的执行调度到一个或多个资源上。在一个实施例中,此类资源可以在核502的内部,并且可以示出为例如资源586。在另一实施例中,此类资源可以在核502的外部,并且可由例如高速缓存层级结构503访问。资源可以包括,例如,存储器、高速缓存、寄存器堆或寄存器。核502内部的资源可以表示为图5B中的资源586。如果需要,被写入资源586或从资源586读出的值可以通过例如高速缓存层级结构503与处理器500的其他部分协调。当指令被分配有资源时,它们可以被放置在重排序缓冲器588中。当指令被执行时,重排序缓冲器588可以跟踪指令,并且可以选择性地基于处理器500的任何合适的标准将指令的执行重排序。在一个实施例中,重排序缓冲器588可以标识可以被独立地执行的指令或一系列指令。可以与其他此类指令并行地执行此类指令或一系列指令。核502中的并行执行可以由任何合适数量的单独的执行块或虚拟处理器执行。在一个实施例中,共享资源(诸如存储器、寄存器和高速缓存)可以被给定核502内的多个虚拟处理器访问。在其他实施例中,共享资源可以被处理器500内的多个处理实体访问。
高速缓存层级结构503可以以任何合适的方式来实现。例如,高速缓存层级结构503可以包括一个或多个较低级或中级高速缓存,诸如高速缓存572和574。在一个实施例中,高速缓存层级结构503可以包括通信地耦合至高速缓存572和574的LLC 595。在另一实施例中,LLC 595可以实现在可被处理器500的所有处理实体访问的模块590中。在进一步的实施例中,模块590可以实现在来自英特尔公司的处理器的非核模块中。模块590可以包括对于核502的执行有必要的处理器500的部分或子系统中,但是可能不实现在核502内。除了LLC 595之外,模块590可以包括,例如,硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。可以通过模块590并且更具体地LLC 595使处理器500可访问RAM599。此外,核502的其他实例可以类似地访问模块590。可以通过模块590部分地促进核502的实例的协调。
图6-8可以示出适于包括处理器500的示例性系统,而图9可以示出可包括核502中的一个或多个的示例性芯片上系统(SoC)。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和实现也可以是合适的。一般地,包含本文中所公开的处理器和/或其他执行逻辑的多个系统或电子设备一般可以是合适的。
图6示出了根据本公开的实施例的系统600的框图。系统600可以包括可以耦合至图形存储器控制器中枢(GMCH)620的一个或多个处理器610、615。在图6中以虚线表示附加的处理器615的可选的性质。
每一处理器610、615可以是处理器500的某种版本。然而,应当注意,集成图形逻辑和集成存储器控制单元可能不会出现在处理器610和615中。图6示出了GMCH 620可以耦合至存储器640,该存储器640可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
GMCH 620可以是芯片组或芯片组的部分。GMCH 620可以与处理器610、615进行通信,并控制处理器610、615与存储器640之间的交互。GMCH 620还可充当处理器610、615和系统600的其他元件之间的加速总线接口。在一个实施例中,GMCH 620经由诸如前端总线(FSB)695之类的多点总线与处理器610、615进行通信。
此外,GMCH 620可以耦合至显示器645(诸如平板显示器)。在一个实施例中,GMCH620可以包括集成图形加速器。GMCH 620可以进一步耦合至输入/输出(I/O)控制器中枢(ICH)650,该输入/输出(I/O)控制器中枢(ICH)650可用于将各种外围设备耦合至系统600。外部图形设备660可以包括与另一外围设备670一起耦合至ICH 650的分立图形设备。
在其他实施例中,附加的或不同的处理器也可存在于系统600中。例如,附加的处理器610、615可以包括可以与处理器610相同的附加的处理器、可以与处理器610异构的或不对称的附加的处理器、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器。在物理资源610和615之间可以存在包括架构、微架构、热和功耗特征等的一系列品质度量方面的各种差异。这些差异可以有效显示为处理器610和615之间的不对称性和异构性。对于至少一个实施例,各种处理器610和615可驻留在同一管芯封装中。
图7示出了根据本公开的实施例的第二系统700的框图。如图7所示,多处理器系统700可以包括点对点互连系统,并且可以包括经由点对点互连750而被耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某个版本(如处理器610、615中的一个或多个)。
虽然图7可以示出两个处理器770、780,但是应当理解本公开的范围不限于此。在其他实施例中,在给定处理器中可存在一个或多个附加处理器。
处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还可以包括点对点(P-P)接口776和778作为其总线控制器单元的部分;类似地,第二处理器780可以包括P-P接口786和788。处理器770、780可以经由使用点对点(P-P)接口电路778、788的P-P接口750来交换信息。如图7所示,IMC 772和782可以将处理器耦合至相应的存储器,即,存储器732和存储器734,它们在一个实施例中可以是本地连接到相应的处理器的主存储器的部分。
处理器770、780可各自经由使用点对点接口电路776、794、786、798的各个P-P接口752、754与芯片组790交换信息。在一个实施例中,芯片组790还可以经由高性能图形接口739与高性能图形电路738交换信息。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组790可以经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不限于此。
如图7中所示,各种I/O设备714可连同总线桥718一起耦合到第一总线716,总线桥718将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合至第二总线720,包括例如,键盘和/或鼠标722、通信设备727以及可包括指令/代码和数据730的存储单元728(诸如,盘驱动器或其他大容量存储设备)。此外,音频I/O 724可以被耦合到第二总线720。注意,其他架构是可能的。例如,代替图7的点对点架构,系统可以实现多分支总线或其他此类架构。
图8示出了根据本公开的实施例的第三系统800的框图。图7和8中的相同部件用相同附图标记表示,并已从图8中省去了图7中的某些方面,以避免使图8的其他方面变得模糊。
图8示出处理器770、780可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。对于至少一个实施例,CL 872和882可包括诸如以上结合图5和7所描述的集成存储器控制器单元。此外,CL 872、882还可包括I/O控制逻辑。图8示出了不仅存储器732、734可以被耦合到CL 872、882,而且I/O设备814也可以被耦合到控制逻辑872、882。传统I/O设备815可以被耦合至芯片组790。
图9示出了根据本公开的实施例的SoC 900的框图。图5中相似的部件具有同样的附图标记。另外,虚线框可以表示更先进的SoC的可选特征。互连单元902可耦合至:应用处理器910,其可包括一个或多个核的集合502A-N和共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;一个或多个媒体处理器的集合920,其可包括集成图形逻辑908、用于提供静止和/或视频相机功能的图像处理器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、存储器接口控制器1045、MIPI控制器1050、闪存控制器1055、双数据率(DDR)控制器1060、安全引擎1065、I2S/I2C控制器1070。其他逻辑和电路(包括更多的CPU或GPU以及其他外围设备接口控制器)可被包括在图10的处理器中。
至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的机器可读介质上的表示性数据来实现,当机器读取该表示性数据时,该表示性数据使得该机器用于制造执行本文所述的技术的逻辑。可将此类表示(称为“IP核”)存储在有形的机器可读介质(“磁带”)上,并将其提供给各种顾客或生产设施,以便加载到实际制作该逻辑或处理器的制造机器中。例如,IP核(诸如由ARM控股公司所开发的CortexTM处理器族以及由中国科学院计算机技术研究所(ICT)所开发的龙芯IP核)可被授权或销售给各种客户或受许可方,诸如德州仪器、高通、苹果、或三星,并被实现在由这些客户或受许可方生产的处理器中。
图11示出根据本公开的实施例的示出IP核开发的框图。存储设备1100可以包括仿真软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160而被提供给存储设备1100。由仿真工具和模型所生成的IP核信息可随后被发送到生产设施1165,可由第三方在该生产设施中制造该IP核以执行根据至少一个实施例的至少一条指令。
在一些实施例中,一条或多条指令可以对应于第一类型或架构(例如,x86),并且可在不同类型或架构(例如,ARM)的处理器上被转换或仿真。根据一个实施例,因此可在任何处理器或处理器类型(包括ARM、x86、MIPS、GPU或其他处理器类型或架构)上执行指令。
图12示出了根据本公开的实施例的不同类型的处理器可以如何仿真第一类型的指令。在图12中,程序1205包含可执行与根据一个实施例的指令相同或基本相同的功能的一些指令。然而,程序1205的指令可以是与处理器1215不同或不兼容的类型和/或格式,这意味着不能够由处理器1215原生地执行程序1205中的类型的指令。然而,借助于仿真逻辑1210,可以将程序1205的指令转换成可以由处理器1215原生执行的指令。在一个实施例中,仿真逻辑可以被具体化在硬件中。在另一实施例中,可以将仿真逻辑具体化在有形的机器可读介质中,该机器可读介质包含用于将程序1205中的该类指令转换为可由处理器1215原生地执行的类型的软件。在其他实施例中,仿真逻辑可以是固定功能或可编程硬件和存储在有形的机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其他实施例中,仿真逻辑在处理器之外,并且可以由第三方提供。在一个实施例中,通过执行被包括在处理器中或者与该处理器相关联的微代码或固件,处理器可以加载被具体化在包含软件的有形的机器可读介质中的仿真逻辑。
图13示出了根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器可以是软件指令转换器,但该指令转换器可以用软件、固件、硬件或其各种组合来实现。图13示出可使用x86编译器1304来编译利用高级语言1302的程序,以生成可由具有至少一个x86指令集核的处理器1316原生地执行的x86二进制代码1306。具有至少一个x86指令集核的处理器1316表示任何处理器,这些处理器可以通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器1304表示可用于生成x86二进制代码1306(例如,目标代码)的编译器,该x86二进制代码1306可通过附加的链接处理或无需附加的链接处理而在具有至少一个x86指令集核的处理器1316上被执行。类似地,图13示出可以使用替代的指令集编译器1308来编译高级语言1302的程序以生成可由不具有至少一个x86指令集核的处理器1314(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生地执行的替代的指令集二进制代码1310。指令转换器1312可以用于将x86二进制代码1306转换成可以由不具有x86指令集核的处理器1314原生地执行的代码。该转换后的代码可能与替代的指令集二进制代码1310不相同;然而,转换后的代码将完成通用操作并由来自替代指令集的指令构成。因此,指令转换器1312表示软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1306。
图14是根据本公开的实施例的处理器的指令集架构1400的框图。指令集架构1400可以包括任何合适数量或种类的组件。
例如,指令集架构1400可以包括处理实体,诸如一个或多个核1406、1407以及图形处理单元1415。核1406、1407可以通过任何合适的机制(诸如通过总线或高速缓存)通信地耦合至指令集架构1400的剩余部分。在一个实施例中,核1406、1407可以通过L2高速缓存控制1408通信地耦合,L2高速缓存控制1408可以包括总线接口单元1409和L2高速缓存1410。核1406、1407和图形处理单元1415可以通过互连1410彼此通信地耦合并且耦合至指令集架构1400的剩余部分。在一个实施例中,图形处理单元1415可以使用视频编解码器1420,视频编解码器定义其中特定视频信号将被编码和解码以作为输出的方式。
指令集架构1400还可以包括任何数量或种类的接口、控制器或用于与电子设备或系统的其他部分相接或通信的其他机制。此类机制可以促进与例如外围设备、通信设备、其他处理器或存储器的交互。在图14的示例中,指令集架构1400可以包括液晶显示器(LCD)视频接口1425、用户接口模块(SIM)接口1430、引导ROM接口1435、同步动态随机存取存储器(SDRAM)控制器1440、闪存控制器1445、以及串行外围接口(SPI)主单元1450。LCD视频接口1425可以提供将视频信号从例如GPU 1415并且通过例如移动产业处理器接口(MIPI)1490或高清晰度多媒体接口(HDMI)1495输出到显示器。此类显示器可以包括例如LCD。SIM接口1430可以提供到SIM卡或设备的访问或来自SIM卡或设备的访问。SDRAM控制器1440可以提供到存储器的访问或来自存储器的访问,存储器诸如SDRAM芯片或模块1460。闪存控制器1445可以提供到存储器的访问或来自存储器的访问,存储器诸如闪存1465或RAM的其他实例。SPI主单元1450可以提供到通信模块的访问或来自通信模块的访问,通信模块诸如蓝牙模块1470、高速3G调制解调器1475、全球定位系统模块1480或实现诸如802.11的通信标准的无线模块1485。
图15是根据本公开的实施例的处理器的指令集架构1500的更具体的框图。指令架构1500可以实现指令集架构1400的一个或多个方面。此外,指令集架构1500可以示出用于在处理器内的指令的执行的模块和机制。
指令架构1500可以包括通信地耦合至一个或多个执行实体1565的存储器系统1540。此外,指令架构1500可以包括高速缓存和总线接口单元,诸如通信地耦合至执行实体1565和存储器系统1540的单元1510。在一个实施例中,可以由一级或多级执行来执行将指令加载到执行实体1565中。此类级可以包括,例如,指令预取级1530、双指令解码级1550、寄存器重命名级1555、发布级1560、以及写回级1570。
在一个实施例中,存储器系统1540可以包括执行的指令指针1580。执行的指令指针1580可以存储标识一批指令中最旧的、未分派的指令的值。最旧的指令可以对应于最低程序顺序(PO)值。PO可以包括指令的唯一编号。此类指令可以是由多个缕程(strand)表示的线程内的单个指令。PO可以在对指令进行排序中使用以确保代码的正确执行语义。PO可以被机制重新构建,诸如评估编码在指令中的PO的增量,而不是绝对值。此类被重新构建的PO可以称为“RPO”。虽然可以在本文中引用PO,但是此类PO可以与RPO互换地使用。缕程可以包括相互数据依赖的指令序列。在编译时,缕程可以由二进制转换器安排。执行缕程的硬件可以根据各种指令的PO有序地执行给定缕程的指令。线程可以包括多个缕程,从而不同缕程的指令可以相互依赖。给定缕程的PO可以是缕程中还未被从发布级分派到执行的最旧的指令的PO。因此,给定具有多个缕程的线程,每个缕程包括按PO排序的指令,执行的指令指针1580可以存储线程中最旧的(示为最低数字的)PO。
在另一实施例中,存储器系统1540可以包括引退指针1582。引退指针1582可以存储标识上一引退的指令的PO的值。引退指针1582可以由例如引退单元454设置。如果还未引退指令,则引退指针1582可以包括空值。
执行实体1565可以包括任何合适数量和种类的机制,处理器可以通过该机制执行指令。在图15的示例中,执行实体1565可以包括ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,此类实体可以利用包含在给定地址1569内的信息。执行实体1565与级1530、1550、1555、1560和1570相结合可以共同地形成执行单元。
单元1510可以以任何合适的方式来实现。在一个实施例中,单元1510可以执行高速缓存控制。在此类实施例中,单元1510可以因此包括高速缓存1525。在进一步的实施例中,高速缓存1525可以实现为具有任何合适尺寸的L2统一高速缓存,诸如存储器的零、128k、256k、512k、1M或2M字节。在另一进一步的实施例中,高速缓存1525可以实现在纠错码存储器中。在另一实施例中,单元1510可以执行总线与处理器或电子设备的其他部分相接。在此类实施例中,单元1510可以因此包括总线接口单元1520以用于通过互连、处理器内总线、处理器间总线或其他通信总线、端口或线通信。总线接口单元1520可以提供相接以执行例如生成存储器和输入/输出地址以用于在执行实体1565与在指令架构1500外部的系统的部分之间的数据传输。
为了进一步促进其功能,总线接口单元1520可以包括中断控制和分配单元1511以用于生成中断和其他通信到处理器或电子设备的其他部分。在一个实施例中,总线接口单元1520可以包括监听控制单元1512,其为多个处理核处置高速缓存访问和一致性。在进一步的实施例中,为了提供此类功能,监听控制单元1512可以包括高速缓存到高速缓存传输单元,其处置不同高速缓存之间的信息交换。在另一进一步的实施例中,监听控制单元1512可以包括一个或多个监听过滤器1514,其监视其他高速缓存(未示出)的一致性,使得高速缓存控制器(诸如单元1510)不必直接执行此类监视。单元1510可以包括任何合适数量的计时器1515以用于使指令架构1500的动作同步。此外,单元1510可以包括AC端口1516。
存储器系统1540可以包括任何合适数量和种类的机制以用于为指令架构1500的处理需要存储信息。在一个实施例中,存储器系统1540可以包括加载存储单元1530以用于存储信息,诸如写入存储器或寄存器或从存储器或寄存器读回的缓冲器。在另一实施例中,存储器系统1540可以包括转换后备缓冲器(TLB)1545,其提供在物理地址与虚拟地址之间查找地址值。在又一实施例中,存储器系统1540可以包括存储器管理单元(MMU)1544以用于促进对虚拟存储器的访问。在再一实施例中,存储器系统1540可以包括预取器1543以用于在实际需要执行指令之前从存储器请求这些指令以减少等待时间。
指令架构1500执行指令的操作可以通过不同级来实现。例如,通过使用单元1510,指令预取级1530可以通过预取器1543访问指令。可以将被检取的指令存储在指令高速缓存1532中。预取级1530可以为快速循环模式实现选项1531,其中执行形成足够小以装入给定高速缓存的循环的一系列指令。在一个实施例中,可以实现此类执行而无需访问来自例如指令高速缓存1532的附加指令。对预取哪些指令的确定可以由例如分支预测单元1535作出,其可以访问全局历史1536中对执行的指示、对目标地址1537的指示、或返回栈1538的内容以确定接下来将执行代码的分支1557中的哪些指令。可能预取此类分支作为结果。分支1557可以通过如下所述的其他级的操作而产生。指令预取级1530可以将指令以及关于未来指令的任何预测提供到双指令解码级1550。
双指令解码级1550可以将所接收的指令转换成可以被执行的基于微代码的指令。双指令解码级1550可以在每个时钟周期同时解码两个指令。此外,双指令解码级1550可以将其结果传递到寄存器重命名级1555。此外,双指令解码级1550可以从其对微代码的解码和最终执行确定任何所得的分支。可以将此类结果输入到分支1557中。
寄存器重命名级1555可以将对虚拟寄存器或其他资源的引用转换成对物理寄存器或资源的引用。寄存器重命名级1555可以包括对寄存器池1556中的此类映射的指示。寄存器重命名级1555可以改变所接收的指令并且将结果发送到发布级1560。
发布级1560可以将命令发布或分派到执行实体1565。可以以乱序方式执行此类发布。在一个实施例中,可以在多个指令被执行之前在发布级1560处保存该多个指令。发布级1560可以包括指令队列1561以用于保存此类多个命令。可以由发布级1560基于任何可接受的标准(诸如资源对于给定指令的执行的可用性或合适性)将指令发布到特定处理实体1565。在一个实施例中,发布级1560可以将指令队列1561内的指令重排序,从而第一接收的指令可能不是第一执行的指令。基于指令队列1561的排序,可以将附加分支信息提供到分支1557。发布级1560可以将指令传递到执行实体1565以供执行。
一旦执行,写回级1570可以将数据写入寄存器、队列、或指令集架构1500的其他结构以传递给定命令的完成。取决于布置在发布级1560中的指令的顺序,写回级1570的操作可以使得附加指令能被执行。可以由跟踪单元1575监视或调试指令集架构1500的性能。
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600可以示出例如图15的指令架构1500的操作。
执行流水线1600可以包括步骤或操作的任何合适组合。在1605中,可以作出对接下来会执行的分支的预测。在一个实施例中,此类预测可以基于指令的先前执行及其结果。在1610中,可以将对应于执行所预测的分支的指令加载到指令高速缓存中。在1615中,可以取出指令高速缓存中的一个或多个此类指令以供执行。在1620中,可以将已经被取出的指令解码为微代码或更具体的机器语言。在一个实施例中,可以同时解码多个指令。在1625中,可以重新分配对经解码的指令内的寄存器或其他资源的引用。例如,可以将对虚拟寄存器的引用替换为对相应的物理寄存器的引用。在1630中,可以将指令分派到队列以供执行。在1640中,可以执行指令。此类执行可以以任何合适的方式来实现。在1650中,可以将指令发布到合适的执行实体。执行指令的方式可以取决于执行指令的特定实体。例如,在1655处,ALU可以执行算术功能。ALU可以利用单个时钟周期以及两个移位器以用于其操作。在一个实施例中,可以采用两个ALU,并且因此在1655处可以执行两个指令。在1660处,可以作出对所得分支的确定。程序计数器可以用于指示将作出分支的目的地。可以在单个时钟周期内执行1660。在1665处,可以由一个或多个FPU执行浮点算术。浮点操作可以要求多个时钟周期(诸如两个到十个周期)来执行。在1670处,可以执行乘法和除法操作。可以在四个时钟周期中执行此类操作。在1675处,可以执行将操作加载和存储到寄存器或流水线1600的其他部分。操作可以包括加载和存储地址。可以在四个时钟周期中执行此类操作。在1680处,可以根据1655-1675的所得操作的需要执行写回操作。
图17是根据本公开的实施例的用于利用处理器1710的电子设备1700的框图。电子设备1700可以包括例如笔记本、超级本、计算机、塔服务器、机架服务器、刀片服务器、膝上型计算机、台式机、平板、移动设备、电话、嵌入式计算机、或任何其他合适的电子设备。
电子设备1700可以包括通信地耦合至任何合适数量或种类的组件、外围设备、模块或设备的处理器1710。此类耦合可以通过任何合适种类的总线或接口完成,例如I2C总线、系统管理总线(SMBus)、低引脚数(LPC)总线、SPI、高清晰度音频(HDA)总线、串行先进技术附接(SATA)总线、USB总线(版本1、2、3)或通用异步接收机/发射机(UART)总线。
此类组件可以包括,例如,显示器1724、触摸屏1725、触板1730、近场通信(NFC)单元1745、传感器中枢1740、热传感器1746、快速芯片组(EC)1735、受信任平台模块(TPM)1738、BIOS/固件/闪存1722、数字信号处理器1760、诸如固态硬盘(SSD)或硬盘驱动器(HDD)的驱动器1720、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位系统(GPS)1755、诸如USB 3.0相机的相机1754、或以例如LPDDR3标准实现的低功率双数据率(LPDDR)存储器单元1715。这些组件可以各自以任何合适的方式来实现。
此外,在各实施例中,其他组件可以通过上文讨论的组件通信地耦合至处理器1710。例如,加速度计1741、环境光传感器(ALS)1742、罗盘1743以及陀螺仪1744可以通信地耦合至传感器中枢1740。热传感器1739、风扇1737、键盘1736以及触板1730可以通信地耦合至EC 1735。扬声器1763、头戴式耳机1764以及话筒1765可以通信地耦合至音频单元1762,音频单元可以进而通信地耦合至DSP 1760。音频单元1762可以包括,例如,音频编解码器和D类放大器。SIM卡1757可以通信地耦合至WWAN单元1756。诸如WLAN单元1750、蓝牙单元1752以及WWAN单元1756的组件可以以下一代形状因数(NGFF)实现。
本公开的实施例涉及用于加速执行一个或多个常用集合运算的指令、硬件内容关联数据结构、以及处理逻辑。图18是根据本公开的实施例的用于加速执行集合运算的系统1800的图示。系统1800可以包括处理器、SoC、集成电路、或其他机制。例如,系统1800可以包括处理器1804。尽管处理器1804在图18中被示出和描述为示例,但是可以使用任何适当的机制。处理器1804可以包括用于加速执行一个或多个常用集合运算的任何适当机制。在一个实施例中,可以以硬件来实施这种机制。处理器1804可以完全地或部分地由图1至图17中所述的元件实施。
处理器1804可以包括前端1806,所述前端可以包括指令取出流水线级(如指令取出单元1808)以及解码流水线级(如决定单元1810)。前端1806可以接收并使用解码单元1810来解码来自指令流1802的指令。经解码指令可以被分派、分配和调度以供由流水线的分配级(如分配器1814)执行并且被分配给特定执行单元1816或分配给SOLU 1820。待由SOLU 1820执行的一个或多个特定指令可以包括在限定由处理器1804或SOLU 1820执行的函数库中。在另一实施例中,SOLU 1820可能被处理器1804的部分作为目标,其中,处理器1804识别指令流1802中用于在软件中执行集合运算的尝试并且将特定指令中的一个或多个下发给SOLU 1820。
在执行期间,可以通过存储器子系统1826来进行对数据或附加指令(包括驻留在存储器系统1830中的数据或指令)的访问。此外,执行结果可以存储在存储器子系统1826中并且随后可以被转储清除(flush)到存储器系统1830中。存储器子系统1826可以包括例如存储器、RAM、或高速缓存层级结构,所述高速缓存层级结构可以包括一个或多个1级(L1)高速缓存1827或2级(L2)高速缓存1828,其中一些可以由多个核1812或处理器1804共享。在由执行单元1816或由SOLU 1820执行之后,指令可以由引退单元1818中的写回级或引退级引退。可以由一个或多个核1812执行这种执行流水线化的各个部分。
如集合并运算和集合交运算等集合运算可以在如图处理和数据分析等应用域中使用。在这种应用域中,对有序集合(sorted set)进行的集合并运算和集合交运算可能是常见任务。更具体地,许多图运算可能包括针对包含有序键值对列表的集合的集合并运算和集合交运算。在许多情况下,这些输入集合中的元素可以按照其键来进行定序和排序。集合并运算和集合交运算两者都可以包括在两个集合的元素中找到匹配索引。例如,集合交运算可以识别两个不同集合中其键相匹配的键值对,在这之后,可以对相应值执行用户定义的归约运算(reduction operation)。集合交运算可以忽略(或丢弃)这两个集合中的任一集合中其键与这两个集合中的另一个集合中的任何键值对的键不匹配的任何键值对(例如,这两个集合中的任一集合中具有唯一键的键值对)。集合并运算可以对两个不同集合中其键相匹配的任何键值对的值执行用户定义的归约运算,但是还可以保留这两个集合中的任一集合中其键与这两个集合中的另一个集合中的任何键值对的键不匹配的(未修改的)任何键值对(例如,这两个集合中的任一集合中具有唯一键的键值对)。在这些运算中的任一运算中,输出集合可以包括按照其键进行定序和排序的键值对的列表。
这些集合并运算和集合交运算(以及其他集合运算)在计算上可能很昂贵。在一些基于软件的解决方案中,用于使用集合并运算和/或集合交运算来识别匹配索引或组合两个集合的代码可以仅在典型的执行单元上执行,如由处理器1804上的解码单元1810解码的。这些基于软件的解决方案可能很慢和/或耗能很大。其他方式可能试图将这些集合运算映射到单指令多数据(SIMD)算术运算以便探索指令级并行。这些方式依赖于能够识别匹配键,这可能引入显著的高速缓存压力。仍其他方式可以包括分散运算和聚集运算,这也可能增大高速缓存压力。在一些情况下,这些方式可能招致相对高的分支误预测率,这可能与SIMD不兼容。
在本公开的实施例中,系统1800可以包括用于加速这些集合运算并且由此用于加快处理现代图分析的硬件支持。例如,在一个实施例中,系统1800可以包括集合运算逻辑单元(set operations logic unit,SOLU),所述SOLU提供基于键的关联搜索功能。如以下更详细地描述的,SOLU可以包括用于高效地执行一个或多个集合运算的逻辑和/或电路系统。
如图18所示,在一个实施例中,系统1800可以包括用于执行一个或多个集合运算的集合运算逻辑单元(SOLU)1820。SOLU 1820可以以任何适当的方式实施。系统1800可以将SOLU 1820包括在系统1800的任何适当部分中。在一个实施例中,系统1800可以包括SOLU1820A,其被实施为处理器1804中的独立电路。在另一实施例中,系统1800可以包括SOLU1820B,其被实施为一个或多个核1812的部件或者被实施为处理器1804中的执行流水线的另一元件的部件。在又另一实施例中,系统1800可以包括1820C,其被实施在系统1800中并且通信地耦合至处理器1804。在不同实施例中,SOLU 1820可以由电路系统或硬件计算逻辑的任何适当组合实施。在一个实施例中,SOLU 1820可以接受来自系统1800的其他部分的输入并且返回一个或多个集合运算的结果。
在一个实施例中,SOLU 1820可以包括或者可以通信地耦合至用于存储执行一个或多个集合运算所需的信息的存储器元件。例如,SOLU 1820可以包括可以在其中存储多个键值对集合的内容关联数据结构(CAM数据结构1824)。在一个实施例中,CAM数据结构1824可以被实施在SOLU 1820内。在另一实施例中,CAM数据结构1824可以被实施在系统1800内的任何适当存储器内。在一个实施例中,SOLU 1820可以由包括CAM控制逻辑1822的电路系统实施,所述CAM控制逻辑可以控制对CAM数据结构1824的内容的访问并且可以对所述内容执行运算。例如,在一个实施例中,SOLU 1820可以包括用于将键值对集合添加到驻留在CAM数据结构1824中的键值对集合中并且用于对具有匹配键的键值对执行归约运算的电路系统。在另一实施例中,SOLU 1820可以包括用于识别驻留在CAM数据结构1824中的键值对集合中其键与输入键值对集合中的键值对的键相匹配的键值对的电路系统。在又另一实施例中,SOLU 1820可以包括用于确定和返回CAM数据结构1824的当前长度(例如,驻留在CAM数据结构1824中的有效或活跃键值对的数量)的电路系统。在另一实施例中,SOLU 1820可以包括用于重置CAM数据结构1824的内容的电路系统。重置CAM数据结构1824的内容可以包括删除或以其他方式无效化驻留在CAM数据结构1824中的任何键值对以及将其长度重置为零。在一个实施例中,SOLU 1820可以包括用于将CAM数据结构1824的内容移动到存储器(例如,到存储器子系统1826和/或存储器系统1830中的一个或多个输出数组)中的电路系统。
处理器1804可以隐式地或通过对特定指令的解码和执行认识到要执行集合运算。在这种情况下,可以将对集合运算的执行卸载到SOLU 1820。在一个实施例中,SOLU 1820可能被指令流1802中的一个或多个特定指令作为目标。这种特定指令可以由例如编译器、即时解释器、或其他适当的机制(其可以或可以不包括在系统1800中)生成或者可以由产生指令流1802的代码的起草者指定。例如,编译器可以采用应用代码并且以指令流1802的形式生成可执行代码。指令可以由处理器1804从指令流1802中接收。指令流1802可以以任何适当的方式加载到处理器1804中。例如,可以从存储设备、从其他机器或从如存储器系统1830等其他存储器加载待由处理器1804执行的指令。所述指令可以到达如RAM等常驻存储器并在其中可用,其中,指令从存储设备中取出以便由处理器1804执行。可以由例如预取器或取出单元(如指令取出单元1808)从常驻存储器中取出所述指令。注意,指令流1802可以包括除了执行集合运算的指令之外的指令。
在一个实施例中,用于执行针对如CAM数据结构1824等内容关联数据结构的内容的集合运算的特定指令可以包括用于将键值对集合添加到驻留在CAM数据结构1824中的键值对集合中的指令。在一个实施例中,用于执行针对CAM数据结构1824的内容的集合运算的特定指令可以包括用于对具有匹配键的键值对执行归约运算的指令。在另一实施例中,用于执行针对CAM数据结构1824的内容的集合运算的特定指令可以包括用于识别驻留在CAM数据结构1824中的键值对集合中其键与输入键值对集合中的键值对的键相匹配的键值对的指令。在一个实施例中,用于执行针对CAM数据结构1824的内容的集合运算的特定指令可以包括用于确定和返回CAM数据结构1824的当前长度的指令。在另一实施例中,用于执行针对CAM数据结构1824的内容的集合运算的特定指令可以包括用于重置CAM数据结构1824的内容的指令。在又另一实施例中,用于执行针对CAM数据结构1824的内容的集合运算的特定指令可以包括用于删除或以其他方式无效化驻留在CAM数据结构1824中的任何键值对或者用于将CAM数据结构1824的长度重置为零的指令。在一个实施例中,用于执行针对CAM数据结构1824的内容的集合运算的特定指令可以包括用于将CAM数据结构1824的内容移动到存储器中的指令。这些指令可以包括例如“CAMADD(CAM添加)”、“CAMINDMATCH(CAM识别匹配)”、“CAMSIZE(CAM尺寸)”、“CAMRESET(CAM重置)”和/或“CAMMOVE(CAM移动)”,以下更详细地描述了所述指令中的每一个。
在本公开的一个实施例中,如SOLU 1820等集合运算逻辑单元可以由用于加速执行针对特定处理器1804的集合运算的专用电路系统或逻辑实施。例如,系统1800可以包括针对处理器1804内的多个核1812的一个SOLU 1820。在此示例中,多个核1812的每个线程都可以访问如CAM数据结构1824等单个硬件内容关联数据结构的不同部分。在另一实施例中,如SOLU 1820等集合运算逻辑单元可以由用于加速执行针对处理器1804内的特定核1812的集合运算的专用电路系统或逻辑实施。例如,系统1800可以包括针对处理器1804内的多个核1812中的每一个的专用SOLU 1820。在此示例中,特定核1812的每个线程都可以访问在线程当中共享的单个CAM数据结构1824的不同部分。在又另一实施例中,系统1800可以包括针对处理器1804内的核1812的多个线程中的每一个的专用SOLU 1820(以及相应CAM数据结构1824)。在一个实施例中,共享CAM数据结构1824的可由每个处理器1804、核1812或其线程访问以存储或对键值对集合进行运算的部分可以具有固定尺寸。在另一实施例中,共享CAM数据结构1824的可由每个处理器1804、核1812或其线程访问以存储或对键值对集合进行运算的部分的尺寸可以在运行时间基于工作负荷而动态配置。
在一个实施例中,与一个或多个其他线程或核共享CAM数据结构1824的每个线程或核都可以访问CAM数据结构1824内的对应键值对集合。在一个实施例中,针对特定处理器1804、核1812或其线程的SOLU 1820的CAM控制逻辑1822可以包括用于跟踪存储在针对每个线程的共享CAM数据结构1824中的集合的尺寸的电路系统或逻辑。在另一实施例中,CAM控制逻辑1822可以包括用于生成到共享CAM数据结构1824的正确偏移量以提供对针对每个线程的共享CAM数据结构1824的对应部分的访问的电路系统或逻辑。在又另一实施例中,系统1800可以包括多个处理器1804、核1812或其线程向其提交用于执行集合运算的请求的共享CAM控制逻辑1822(例如,共享CAM处理引擎)。在此示例中,共享CAM控制逻辑1822可以访问适当的CAM数据结构1824(或其部分)以代表请求处理器、核或线程执行所请求的集合运算。
在一个实施例中,CAM数据结构1824可以通信地耦合至存储器系统1826,并且由SOLU 1820执行集合运算的结果可以存储在存储器子系统1826中。在一些实施例中,SOLU1820可以直接通信地耦合至存储器子系统1826以提供由SOLU 1820执行的集合运算的结果。例如,由SOLU 1820执行集合运算的结果可以写入到存储器子系统1826的高速缓存层级结构内的任何适当高速缓存中,如L1高速缓存1827或L2高速缓存1828。写入到高速缓存层级结构中的结果随后可以转储清除到存储器系统1830中。
图19是根据本公开的其他实施例的用于加速执行集合运算的另一示例系统的图示。图18和图19中的相似元件具有相同的参考号。图19展示了在本公开的一个实施例中,SOLU 1820A可以包括CAM控制逻辑1922A,所述CAM控制逻辑可以控制对由存储器子系统1826内的电路系统而不是由SOLU 1820A内的电路系统实施的CAM数据结构1924A的内容的访问并且可以对所述内容执行运算。在另一实施例中,SOLU 1820C可以包括CAM控制逻辑1922B,所述CAM控制逻辑可以控制对由存储器系统1830内的电路系统而不是由SOLU 1820C内的电路系统实施的CAM数据结构1924B的内容的访问并且可以对所述内容执行运算。虽然图18和图19展示了SOLU 1820、CAM控制逻辑1822/1922、以及CAM数据结构1824/1924在系统1800和1900内(或在其处理器1804内)的多个适当位置,但是这些示例实施方式仅仅是说明性的并且并不意味着限制本文中所描述的用于加速集合运算的机制的实施方式。
图20是框图,展示了根据本公开的实施例的集合运算逻辑单元(SOLU)。在此示例中,集合运算逻辑单元(SOLU)2010包括硬件内容关联数据结构(CAM数据结构2030)以及用于控制对CAM数据结构2030的内容的访问并且对所述内容执行运算的CAM控制逻辑2020。在一个实施例中,CAM控制逻辑2020可以包括一个或多个集合运算执行单元2025,所述集合运算执行单元中的每一个都包括用于执行针对CAM数据结构2030的一个或多个集合运算的全部或一部分的电路系统。例如,集合运算执行单元2025中的一个或多个可以包括用于进行以下操作的电路系统:将键值对集合添加到驻留在CAM数据结构2030中的键值对集合中,对具有匹配键的键值对执行归约运算,识别驻留在CAM数据结构2030中的键值对集合中其键与输入键值对集合中的键值对的键相匹配的键值对,确定并返回CAM数据结构2030的当前长度,重置CAM数据结构2030的内容,删除或以其他方式无效化驻留在CAM数据结构2030中的任何键值对,将CAM数据结构2030的长度重置为零,或者将CAM数据结构2030的内容移动到存储器中。
在一个实施例中,CAM数据结构2030可以包括多个元素2031至2036,所述元素中的每一个都可以存储表示键值对的信息。每个这种元素都可以包括n位,所述位的子集被用作用于访问此元素的到CAM数据结构2030的索引,并且所述位的另一子集包含将使用该索引来检索的值。例如,在图20中以扩展形式示出的元素2031包括位(n-1)到位(m+1)中的键以及位m到位0中的值。在此示例中,为了检索存储在元素2031内的位m到位0中的值,可以向硬件内容关联数据结构(CAM数据结构2030)呈现存储在位(n-1)到(m+1)中的键。在不同实施例中,可以以任何适当的键值格式对存储在CAM数据结构2030中的键值对进行编码。
在本公开的实施例中,包括如SOLU 1820等集合运算逻辑单元的系统(如系统1800或1900)可以支持用于执行集合运算的若干应用程序编程接口(API)。这些集合运算可以访问并对硬件内容关联数据结构进行运算,如CAM数据结构1824或CAM数据结构1924。在一些实施例中,可以异步地执行由SOLU 1820执行的集合运算。在这种实施例中,可以由处理器1804内的执行单元1816同时执行其他指令。在一个实施例中,这些API中的每一个都可以以硬件实施为处理器1804的指令集架构(ISA)中的指令。在一个实施例中,集合运算中的每一个都可以由包括在程序中的机器语言或汇编语言指令调用。在另一实施例中,集合运算中的每一个都可以通过调用以高级程序语言或面向对象的编程语言定义的函数或方法来进行调用。在不同实施例中,编程语言可以是编译语言或解释语言。
在一个实施例中,定义集合运算的API中的每一个都可以通过由处理器1804执行的一个或多个微指令或微操作实施。例如,解码单元1810可以接收表示由API之一定义的集合运算的指令。解码单元1810可以将所接收指令解码成一个或多个微指令或微操作,所述微指令或微操作中的每一个都将由执行单元1816之一或由SOLU 1820执行。分配器1814可以从解码单元1810接收(多个)微指令或(多个)微操作并且可以将其中的每一个引导到适当的执行单元1816或SOLU 1820以便执行所请求的集合运算。在一个实施例中,SOLU 1820可以包括用于执行用于将数据加载到CAM数据结构1824/1924中的微指令或微操作的电路系统或逻辑。在另一实施例中,SOLU 1820可以包括用于执行用于对多个键值对集合中的键值对的键执行索引匹配操作的微指令或微操作的电路系统或逻辑。在各个实施例中,可以执行这些及其他微指令或微操作以执行由API定义的集合运算。在一个实施例中,集合运算中的两个或更多个可以由共享单个操作码的汇编语言指令执行。例如,操作码可以指示指令将被引导到SOLU 1820(并且由其执行)。在此示例中,这些汇编语言指令可以包括多个控制字段,所述多个控制字段的对应值定义要执行的特定集合运算。控制字段之一可以指示在执行指令时执行的迭代的数量。例如,如果指令是将键值对集合添加到CAM数据结构1824/1924中,则控制字段之一可以指示输入集合中的键值对的数量。
在一个实施例中,SOLU 1820可以包括用于执行由“camadd”API定义的集合运算的电路系统和逻辑。此API可以定义用于将键值对集合插入到如CAM数据结构1824或CAM数据结构1924等硬件内容关联数据结构的内容中的指令。在一个实施例中,camadd指令可以从如在以下伪代码中展示的程序内调用:
在此示例中,输入键值对集合的源是包括一个数组(键输入数组)和另一数组(值输入数组)的结构,所述一个数组包含输入键值对集合的键,并且所述另一数组包含输入键值对集合的值。在一个实施例中,由camadd API定义的指令可以基于这样一种假设而进行运算:输入集合的键值对的键和相应值以相同的顺序被定序并且存储在这两个源数组中。例如,所述指令可以基于这样一种假设而进行运算:存储在键输入数组中的第一位置中的键是其值存储在值输入数组中的第一位置中的键值对的键,存储在键输入数组中的第二位置中的键是其值存储在值输入数组中的第二位置中的键值对的键,等等。在一个实施例中,将添加到CAM数据结构1824/1924中的键值对的指定数量可以与存储在源数组中的键值对的数量相同,在这种情况下,存储在源数组中的整个输入键值对集合都可以添加到CAM数据结构1824/1924中。在另一实施例中,将添加到CAM数据结构1824/1924中的键值对的指定数量可以小于存储在源数组中的键值对的数量,在这种情况下,存储在源数组中的输入键值对集合的子集可以添加到CAM数据结构1824/1924中。
在本公开的实施例中,由camadd API定义的指令可以用于执行集合并运算,所述集合并运算取得输入键值对集合并且将其添加到已经驻留在CAM数据结构1824/1924中的键值对集合中。在一个实施例中,在添加输入键值对集合的同时,所述指令可以执行索引匹配操作。例如,所述指令可以逐句通过源数组和CAM数据结构1824/1924,从而搜索CAM数据结构1824/1924中其键与输入键值对集合中的键值对的键相匹配的现有条目。如果在CAM数据结构1824/1924找到具有匹配键的条目,则所述指令可以将指定归约运算应用于CAM数据结构1824/1924中的条目的值以及输入集合中具有相同键的键值对的值。在一些实施例中,指定归约运算可以是算术运算。在其他实施例中,指定归约运算可以识别最小值或最大值。在仍其他实施例中,可以为camadd指令指定更复杂的归约运算,包括用户定义的运算。在一个实施例中,所述指令可以使用归约运算的结果来代替CAM数据结构1824/1924中的键值对的值。在一个实施例中,输入集合中在CAM数据结构1824/1924中未找到具有匹配键的条目的任何键值对(例如,具有唯一键的任何键值对)可以添加到CAM数据结构1824/1924的内容中作为新条目,由此增大CAM数据结构1824/1924的使用容量(其可以被称为其“长度”)。
图21是根据本公开的实施例的用于将键值对集合添加到硬件内容关联数据结构中的运算的图示。在一个实施例中,系统1800可以执行用于将键值对集合添加到驻留在CAM数据结构1824中的键值对集合中并且用于对具有匹配键的键值对执行归约运算的指令。例如,可以执行“CAMADD”指令。此指令可以包括任何适当数量和种类的操作数、位、标记、参数或其他元素。在一个实施例中,对CAMADD的调用可以引用标识将添加到CAM数据结构1824中的键值对集合的键的存储位置的第一指针。对CAMADD的调用还可以引用标识将添加到CAM数据结构1824中的键值对集合的值的存储位置的第二指针。在另一实施例中,对CAMADD的调用可以引用可能指定将添加到CAM数据结构1824中的键值对的数量的整数。在一个实施例中,将添加到CAM数据结构1824中的键值对的数量可以等于存储在所标识源数组中的键值对的数量。在另一实施例中,将添加到CAM数据结构1824中的键值对的数量可以小于存储在所标识源数组中的键值对的数量。
在一个实施例中,对CAMADD的调用可以包括标识将在将添加到CAM数据结构1824中的键值对之一具有与已经存储在CAM数据结构1824中的键值对之一相同的键时执行的归约运算的参数。归约运算可以是算术运算或聚合运算。例如,此参数可以指定具有共同键以及表示具有相同键的这两个键值对的值之和的值的单个键值对应当存储在输出集合中。在另一示例中,此参数可以指定具有共同键以及表示具有相同键的这两个键值对的值之间的有符号或无符号差的值的单个键值对应当存储在输出集合中。在又另一示例中,此参数可以指定具有共同键以及表示具有相同键的这两个键值对的值中的最小值的值的单个键值对应当存储在输出集合中。在另一示例中,此参数可以指定具有共同键以及表示具有相同键的这两个键值对的值中的最大值的值的单个键值对应当存储在输出集合中。在其他实施例中,当识别到匹配键时,可以指定并执行其他归约运算。
在图21中所展示的示例实施例中,在(1)处,可以由CAM控制逻辑1822从核1812之一接收CAMADD指令及其参数(所述参数可以包括以下各项中的任何或全部项:上述的这两个指针、指定将添加的键值对的数量的整数和/或指定归约运算的参数)。例如,在一个实施例中,CAMDD指令可以由核1812内的分配器1814(在图21中未示出)下发给集合运算逻辑单元1820(在图21中未示出)内的CAM控制逻辑1822。CAMADD可以由CAM控制逻辑1822逻辑地执行。
如此示例中所示,将添加到CAM数据结构1824中的键值对集合可以存储在存储器系统1830内的两个输入数组中。例如,键输入数组2102可以存储将添加到CAM数据结构1824中的键值对集合的键。可以根据各种排序算法中的任何排序算法对键进行排序并且可以以其排序顺序将其存储在键输入数组2102中。值输入数组2104可以存储将添加到CAM数据结构1824中的键值对集合的值。可以以与值相对应的键所存储的顺序相同的顺序存储值。例如,值输入数组2104中的第一条目可以存储其键存储在键输入数组2102中的第一条目中的键值对的值,值输入数组2104中的第二条目可以存储其键存储在键输入数组2102中的第二条目中的键值对的值,等等。
由CAM控制逻辑1822执行CAMADD可以包括:在(2)处,从通过在指令调用中引用的第一指针标识的位置中读取输入键。例如,第一指针可以将键输入数组2102标识为将添加到CAM数据结构1824中的键值对集合的键的源,并且CAM控制逻辑1822可以从键输入数组2102中的第一条目中读取键。由CAM控制逻辑1822执行CAMADD可以包括:在(3)处,从通过在指令调用中引用的第二指针标识的位置中读取输入值。例如,第二指针可以将值输入数组2104标识为将添加到CAM数据结构1824中的键值对集合的值的源,并且CAM控制逻辑1822可以从值输入数组2104中的第一条目中读取值。
在(4)处,CAM控制逻辑1822可以对CAM数据结构1824进行搜索以判定存储在CAM结构1824中的键值对是否具有与在(2)处从键输入数组2102中读取的键相同的键。如果是,则可以将包含匹配键的条目返回到CAM控制逻辑1822。在一个实施例中,这可以包括返回存储在CAM结构1824中的具有匹配键的键值对的值。
如果在(4)处找到匹配建并且存储在CAM结构1824中的具有匹配键的键值对的值被返回,则在(5)处,CAM控制逻辑1822可以将指定归约运算应用于共享共同键的键值对。在这种情况下,在(6)处,CAM控制逻辑1822可以使用包括匹配键以及取决于归约运算的结果的值的新键值对来代替存储在CAM结构1824中的具有匹配键的键值对。例如,在不同的实施例中,所述值可以表示共享共同键的这两个键值对的值之和、共享共同键的这两个键值对的值之差、共享共同键的这两个键值对的值中的最小值、或者共享共同键的这两个键值对的值中的最大值。因为键值对按照其键以排序顺序存储在CAM数据结构1824中,所以可以将新键值对存储在CAM数据结构1824中在具有匹配键的键值对之前存储在CAM结构1824中的位置中。
如果在(4)处在CAM数据结构1824中未找到具有匹配键的条目,则可以省略在(5)处示出的归约运算。在这种情况下,在(6)处,CAM控制逻辑1822可以将从键输入数组2102中获得的键以及从值输入数组2104中获得的值作为新键值对条目而存储在CAM数据结构1824中。可以根据用于对存储在CAM数据结构1824中的键值对集合中的所有键值对进行排序和存储的排序算法将新键值对存储在CAM数据结构1824中在根据其键确定的位置中。
在一个实施例中,执行CAMADD指令可以包括针对将添加到CAM数据结构1824中的键值对集合中的键值对中的每一个而重复图21中所示的运算的步骤中的任何或所有步骤。例如,如果对CAMADD的调用包括指定将添加到CAM数据结构1824中的键值对的数量的整数n,则可以将步骤(2)至步骤(6)执行(视情况而定)n次(对将添加到CAM数据结构1824中的键值对中的每一个执行一次)。在此示例中,对于每次迭代,在(2)和(3)处,CAM控制逻辑1822可以分别从键输入数组2102中的下一条目中读取键并且从值输入数组2104中的下一条目中读取值。然后,CAM控制逻辑1822可以对此输入键值对执行步骤(4)、步骤(5)(视情况而定)以及步骤(6),在这之后,可以引退CAMADD指令(未示出)。
图22展示了根据本公开的实施例的用于将键值对集合添加到硬件内容关联(CAM)数据结构的内容中的示例方法2200。方法2200可以由图1至图21所示的元件中的任何元件实施。方法2200可以由任何适当的标准开始并且可以在任何适当的点处开始运算。在一个实施例中,方法2200可以在2205处开始运算。方法2200可以包括比所示步骤更多或更少的步骤。另外,方法2200可以采用与以下所示顺序不同的顺序来执行其步骤。方法2200可以在任何适当的步骤处终止。另外,方法2200可以在任何适当的步骤处重复运算。方法2200的步骤中的任何步骤可以与方法2200的其他步骤并行地或者与其他方法的步骤并行地执行。此外,将可以方法2200执行多次以将多个键值对集合添加到硬件内容关联数据结构的内容中。
在2205处,在一个实施例中,可以接收用于将键值对集合添加到CAM数据结构中的指令并对其进行解码。在2210处,可以将包含键值对以及指令的一个或多个参数的输入流引导到集合运算逻辑单元(SOLU)以供执行。在一个实施例中,指令参数可以包括指向键输入数组和值输入数组的对应指针,所述键输入数组和值输入数组共同存储将添加到CAM数据结构中的输入键值对集合。在此示例中,可以从由这些输入参数标识的这两个源数组中获得输入流。在一个实施例中,指令参数可以包括指示输入集合中将添加到CAM数据结构中的键值对的数量的整数值。在另一实施例中,指令参数可以包括将应用于具有匹配键的键值对的值的归约运算的标识符。
在2215处,对于输入流中的给定键值对,可以判定当前存储在CAM数据结构中的键值对集合是否包括具有相同键的键值对。如果在步骤2220处确定当前存储在CAM数据结构中的键值对集合包括具有相同键的键值对,则在步骤2225处,可以将在指令中指定的运算应用于具有相同键的键值对。在2230处,可以将运算的结果作为键值对而存储在CAM数据结构中,并且可以通过共同键在CAM数据结构中索引此键值对。
如果在步骤2220处确定当前存储在CAM数据结构中的键值对集合不包括具有相同键的键值对,则在2235处,可以将输入流中的给定键值对存储在CAM数据结构中,并且此键值对可以通过其键来进行索引。在输入流中存在更多键值对时(如在2240处确定的),可以针对输入流中的每个附加键值对而在2215处重复开始方法2200。一旦在指令流中不存在附加键值对,就可以在2245处引退所述指令。例如,一旦由所述指令的输入参数指定的数量的键值对已经被添加到CAM数据结构中,就可以引退所述指令。
在一个实施例中,SOLU 1820可以包括用于执行由“camindmatch”API定义的集合运算的电路系统和逻辑。此API可以定义用于对输入键值对集合并且对CAM数据结构1824/1924的内容执行索引匹配操作的指令。在一个实施例中,camindmatch指令可以从如在以下伪代码中展示的程序内调用:
在此示例中,输入键值对集合的源是包括一个数组(键输入数组)和另一数组(值输入数组)的结构,所述一个数组包含输入键值对集合的键,并且所述另一数组包含输入键值对集合的值。在一个实施例中,由camindmatch API定义的指令可以基于这样一种假设而进行运算:输入集合的键值对的键和相应值以相同的顺序被定序并且存储在这两个源数组中。例如,所述指令可以基于这样一种假设而进行运算:存储在键输入数组中的第一位置中的键是其值存储在值输入数组中的第一位置中的键值对的键,存储在键输入数组中的第二位置中的键是其值存储在值输入数组中的第二位置中的键值对的键,等等。在一个实施例中,其键将与驻留在CAM数据结构1824/1924中的键值对的键进行比较的键值对的指定数量可以与存储在源数组中的键值对的数量相同,在这种情况下,可以将存储在源数组中的整个输入键值对集合的键与CAM数据结构1824/1924的内容中的键进行比较。在另一实施例中,其键将与驻留在CAM数据结构1824/1924中的键值对的键进行比较的键值对的指定数量可以小于存储在源数组中的键值对的数量,在这种情况下,可以将存储在源数组中的输入键值对集合的子集的键与CAM数据结构1824/1924的内容中的键进行比较。
在本公开的实施例中,由camindmatch API定义的指令可以用于执行集合交运算,所述集合交运算取得输入键值对集合并且将其与已经驻留在CAM数据结构1824/1924中的键值对集合进行比较。在一个实施例中,所述指令基于这样一种假设而进行运算:当所述指令被调用时,CAM数据结构存储键值对集合。在一个实施例中,为了将输入键值对集合与存储在CAM数据结构1824/1924中的键值对进行比较,所述指令可以执行索引匹配操作。例如,所述指令可以逐句通过源数组和CAM数据结构1824/1924,从而搜索CAM数据结构1824/1924中其键与输入键值对集合中的键值对的键相匹配的现有条目。在一个实施例中,如果对于输入集合中的给定键值对,在CAM数据结构1824/1924中找到具有匹配键的条目,则所述指令可以将匹配键添加到在指令中指定用于存储匹配键的输出数组中。在另一实施例中,如果对于输入集合中的给定键值对,在CAM数据结构1824/1924中找到具有匹配键的条目,则所述指令可以将输入集合中的给定键值对的值添加到在指令中指定用于存储具有匹配键的键值对的值的输出数组中。在又另一实施例中,如果对于输入集合中的给定键值对,在CAM数据结构1824/1924中找到具有匹配键的条目,则所述指令可以增大将由所述指令输出的指示所找到的匹配键的数量的值。在一个实施例中,如果对于输入集合中的给定键值对,在CAM数据结构1824/1924中未找到具有匹配键的条目(例如,如果给定键值对具有唯一键),则指令可以丢弃或忽略给定键值对。
在一个实施例中,随着输入集合中其键与CAM数据结构1824/1924中的键值对的键相匹配的每个键值对被识别,可以将匹配键写入到键输出数组中并且然后将其流式传输到高速缓存层级结构中。例如,所述键可以从CAM数据结构1824/1924流式传输到存储器子系统1826中的L1高速缓存1827或到L2高速缓存1828。在另一实施例中,随着输入集合中其键与CAM数据结构1824/1924中的键值对的键相匹配的每个键值对被识别,可以将输入集合中具有匹配键的键值对的值写入到值输出数组中并且然后将其流式传输到高速缓存层级结构中。例如,所述值可以从CAM数据结构1824/1924流式传输到存储器子系统1826中的L1高速缓存1827或到L2高速缓存1828。在一个实施例中,输出集合的每个条目都可以表示随后将插入到CAM数据结构1824/1924中的键值对。例如,在执行camindmatch指令之后,可以调用camadd指令以将由camindmatch指令产生的输出集合中的键值对添加到CAM数据结构1824/1924中。
图23是根据本公开的实施例的用于判定输入键值对集合中的键中的任何键是否与当前存储在硬件内容关联(CAM)数据结构中的键值对中的键相匹配的运算的图示。在一个实施例中,系统1800可以执行用于识别驻留在CAM数据结构1824中的键值对集合中其键与输入键值对集合中的键值对的键匹配的键值对的指令。例如,可以执行“CAMINDMATCH”指令。此指令可以包括任何适当数量和种类的操作数、位、标记、参数或其他元素。在一个实施例中,对CAMINDMATCH的调用可以引用标识输入键值对集合的键的存储位置的第一指针。对CAMINDMATCH的调用还可以引用标识输入键值对集合的值的存储位置的第二指针。
在一些实施例中,对CAMINDMATCH的调用可以引用标识输入键值对集合中其键与存储在CAM数据结构1824中的键值对的键相匹配的任何键值对的键将被存储的位置的第三指针。对CAMINDMATCH的调用还可以引用标识输入键值对集合中其键与存储在CAM数据结构1824中的键值对的键相匹配的任何键值对的值将被存储的位置的第四指针。在一个实施例中,对CAMINDMATCH的调用可以引用可能指定输入键值对集合中的键值对的数量的整数。在另一实施例中,可以返回其值指示输入键值对集合中其键被发现与存储在CAM数据结构1824中的键值对的键相匹配的键值对的数量的整数。在又另一实施例中,对CAMINDMATCH的调用可以引用在执行CAMINDMATCH指令之后其值可能指示输入键值对集合中其键被发现与存储在CAM数据结构1824中的键值对的键相匹配的键值对的数量的结果参数。
在图23中所展示的示例实施例中,在(1)处,可以由CAM控制逻辑1822从核1812之一接收CAMINDMATCH指令及其参数(所述参数可以包括以下各项中的任何或全部项:上述的这四个指针和/或指定输入键值对集合中的键值对的数量的整数)。例如,在一个实施例中,CAMINDMATCH指令可以由核1812内的分配器1814(在图23中未示出)下发给集合运算逻辑单元1820(在图23中未示出)内的CAM控制逻辑1822。CAMINDMATCH可以由CAM控制逻辑1822逻辑地执行。
如此示例中所示,可以将输入键值对集合存储在存储器系统1830内的两个输入数组中。例如,键输入数组2302可以存储输入键值对集合的键。可以根据各种排序算法中的任何排序算法对键进行排序并且可以以其排序顺序将其存储在键输入数组2302中。值输入数组2304可以存储输入键值对集合的值。可以以与值相对应的键所存储的顺序相同的顺序存储值。例如,值输入数组2304中的第一条目可以存储其键存储在键输入数组2302中的第一条目中的键值对的值,值输入数组2304中的第二条目可以存储其键存储在键输入数组2302中的第二条目中的键值对的值,等等。
由CAM控制逻辑1822执行CAMINDMATCH可以包括:在(2)处,从通过在指令调用中引用的第一指针标识的位置中读取输入键。例如,第一指针可以将键输入数组2302标识为输入键值对集合的键的源,并且CAM控制逻辑1822可以从键输入数组2302中的第一条目中读取键。由CAM控制逻辑1822执行CAMINDMATCH可以包括:在(3)处,从通过在指令调用中引用的第二指针标识的位置中读取输入值。例如,第二指针可以将值输入数组2304标识为输入键值对集合的值的源,并且CAM控制逻辑1822可以从值输入数组2304中的第一条目中读取值。
在(4)处,CAM控制逻辑1822可以对CAM数据结构1824进行搜索以判定存储在CAM结构1824中的键值对是否具有与在(2)处从键输入数组2302中读取的键相同的键。如果是,则可以将包含匹配键的条目返回到CAM控制逻辑1822。在一个实施例中,这可以包括返回存储在CAM结构1824中的具有匹配键的键值对的值。
如果在(4)处找到匹配键并且存储在CAM结构1824中的具有匹配键的键值对的值被返回,则在(5)处,CAM控制逻辑1822可以增大指示输入键值对集合中其键被发现与存储在CAM数据结构1824中的键值对的键相匹配的键值对的数量的计数值。例如,在一个实施例中,CAM控制逻辑1822可以增大保持在CAM控制逻辑1822内的计数器。在另一实施例中,CAM控制逻辑1822可以增大保持在CAM数据结构1824内的计数器。在又另一实施例中,CAM控制逻辑1822可以增大保持在存储器子系统1826内的计数器。随后,在(6)处,CAM控制逻辑1822可以将匹配键存储到由在指令调用中引用的第三指针标识的位置中。例如,第三指针可以将键输出数组2306标识为将存储匹配键的位置,并且CAM控制逻辑1822可以将从键输入数组2302中读取的输入键存储到键输出数组2306中。在一个实施例中,在(7)处,CAM控制逻辑1822还可以将具有匹配键的输入键值对的值存储到由在指令调用中引用的第四指针标识的位置中。例如,第四指针可以将值输出数组2308标识为将存储与匹配键相对应的值的位置,并且CAM控制逻辑1822可以将从值输入数组2304中读取的输入值存储到值输出数组2308中。如果在(4)处在CAM数据结构1824中未找到具有匹配键的条目,则可以省略图23中展示的步骤(6)和步骤(7)。
在一个实施例中,执行CAMINDMATCH指令可以包括针对输入键值对集合中的键值对中的每一个而重复图23中所展示的运算的步骤中的任何或所有步骤。例如,如果对CAMINDMATCH的调用包括指定输入键值对集合中的键值对的数量的整数n,则可以将步骤(2)至步骤(7)执行(视情况而定)n次(对输入键值对集合中的键值对中的每一个执行一次)。在此示例中,对于每次迭代,在(2)和(3)处,CAM控制逻辑1822可以分别从键输入数组2302中的下一条目中读取键并且从值输入数组2304中的下一条目中读取值。然后,CAM控制逻辑1822可以在适当情况下对此输入键值对执行步骤(4)以及步骤(5)、步骤(6)和步骤(7)。一旦已经对输入键值对集合中的键值对中的每一个执行了这些运算,在(8)处,CAM控制逻辑1822就可以将指示输入键值对集合中其键被发现与存储在CAM数据结构1824中的键值对的键相匹配的键值对的数量的值返回到CAMINDMATCH指令的调用程序(例如,返回到核1812中从其处接收了所述指令的一个核),在这之后,可以引退CAMINDMATCH指令(未示出)例如,在一个实施例中,CAM控制逻辑1822可以返回存储在保持在CAM控制逻辑1822内的计数器中的值。在另一实施例中,CAM控制逻辑1822可以返回存储在保持在CAM数据结构1824内的计数器中的值。在又另一实施例中,CAM控制逻辑1822可以返回存储在保持在存储器子系统1826内的计数器中的值。在仍另一实施例中,CAM控制逻辑1822可以将指示具有匹配键的键值对的数量的值写入到由指令的参数指定的位置中。
图24展示了根据本公开的实施例的用于判定输入键值对集合中的键中的任何键是否与当前存储在硬件内容关联(CAM)数据结构中的键值对中的键相匹配的示例方法2400。方法2400可以由图1至图23所示的元件中的任何元件实施。方法2400可以由任何适当的标准开始并且可以在任何适当的点处开始运算。在一个实施例中,方法2400可以在2405处开始运算。方法2400可以包括比所示步骤更多或更少的步骤。另外,方法2400可以采用与以下所示顺序不同的顺序来执行其步骤。方法2400可以在任何适当的步骤处终止。另外,方法2400可以在任何适当的步骤处重复运算。方法2400的步骤中的任何步骤可以与方法2400的其他步骤并行或者与其他方法的步骤并行地执行。此外,可以将方法2400执行多次以判定任何其他输入键值对集合中的键中的任何键是否与当前存储在硬件内容关联数据结构中的键值对中的键相匹配。
在2405处,在一个实施例中,可以接收用于识别CAM数据结构中其键与输入流中的键值对的键相匹配的键值对的指令。在2410处,可以将包含键值对以及指令的一个或多个参数的输入流引导到集合运算逻辑单元(SOLU)以供执行。在一个实施例中,指令参数可以包括指向键输入数组和值输入数组的对应指针,所述键输入数组和值输入数组共同存储输入键值对集合。在此示例中,可以从由这些输入参数标识的这两个源数组中获得输入流。在一个实施例中,指令参数可以包括指示输入集合中将与驻留在CAM数据结构中的键值对进行比较的键值对的数量的整数值。在一个实施例中,指令参数可以包括指向键输出数组和值输出数组的对应指针,所述键输出数组和值输出数组用于存储输入集合中其键被发现与驻留在CAM数据结构中的键值对的键相匹配的输出键值对集合。在另一实施例中,指令参数可以包括其值指示输入集合中其键被发现与驻留在CAM数据结构中的键值对的键相匹配的键值对的数量的输出参数的标识符。在又另一实施例中,指令参数可以包括指示输入集合中其键被发现与驻留在CAM数据结构中的键值对的键相匹配的键值对的数量的值将被所述指令写入到的位置的标识符。
在2415处,对于输入流中的给定键值对,可以判定当前存储在CAM数据结构中的键值对集合是否包括具有相同键的键值对。如果在步骤2420处确定当前存储在CAM中的键值对集合包括具有相同键的键值对,则在步骤2425处,可以将来自给定键值对的键存储到其位置由指令参数之一指定的输出匹配键数组中。在2430处,可以将来自给定键值对的值存储到其位置由指令参数之一指定的第二输出数组中。此外,在2435处,可以增大匹配键的计数。例如,在一个实施例中,可以增大保持在CAM控制逻辑内并且其值反映匹配键的数量的计数器。在另一实施例中,可以增大保持在CAM数据结构内并且其值反映匹配键的数量的计数器。在又另一实施例中,可以增大保持在存储器子系统内并且其值反映匹配键的数量的计数器。
如果在步骤2420处确定当前存储在CAM数据结构中的键值对集合不包括具有相同键的键值对,则在2440处,不对给定键值对采取任何动作。在输入流中存在更多键值对时(如在2445处确定的),可以针对输入流中的每个附加键值对而在2415处重复开始方法2400。一旦在指令流中不存在附加键值对,就可以在2450处引退所述指令。例如,一旦已经将输入集合的键值对的由所述指令的输入参数指定的数量的键与驻留在CAM数据结构中的键值对的键进行了比较,就可以引退所述指令。虽然在此示例中未展示,但是在一些实施例中,在执行所述指令之后,可以向调用程序返回所找到的匹配键的数量。
在一个实施例中,SOLU 1820可以包括用于执行由“camsize”API定义的集合运算的电路系统和逻辑。此API可以定义用于获得CAM数据结构1824/1924的当前长度的指令。在一个实施例中,camsize指令可以从如在以下伪代码中展示的程序内调用:
camsize()
在一个实施例中,camsize指令可以向调用程序返回指示当前存储在CAM数据结构中的键值对的数量的值。在另一实施例中,camsize指令可以将指示当前存储在CAM数据结构中的键值对的数量的值写入到由所述指令的参数指定的位置中。
图25是根据本公开的实施例的用于确定硬件内容关联(CAM)数据结构的当前长度的运算的图示。在一个实施例中,系统1800可以执行用于确定和返回CAM数据结构1824的当前长度的指令。例如,可以执行“CAMSIZE”指令。此指令可以包括任何适当数量和种类的操作数、位、标记、参数或其他元素。在一个实施例中,对CAMSIZE的调用可以不包括任何输入参数并且可以返回指示当前存储在CAM数据结构1824中的有效或活跃键值对的数量的整数。在另一实施例中,对CAMSIZE的调用可以包括指示在执行CAMSIZE指令之后(未示出)应当将指示当前存储在CAM数据结构1824中的有效或活跃键值对的数量的值存储在的位置的参数。
在图25中所示的示例实施例中,在(1)处,可以由CAM控制逻辑1822从核1812之一接收CAMSIZE指令及任何指令参数。例如,在一个实施例中,CAMSIZE指令可以由核1812内的分配器1814(在图25中未示出)下发给集合运算逻辑单元1820(在图25中未示出)内的CAM控制逻辑1822。CAMSIZE可以由CAM控制逻辑1822逻辑地执行。
由CAM控制逻辑1822执行CAMSIZE指令可以包括:在(2)处,访问CAM数据结构1824以确定其当前长度。例如,在一个实施例中,CAM控制逻辑1822可以查询保持在CAM数据结构1824内的其值反映当前存储在CAM数据结构1824中的键值对的数量的计数器。在另一实施例中,CAM控制逻辑1822可以保持其值反映当前存储在CAM数据结构1824中的键值对的数量的本地计数器(在CAM控制逻辑1822内)。在一个实施例中,CAM控制逻辑1822可以保持到CAM数据结构1824的可以根据其计算CAM结构1824的长度的一个或多个指针。例如,CAM控制逻辑1822可以保持标识存储在CAM数据结构1824中的第一活跃或有效键值对的位置的一个指针以及标识存储在CAM数据结构1824中的最后一个活跃或有效键值对的位置的另一指针。CAM控制逻辑1822可以将CAM数据结构1824的长度确定为由这些指针标识的地址之差。在一个实施例中,CAM控制逻辑1822可以保持指向CAM数据结构1824中的下一可用的空条目或未使用条目的指针。CAM控制逻辑1822可以基于由此指针标识的地址确定CAM数据结构1824的长度。
一旦已经确定了CAM数据结构1824的当前长度,在(3)处,CAM控制逻辑1822就可以向CAMSIZE指令的调用程序(例如,向核1812中从其处接收到所述指令的一个核)返回CAM数据结构1824的当前长度,在这之后,可以引退CAMSIZE指令(未示出)。
图26展示了根据本公开的实施例的用于确定硬件内容关联(CAM)数据结构的当前长度的示例方法2600。方法2600可以由图1至图25所示的元件中的任何元件实施。方法2600可以由任何适当的标准开始并且可以在任何适当的点处开始运算。在一个实施例中,方法2600可以在2605处开始运算。方法2600可以包括比所示步骤更多或更少的步骤。另外,方法2600可以采用与以下所示顺序不同的顺序来执行其步骤。方法2600可以在任何适当的步骤处终止。另外,方法2600可以在任何适当的步骤处重复运算。方法2600的步骤中的任何步骤可以与方法2600的其他步骤并行或者与其他方法的步骤并行地执行。此外,可以在不同的时间点将方法2600执行多次以确定硬件内容关联数据结构的当前长度。
在2605处,在一个实施例中,可以接收用于返回CAM数据结构的当前长度的指令并对其进行解码。在2610处,可以将所述指令引导到集合运算逻辑单元(SOLU)以供执行。在2615处,可以返回当前存储在CAM数据结构中的键值对的数量。在一个实施例中,CAM控制逻辑可以从保持在CAM控制逻辑内的计数器中获得指示当前存储在CAM数据结构中的键值对的数量的值。在另一实施例中,CAM控制逻辑可以从保持在CAM数据结构内的计数器中获得指示当前存储在CAM数据结构中的键值对的数量的值。在又另一示例中,CAM控制逻辑可以基于由到CAM数据结构的一个或多个指针标识的地址计算当前存储在CAM数据结构中的键值对的数量。在2620处,可以引退所述指令。
在一个实施例中,SOLU 1820可以包括用于执行由“camreset”API定义的集合运算的电路系统和逻辑。此API可以定义用于重置CAM数据结构1824/1924的内容的指令。在一个实施例中,camreset指令可以从如在以下伪代码中展示的程序内调用:
camreset()
在一个实施例中,camreset指令可以用于删除(或以其他方式无效化)CAM数据结构的当前内容并且用于将其长度重置为零。在一个实施例中,执行camreset指令可以清除CAM数据结构的内容。例如,在一个实施例中,所述指令可以使用表示空(NULL)条目的数据如全部是零来代替表示存储在CAM数据结构中的活跃有效键值对中的每一个的数据。在另一实施例中,camreset指令可以修改存储在CAM数据结构中的数据。在一个实施例中,执行camreset指令可以重置指向下一可用(空或未使用)条目的指针,使得所述指针将CAM数据结构内的第一条目标识为空条目或未使用条目。在其他实施例中,可以应用用于使CAM数据结构的当前内容无效化的任何其他适当机制。
在一个实施例中,保持在CAM数据结构1824内的计数器的值可以反映当前存储在CAM数据结构1824中的键值对的数量,并且camreset指令可以将此计数器的值重置为零。在另一实施例中,CAM控制逻辑1822可以保持其值反映当前存储在CAM数据结构1824中的键值对的数量的本地计数器,并且camreset指令可以将此计数器的值重置为零。在其他实施例中,CAM控制逻辑1822可以保持到CAM数据结构1824的可以根据其计算CAM结构1824的长度的一个或多个指针,并且camreset指令可以修改这些指针中的一个或多个,使得CAM数据结构1824的所计算长度为零。例如,通过将指向CAM数据结构1824中的下一可用的空条目或未使用条目的指针重置为指向CAM数据结构1824的第一条目,CAM控制逻辑1822可以有效地将CAM数据结构1824的长度重置为零。
图27是根据本公开的实施例的用于重置硬件内容关联(CAM)数据结构的内容的运算的图示。在一个实施例中,系统1800可以执行用于删除或以其他方式无效化驻留在CAM数据结构1824中的任何键值对并且用于将CAM数据结构1824的长度重置为零的指令。例如,可以执行“CAMRESET”指令。此指令可以包括任何适当数量和种类的操作数、位、标记、参数或其他元素。在一个实施例中,对CAMRESET的调用可以不包括任何参数并且可以不向CAMRESET指令的调用程序返回任何数据。在另一实施例中,对CAMRESET的调用可以包括指示在执行CAMRESET指令之后(未示出)应当将指示运算状态的值(例如,指示运算成功或失败的值、或者反映在执行CAMRESET指令之后的CAM数据结构1824的长度的值)存储在的位置的参数。
在图27中所示的示例实施例中,在(1)处,可以由CAM控制逻辑1822从核1812之一接收CAMRESET指令及任何指令参数。例如,在一个实施例中,CAMRESET指令可以由核1812内的分配器1814(在图27中未示出)下发给集合运算逻辑单元1820(在图27中未示出)内的CAM控制逻辑1822。CAMRESET可以由CAM控制逻辑1822逻辑地执行。
由CAM控制逻辑1822执行CAMRESET指令可以包括:在(2)处,访问CAM数据结构1824以清除或无效化其内容。例如,在一个实施例中,CAM控制逻辑1822可以使用表示空条目的数据如全部是零来代替表示存储在CAM数据结构1824中的活跃有效键值对中的每一个的数据。在另一实施例中,CAM控制逻辑1822可以重置指向下一可用(空或未使用)条目的指针,使得所述指针将CAM数据结构内的第一条目标识为空条目或未使用条目。执行CAMRESET指令还可以包括:在(3)处,访问CAM数据结构1824以将对CAM数据结构1824的当前长度的指示重置为零。例如,在一个实施例中,CAM控制逻辑1822可以将保持在CAM数据结构1824内且其值反映活跃有效键值对的数量的计数器的值重置为零。在另一实施例中,CAM控制逻辑1822可以修改到CAM数据结构1824的一个或多个指针的值以有效地将CAM数据结构1824的长度重置为零。
一旦已经清除或无效化了CAM数据结构1824的内容并且已经将对CAM数据结构1824的当前长度的指示重置为零,就可以引退CAMRESET指令(未示出)。
图28展示了根据本公开的实施例的用于重置硬件内容关联(CAM)数据结构的内容的示例方法2800。方法2800可以由图1至图27所示的元件中的任何元件实施。方法2800可以由任何适当的标准开始并且可以在任何适当的点处开始运算。在一个实施例中,方法2800可以在2805处开始运算。方法2800可以包括比所示步骤更多或更少的步骤。另外,方法2800可以采用与以下所示顺序不同的顺序来执行其步骤。方法2800可以在任何适当的步骤处终止。另外,方法2800可以在任何适当的步骤处重复运算。方法2800的步骤中的任何步骤可以与方法2800的其他步骤并行或者与其他方法的步骤并行地执行。此外,可以在不同的时间点将方法2800执行多次以重置硬件内容关联数据结构的内容。
在2805处,在一个实施例中,可以接收用于重置CAM数据结构的指令并对其进行解码。在2810处,可以将所述指令引导到集合运算逻辑单元(SOLU)以供执行。在2815处,可以删除或以其他方式无效化CAM数据结构的当前内容。例如,在一个实施例中,CAM控制逻辑可以使用表示空条目的数据如全部是零来代替表示存储在CAM数据结构中的活跃有效键值对中的每一个的数据。在另一实施例中,CAM控制逻辑可以重置指向下一可用(空或未使用)条目的指针,使得所述指针将CAM数据结构内的第一条目标识为空条目或未使用条目。
在2820处,可以将对CAM数据结构的长度的指示重置为零。例如,在一个实施例中,CAM控制逻辑可以将保持在CAM数据结构内且其值反映活跃有效键值对的数量的计数器的值重置为零。在另一实施例中,CAM控制逻辑可以将本地地保持在CAM控制逻辑内且其值反映活跃有效键值对的数量的计数器的值重置为零。在又另一实施例中,CAM控制逻辑可以修改到CAM数据结构的一个或多个指针的值。在此示例中,表示CAM数据结构的长度的随后基于(多个)指针值计算的值可以为零。在2825处,可以引退所述指令。
在一个实施例中,SOLU 1820可以包括用于执行由“cammove”API定义的集合运算的电路系统和逻辑。此API可以定义用于将CAM数据结构1824/1924的内容移动到存储器中的指令。在一个实施例中,cammove指令可以从如在以下伪代码中展示的程序内调用:
在此示例中,cammove指令可以将CAM数据结构1824/1924的当前内容复制到存储器中由指令参数指定的位置中。在一个实施例中,当前存储在存储器中的键值对的键可以写出到用于键的其位置在指令参数中由第一指针标识的目的地数组中。当前存储在存储器中的键值对的值可以写出到用于值的其位置在指令参数中由第二指针标识的目的地数组中。在一个实施例中,cammove指令可以逐句通过CAM数据结构1824/1924的条目,从而将每个键值对的组成元素存储在这两个目的地数组中。在一个实施例中,由cammove API定义的指令可以进行运算以便以相同的顺序将当前存储在CAM数据结构1824/1924中的键值对的键和相应值存储在这两个目的地数组中。例如,存储在键输出数组中的第一位置中的键可以是其值存储在值输出数组中的第一位置中的键值对的键,存储在键输出数组中的第二位置中的键可以是其值存储在值输出数组中的第二位置中的键值对的键,等等。
在一个实施例中,cammove指令可以将CAM数据结构的全部内容复制到存储器中,而不论存储在CAM数据结构中的活跃有效键值对的数量如何。在另一实施例中,cammove指令可以仅将存储在CAM数据结构中的活跃有效键值对复制到存储器中。例如,CAM控制逻辑可以基于保持在CAM数据结构中的一个或多个指针的值确定CAM数据结构中的最后一个活跃有效条目并且可以在将最后一个活跃有效键值对复制到存储器中之后停止将键值对从CAM数据结构1824/1924复制到存储器中。在另一示例中,CAM控制逻辑可以基于本地地保持在CAM控制逻辑1822中的一个或多个指针的值确定CAM数据结构1824/1924中的最后一个活跃有效条目并且可以在将最后一个活跃有效键值对复制到存储器中之后停止将键值对从CAM数据结构1824/1924复制到存储器中。在一个实施例中,CAM控制逻辑1822可以确定CAM数据结构1824/1924中的活跃有效条目的数量并且可以在将此数量的键值对复制到存储器中之后停止将键值对从CAM数据结构1824/1924复制到存储器中。例如,CAM控制逻辑1822可以访问保持在CAM数据结构1824/1924内且其值反映活跃有效键值对的数量的计数器。在另一实施例中,CAM控制逻辑1822可以本地地保持其值反映活跃有效键值对的数量的计数器(在CAM控制逻辑1822内)。在一些实施例中,编程器的责任可能是确保为将从CAM数据结构1824中复制的键值对指定的目的地数组大到足以保持将从CAM数据结构1824中复制的键值对。
图29是根据本公开的实施例的用于将硬件内容关联数据结构(CAM)的内容移动到存储器中的运算的图示。在一个实施例中,系统1800可以执行用于将CAM数据结构1824的内容移动到存储器系统1830中的位置中。例如,可以执行“CAMMOVE”指令。此指令可以包括任何适当数量和种类的操作数、位、标记、参数或其他元素。在一个实施例中,对CAMMOVE的调用可以引用标识CAM数据结构1824中的键值对集合的键将被存储在的存储器中位置的第一指针。对CAMMOVE的调用还可以引用标识CAM数据结构1824中的键值对集合的值将被存储在的存储器中位置的第二指针。
在图29中所示的示例实施例中,在(1)处,可以由CAM控制逻辑1822从核1812之一接收CAMMOVE指令及其参数(所述参数可以包括上述的这两个指针)。例如,在一个实施例中,CAMMOVE指令可以由核1812内的分配器1814(在图29中未示出)下发给集合运算逻辑单元1820(在图29中未示出)内的CAM控制逻辑1822。CAMMOVE可以由CAM控制逻辑1822逻辑地执行。
在一个实施例中,键值对集合中的每个键值对都可以存储在CAM数据结构1824中作为包括键和值两者的条目。键值对可以基于其键根据各种排序算法中的任何排序算法而被排序并且可以以其排序顺序而被存储在CAM数据结构1824中。
由CAM控制逻辑1822执行CAMMOVE指令可以包括:在(2)处,从CAM数据结构1824中检索包括给定键的第一键值对。执行CAMMOVE指令可以包括:在(3)处,CAM控制逻辑1822将给定键存储到由在指令调用中引用的第一指针标识的位置中。例如,第一指针可以将键输出数组2902标识为CAM数据结构1824中的键值对集合的键将被存储在的位置,并且CAM控制逻辑1822可以将给定键存储到键输出数组2902中的第一条目中。由CAM控制逻辑1822执行CAMMOVE可以包括:在(4)处,将第一键值对的值(包含给定键的键值对的值)存储到由在指令调用中引用的第二指针标识的位置中。例如,第二指针可以将值输出数组2904标识为CAM数据结构1824中的键值对集合的值将被存储在的位置,并且CAM控制逻辑1822可以将包含给定键的键值对的值存储到值输出数组2904中的第一条目中。
在一个实施例中,执行CAMMOVE指令可以包括针对CAM数据结构1824中的键值对中的每一个而重复图29中所展示的运算的步骤中的任何或所有步骤。例如,如果CAM数据结构1824具有长度n,则可以(视情况而定)将步骤(3)和步骤(4)执行n次(对CAM数据结构1824中的键值对中的每一个执行一次)。在此示例中,对于每次迭代,在(2)处,CAM控制逻辑1822可以从CAM数据结构1824中的下一条目中检索键值对。然后,CAM控制逻辑1822可以执行步骤(3)和步骤(4)以将此键值对存储在存储器系统1830内的键输出数组2902和值输出数组2904中的连续条目中。一旦已经对CAM数据结构1824中的键值对集合中的键值对中的每一个执行了这些运算,就可以引退CAMMOVE指令(未示出)。在一个实施例中,执行CAMMOVE指令可以包括确定存储在CAM数据结构1824内并且将被移动到存储器系统1830中的指定目的地数组中的活跃有效键值对的数量。存储在CAM数据结构1824内并且将被移动到存储器系统1830中的指定目的地数组中的活跃有效键值对的数量可以使用包括但不限于上述方法的任何适当方法来确定。
在一个实施例中,CAMMOVE指令可以以相同的顺序将当前存储在CAM数据结构1824中的键值对的键和相应值存储在这两个目的地数组中。例如,存储在键输出数组2902中的第一位置中的键可以是其值存储在值输出数组2904中的第一位置中的键值对的键,存储在键输出数组2902中的第二位置中的键可以是其值存储在值输出数组2904中的第二位置中的键值对的键,等等。
图30展示了根据本公开的实施例的用于将硬件内容关联(CAM)数据结构的内容移动到存储器中的示例方法3000。方法3000可以由图1至图29所示的元件中的任何元件实施。方法3000可以由任何适当的标准开始并且可以在任何适当的点处开始运算。在一个实施例中,方法3000可以在3005处开始运算。方法3000可以包括比所示步骤更多或更少的步骤。另外,方法3000可以采用与以下所示顺序不同的顺序来执行其步骤。方法3000可以在任何适当的步骤处终止。另外,方法3000可以在任何适当的步骤处重复运算。方法3000的步骤中的任何步骤可以与方法3000的其他步骤并行或者与其他方法的步骤并行地执行。此外,可以在不同的时间点将方法3000执行多次以将硬件内容关联数据结构的内容移动到存储器中。
在3005处,在一个实施例中,可以接收用于将CAM数据结构的内容移动到存储器中的多个输出数组中的指令并对其进行解码。在3010处,可以将所述指令以及所述指令的一个或多个参数引导到集合运算逻辑单元(SOLU)以供执行。在一个实施例中,指令参数可以包括指向键输出数组和值输出数组的对应指针,所述键输出数组和值输出数组用于存储从CAM数据结构移动到存储器中的输出键值对集合。
在3015处,对于CAM数据结构中的给定键值对,可以将来自给定键值对的键存储到第一输出数组中。其位置可以在指令参数中指定的第一输出数组可以存储之前存储在CAM数据结构中的键值对的键。类似地,在3020处,对于CAM中的给定键值对,可以将来自给定键值对的值存储到第二输出数组。其位置可以在指令参数中指定的第二输出数组可以存储之前存储在CAM数据结构中的键值对的值。当在CAM数据结构中当前存储了更多键值对时(如在3025处确定的),可以针对CAM数据结构中将移动到存储器中的每个附加键值对而在3015处重复开始方法3000。一旦在CAM数据结构中不存在附加键值对,就可以在3030处引退所述指令。
在一个实施例中,SOLU 1820可以包括用于执行具有与cammove运算的效果相反的效果的附加集合运算的电路系统和逻辑。例如,在一个实施例中,SOLU 1820可以包括用于执行由“camload”API定义的集合运算的电路系统和逻辑。此API可以定义用于将存储在两个源数组中的输入键值对集合加载到空CAM数据结构1824/1924中的指令。在一个实施例中,此指令的指令参数可以包括指向键输入数组的指针以及指向值输入数组的指针,所述键输入数组和值输入数组共同存储键值对集合。在一个实施例中,由camload API定义的指令可以基于这样一种假设而进行运算:输入集合的键值对的键和相应值被定序并且以相同的顺序存储在这两个源数组中。例如,所述指令可以基于这样一种假设而进行运算:存储在键输入数组中的第一位置中的键是其值存储在值输入数组中的第一位置中的键值对的键,存储在键输入数组中的第二位置中的键是其值存储在值输入数组中的第二位置中的键值对的键,等等。在一个实施例中,所述指令可以基于这样一种假设而进行运算:CAM数据结构1824/1924是空的(即,所述CAM数据结构不包含任何活跃有效键值对)。所述指令可以覆写存储在CAM数据结构1824/1924中的任何数据。所述指令可以将CAM数据结构1824/1924的长度重置为等于所述指令从源数组加载到CAM数据结构1824/1924中的键值对的数量。
指令参数还可以包括对将从指定源数组加载到CAM数据结构1824/1924中的键值对的数量的指示。在一个实施例中,将添加到CAM数据结构1824/1924中的键值对的指定数量可以与存储在源数组中的键值对的数量相同,在这种情况下,存储在源数组中的整个输入键值对集合都可以添加到CAM数据结构1824/1924中。在另一实施例中,将添加到CAM数据结构1824/1924中的键值对的指定数量可以小于存储在源数组中的键值对的数量,在这种情况下,存储在源数组中的输入键值对集合的子集可以添加到CAM数据结构1824/1924中。在一个实施例中,camload指令可以逐句通过这两个源数组的条目以获得每个键值对的组成元素。camload指令可以存储从这两个源数组中的相应条目中获得的键和值作为CAM数据结构1824/1924中的键值对。
在一个实施例中,上述camload指令的功能可以使用之前描述的camreset指令和camadd指令的组合来实施。例如,可以调用camreset指令以重置CAM数据结构1824/1924的内容,在这之后,可以调用camadd指令以将输入键值对集合添加到(现在为空的)CAM数据结构1824/1924中。在此示例中,因为在将输入键值对集合添加到CAM数据结构1824/1924中之前,CAM数据结构被重置,所以在CAM数据结构1824/1924中将找不到匹配键。因此,可以在不进行修改的情况下将输入集合的键值对中的所有键值对插入CAM数据结构1824/1924中,并且在执行camadd指令之后,这些键值对将是存储在CAM数据结构1824/1924中的仅有键值对。在另一示例中,如果已知CAM数据结构1824/1924是空的,则可以使用camadd指令将输入键值对集合加载到CAM数据结构1824/1924中,而无需首先执行camreset指令。例如,可以使用camadd指令来执行对CAM数据结构的初始加载。
当与不包括集合运算逻辑单元(SOLU)的系统相比时,可以应用本文中描述的用于加速执行集合运算的指令和处理逻辑以提高系统1800在执行各种大数据分析应用(包括但不限于图处理应用)时的性能。当与不包括集合运算逻辑单元(SOLU)的系统相比时,使用本文中描述的用于加速执行集合运算的指令和处理逻辑还可简化执行集合运算的程序。例如,用于实施许多图算法的稀疏矩阵-稀疏向量乘法例程通常包括可以使用本文中描述的集合运算逻辑单元(SOLU)来加速的集合并运算和集合交运算。此图处理例程及其他图处理例程可以对与在以下伪代码中展示的集合数据结构类似的集合数据结构进行共同运算:
对具有此Set结构的经排序输入集合进行运算的集合并例程的示例可以被调用如下:
C[i,:]=Union(A[i,:],B[k,:],‘+’);
在此示例中,Union(并)例程将以下各项作为参数:第一输入Set结构、第二输入Set结构、输出Set结构、以及用户定义的归约函数,对于具有匹配键的任何条目,所述归约函数用于根据这两个输入集合中的条目的值确定输出集合中的条目的值。通过以下伪代码展示了不包括集合运算逻辑单元的系统中的Union例程的代码的一个示例:
在一个示例中,为了在不包括集合运算逻辑单元(SOLU)的系统中执行集合并序列,这在一些图处理应用中可能是常见的,可以重复调用以上所示的Union例程如下:
在此示例中,在执行Union运算之前,结构Set C包含用于所述运算的输入集合之一。在执行Union运算之后,结构Set C包含作为这两个输入集合C和B的并集的输出集合。
在本公开的实施例中,可以像在以下示例伪代码中所示那样调用对类似集合并运算序列(一次运算集合的一行的序列)的执行:
通过以下伪代码展示了不包括集合运算逻辑单元的系统中的Intersection(交)例程的代码的一个示例:
在此示例中,Intersection例程将以下各项作为参数:第一输入Set结构、第二输入Set结构、输出Set结构、以及用户定义的归约函数,所述归约函数用于根据这两个输入集合中具有匹配键的条目的值确定输出集合中的条目的值。
在本公开的实施例中(即,在包括集合运算逻辑单元或SOLU的系统中),可以像在以下示例伪代码中展示的那样调用对集合交运算的执行:
在此示例中,伪代码包括对底层处理器架构(被示出为“simdw”)的SIMD宽度的依赖性。
在本公开的实施例中,CAM数据结构的尺寸可能影响SOLU内的CAM控制逻辑的复杂性和/或调用由SOLU支持的经加速集合运算的应用的复杂性。例如,如果CAM数据结构并不大到足以容纳向集合并运算输入的键值对集合中的所有键值对集合或者键值对集合的有用子集,则应用可以以比在向集合并运算输入的键值对集合中的所有键值对集合或键值对集合的有用子集可以容纳在CAM数据结构中的情况下更细的粒度来划分所述集合。类似地,如果CAM数据结构并不大到足以容纳向集合交运算输入的键值对集合之一或者键值对集合的有用子集,则应用可以以比在向集合交运算输入的键值对集合中的任何一个键值对集合或键值对集合的有用子集可以容纳在CAM数据结构中的情况下更细的粒度来划分所述集合。聚合多个集合以便产生输出集合的单个输出行的图处理应用可以对CAM数据结构尺寸提出特别苛刻的要求。对于这些类型的应用,可以容纳输出集合的至少一个完整输出行的CAM数据结构尺寸可以足够大以实现应用加速。
在本公开的实施例中,CAM数据结构可以被尺寸设定成容纳特定大数据分析应用或特定类大数据分析应用。在一个实施例中,对于加速针对各种图处理应用的集合运算来说,可以容纳几千个键值对并且支持每两个循环一个元素的访问速率的CAM数据结构可能是足够的。在其他实施例中,对于加速针对其他类型或类别的大数据分析应用的集合运算来说,容纳更多或更少键值对的CAM数据结构可能是足够的。
在一个实施例中,在执行大数据分析应用期间,系统可以根据输入和/或输出集合的有用子集是否可以由系统中的特定CAM数据结构容纳来判定是否将由SOLU支持的集合运算引导到SOLU以供执行。在一个实施例中,系统可以在运行时间估计给定集合运算的CAM数据结构要求(对CAM数据结构的尺寸需求),并且可以根据所估计要求选择性地将集合运算引导到SOLU或引导到常规执行单元以供执行。
图31展示了根据本公开的实施例的用于使用硬件内容关联(CAM)数据结构来选择性地执行集合运算的示例方法3100。方法3100可以由图1至图30所示的元件中的任何元件实施。方法3100可以由任何适当的标准开始并且可以在任何适当的点处开始运算。在一个实施例中,方法3100可以在3105处开始运算。方法3100可以包括比所示步骤更多或更少的步骤。另外,方法3100可以采用与以下所示顺序不同的顺序来执行其步骤。方法3100可以在任何适当的步骤处终止。另外,方法3100可以在任何适当的步骤处重复运算。方法3100的步骤中的任何步骤可以与方法3100的其他步骤并行地或者与其他方法的步骤并行地执行。此外,可以将方法3100执行多次以使用硬件内容关联数据结构来选择性地执行一个或多个集合运算。
在3105处,在一个实施例中,可以接收用于使用CAM数据结构来选择性地执行集合运算的指令并对其进行解码。在3105处,可以开始执行包括一个或多个集合运算的指令流。在3110处,对于集合运算中的给定一个集合运算,可以估计用于集合运算的输出集合的尺寸要求。在3115处,如果估计结果指示输出集合的一个或多个有用子集将放入CAM数据结构中,则在3125处,可以将CAM特定的指令(及其参数)引导到用于执行集合运算的集合运算逻辑单元。在一个实施例中,只有在估计整个输出集合可以一次容纳在CAM数据结构中的时候才可以将CAM特定的指令引导到集合运算逻辑单元。在另一实施例中,如果估计输出集合的完整行可以容纳在CAM数据结构中,则可以将CAM特定的指令引导到集合运算逻辑单元。可以在输出集合的完整行产生之后立即将其转储清除到高速缓存层级结构中的高速缓存之一中,从而为在CAM数据结构中组装输出集合的下一完整行留出空间。
然而,如果在3115处估计结果指示输出集合的有用子集将不会放入CAM数据结构中,则在3120处,可以将一个或多个指令及其对应参数引导到用于执行集合运算的通用执行单元。在任一情况下,在3130处,如果确定下一运算是集合运算,则可以针对下一运算而在3110处开始重复方法3100。在指令流中存在更多指令时(如在步骤3135处确定的),可以针对在指令流中遇到的每个附加集合运算而在3110处开始重复方法3100。一旦在指令流中不存在附加指令(如在3135处确定的),则方法可以终止。
在本公开的实施例中,使用本文中描述的硬件内容关联数据结构可以消除大量数据并且可以控制在现有系统中执行大数据分析应用时固有的开销。使用本文中描述的硬件内容关联数据结构还可以减小在现有系统中执行大数据分析应用时固有的高速缓存压力。例如,甚至是在每访问0.5循环的CAM数据结构访问速率的情况下,当与针对在不包括这些硬件内容关联数据结构的系统中执行而得以优化的实施方式相比时,已经观察到图分析应用的1.5倍到3.2倍之间的性能增益。
本文中公开的机制的实施例可以以硬件、软件、固件或这种实施方式的组合实施。本公开的实施例可以被实施为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置、以及至少一个输出装置。
可以将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出装置。为了本申请的目的,处理系统可以包括具有处理器的任何系统,如例如;数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
程序代码可以采用高级程序语言或面向对象的编程语言来实施以与处理系统通信。如果需要,程序代码还可以采用汇编语言或机器语言来实施。事实上,本文描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译语言或解释语言。
可以由存储在机器可读介质上的代表性指令来实施至少一个实施例的一个或多个方面,所述指令表示处理器内的各种逻辑,所述指令当被机器读取时使所述机器制作用于执行本文所描述的技术的逻辑。这种表示(被称为“IP核”)可以被存储在有形的机器可读介质上并提供给各顾客或制造设施以加载至实际制作所述逻辑或处理器的制作机器中。
这种机器可读存储介质可以包括但不限于:由机器或装置制造或形成的制品的非暂态有形安排,包括如硬盘等存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW)和磁光盘;半导体装置,如只读存储器(ROM);随机存取存储器(RAM),如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM);可擦除可编程只读存储器(EPROM);闪存;电可擦除可编程只读存储器(EEPROM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还可以包括包含指令或包含设计数据如硬件描述语言(HDL)的非暂态有形机器可读介质,所述非暂态有形机器可读介质限定本文中描述的结构、电路、设备、处理器和/或系统特征。这种实施例还可以被称为程序产品。
在一些情况下,可以使用指令转换器将指令从源指令集转换到目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或以其他方式将指令转换为有待由核处理的一个或多个其他指令。可以以软件、硬件、固件或其组合实施指令转换器。指令转换器可以处于处理器上、处理器外、或者部分地处于处理器上并且部分地处于处理器外。
因此,公开了用于执行根据至少一个实施例的一个或多个指令的技术。虽然已经在附图中描述并示出了某些示例性实施例,但应当理解的是,这种实施例仅说明并且不限制其他实施例,并且这种实施例不限于所示和所描述的特定构造和安排,因为在研究本公开时,本领域普通技术人员将想到各种其他修改。在发展迅速且无法轻易预见进一步进展的如此技术等技术领域中,在不违背本公开的原理或所附权利要求书的范围的情况下,在技术进步的帮助下,所公开的实施例在安排和细节上可轻易更改。
本公开的一些实施例包括一种处理器。在这些实施例的至少一些实施例中,所述处理器可以包括:前端,用于接收至少一个指令;分配器,用于将所述指令传递至用于执行所述指令的集合运算逻辑单元;以及引退单元,用于引退所述指令。为了执行所述指令,所述集合运算逻辑单元可以包括:内容关联存储器;第一逻辑,用于将第一键值对集合存储在所述内容关联存储器中;第二逻辑,用于从在所述指令中标识的一个或多个输入位置中获得用于表示第二键值对集合的输入;以及第三逻辑,用于识别所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对。在以上实施例中的任何实施例中,所述第二键值对集合可以是有序键值对集合,在所述有序键值对集合中,所述键值对根据其对应键而被排序。在以上实施例中的任何实施例中,可以将所述第二键值对集合的键存储于在所述指令中标识的第一输入位置中,并且可以将所述第二键值对集合的值存储于在所述指令中标识的第二输入位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于从所述第一输入位置和所述第二输入位置接收用于将所述第二键值对集合表示为流式输入的所述输入。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的键作为所述识别的结果而存储到在所述指令中标识的第一输出位置中;以及第五逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的值作为所述识别的结果而存储到在所述指令中标识的第二输出位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将用于表示所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对的数量的数据作为所述识别的结果而存储到在所述指令中标识的输出位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于接收待由所述集合运算逻辑单元执行的所述指令。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第五逻辑,用于产生所述识别的结果。所述结果可以包括匹配键的集、所述第二键值对集合中具有匹配键的键值对的值的集、或者对匹配键的数量的指示。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将在所述指令中指定的算术运算或聚合运算应用于:所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对中的值,以及所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得每个匹配键的结果值。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第五逻辑,用于创建第三键值对集合,所述第三键值对集合包括包含所述匹配键的所述结果值的每个匹配键的对应键值对,以及所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及第六逻辑,用于将所述第三键值对集合存储在所述内容关联存储器中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于确定所述内容关联存储器的长度,其中,所述长度可以表示存储在所述内容关联存储器中的键值对的数量;以及第五逻辑,用于返回对所述内容关联存储器的所述长度的指示。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于删除或无效化所述内容关联存储器的内容;以及第五逻辑,用于将所述内容关联存储器的长度指示符重置为零,其中,所述长度可以表示存储在所述内容关联存储器中的键值对的数量。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将存储在所述内容关联存储器中的键值对的键移动到在所述指令中指定的第一输出位置中;以及第五逻辑,用于将存储在所述内容关联存储器中的键值对的值移动到在所述指令中指定的第二输出位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以是处理器中的多个集合运算逻辑单元之一,并且所述集合运算逻辑单元可以包括:第六逻辑,用于从所述处理器中的多个处理器核中的特定一个处理器核接收待由所述集合运算逻辑单元执行的指令。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第六逻辑,用于从处理器的多个处理器核或硬件线程接收待由所述集合运算逻辑单元执行的指令。
本公开的一些实施例包括一种方法。在这些实施例中的至少一些实施例中,所述方法可以包括:接收第一指令;对所述第一指令进行解码;将所述第一指令传递到用于执行所述第一指令的集合运算逻辑单元;以及引退所述第一指令。执行所述第一指令可以包括:访问存储在内容关联存储器中的第一键值对集合;从在所述第一指令中标识的一个或多个输入位置接收第二键值对集合;针对所述第二键值对集合中的每个键值对,判定所述键值对的键是否与所述第一键值对集合中的键值对中的键相匹配;以及将所述判定的结果存储到在所述第一指令中标识的输出位置中。在以上实施例中的任何实施例中,所述判定的所述结果可以包括:所述第二键值对集合中的所述键值对中被确定为与所述第一键值对集合中的键值对中的键相匹配的所述键;所述第二键值对集合中其键被确定为与所述第一键值对集合中的键值对的键相匹配的所述键值对中的所述值;或者所述第二键值对集合中的所述键值对中被确定为与所述第一键值对集合中的键值对中的键相匹配的键的数量。组合以上实施例中的任何实施例,所述方法可以包括:将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的键作为所述识别的结果而存储到在所述第一指令中标识的第一输出位置中;以及将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的值作为所述判定的结果而存储到在所述第一指令中标识的第二输出位置中。组合以上实施例中的任何实施例,所述方法可以包括:将表示所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对的数量的数据作为所述判定的结果而存储到在所述第一指令中标识的输出位置中。在以上实施例中的任何实施例中,执行所述第一指令可以包括:将在所述第一指令中指定的运算应用于:所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的每个键值对中的值,以及所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得每个匹配键的结果值;创建第三键值对集合,所述第三键值对集合包括:包含所述匹配键的所述结果值的每个匹配键的对应键值对,以及所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及将所述第三键值对集合存储在所述内容关联存储器中。在以上实施例中的任何实施例中,所述第二键值对集合可以是有序键值对集合,在所述有序键值对集合中,所述键值对根据其对应键而被排序。在以上实施例中的任何实施例中,可以将所述第二键值对集合的键存储于在所述第一指令中标识的第一输入位置中,并且可以将所述第二键值对集合的值存储于在所述第一指令中标识的第二输入位置中,并且所述方法可以包括:从所述第一输入位置和所述第二输入位置接收将所述第二键值对集合表示为流式输入的所述输入。组合以上实施例中的任何实施例,所述方法可以包括:接收第二指令;对所述第二指令进行解码;将所述第二指令传递到用于执行所述第二指令的所述集合运算逻辑单元;以及引退所述第二指令。执行所述第二指令可以包括:确定所述内容关联存储器的长度,其中,所述长度表示存储在所述内容关联存储器中的键值对的数量;以及返回对所述内容关联存储器的所述长度的指示。组合以上实施例中的任何实施例,所述方法可以包括:接收第二指令;对所述第二指令进行解码;将所述第二指令传递到用于执行所述第二指令的所述集合运算逻辑单元;以及引退所述第二指令。执行所述第二指令可以包括:删除或无效化所述内容关联存储器的内容;以及将所述内容关联存储器的长度指示符重置为零,其中,所述长度表示存储在所述内容关联存储器中的键值对的数量。组合以上实施例中的任何实施例,所述方法可以包括:接收第二指令;对所述第二指令进行解码;将所述第二指令传递到用于执行所述第二指令的所述集合运算逻辑单元;以及引退所述第二指令。执行所述第二指令可以包括:将存储在所述内容关联存储器中的键值对的键存储到在所述第二指令中指定的第一输出位置中;以及将存储在所述内容关联存储器中的键值对的值存储到在所述第二指令中指定的第二输出位置中。组合以上实施例中的任何实施例,执行所述第一指令可以包括:识别所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对。组合以上实施例中的任何实施例,所述方法可以包括:产生所述识别的结果。所述识别的所述结果可以包括匹配键的集、所述第二键值对集合中具有匹配键的键值对的值的集、或者对匹配键的数量的指示。在以上实施例中的任何实施例中,执行所述第一指令可以由集合运算逻辑单元实施。所述集合运算逻辑单元可以是处理器中的多个集合运算逻辑单元之一。组合以上实施例中的任何实施例,所述方法可以包括:从处理器中的多个处理器核之一接收所述第一指令。组合以上实施例中的任何实施例,所述方法可以包括:从处理器中的多个硬件线程之一接收所述第一指令。
本公开的一些实施例包括一种集合运算逻辑单元。在这些实施例中的至少一些实施例中,所述集合运算逻辑单元可以包括:内容关联存储器;第一逻辑,用于将第一键值对集合存储在所述内容关联存储器中;第二逻辑,用于从在所述指令中标识的一个或多个输入位置中获得用于表示第二键值对集合的输入;以及第三逻辑,用于识别所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对。在以上实施例中的任何实施例中,所述第二键值对集合可以是有序键值对集合,在所述有序键值对集合中,所述键值对根据其对应键而被排序。在以上实施例中的任何实施例中,可以将所述第二键值对集合的键存储于在所述指令中标识的第一输入位置中,并且可以将所述第二键值对集合的值存储于在所述指令中标识的第二输入位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于从所述第一输入位置和所述第二输入位置接收用于将所述第二键值对集合表示为流式输入的所述输入。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的键作为所述识别的结果而存储到在所述指令中标识的第一输出位置中;以及第五逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的值作为所述识别的结果而存储到在所述指令中标识的第二输出位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将用于表示所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对的数量的数据作为所述识别的结果而存储到在所述指令中标识的输出位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于接收待由所述集合运算逻辑单元执行的所述指令。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第五逻辑,用于产生所述识别的结果。所述结果可以包括匹配键的集、所述第二键值对集合中具有匹配键的键值对的值的集、或者对匹配键的数量的指示。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将在所述指令中指定的算术运算或聚合运算应用于:所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对中的值,以及所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得每个匹配键的结果值。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第五逻辑,用于创建第三键值对集合,所述第三键值对集合包括包含所述匹配键的所述结果值的每个匹配键的对应键值对,以及所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及第六逻辑,用于将所述第三键值对集合存储在所述内容关联存储器中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于确定所述内容关联存储器的长度,其中,所述长度可以表示存储在所述内容关联存储器中的键值对的数量;以及第五逻辑,用于返回对所述内容关联存储器的所述长度的指示。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于删除或无效化所述内容关联存储器的内容;以及第五逻辑,用于将所述内容关联存储器的长度指示符重置为零,其中,所述长度可以表示存储在所述内容关联存储器中的键值对的数量。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第四逻辑,用于将存储在所述内容关联存储器中的键值对的键移动到在所述指令中指定的第一输出位置中;以及第五逻辑,用于将存储在所述内容关联存储器中的键值对的值移动到在所述指令中指定的第二输出位置中。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以是处理器中的多个集合运算逻辑单元之一,并且所述集合运算逻辑单元可以包括:第六逻辑,用于从所述处理器中的多个处理器核之一接收待由所述集合运算逻辑单元执行的指令。组合以上实施例中的任何实施例,所述集合运算逻辑单元可以包括:第六逻辑,用于从处理器的多个处理器核或硬件线程接收待由所述集合运算逻辑单元执行的指令。
本公开的一些实施例包括一种系统。在这些实施例中的至少一些实施例中,所系统可以包括:内容关联存储器;第一逻辑,用于将第一键值对集合存储在所述内容关联存储器中;第二逻辑,用于从在所述指令中标识的一个或多个输入位置中获得用于表示第二键值对集合的输入;以及第三逻辑,用于识别所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对。在以上实施例中的任何实施例中,所述第二键值对集合可以是有序键值对集合,在所述有序键值对集合中,所述键值对根据其对应键而被排序。在以上实施例中的任何实施例中,可以将所述第二键值对集合的键存储于在所述指令中标识的第一输入位置中,并且可以将所述第二键值对集合的值存储于在所述指令中标识的第二输入位置中。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于从所述第一输入位置和所述第二输入位置接收用于将所述第二键值对集合表示为流式输入的所述输入。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的键作为所述识别的结果而存储到在所述指令中标识的第一输出位置中;以及第五逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的值作为所述识别的结果而存储到在所述指令中标识的第二输出位置中。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于将用于表示所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对的数量的数据作为所述识别的结果而存储到在所述指令中标识的输出位置中。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于接收待由所述系统执行的所述指令。组合以上实施例中的任何实施例,所述系统可以包括:第五逻辑,用于产生所述识别的结果。所述结果可以包括匹配键的集、所述第二键值对集合中具有匹配键的键值对的值的集、或者对匹配键的数量的指示。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于将在所述指令中指定的算术运算或聚合运算应用于:所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对中的值,以及所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得每个匹配键的结果值。组合以上实施例中的任何实施例,所述系统可以包括:第五逻辑,用于创建第三键值对集合,所述第三键值对集合包括包含所述匹配键的所述结果值的每个匹配键的对应键值对,以及所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及第六逻辑,用于将所述第三键值对集合存储在所述内容关联存储器中。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于确定所述内容关联存储器的长度,其中,所述长度可以表示存储在所述内容关联存储器中的键值对的数量;以及第五逻辑,用于返回对所述内容关联存储器的所述长度的指示。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于删除或无效化所述内容关联存储器的内容;以及第五逻辑,用于将所述内容关联存储器的长度指示符重置为零,其中,所述长度可以表示存储在所述内容关联存储器中的键值对的数量。组合以上实施例中的任何实施例,所述系统可以包括:第四逻辑,用于将存储在所述内容关联存储器中的键值对的键移动到在所述指令中指定的第一输出位置中;以及第五逻辑,用于将存储在所述内容关联存储器中的键值对的值移动到在所述指令中指定的第二输出位置中。组合以上实施例中的任何实施例,所述系统可以包括:第六逻辑,用于从处理器中的多个处理器核接收待执行的指令。组合以上实施例中的任何实施例,所述系统可以包括:第六逻辑,用于从处理器的多个硬件线程接收待执行的指令。
本公开的一些实施例包括一种用于执行指令的系统。在这些实施例中的至少一些中,所述系统可以包括用于进行以下操作的装置:接收第一指令;对所述第一指令进行解码;执行所述第一指令;以及引退所述第一指令。用于执行所述第一指令的所述装置可以包括:用于访问存储在内容关联存储器中的第一键值对集合的装置;用于从在所述第一指令中标识的一个或多个输入位置接收第二键值对集合的装置;用于针对所述第二键值对集合中的每个键值对来判定所述键值对的键是否与所述第一键值对集合中的键值对中的键相匹配的装置;以及用于将所述判定的结果存储到在所述第一指令中标识的输出位置中的装置。在以上实施例中的任何实施例中,所述判定的所述结果可以包括:所述第二键值对集合中的所述键值对中被确定为与所述第一键值对集合中的键值对中的键相匹配的所述键;所述第二键值对集合中其键被确定为与所述第一键值对集合中的键值对的键相匹配的所述键值对中的所述值;或者所述第二键值对集合中的所述键值对中被确定为与所述第一键值对集合中的键值对中的键相匹配的键的数量。组合以上实施例中的任何实施例,所述系统可以包括:用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的键作为所述识别的结果而存储到在所述第一指令中标识的第一输出位置中的装置;以及用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的值作为所述判定的结果而存储到在所述第一指令中标识的第二输出位置中的装置。组合以上实施例中的任何实施例,所述系统可以包括:用于将表示所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对的数量的数据作为所述判定的结果而存储到在所述第一指令中标识的输出位置中的装置。在以上实施例中的任何实施例中,用于执行所述第一指令的所述装置可以包括:用于将在所述第一指令中指定的运算应用于以下各项的装置:所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的每个键值对中的值,以及所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得每个匹配键的结果值;用于创建第三键值对集合的装置,所述第三键值对集合包括:包含所述匹配键的所述结果值的每个匹配键的对应键值对,以及所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及用于将所述第三键值对集合存储在所述内容关联存储器中的装置。在以上实施例中的任何实施例中,所述第二键值对集合可以是有序键值对集合,在所述有序键值对集合中,所述键值对根据其对应键而被排序。在以上实施例中的任何实施例中,可以将所述第二键值对集合的键存储于在所述第一指令中标识的第一输入位置中,并且可以将所述第二键值对集合的值存储于在所述第一指令中标识的第二输入位置中,并且所述系统可以包括:用于从所述第一输入位置和所述第二输入位置接收将所述第二键值对集合表示为流式输入的所述输入的装置。组合以上实施例中的任何实施例,所述系统可以包括用于进行以下操作的装置:接收第二指令;对所述第二指令进行解码;执行所述第二指令;以及引退所述第二指令。在以上实施例中的任何实施例中,用于执行所述第二指令的所述装置可以包括:用于确定所述内容关联存储器的长度的装置,其中,所述长度表示存储在所述内容关联存储器中的键值对的数量;以及用于返回对所述内容关联存储器的所述长度的指示的装置。在以上实施例中的任何实施例中,用于执行所述第二指令的所述装置可以包括:用于删除或无效化所述内容关联存储器的内容的装置;以及用于将所述内容关联存储器的长度指示符重置为零的装置,其中,所述长度表示存储在所述内容关联存储器中的键值对的数量。在以上实施例中的任何实施例中,用于执行所述第二指令的所述装置可以包括:用于将存储在所述内容关联存储器中的键值对的键存储到在所述第二指令中指定的第一输出位置中的装置;以及用于将存储在所述内容关联存储器中的键值对的值存储到在所述第二指令中指定的第二输出位置中的装置。在以上实施例中的任何实施例中,用于执行所述第一指令的所述装置可以包括:用于识别所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对的装置。在以上实施例中的任何实施例中,所述系统可以包括用于产生所述识别的结果的装置。所述识别的所述结果可以包括匹配键的集、所述第二键值对集合中具有匹配键的键值对的值的集、或者对匹配键的数量的指示。在以上实施例中的任何实施例中,用于执行所述第一指令的所述装置可以包括集合运算逻辑单元。组合以上实施例中的任何实施例,所述系统可以包括:用于从处理器中的多个处理器核之一接收所述第一指令的装置。组合以上实施例中的任何实施例,所述系统可以包括:用于从处理器的多个硬件线程之一接收所述第一指令的装置。
Claims (25)
1.一种处理器,包括:
前端,用于对至少一个指令进行解码;
分配器,用于将所述指令传递至用于执行所述指令的集合运算逻辑单元,所述集合运算逻辑单元包括:
内容关联存储器;
第一逻辑,用于将第一键值对集合存储在所述内容关联存储器中;
第二逻辑,用于从在所述指令中标识的一个或多个输入位置中获得用于表示第二键值对集合的输入;以及
第三逻辑,用于识别所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对;以及
引退单元,用于引退所述指令。
2.如权利要求1所述的处理器,其特征在于,所述集合运算逻辑单元进一步包括:
第四逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的键作为所述识别的结果而存储到在所述指令中标识的第一输出位置中;以及
第五逻辑,用于将所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的所述键值对的值作为所述识别的结果而存储到在所述指令中标识的第二输出位置中。
3.如权利要求1所述的处理器,其特征在于,所述集合运算逻辑单元进一步包括:第四逻辑,用于将用于表示所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对的数量的数据作为所述识别的结果而存储到在所述指令中标识的输出位置中。
4.如权利要求1所述的处理器,其特征在于,所述集合运算逻辑单元进一步包括:
第四逻辑,用于将在所述指令中指定的算术运算或聚合运算应用于:
所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的每个键值对中的值;以及
所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得所述匹配键的结果值;
第五逻辑,用于创建第三键值对集合,所述第三键值对集合包括:
包含所述匹配键的所述结果值的每个匹配键的对应键值对;以及
所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及
第六逻辑,用于将所述第三键值对集合存储在所述内容关联存储器中。
5.如权利要求1所述的处理器,其特征在于,所述集合运算逻辑单元进一步包括:
第四逻辑,用于确定所述内容关联存储器的长度,其中,所述长度用于表示存储在所述内容关联存储器中的键值对的数量;以及
第五逻辑,用于返回对所述内容关联存储器的所述长度的指示。
6.如权利要求1所述的处理器,其特征在于,所述集合运算逻辑单元进一步包括:
第四逻辑,用于删除或无效化所述内容关联存储器的内容;以及
第五逻辑,用于将所述内容关联存储器的长度指示符重置为零,其中,所述长度用于表示存储在所述内容关联存储器中的键值对的数量。
7.如权利要求1所述的处理器,其特征在于,所述集合运算逻辑单元进一步包括:
第四逻辑,用于将待存储在所述内容关联存储器中的键值对的键移动到在所述指令中指定的第一输出位置中;以及
第五逻辑,用于将待存储在所述内容关联存储器中的键值对的值移动到在所述指令中指定的第二输出位置中。
8.如权利要求1所述的处理器,其特征在于:
所述第二键值对集合是有序键值对集合,在所述有序键值对集合中,所述键值对根据其对应键而被排序。
9.如权利要求1所述的处理器,其特征在于:
所述第二键值对集合的键将从在所述指令中标识的第一输入位置中获得;并且
所述第二键值对集合的值将从在所述指令中标识的第二输入位置中获得。
10.如权利要求1所述的处理器,其特征在于,所述集合运算逻辑单元进一步包括:
第四逻辑,用于从所述第一输入位置和所述第二输入位置接收用于将所述第二键值对集合表示为流式输入的所述输入。
11.一种方法,包括:
接收第一指令;
对所述第一指令进行解码;
将所述第一指令传递到用于执行所述第一指令的集合运算逻辑单元;
由所述集合运算逻辑单元执行所述第一指令,包括:
访问存储在内容关联存储器中的第一键值对集合;
从在所述第一指令中标识的一个或多个输入位置接收第二键值对集合;
针对所述第二键值对集合中的每个键值对,判定所述键值对的键是否与所述第一键值对集合中的键值对中的键相匹配;
将所述判定的结果存储到在所述第一指令中标识的输出位置中;以及
引退所述第一指令。
12.如权利要求11所述的方法,其特征在于,所述判定的所述结果包括:
所述第二键值对集合中的所述键值对中被确定为与所述第一键值对集合中的键值对中的键相匹配的所述键;
所述第二键值对集合中其键被确定为与所述第一键值对集合中的键值对的键相匹配的所述键值对中的所述值;或者
所述第二键值对集合中的所述键值对中被确定为与所述第一键值对集合中的键值对中的键相匹配的键的数量。
13.如权利要求11所述的方法,其特征在于,执行所述第一指令进一步包括:
将在所述第一指令中指定的运算应用于:
所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的每个键值对中的值;以及
所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得每个匹配键的结果值;
创建第三键值对集合,所述第三键值对集合包括:
包含所述匹配键的所述结果值的每个匹配键的对应键值对;以及
所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及
将所述第三键值对集合存储在所述内容关联存储器中。
14.如权利要求11所述的方法,其特征在于,进一步包括:
接收第二指令;
对所述第二指令进行解码;
将所述第二指令传递到用于执行所述第二指令的所述集合运算逻辑单元;
由所述集合运算逻辑单元执行所述第二指令,包括:
确定所述内容关联存储器的长度,其中,所述长度表示存储在所述内容关联存储器中的键值对的数量;以及
返回对所述内容关联存储器的所述长度的指示;以及
引退所述第二指令。
15.如权利要求11所述的方法,其特征在于,进一步包括:
接收第二指令;
对所述第二指令进行解码;
将所述第二指令传递到用于执行所述第二指令的所述集合运算逻辑单元;
由所述集合运算逻辑单元执行所述第二指令,包括:
删除或无效化所述内容关联存储器的内容;以及
将所述内容关联存储器的长度指示符重置为零,其中,所述长度表示存储在所述内容关联存储器中的键值对的数量;以及
引退所述第二指令。
16.如权利要求11所述的方法,其特征在于,进一步包括:
接收第二指令;
对所述第二指令进行解码;
将所述第二指令传递到用于执行所述第二指令的所述集合运算逻辑单元;
由所述集合运算逻辑单元执行所述第二指令,包括:
将存储在所述内容关联存储器中的键值对的键存储到在所述第二指令中指定的第一输出位置中;以及
将存储在所述内容关联存储器中的键值对的值储到在所述第二指令中指定的第二输出位置中;以及
引退所述第二指令。
17.如权利要求11所述的方法,其特征在于:
所述第二键值对集合是有序键值对集合,在所述有序键值对集合中,所述键值对根据其对应键而被排序。
18.一种集合运算逻辑单元,包括:
内容关联存储器;
第一逻辑,用于接收待由所述集合运算逻辑单元执行的指令;
第二逻辑,用于将第一键值对集合存储在所述内容关联存储器中;
第三逻辑,用于从在所述指令中标识的一个或多个输入位置中获得用于表示第二键值对集合的输入;
第四逻辑,用于识别所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的键值对。
19.如权利要求18所述的集合运算逻辑单元,其特征在于:
所述集合运算逻辑单元进一步包括第五逻辑,所述第五逻辑用于产生所述识别的结果;并且
所述结果包括匹配键的集、所述第二键值对集合中具有匹配键的键值对的值的集、或者对匹配键的数量的指示。
20.如权利要求18所述的集合运算逻辑单元,其特征在于,进一步包括:
第五逻辑,用于将算术运算或聚合运算应用于:
所述第二键值对集合中其键与所述第一键值对集合中的键值对中的键相匹配的每个键值对中的值;以及
所述第一键值对集合中具有所述匹配键的所述键值对中的值,以获得所述匹配键的结果值;
第六逻辑,用于创建第三键值对集合,所述第三键值对集合包括:
包含所述匹配键的所述结果值的每个匹配键的对应键值对;以及
所述第一键值对集合中具有唯一键的每个键值对以及所述第二键值对集合中具有唯一键的每个键值对的对应键值对;以及
第七逻辑,用于将所述第三键值对集合存储在所述内容关联存储器中。
21.如权利要求18所述的集合运算逻辑单元,其特征在于,进一步包括:
第五逻辑,用于确定所述内容关联存储器的长度,其中,所述长度用于表示存储在所述内容关联存储器中的键值对的数量;以及
第六逻辑,用于返回对所述内容关联存储器的所述长度的指示。
22.如权利要求18所述的集合运算逻辑单元,其特征在于,进一步包括:
第五逻辑,用于删除或无效化所述内容关联存储器的内容;以及
第六逻辑,用于将所述内容关联存储器的长度指示符重置为零,其中,所述长度用于表示存储在所述内容关联存储器中的键值对的数量。
23.如权利要求18所述的集合运算逻辑单元,其特征在于,进一步包括:
第五逻辑,用于将待存储在所述内容关联存储器中的键值对的键复制到在所述指令中指定的第一输出位置中;以及
第六逻辑,用于将待存储在所述内容关联存储器中的键值对的值复制到在所述指令中指定的第二输出位置中。
24.如权利要求18所述的集合运算逻辑单元,其特征在于:
所述第二键值对集合的键将从在所述指令中标识的第一输入位置中获得;
所述第二键值对集合的值将从在所述指令中标识的第二输入位置中获得;
所述集合运算逻辑单元进一步包括:
第五逻辑,用于从所述第一输入位置和所述第二输入位置接收用于将所述第二键值对集合表示为流式输入的所述输入。
25.一种设备,包括用于执行如权利要求11至17所述的方法中的任一种方法的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/757,776 | 2015-12-23 | ||
US14/757,776 US20170185403A1 (en) | 2015-12-23 | 2015-12-23 | Hardware content-associative data structure for acceleration of set operations |
PCT/US2016/063306 WO2017112249A1 (en) | 2015-12-23 | 2016-11-22 | Hardware content-associative data structure for acceleration of set operations |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108431770A true CN108431770A (zh) | 2018-08-21 |
Family
ID=59087222
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680074273.8A Pending CN108431770A (zh) | 2015-12-23 | 2016-11-22 | 用于加速集合运算的硬件内容关联数据结构 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20170185403A1 (zh) |
CN (1) | CN108431770A (zh) |
DE (1) | DE112016006028T5 (zh) |
TW (1) | TW201732556A (zh) |
WO (1) | WO2017112249A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111079908A (zh) * | 2018-10-18 | 2020-04-28 | 上海寒武纪信息科技有限公司 | 片上网络数据处理方法、存储介质、计算机设备和装置 |
CN112491857A (zh) * | 2020-11-20 | 2021-03-12 | 北京人大金仓信息技术股份有限公司 | 集合类型数据的传输方法、装置和设备 |
US11797467B2 (en) | 2018-10-18 | 2023-10-24 | Shanghai Cambricon Information Technology Co., Ltd. | Data processing device with transmission circuit |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10191744B2 (en) * | 2016-07-01 | 2019-01-29 | Intel Corporation | Apparatuses, methods, and systems for element sorting of vectors |
US10289752B2 (en) * | 2016-12-12 | 2019-05-14 | Intel Corporation | Accelerator for gather-update-scatter operations including a content-addressable memory (CAM) and CAM controller |
US20210064423A1 (en) * | 2018-01-11 | 2021-03-04 | Nokia Solutions And Networks Oy | Hardware Acceleration for Frequency Domain Scheduler in Wireless Networks |
TWI671684B (zh) * | 2018-12-14 | 2019-09-11 | National Pingtung University Of Science & Technology | 影像監視方法及系統 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5625787A (en) * | 1994-12-21 | 1997-04-29 | International Business Machines Corporation | Superscalar instruction pipeline using alignment logic responsive to boundary identification logic for aligning and appending variable length instructions to instructions stored in cache |
US20120102298A1 (en) * | 2010-10-20 | 2012-04-26 | Microsoft Corporation | Low RAM Space, High-Throughput Persistent Key-Value Store using Secondary Memory |
US20130042055A1 (en) * | 2011-08-08 | 2013-02-14 | Atsuhiro Kinoshita | Memory system including key-value store |
CN103365883A (zh) * | 2012-03-30 | 2013-10-23 | 华为技术有限公司 | 数据的索引查询方法、装置及系统 |
CN103827813A (zh) * | 2011-09-26 | 2014-05-28 | 英特尔公司 | 用于提供向量分散操作和聚集操作功能的指令和逻辑 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226710B1 (en) * | 1997-11-14 | 2001-05-01 | Utmc Microelectronic Systems Inc. | Content addressable memory (CAM) engine |
US9104551B2 (en) * | 2012-11-09 | 2015-08-11 | Sandisk Technologies Inc. | NAND flash based content addressable memory |
US9336334B2 (en) * | 2013-05-17 | 2016-05-10 | Bigobject, Inc. | Key-value pairs data processing apparatus and method |
-
2015
- 2015-12-23 US US14/757,776 patent/US20170185403A1/en not_active Abandoned
-
2016
- 2016-11-18 TW TW105137912A patent/TW201732556A/zh unknown
- 2016-11-22 CN CN201680074273.8A patent/CN108431770A/zh active Pending
- 2016-11-22 WO PCT/US2016/063306 patent/WO2017112249A1/en active Application Filing
- 2016-11-22 DE DE112016006028.9T patent/DE112016006028T5/de not_active Withdrawn
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5625787A (en) * | 1994-12-21 | 1997-04-29 | International Business Machines Corporation | Superscalar instruction pipeline using alignment logic responsive to boundary identification logic for aligning and appending variable length instructions to instructions stored in cache |
US20120102298A1 (en) * | 2010-10-20 | 2012-04-26 | Microsoft Corporation | Low RAM Space, High-Throughput Persistent Key-Value Store using Secondary Memory |
US20130042055A1 (en) * | 2011-08-08 | 2013-02-14 | Atsuhiro Kinoshita | Memory system including key-value store |
CN103827813A (zh) * | 2011-09-26 | 2014-05-28 | 英特尔公司 | 用于提供向量分散操作和聚集操作功能的指令和逻辑 |
CN103365883A (zh) * | 2012-03-30 | 2013-10-23 | 华为技术有限公司 | 数据的索引查询方法、装置及系统 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11868299B2 (en) | 2018-10-18 | 2024-01-09 | Shanghai Cambricon Information Technology Co., Ltd. | Network-on-chip data processing method and device |
CN111079908A (zh) * | 2018-10-18 | 2020-04-28 | 上海寒武纪信息科技有限公司 | 片上网络数据处理方法、存储介质、计算机设备和装置 |
US12061564B2 (en) | 2018-10-18 | 2024-08-13 | Shanghai Cambricon Information Technology Co., Ltd. | Network-on-chip data processing based on operation field and opcode |
US11797467B2 (en) | 2018-10-18 | 2023-10-24 | Shanghai Cambricon Information Technology Co., Ltd. | Data processing device with transmission circuit |
US11809360B2 (en) | 2018-10-18 | 2023-11-07 | Shanghai Cambricon Information Technology Co., Ltd. | Network-on-chip data processing method and device |
US11841816B2 (en) | 2018-10-18 | 2023-12-12 | Shanghai Cambricon Information Technology Co., Ltd. | Network-on-chip data processing method and device |
US11971836B2 (en) | 2018-10-18 | 2024-04-30 | Shanghai Cambricon Information Technology Co., Ltd. | Network-on-chip data processing method and device |
US11880328B2 (en) | 2018-10-18 | 2024-01-23 | Shanghai Cambricon Information Technology Co., Ltd. | Network-on-chip data processing method and device |
CN111079908B (zh) * | 2018-10-18 | 2024-02-13 | 上海寒武纪信息科技有限公司 | 片上网络数据处理方法、存储介质、计算机设备和装置 |
US11880329B2 (en) | 2018-10-18 | 2024-01-23 | Shanghai Cambricon Information Technology Co., Ltd. | Arbitration based machine learning data processor |
US11880330B2 (en) | 2018-10-18 | 2024-01-23 | Shanghai Cambricon Information Technology Co., Ltd. | Network-on-chip data processing method and device |
US11960431B2 (en) | 2018-10-18 | 2024-04-16 | Guangzhou University | Network-on-chip data processing method and device |
CN112491857A (zh) * | 2020-11-20 | 2021-03-12 | 北京人大金仓信息技术股份有限公司 | 集合类型数据的传输方法、装置和设备 |
CN112491857B (zh) * | 2020-11-20 | 2023-05-02 | 北京人大金仓信息技术股份有限公司 | 集合类型数据的传输方法、装置和设备 |
Also Published As
Publication number | Publication date |
---|---|
US20170185403A1 (en) | 2017-06-29 |
TW201732556A (zh) | 2017-09-16 |
WO2017112249A1 (en) | 2017-06-29 |
DE112016006028T5 (de) | 2018-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108292215B (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN104204990B (zh) | 在使用共享虚拟存储器的处理器中加速操作的装置和方法 | |
CN103970509B (zh) | 对条件循环进行矢量化的装置、方法、处理器、处理系统以及机器可读介质 | |
CN108369509B (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN107003921B (zh) | 具有有限状态机控制的可重配置测试访问端口 | |
CN108369516B (zh) | 用于加载-索引和预取-分散操作的指令和逻辑 | |
CN108292229B (zh) | 用于重新出现的相邻聚集的指令和逻辑 | |
KR101923289B1 (ko) | 스토어들을 소팅 및 리타이어링하기 위한 명령어와 로직 | |
CN108351863A (zh) | 用于可编程结构层级结构和高速缓存的指令和逻辑 | |
CN108431770A (zh) | 用于加速集合运算的硬件内容关联数据结构 | |
CN108139905A (zh) | 用于从持久存储器预取信息的指令和逻辑 | |
CN108351779A (zh) | 用于安全指令执行流水线的指令和逻辑 | |
CN108351835A (zh) | 用于高速缓存控制操作的指令和逻辑 | |
TW201729078A (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
CN108351784A (zh) | 用于在乱序处理器中进行有序处理的指令和逻辑 | |
CN108369513A (zh) | 用于加载-索引-和-收集操作的指令和逻辑 | |
CN108292293A (zh) | 用于得到多个向量元素操作的指令和逻辑 | |
CN108292232A (zh) | 用于加载索引和分散操作的指令和逻辑 | |
KR102296619B1 (ko) | 계산 처리를 위한 벡터 포맷용 명령어 및 로직 | |
CN108369518A (zh) | 用于位字段寻址和插入的指令和逻辑 | |
CN107077421B (zh) | 用于页表游走改变位的指令和逻辑 | |
CN109791493A (zh) | 用于乱序集群化解码中的负载平衡的系统和方法 | |
CN108292294A (zh) | 用于混合和置换操作序列的指令和逻辑 | |
CN107003839A (zh) | 用于移位和乘法器的指令和逻辑 | |
CN108351785A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180821 |
|
RJ01 | Rejection of invention patent application after publication |