CN106030518A - 用于整理和退出存储的指令和逻辑 - Google Patents

用于整理和退出存储的指令和逻辑 Download PDF

Info

Publication number
CN106030518A
CN106030518A CN201480076458.3A CN201480076458A CN106030518A CN 106030518 A CN106030518 A CN 106030518A CN 201480076458 A CN201480076458 A CN 201480076458A CN 106030518 A CN106030518 A CN 106030518A
Authority
CN
China
Prior art keywords
instruction
storage
logic
processor
group
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201480076458.3A
Other languages
English (en)
Other versions
CN106030518B (zh
Inventor
A.列钦科
A.埃菲莫夫
S.Y.施什洛夫
A.克卢奇尼科夫
K.加里富林
I.布罗文科
B.A.巴巴彦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN106030518A publication Critical patent/CN106030518A/zh
Application granted granted Critical
Publication of CN106030518B publication Critical patent/CN106030518B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

一种处理器包括用于无序地执行指令流的逻辑。指令流被划分为多个股,并且它的指令和该流内的那些指令被按照程序次序(PO)排序。所述处理器还包括用于执行下述操作的逻辑:识别指令流中的最早的未分派的指令并且将它的关联的PO记录为已执行指令指针;识别指令流中的最近提交的存储指令并且将它的关联的PO记录为存储提交指针;搜索指针具有小于执行指令指针的PO;识别存储缓冲器中的具有小于搜索指针的PO并且适合提交的第一组存储指令;评估第一组存储指令是否大于存储缓冲器的读端口的数量,并且调整搜索指针。

Description

用于整理和退出存储的指令和逻辑
技术领域
本公开涉及处理逻辑、微处理器和关联的指令集架构的领域,当由处理器或其它处理逻辑执行所述关联的指令集架构时,所述关联的指令集架构执行逻辑、数学或其它功能操作。
背景技术
多处理器***正在变得越来越普遍。多处理器***的应用包括动态域分割直至桌上型计算。为了利用多处理器***,待执行的代码可被分成用于由各种处理实体执行的多个线程。每个线程可被彼此并行地执行。另外,为了增加处理实体的效用,可采用无序执行。当使这种指令的所需要输入可用时,无序执行可执行指令。因此,可在较早出现在代码序列中的指令之前执行较晚出现在代码序列中的指令。
附图说明
在附图的图中作为例子而非限制图示实施例:
图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图示根据本公开的实施例的用于解决约束的搜索模块的示例性操作;
图21A、21B和21C图示根据本公开的实施例的搜索模块的示例性操作;
图22是根据本公开的实施例的搜索模块预测或设置搜索指针的示例性操作的图示;和
图23图示根据本公开的实施例的用于搜索存储并且对存储进行排序的方法的示例性实施例。
具体实施方式
下面的描述描述了用于在处理器、虚拟处理器、封装、计算机***或其它处理设备内或者结合处理器、虚拟处理器、封装、计算机***或其它处理设备整理和退出存储的指令和处理逻辑。这种处理设备可包括无序处理器。另外,这种处理设备可包括多股无序处理器。另外,可从无序缓冲器(诸如,存储缓冲器)做出整理和退出存储。在下面的描述中,阐述许多特定细节(诸如,处理逻辑、处理器类型、微架构条件、事件、使能机构等)以便提供对本公开的实施例的更彻底的理解。然而,本领域技术人员将会理解,可在没有这种特定细节的情况下实践实施例。另外,一些公知结构、电路等未被详细地示出以避免不必要地模糊本公开的实施例。
虽然参照处理器描述下面的实施例,但其它实施例适用于其它类型的集成电路和逻辑装置。本公开的实施例的类似技术和教导可被应用于可受益于更高的流水线吞吐量和提高的性能的其它类型的电路或半导体装置。本公开的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据运算的处理器或机器,并且可被应用于其中可执行数据的操纵或管理的任何处理器和机器。另外,下面的描述提供例子,并且附图为了说明的目的而示出各种例子。然而,这些例子不应该在限制性意义上被解释,因为它们仅意图提供本公开的实施例的例子,而非提供本公开的实施例的所有可能的实现方式的穷举列表。
虽然以下的例子在执行单元和逻辑电路的上下文中描述指令处理和分发,但可通过存储在机器可读的有形介质上的数据或指令来完成本公开的其它实施例,当由机器执行所述数据或指令时,所述数据或指令使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,与本公开的实施例关联的功能用机器可执行指令来实现。所述指令可被用于使可被利用所述指令编程的通用或专用处理器执行本公开的步骤。本公开的实施例可被提供作为计算机程序产品或软件,所述计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,所述指令可被用于对计算机(或其它电子装置)进行编程以执行根据本公开的实施例的一个或多个操作。另外,本公开的实施例的步骤可由包含用于执行所述步骤的固定功能逻辑的特定硬件部件或由已编程计算机部件和固定功能硬件部件的任何组合执行。
用于对逻辑进行编程以执行本公开的实施例的指令可被存储在***中的存储器(诸如,DRAM、高速缓存、闪存或其它存储器)内。另外,可经网络或通过其它计算机可读介质分发指令。因此,机器可读介质可包括用于存储或传送具有可由机器(例如,计算机)读取的形式的信息的任何机构,但不限于软盘、光盘、压缩盘、只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光学卡、闪存或者在经电、光学、听觉或其它形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网的信息的传输中使用的有形机器可读存储器。因此,计算机可读介质可包括适合于存储或传送具有可由机器(例如,计算机)读取的形式的电子指令或信息的任何类型的有形机器可读介质。
设计可经过从创建到仿真到加工的各种阶段。代表设计的数据可按照许多方式代表所述设计。首先,如可在模拟中有用的,可使用硬件描述语言或另一功能描述语言表示硬件。另外,可在设计过程的一些阶段生产具有逻辑和/或晶体管门的电路级模型。另外,在某个阶段,设计可达到代表硬件模型中的各种装置的物理放置的数据的水平。在其中使用一些半导体加工技术的情况下,代表硬件模型的数据可以是指定用于生产集成电路的掩模的不同掩模层上的各种特征的存在或不存在的数据。在所述设计的任何表示中,数据可被存储在任何形式的机器可读介质中。存储器或者磁存储器或光学存储器(诸如,盘)可以是用于存储经由光波或电波传送的信息的机器可读介质,该信息被调制或以其它方式生成用于传送这种信息。当传送指示或携带代码或设计的电载波时,就执行电信号的复制、缓冲或重新传输而言,可做出新的拷贝。因此,通信提供商或网络提供商可在有形的机器可读介质上至少暂时地存储体现本公开的实施例的技术的项目,诸如编码到载波中的信息。
在现代处理器中,许多不同执行单元可被用于处理和执行各种代码和指令。一些指令可较快地完成,而其它指令可花费许多时钟周期来完成。指令的吞吐量越快,处理器的总体性能越好。因此,使许多指令尽可能快地执行将会是有益的。然而,可存在具有较大复杂性并且在执行时间和处理器资源方面需要较多执行时间和处理器资源的某些指令,诸如浮点指令、加载/存储操作、数据移动等。
因为在互联网、文本和多媒体应用中使用更多的计算机***,所以随着时间过去已引入附加的处理器支持。在一个实施例中,指令集可与一个或多个计算机架构(包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O))关联。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构实现,所述微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的处理器可共享共同指令集的至少一部分。例如,Intel® Pentium 4处理器、Intel® Core™处理器和来自Sunnyvale CA的Advanced Micro Devices, Inc的处理器实现x86指令集的几乎相同的版本(具有已利用较新版本增加的一些扩展),但具有不同的内部设计。类似地,由其它处理器开发公司(诸如,ARM Holdings, Ltd.、MIPS或它们的执照持有者或采用者)设计的处理器可共享共同指令集的至少一部分,但可包括不同的处理器设计。例如,可使用新的或公知的技术在不同微架构中以不同方式实现ISA的相同的寄存器架构,包括专用物理寄存器、使用寄存器重新命名机构(例如,使用寄存器别名表(RAT)、重新排序缓冲器(ROB)和退出寄存器文件)的一个或多个动态地分配的物理寄存器。在一个实施例中,寄存器可包括一个或多个寄存器、寄存器架构、寄存器文件或可由软件程序员寻址或者不可由软件程序员寻址的其它寄存器集合。
指令可包括一种或多种指令格式。在一个实施例中,指令格式可指示各种字段(位的数量、位的位置等)以尤其指定将要执行的操作和将对其执行该操作的操作数。在另一实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可被定义为具有指令格式的字段的不同子集和/或被定义为具有以不同方式解释的给定字段。在一个实施例中,可使用指令格式(并且如果定义,则在该指令格式的一个指令模板中)表示指令,并且指令指定或指示操作和将对其执行该操作的操作数。
科学应用、金融应用、自动向量化通用应用、RMS(识别、挖掘和合成)应用以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压、语音识别算法和音频操纵)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(SIMD)指代使处理器对多个数据元素执行操作的指令的类型。SIMD技术可被用在处理器中,所述SIMD技术可在逻辑上将寄存器中的位划分成许多固定大小或可变大小数据元素,每个数据元素代表分离的值。例如,在一个实施例中,64位寄存器中的位可以被组织为包含四个分离的16位数据元素的源操作数,每个数据元素代表分离的16位值。这种类型的数据可被称为“压缩”数据类型或“向量”数据类型,并且这个数据类型的操作数可被称为压缩数据操作数或向量操作数。在一个实施例中,压缩数据项或向量可以是单个寄存器内存储的压缩数据元素的序列,并且压缩数据操作数或向量操作数可以是SIMD指令(或“压缩数据指令”或“向量指令”)的源或目的操作数。在一个实施例中,SIMD指令指定要对两个源向量操作数执行的单个向量操作以生成相同或不同尺寸、具有相同或不同数量的数据元素以及具有相同或不同数据元素次序的目的向量操作数(也被称为结果向量操作数)。
SIMD技术(诸如由下面的处理器采用的SIMD技术:Intel® Core™处理器,具有包括x86、MMX™、流SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集;ARM处理器,诸如具有包括向量浮点(VFP)和/或NEON指令的指令集的处理器的ARM Cortex®系列;和MIPS处理器,诸如由Chinese Academy of Sciences的Institute of Computing Technology (ICT)开发的处理器的Loongson系列)已能够实现应用性能的显著提高(Core™和MMX™是Santa Clara, Calif.的Intel Corporation的注册商标或商标)。
在一个实施例中,目的和源寄存器/数据可以是用于代表对应数据或操作的源和目的的通用术语。在一些实施例中,它们可由寄存器、存储器或具有与描述的那些名称或功能不同的其它名称或功能的其它存储区域实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域等。在其它实施例中,SRC和DEST存储区域中的两个或更多个存储区域可对应于同一存储区域(例如,SIMD寄存器)内的不同数据存储元件。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回到用作目的寄存器的两个源寄存器之一,源寄存器之一也可用作目的寄存器。
图1A是根据本公开的实施例的用处理器形成的示例性计算机***的方框图,所述处理器可包括用于执行指令的执行单元。根据本公开(诸如,在本文中描述的实施例中),***100可包括诸如处理器102的部件,处理器102采用执行单元,所述执行单元包括用于执行用于处理数据的算法的逻辑。***100可代表基于可从Santa Clara, California的Intel Corporation商购获得的PENTIUM® III、PENTIUM® 4、Xeon™、Itanium®、XScale™和/或StrongARM™微处理器的处理***,但也可使用其它***(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,示例性***100可执行可从Redmond, Washington的Microsoft Corporation商购获得的WINDOWS™操作***的版本,但也可使用其它操作***(例如,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可包括级1(L1)内部高速缓存104。取决于架构,处理器102可具有单个内部高速缓存或多级的内部高速缓存。在另一实施例中,高速缓存可驻留在处理器102外部。取决于特定实现方式和需要,其它实施例也可包括内部和外部高速缓存的组合。寄存器文件106可在包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器的各种寄存器中存储不同类型的数据。
包括用于执行整数和浮点操作的逻辑的执行单元108也驻留在处理器102中。处理器102还可包括微码(ucode) ROM,其存储用于某些宏指令的微码。在一个实施例中,执行单元108可包括用于处理压缩指令集109的逻辑。通过在通用处理器102以及用于执行指令的关联的电路的指令集中包括压缩指令集109,可使用通用处理器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包括用于执行根据一个实施例的至少一个指令的处理核159。在一个实施例中,处理核159代表任何类型的架构的处理单元,包括但不限于CISC、RISC或VLIW类型架构。处理核159还可适合于一种或多种加工技术中的制造,并且通过在机器可读介质上足够详细地表示处理核159,处理核159可适合促进所述制造。
处理核159包括执行单元142、一组寄存器文件145和解码器144。处理核159还可包括对于理解本公开的实施例而言可能不必要的另外的电路(未示出)。执行单元142可执行由处理核159接收的指令。除了执行典型处理器指令之外,执行单元142还可执行用于对压缩数据格式执行操作的压缩指令集143中的指令。压缩指令集143可包括用于执行本公开的实施例的指令和其它压缩指令。执行单元142可通过内部总线而被耦合到寄存器文件145。寄存器文件145可代表用于存储信息(包括数据)的处理核159上的存储区域。如前所述,应该理解,该存储区域可存储可能不重要的压缩数据。执行单元142可被耦合到解码器144。解码器144可将由处理核159接收的指令解码成控制信号和/或微码入口点。响应于这些控制信号和/或微码入口点,执行单元142执行适当的操作。在一个实施例中,解码器可解释指令的操作码,所述操作码将指示应该对在指令内指示的对应数据执行什么操作。
处理核159可与总线141耦合以与各种其它***装置通信,所述各种其它***装置可包括但不限于例如同步动态随机存取存储器(SDRAM)控制器146、静态随机存取存储器(SRAM)控制器147、突发闪存接口148、个人计算机存储卡国际协会(PCMCIA)/压缩闪存(CF)卡控制器149、液晶显示器(LCD)控制器150、直接存储器存取(DMA)控制器151和替代总线主接口152。在一个实施例中,数据处理***140还可包括用于经由I/O总线153与各种I/O装置通信的I/O桥154。这种I/O装置可包括但不限于例如通用异步接收器/发送器(UART) 155、通用串行总线(USB) 156、蓝牙无线UART 157和I/O扩展接口158。
数据处理***140的一个实施例提供移动、网络和/或无线通信以及可执行SIMD操作(包括文本串比较操作)的处理核159。处理核159可利用各种音频、视频、成像和通信算法来编程,所述算法包括:离散变换,诸如Walsh-Hadamard变换、快速傅里叶变换(FFT)、离散余弦转换(DCT)及其各自的逆变换;压缩/解压技术,诸如颜色空间变换、视频编码运动估计或视频解码运动补偿;和调制/解调(MODEM)功能,诸如脉冲编码调制(PCM)。
图1C图示执行SIMD文本串比较操作的数据处理***的其它实施例。在一个实施例中,数据处理***160可包括主要处理器166、SIMD协处理器161、高速缓存167和输入/输出***168。输入/输出***168可以可选地被耦合到无线接口169。SIMD协处理器161可执行包括根据一个实施例的指令的操作。在一个实施例中,处理核170可适合于一种或多种加工技术中的制造,并且通过在机器可读介质上足够详细地表示处理核170,处理核170可适合促进包括处理核170的数据处理***160的全部或一部分的制造。
在一个实施例中,SIMD协处理器161包括执行单元162和一组寄存器文件164。主要处理器165的一个实施例包括解码器165以识别用于由执行单元162执行的指令集163的指令(包括根据一个实施例的指令)。在其它实施例中,SIMD协处理器161还包括用于对指令集163的指令进行解码的解码器165的至少一部分。处理核170还可包括对于理解本公开的实施例而言可能不必要的附加的电路(未示出)。
在操作中,主要处理器166执行控制通常类型的数据处理操作(包括与高速缓存167和输入/输出***168的交互)的数据处理指令的流。嵌入在数据处理指令的流内的可以是SIMD协处理器指令。主要处理器166的解码器165将这些SIMD协处理器指令识别为具有应该由连接的SIMD协处理器161执行的类型。因此,主要处理器166在协处理器总线166上发出这些SIMD协处理器指令(或代表SIMD协处理器指令的控制信号)。从协处理器总线166,这些指令可由任何连接的SIMD协处理器接收。在这种情况下,SIMD协处理器161可接受并且执行以它为目的的任何接收的SIMD协处理器指令。
可经由无线接口169接收数据以便由SIMD协处理器指令处理。对于一个例子,可按照数字信号的形式接收语音通信,所述数字信号可由SIMD协处理器指令处理以重新生成代表语音通信的数字音频采样。对于另一例子,可按照数字比特流的形式接收压缩音频和/或视频,所述数字比特流可由SIMD协处理器指令处理以重新生成数字音频采样和/或运动视频帧。在处理核170的一个实施例中,主要处理器166和SIMD协处理器161可被集成到单个处理核170中,所述单个处理核170包括执行单元162、一组寄存器文件164和用于识别指令集163的指令(包括根据一个实施例的指令)的解码器165。
图2是根据本公开的实施例的针对处理器200的微架构的方框图,所述处理器200可包括用于执行指令的逻辑电路。在一些实施例中,可实现根据一个实施例的指令以操作具有字节、字、双字、四倍字等的大小以及诸如单精度和双精度整数和浮点数据类型的数据类型的数据元素。在一个实施例中,按顺序前端201可实现处理器200的一部分,其可获取待执行的指令并且准备所述指令以便稍后在处理器流水线中使用。前端201可包括几个单元。在一个实施例中,指令预取器226从存储器获取指令并且将指令馈送给指令解码器228,指令解码器228进而对指令进行解码或解释。例如,在一个实施例中,解码器将接收的指令解码成机器可执行的称为“微指令”或“微操作”(也被称为micro op或uop)的一个或多个操作。在其它实施例中,解码器将指令解析成操作码和对应数据,并且控制可由微架构使用的字段以执行根据一个实施例的操作。在一个实施例中,踪迹高速缓存230可将解码的uop汇编成uop队列234中的程序有序序列或踪迹以用于执行。当踪迹高速缓存230遇到复杂指令时,微码ROM 232提供完成操作所需的uop。
一些指令可被转换成单个微操作,而其它指令需要几个微操作以完成全部操作。在一个实施例中,如果需要超过四个微操作来完成指令,则解码器228可访问微码ROM 232以执行该指令。在一个实施例中,指令可在指令解码器228被解码成用于处理的少量的微操作。在另一实施例中,如果需要许多微操作来完成操作,则指令可被存储在微码ROM 232内。踪迹高速缓存230指代用于确定正确的微指令指针的入口点可编程逻辑阵列(PLA),所述微指令指针用于从微码ROM 232读取微码序列以用于完成根据一个实施例的一个或多个指令。在微码ROM 232结束对用于指令的微操作排序之后,机器的前端201可继续从踪迹高速缓存230获取微操作。
无序执行引擎203可准备用于执行的指令。无序执行逻辑具有许多缓冲器以在指令沿着流水线前进并且被安排用于执行时对指令流进行平滑和重新排序从而优化性能。分配器逻辑分配每个uop为了执行而需要的机器缓冲器和资源。寄存器重新命名逻辑将逻辑寄存器重新命名为寄存器文件中的条目。分配器还在以下指令调度器前面为两个uop队列(一个用于存储操作并且一个用于非存储操作)中的一个uop队列中的每个uop分配入口:存储器调度器、快速调度器202、慢速/一般浮点调度器204和简单浮点调度器206。Uop调度器202、204、206基于它们的相关输入寄存器操作数源的准备状态和uop完成它们的操作所需的执行资源的可用性确定uop何时准备好执行。一个实施例的快速调度器202可在主时钟周期的每半个时钟周期上进行调度,而其它调度器可仅在每个主要处理器时钟周期进行一次调度。调度器对分派端口进行仲裁以安排执行uop。
寄存器文件208、210可被布置在调度器202、204、206和执行块211中的执行单元212、214、216、218、220、222、224之间。寄存器文件208、210中的每个寄存器文件分别执行整数和浮点操作。每个寄存器文件208、210可包括旁路网络,所述旁路网络可绕过还未被写到寄存器文件中的刚刚完成的结果或将还未被写到寄存器文件中的刚刚完成的结果转发给新的相关的uop。整数寄存器文件208和浮点寄存器文件210可彼此传送数据。在一个实施例中,整数寄存器文件208可被划分成两个分离的寄存器文件,用于数据的低阶三十二位的一个寄存器文件以及用于数据的高阶三十二位的第二寄存器文件。浮点寄存器文件210可包括128位宽条目,因为浮点指令通常具有在宽度上从64位到128位的操作数。
执行块211可包含执行单元212、214、216、218、220、222、224。执行单元212、214、216、218、220、222、224可执行指令。执行块211可包括寄存器文件208、210,寄存器文件208、210存储微指令需要执行的整数和浮点数据操作数值。在一个实施例中,处理器200可包括许多执行单元:地址生成单元(AGU) 212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。在另一实施例中,浮点执行块222、224可执行浮点、MMX、SIMD和SSE或其它操作。在又一实施例中,浮点ALU 222可包括用于执行除法、平方根和余数微操作的64位乘64位浮点除法器。在各种实施例中,可利用浮点硬件处理涉及浮点值的指令。在一个实施例中,ALU操作可被传送给高速ALU执行单元216、218。高速ALU 216、218可利用半时钟周期的有效延时执行快速操作。在一个实施例中,最复杂的整数操作前往慢速ALU 220,因为慢速ALU 220可包括用于长延时类型的操作的整数执行硬件,诸如乘法器、移位器、标记逻辑和分支处理。存储器加载/存储操作可由AGU 212、214执行。在一个实施例中,整数ALU 216、218、220可对64位数据操作数执行整数操作。在其它实施例中,可实现ALU 216、218、220以支持各种数据位大小(包括十六位、三十二位、128位、256位等)。类似地,可实现浮点单元222、224以支持具有各种宽度的位的一定范围的操作数。在一个实施例中,浮点单元222、224可结合SIMD和多媒体指令对128位宽压缩数据操作数进行操作。
在一个实施例中,uop调度器202、204、206在父加载已完成执行之前分派相关操作。因为可在处理器200中以推测方式安排和执行uop,所以处理器200还可包括用于处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则可在流水线中存在为调度器留下暂时错误数据的执行中的相关操作。重放机构跟踪并且重新执行使用错误数据的指令。仅相关操作可能需要被重放,并且独立操作可被允许完成。处理器的一个实施例的调度器和重放机构也可被设计为捕捉用于文本串比较操作的指令序列。
术语“寄存器”可指代可被用作用于识别操作数的指令的一部分的板上处理器存储位置。换句话说,寄存器可以是可从处理器的外部(从程序员的角度)使用的那些寄存器。然而,在一些实施例中,寄存器可能不局限于特定类型的电路。相反地,寄存器可存储数据,提供数据,并且执行本文中描述的功能。本文中描述的寄存器可由处理器内的电路使用任何数量的不同技术(诸如,专用物理寄存器、使用寄存器重新命名的动态地分配的物理寄存器、专用物理寄存器和动态地分配的物理寄存器的组合等)实现。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器文件还包含用于压缩数据的八个多媒体SIMD寄存器。对于以下的讨论,寄存器可被理解为被设计为保存压缩数据的数据寄存器,诸如能够利用来自Santa Clara, California的Intel Corporation的MMX技术实现的微处理器中的64位宽MMX™寄存器(在一些实例中,也被称为“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图示字七至字零可如何被存储在SIMD寄存器中。有符号压缩字表示347可类似于无符号压缩字寄存器内表示346。注意的是,每个字数据元素的第十六位可以是符号指示符。无符号压缩双字表示348示出双字数据元素被如何存储。有符号压缩双字表示349可类似于无符号压缩双字寄存器内表示348。注意的是,必要的符号位可以是每个双字数据元素的第三十二位。
图3D图示操作编码(操作码)的实施例。另外,格式360可包括与在可从Intel Corporation, Santa Clara, CA在万维网(www)上的intel.com/design/litcentr处获得的“IA-32 Intel Architecture Software Developer'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和位移字节部分地指定的寄存器到寄存器寻址、存储器到寄存器寻址、寄存器乘存储器寻址、寄存器乘寄存器寻址、寄存器乘立即寻址、寄存器到存储器寻址。
图3F图示根据本公开的实施例的又一可能的操作编码(操作码)格式。可通过协处理器数据处理(CDP)指令执行64位单指令多数据(SIMD)算术运算。操作编码(操作码)格式380描绘具有CDP操作码字段382 an0064 389的一个这种CDP指令。对于另一实施例,CDP指令操作的类型可由字段383、384、387和388中的一个或多个字段编码。可识别每个指令的多达三个操作数位置,包括多达两个源操作数标识符385和390以及一个目的操作数标识符386。协处理器的一个实施例可操作八位、十六位、三十二位和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示出处理器核490,处理器核490包括耦合到执行引擎单元450的前端单元430,并且前端单元430和执行引擎单元450都可被耦合到存储单元470。
核490可以是精减指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或替代核类型。在一个实施例中,核490可以是专用核,诸如例如网络或通信核、压缩引擎、图形核等。
前端单元430可包括分支预测单元432,分支预测单元432耦合到指令高速缓存单元434。指令高速缓存单元434可被耦合到指令快速重编址缓冲器(TLB) 436。TLB 436可被耦合到指令获取单元438,指令获取单元438被耦合到解码单元440。解码单元440可对指令进行解码,并且生成可从原始指令解码、或以其它方式反映原始指令或可从原始指令获得的一个或多个微操作、微码入口点、微指令、其它指令或其它控制信号作为输出。可使用各种不同机构实现解码器。合适的机构的例子包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,指令高速缓存单元434还可被耦合到存储单元470中的级2(L2)高速缓存单元476。解码单元440可被耦合到执行引擎单元450中的重新命名/分配器单元452。
执行引擎单元450可包括重新命名/分配器单元452,重新命名/分配器单元452耦合到退出单元454和一组的一个或多个调度器单元456。调度器单元456代表任何数量的不同调度器,包括预约站、中央指令窗口等。调度器单元456可被耦合到物理寄存器文件单元458。每个物理寄存器文件单元458代表一个或多个物理寄存器文件,不同的物理寄存器文件存储一个或多个不同数据类型,诸如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点等、状态(例如,作为将要被执行的下一个指令的地址的指令指针)等。物理寄存器文件单元458可与退出单元154交叠以图示其中可实现寄存器重新命名和无序执行的各种方式(例如,使用一个或多个重新排序缓冲器和一个或多个退出寄存器文件、使用一个或多个未来文件、一个或多个历史缓冲器和一个或多个退出寄存器文件;使用寄存器图和一批寄存器等)。通常,从处理器的外部或从程序员的角度,架构寄存器可能是可见的。寄存器可不局限于任何已知的特定类型的电路。各种不同类型的寄存器可以是合适的,只要它们如本文所述的那样存储数据并且提供数据。合适的寄存器的例子包括但可能不局限于专用物理寄存器、使用寄存器重新命名的动态地分配的物理寄存器、专用物理寄存器和动态地分配的物理寄存器的组合等。退出单元454和物理寄存器文件单元458可被耦合到执行群集460。执行群集460可包括一组的一个或多个执行单元162和一组的一个或多个存储器访问单元464。执行单元462可对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可包括专用于特定功能或功能集合的许多执行单元,但其它实施例可包括全都执行所有功能的仅一个执行单元或多个执行单元。调度器单元456、物理寄存器文件单元458和执行群集460被示出为可能是复数,因为某些实施例创建用于某些类型的数据/操作的分离流水线(例如,标量整数流水线、标量浮点/压缩整数/压缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线,每种流水线具有它们自己的调度器单元、物理寄存器文件单元和/或执行群集——并且在分离存储器访问流水线的情况下,可实现其中仅这个流水线的执行群集具有存储器访问单元464的某些实施例)。还应该理解,在使用分离流水线的情况下,这些流水线中的一个或多个流水线可以是无序发出/执行,并且其余流水线按顺序发出/执行。
该组存储器访问单元464可被耦合到存储单元470,存储单元470可包括数据TLB单元472,数据TLB单元472耦合到数据高速缓存单元474,数据高速缓存单元474耦合到级2(L2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可包括加载单元、存储地址单元和存储数据单元,其中的每个单元可被耦合到存储单元470中的数据TLB单元472。L2高速缓存单元476可被耦合到一个或多个其它级的高速缓存并且最终被耦合到主存储器。
作为例子,示例性寄存器重新命名、无序发出/执行核架构可如下实现流水线400:1)指令获取438可执行获取和长度解码级402和404;2)解码单元440可执行解码级406;3)重新命名/分配器单元452可执行分配级408和重新命名级410;4)调度器单元456可执行调度级412;5)物理寄存器文件单元458和存储单元470可执行寄存器读取/存储器读取级414;执行群集460可执行执行级416;6)存储单元470和物理寄存器文件单元458可执行写回/存储器写级418;7)在异常处理级422的执行中可涉及各种单元;以及8)退出单元454和物理寄存器文件单元458可执行提交级424。
核490可支持一种或多种指令集(例如,x86指令集(具有已利用更新的版本添加的一些扩展);Sunnyvale, CA的MIPS技术的MIPS指令集;Sunnyvale, CA的ARM Holdings的ARM指令集(具有可选的附加的扩展(诸如,NEON)))。
应该理解,所述核可按照各种方式支持多线程(执行两组或更多组并行的操作或线程)。通过例如包括时间切片多线程、同时多线程(其中单个物理核为物理核同时以多线程方式执行的每个线程提供逻辑核)或者其组合,可执行多线程支持。诸如在Intel®超线程技术中,这种组合可包括例如时间切片获取和解码和其后的同时多线程。
尽管可在无序执行的上下文中描述寄存器重新命名,但应该理解,可在按顺序架构中使用寄存器重新命名。尽管图示的处理器的实施例也可包括分离的指令和数据高速缓存单元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可包括用于将核502、***代理510和高速缓存506和图形模块560互连的基于环的互连单元508。在其它实施例中,处理器500可包括用于将这种单元互连的任何数量的公知技术。基于环的互连单元508可利用存储器控制单元552以促进互连。
处理器500可包括存储器分级体系,所述存储器分级体系包括所述核内的一个或多个级的高速缓存、一个或多个共享高速缓存单元(诸如,高速缓存506)或耦合到该组集成存储控制器单元552的外部存储器(未示出)。高速缓存506可包括任何合适的高速缓存。在一个实施例中,高速缓存506可包括一个或多个中级高速缓存(诸如,级2(L2)、级3(L3)、级4(L4)或其它级的高速缓存)、末级高速缓存(LLC)和/或其组合。
在各种实施例中,一个或多个核502可执行多线程。***代理510可包括用于协调和操作核502的部件。***代理单元510可包括例如功率控制单元(PCU)。PCU可以是调节核502的功率状态所需的逻辑和部件或者包括调节核502的功率状态所需的逻辑和部件。***代理510可包括用于驱动一个或多个外部连接的显示器或图形模块560的显示引擎512。***代理510可包括用于针对图形的通信总线的接口1214。在一个实施例中,可由PCI Express (PCIe)实现接口1214。在另一实施例中,可由PCI Express Graphics (PEG)实现接口1214。***代理510可包括直接媒体接口(DMI) 516。DMI 516可提供母板或计算机***的其它部分上的不同桥之间的链路。***代理510可包括用于向计算***的其它元件提供PCIe链路的PCIe桥1218。可使用存储控制器1220和相干逻辑1222实现PCIe桥1218。
核502可被以任何合适的方式实现。在架构和/或指令集方面,核502可以同构或异构。在一个实施例中,一些核502可以是按顺序的,而其它核502可以是无序的。在另一实施例中,两个或更多个核502可执行相同的指令集,而其它核可仅执行该指令集的子集或不同的指令集。
处理器500可包括通用处理器,诸如可从Santa Clara, Calif的Intel Corporation获得的Core™ i3、i5、i7、2 双核和四核、Xeon™、Itanium™、XScale™或StrongARM™处理器。可从另一公司(诸如,ARM Holdings, Ltd、MIPS等)提供处理器500。处理器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可包括分配模块1282。在一个实施例中,分配模块1282可分配处理器500的资源或其它资源(诸如,寄存器或缓冲器)以执行给定指令。分配模块1282可在调度器(诸如,存储器调度器、快速调度器或浮点调度器)中执行分配。这种调度器可在图5B中由资源调度器584表示。分配模块12182可完全地或部分地由结合图2描述的分配逻辑实现。资源调度器584可基于给定资源的源的准备状态和执行指令所需的执行资源的可用性确定指令何时准备好执行。如以上所讨论,资源调度器584可由例如调度器202、204、206实现。资源调度器584可安排根据一个或多个资源执行指令。在一个实施例中,这种资源可位于核502内部,并且可例如被图示为资源586。在另一实施例中,这种资源可位于核502外部,并且可通过例如高速缓存分级体系503来访问这种资源。资源可包括例如存储器、高速缓存、寄存器文件或寄存器。位于核502内部的资源可由图5B中的资源586表示。根据需要,可通过例如高速缓存分级体系503与处理器500的其它部分协调写到资源586或从资源586读取的值。当指令是分派资源时,它们可被放置在重新排序缓冲器588中。重新排序缓冲器588可在指令被执行时跟踪指令,并且可基于处理器500的任何合适的准则选择性地对它们的执行进行重新排序。在一个实施例中,重新排序缓冲器588可识别可被独立地执行的指令或一系列指令。可与其它这种指令并行地执行这种指令或一系列指令。核502中的并行执行可由任何合适的数量的分离的执行块或虚拟处理器执行。在一个实施例中,给定核502内的多个虚拟处理器可访问共享资源——诸如存储器、寄存器和高速缓存。在其它实施例中,处理器500内的多个处理实体可访问共享资源。
高速缓存分级体系503可被以任何合适的方式实现。例如,高速缓存分级体系503可包括一个或多个低级或中级高速缓存,诸如高速缓存572、574。在一个实施例中,高速缓存分级体系503可包括通信地耦合到高速缓存572、574的LLC 595。在另一实施例中,可在处理器500的所有处理实体可访问的模块590中实现LLC 595。在另一实施例中,可在来自Intel公司的处理器的无核模块中实现模块590。模块590可包括核502的执行所需的处理器500的部分或子***,但可不被实现在核502内。除了LLC 595之外,模块590可包括例如硬件接口、存储器相干协调器、处理器间互连件、指令流水线或存储控制器。可通过模块590并更具体的是LLC 595做出对处理器500可用的RAM 599的访问。另外,核502的其它实例可类似地访问模块590。可部分地通过模块590促进核502的实例的协调。
图6-8可图示适合于包括处理器500的示例性***,而图9可图示可包括一个或多个核502的示例性片上***(SoC)。针对膝上型计算机、桌上型计算机、手持式PC、个人数字助手、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式装置和各种其它电子装置的本领域中已知的其它***设计和实现方式也可以是合适的。通常,合并如本文中公开的处理器和/或其它执行逻辑的多种***或电子装置可通常是合适的。
图6图示根据本公开的实施例的***600的方框图。***600可包括一个或多个处理器610、615,所述一个或多个处理器610、615可被耦合到图形存储控制器集线器(GMCH) 620。在图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(诸如,平板显示器)。在一个实施例中,GMCH 620可包括集成图形加速器。GMCH 620还可被耦合到输入/输出(I/O)控制器集线器(ICH) 650,ICH 650可被用于将各种***装置耦合到***600。外部图形装置660可包括耦合到ICH 650以及另一***装置670的分立图形装置。
在其它实施例中,附加的或不同的处理器也可存在于***600中。例如,附加的处理器610、615可包括可与处理器610相同的附加的处理器、可对于处理器610异构或不对称的附加的处理器、加速器(诸如,例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器。在包括架构、微架构、热、功耗特性等的优点的度量的范围方面,在物理资源610、615之间可存在各种差异。这些差异可有效地将它们自己表明为处理器610、615之间的不对称性和异构性。对于至少一个实施例,各种处理器610、615可驻留在同一管芯封装中。
图7图示根据本公开的实施例的第二***700的方框图。如图7中所示,多处理器***700可包括点对点互连***,并且可包括经由点对点互连750耦合的第一处理器770和第二处理器780。像处理器610、615中的一个或多个处理器一样,处理器770和780中的每个处理器可以是处理器500的某个版本。
尽管图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,在一个实施例中,存储器732和存储器734可以是在本地连接到各处理器的主存储器的部分。
处理器770、780可各自使用点对点接口电路776、794、786、798经由个体P-P接口752、754与芯片组790交换信息。在一个实施例中,芯片组790还可经由高性能图形接口739与高性能图形电路738交换信息。
共享高速缓存(未示出)可被包括在任一处理器中或被包括在两个处理器外部,但经由P-P互连与处理器连接,从而如果处理器被布置在低功率模式,则任一处理器或两个处理器的本地高速缓存信息可被存储在所述共享高速缓存中。
芯片组790可经由接口796被耦合到第一总线716。在一个实施例中,第一总线716可以是***部件互连(PCI)总线或者诸如PCI Express总线或另一第三代I/O互连总线的总线,但本公开的范围不限于此。
如图7中所示,各种I/O装置714以及总线桥718可被耦合到第一总线716,总线桥718将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低脚数(LPC)总线。各种装置可被耦合到第二总线720,所述各种装置包括例如键盘和/或鼠标722、通信装置727和存储单元728(诸如,盘驱动器或其它大容量存储装置),在一个实施例中,存储单元728可包括指令/代码和数据730。另外,音频I/O 724可被耦合到第二总线720。注意的是,其它架构可以是可能的。例如,替代于图7的点对点架构,***可实现多点总线或其它这种架构。
图8图示根据本公开的实施例的第三***800的方框图。图7和8中的相同的元件具有相同的标号,并且已从图8省略图7的某些方面以便避免模糊图8的其它方面。
图8图示:处理器870、880可分别包括集成存储器和I/O控制逻辑(“CL”) 872和882。对于至少一个实施例,CL 872、882可包括集成存储控制器单元(诸如,以上结合图5和7描述的集成存储控制器单元)。另外,CL 872、882还可包括I/O控制逻辑。图8图示:不仅存储器832、834可被耦合到CL 872、882,而且I/O装置814也可被耦合到控制逻辑872、882。传统I/O装置815可被耦合到芯片组890。
图9图示根据本公开的实施例的SoC 900的方框图。图5中的相似的元件具有相似的标号。此外,虚线框可代表更高级的SoC上的可选的特征。互连单元902可被耦合到:应用处理器910,其可包括一组的一个或多个核902 A-N和共享高速缓存单元906;***代理单元910;总线控制器单元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。其它逻辑和电路可被包括在图10的处理器中,包括更多的CPU或GPU和其它***接口控制器。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性数据实现,所述机器可读介质代表处理器内的各种逻辑,当由机器读取所述代表性数据时,所述代表性数据使所述机器制造用于执行本文中描述的技术的逻辑。称为“IP核”的这种表示可被存储在有形的机器可读介质(“磁带”)中并且被提供给各种顾客或制造设施以加载到实际做出所述逻辑或处理器的加工机器中。例如,IP核(诸如,由ARM Holdings, Ltd.开发的处理器的Cortex™系列和由Chinese Academy of Sciences的Institute of Computing Technology (ICT)开发的Loongson IP核)可被许可或销售给各种顾客或执照持有者(诸如,Texas Instruments、Qualcomm、Apple或Samsung)并且被实现在由这些顾客或执照持有者生产的处理器中。
图11图示图示了根据本公开的实施例的IP核的开发的方框图。存储器1130可包括模拟软件1120和/或硬件或软件模型1110。在一个实施例中,代表IP核设计的数据可经由存储器1140(例如,硬盘)、有线连接(例如,互联网) 1150或无线连接1160被提供给存储器1130。由模拟工具和模型生成的IP核信息可随后被传送给加工设施,其中,IP核信息可由第三方加工以执行根据至少一个实施例的至少一个指令。
在一些实施例中,一个或多个指令可对应于第一类型或架构(例如,x86),并且在不同类型或架构(例如,ARM)的处理器上被翻译或仿真。根据一个实施例,可因此在任何处理器或处理器类型(包括ARM、x86、MIPS、GPU或其它处理器类型或架构)上执行指令。
图12图示根据本公开的实施例的第一类型的指令可如何由不同类型的处理器仿真。在图12中,程序1205包含可与根据一个实施例的指令执行相同或基本上相同的功能的一些指令。然而,程序1205的指令可具有与处理器1215不同或与处理器1215不兼容的类型和/或格式,从而意味着程序1205中的类型的指令可能无法自然地由处理器1215执行。然而,借助于仿真逻辑1210,程序1205的指令可被翻译成可自然地由处理器1215执行的指令。在一个实施例中,仿真逻辑可被体现在硬件中。在另一实施例中,仿真逻辑可被体现在有形的机器可读介质中,所述有形的机器可读介质包含用于将程序1205中的类型的指令翻译成可自然地由处理器1215执行的类型的软件。在其它实施例中,仿真逻辑可以是固定功能或可编程硬件和存储在有形的机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其它实施例中,仿真逻辑存在于处理器外部并且可由第三方提供。在一个实施例中,通过执行处理器中所包含的微码或固件或者与处理器关联的微码或固件,处理器可加载包含软件的有形机器可读介质中体现的仿真逻辑。
图13图示根据本公开的实施例的将使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令做对比的方框图。在图示的实施例中,指令转换器可以是软件指令转换器,但指令转换器可被实现于软件、固件、硬件或其各种组合。图13示出可使用x86编译器1304编译根据高级语言1302的程序以生成可由具有至少一个x86指令集核的处理器1316自然地执行的x86二进制码1306。具有至少一个x86指令集核的处理器1316代表任何处理器,其可通过以兼容方式执行或以其它方式处理(1)Intel x86指令集核的指令集的大部分或(2)旨在在具有至少一个x86指令集核的Intel处理器上运行的应用或其它软件的目标代码版本来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能,以便实现与具有至少一个x86指令集核的Intel处理器基本上相同的结果。x86编译器1304代表可操作用于生成x86二进制码1306(例如,目标代码)的编译器,在具有另外的链接处理或没有另外的链接处理的情况下,可在具有至少一个x86指令集核的处理器1316上执行x86二进制码1306。类似地,图13示出可使用替代指令集编译器1308编译根据高级语言1302的程序以生成可由没有至少一个x86指令集核的处理器1314(例如,具有执行Sunnyvale, CA的MIPS 技术的MIPS指令集和/或执行Sunnyvale, CA的ARM Holdings的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芯片或模块)的访问或来自存储器(诸如,SDRAM芯片或模块)的访问。闪存控制器1445可提供对存储器(诸如,闪存或RAM的其它实例)的访问或来自存储器(诸如,闪存或RAM的其它实例)的访问。SPI主单元1450可提供对通信模块(诸如,Bluetooth模块1470、高速3G调制解调器1475、全球定位***模块1480或实现诸如802.11的通信标准的无线模块1485)的访问或来自通信模块(诸如,Bluetooth模块1470、高速3G调制解调器1475、全球定位***模块1480或实现诸如802.11的通信标准的无线模块1485)的访问。
图15是根据本公开的实施例的实现指令集架构的处理器的指令架构1500的更详细的方框图。指令架构1500可以是微架构。指令架构1500可实现指令集架构1400的一个或多个方面。另外,指令架构1500可图示用于处理器内的指令的执行的模块和机构。
指令架构1500可包括通信地耦合到一个或多个执行实体1565的存储***1540。另外,指令架构1500可包括高速缓存和总线接口单元(诸如,单元1510),所述高速缓存和总线接口单元通信地耦合到执行实体1565和存储***1540。在一个实施例中,可由执行的一个或多个级执行将指令加载到执行实体1565中。这种级可包括例如指令预取级1530、双指令解码级1550、寄存器重新命名级1555、发出级1560和写回级1570。
在一个实施例中,存储***1540可包括已执行指令指针1580。已执行指令指针1580可存储这样的值:该值识别由多个股表示的线程内的无序发出级1560中的一批指令内的最早的未分派的指令。可在发出级1560中计算已执行指令指针1580并且将已执行指令指针1580传播给加载单元。指令可被存储在一批指令内。所述一批指令可位于由多个股表示的线程内。最早的指令可对应于最低PO(程序次序)值。PO可包括指令的唯一编号。PO可被用于对指令进行排序以确保代码的正确执行语义。可通过机制(诸如,评估在指令中编码的PO的增量而非绝对值)来重构PO。这种重构的PO可被称为RPO。虽然可在本文中参考PO,但这种PO可被与RPO可互换地使用。股可包括一系列指令,所述一系列指令是彼此相关的数据。所述股可由二进制翻译器在编译时间布置。执行股的硬件可根据各种指令的PO依次执行给定股的指令。线程可包括多个股,从而不同股的指令可彼此相关。给定股的PO可以是还未被从发出级分派执行的股中的最早指令的PO。因此,给定多个股的线程,每个股包括按照PO排序的指令,已执行指令指针1580可存储无序发出级1560中的线程的股之中的最早——由最低数字示出——的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可包括高速缓存至高速缓存传送单元,高速缓存至高速缓存传送单元处理不同高速缓存之间的信息交换。在另一进一步实施例中,探查控制单元1512可包括一个或多个探查滤波器1514,所述一个或多个探查滤波器1514监测其它高速缓存(未示出)的相干性,以使得高速缓存控制器(诸如,单元1510)不必直接执行这种监测。单元1510可包括用于同步指令架构1500的动作的任何合适的数量的定时器1515。此外,单元1510可包括AC端口1516。
存储***1540可包括用于存储用于指令架构1500的处理需要的信息的任何合适的数量和种类的机构。在一个实施例中,存储***1540可包括用于存储与写到存储器或寄存器或者从存储器或寄存器读回的指令相关的信息的加载存储单元1530。在另一实施例中,存储***1540可包括快速重编址缓冲器(TLB) 1545,其提供物理和虚拟地址之间的地址值的查找。在又一实施例中,总线接口单元1520可包括用于方便对虚拟存储器的访问的存储管理单元(MMU) 1544。在仍又一实施例中,存储***1540可包括预取器1543,其用于在实际需要执行指令之前从存储器请求这种指令,以便减少延时。
可通过不同级执行用于执行指令的指令架构1500的操作。例如,使用单元1510,指令预取级1530可通过预取器1543访问指令。检索到的指令可被存储在指令高速缓存1532中。预取级1530可以能够实现用于快速循环模式的选项1531,其中执行形成足够小以安装在给定高速缓存内的循环的一系列指令。在一个实施例中,可执行这种执行,而不需要从例如指令高速缓存1532访问附加的指令。可由例如分支预测单元1535确定预取什么指令,分支预测单元1535可访问全局历史1536中的执行的指示、目标地址1537的指示或返回堆栈1538的内容以确定接下来将执行代码的分支1557中的哪个分支。作为结果,可以可能地预取这种分支。可通过如下所述的操作的其它级产生分支1557。指令预取级1530可将指令以及关于未来指令的任何预测提供给双指令解码级。
双指令解码级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,处理器1710通信地耦合到任何合适的数量或种类的部件、***设备、模块或装置。通过任何合适的种类的总线或接口(诸如,I2C总线、***管理总线(SMBus)、低脚数(LPC)总线、SPI、高清晰度音频(HDA)总线、串行高级技术附件(SATA)总线、USB总线(版本1、2、3)或通用异步接收器/发送器(UART)总线)可完成这种耦合。
这种部件可包括例如显示器1724、触摸屏幕1725、触摸垫1730、近场通信(NFC)单元1745、传感器集线器1740、热传感器1746、高速芯片组(EC) 1735、可信平台模块(TPM) 1738、BlOS/固件/闪存1722、数字信号处理器1760、驱动器1720(诸如,固态盘(SSD)或硬盘驱动器(HDD))、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位***(GPS)、照相机1754(诸如,USB 3.0照相机)或按照例如LPDDR3标准实现的低功率双倍数据速率(LPDDR)存储单元1715。这些部件可各自被以任何合适的方式实现。
另外,在各种实施例中,其它部件可通过以上讨论的部件通信地耦合到处理器1710。例如,加速度计1741、环境光传感器(ALS) 1742、罗盘1743和陀螺仪1744可通信地耦合到传感器集线器1740。热传感器1739、风扇1737、键盘1746和触摸垫1730可通信地耦合到EC 1735。扬声器1763、头戴式耳机1764和麦克风1765可通信地耦合到音频单元1764,音频单元1764进而可通信地耦合到DSP 1760。音频单元1764可包括例如音频编码解码器和D类放大器。SIM卡1757可通信地耦合到WWAN单元1756。诸如WLAN单元1750和蓝牙单元1752以及WWAN单元1756的部件可被按照下一代形状因数(NGFF)实现。
本公开的实施例涉及用于整理和退出存储指令的指令和逻辑。在一个实施例中,可从无序缓冲器(诸如,存储缓冲器)执行整理和退出。可结合处理器、虚拟处理器、封装、计算机***或其它处理设备执行所述指令和逻辑。在一个实施例中,这种处理设备可包括无序处理器。在另一实施例中,这种处理设备可包括多股无序处理器。图18图示根据本公开的实施例的用于退出和整理存储指令的示例性***1800。虽然某些元件可在图18中被示出为执行描述的动作,但***1800的任何合适的部分可执行本文中描述的功能或动作。
***1800可包括具有用于并行地执行多个股的任何合适的实体的多股无序处理器1808。线程的指令可被按照股分组。在一个实施例中,多股无序处理器1808可相对于其它股的指令执行每个股的指令,从而不按程序次序获取、发出和执行指令。可不按程序次序提交或退出除存储器和可中断指令之外的所有指令。然而,在一个实施例中,相对地或作为整体,可按顺序提交或退出存储器和可中断指令。这种按顺序提交和退出可以是可能的数据相关性错误或差错的结果。按顺序执行可包括根据顺序PO值的执行。无序执行可包括不必遵循顺序PO值的执行。***1800可图示这种多股无序处理器1808的元件,其可包括任何处理器核、逻辑处理器、处理器或者其它处理实体或元件(诸如,图1-17中图示的那些处理实体或元件)。
***1800可包括用于处理指令流1802的发出级1560。指令流1802可包括任何合适的数量和种类的股1804。每个股1804可包括按照PO排序的一系列指令,所述一系列指令是彼此相关的数据。另外,每个股1804可通过例如分叉或循环操作与其它股相关。给定股内的指令可被相对于彼此按顺序执行。如上所述,PO可包括用于对指令进行排序的指令的唯一编号以确保代码的正确执行语义。股可由发出级1560、二进制翻译器或任何其它合适的机构指定。
***1800可将PO值分派给指令的子集。PO值可被分派给其次序必须在已执行无序处理和执行之后被重新创建的那些指令。这种指令可包括例如存储器指令或可中断指令。存储器指令可包括读或写存储器、高速缓存或寄存器的那些指令,诸如load和存储。可中断指令可包括可以能够引起中断的那些指令。
处理器1808还可包括用于将指令分派给处理资源以便执行的分配级1814。另外,分配级1814可对在执行中使用的资源进行重新命名,因为这种重新命名可以能够实现级1804的并行执行,其中来自不同级1804的指令将要访问同一存储器或寄存器,但事实上彼此数据独立。另外,***1800可包括用于处理已经执行的指令的退出和提交的写回级1570。
在一个实施例中,***1800可包括已执行指令指针(EIP) 1806。已执行指令指针1580可存储识别还未执行的指令流1802的最早程序次序PO的值。在另一实施例中,已执行指令指针1580可存储股1804之中具有最早PO的个体股1804的PO。因为股可被彼此并行地以及彼此无序地执行,所以股1804中的一个可包括远低于股1804中的另一个的PO。例如,如果股包括通常具有较低PO的指令或者股未执行它的指令中的许多指令,则这种结果可发生。
当指令被执行时,它们可被写到写回级1570中的一个或多个缓冲器以用于退出和提交。在一个实施例中,写回级1570可包括用于保存存储指令直至它们被提交的存储缓冲器1810。当存储指令被执行并且写到存储缓冲器1810时,可按照执行它们的次序整理它们。因此,存储指令可能不被根据PO排序。这被示出在图18的例子中。存储缓冲器1810的底部条目可包括最早条目(根据存储缓冲器1810中的持续时间),并且存储缓冲器1810的顶部条目可以是存储缓冲器1810的最新条目。存储缓冲器1810内的条目的次序不必与这种条目的PO具有任何关系。
另外,关于在指令为了无序执行而被重新排序之前的PO,指令可以是按顺序的。通过将指令划分成不同股1804并且无序地以及并行地执行股1804,可做出重新排序。因此,来自各种股1804的指令的执行可导致无序的指令的执行。因此,当指令被执行并且存储在存储缓冲器1810中时,它们可看起来无序。
在存储器指令已被执行之后, 它们可能需要按顺序退出或提交。指定所获得的值用于处理器1808的架构状态(诸如,实际寄存器和***存储器)可能要求:对于写入的值,不可能存在随后的数据相关性错误。否则,可能发生存储器一致性模型、控制相关性、名称和数据相关性的违反或异常。
另外,即使当按顺序时,指令也可能不是连续的。例如,看起来连续的指令可能不具有连续地编号的PO值。顺序指令之间的PO值的空隙可能是由于例如针对指令的PO值的静态分派所导致的。指令可实际上实现动态分支,所述动态分支可能无法在PO值的静态分派时预测。在程序的指令流将如何进行方面,指令的编译器可能不具有可见性。未采用的路径可能不被执行,并且PO值的空隙可存在于实际上正被执行的指令中。另外,利用静态地未知的数量的迭代,可能发生循环。
因此,为了退出存储缓冲器1810的元素,它的内容必须被分析以使得退出可按顺序发生。即使在执行继续进行,指令无序地到达并且PO值不连续的同时,也可做出这种按顺序退出。处理器1808可包括搜索模块1816以识别如何按顺序退出存储缓冲器1810的元素。在一个实施例中,搜索模块1816可识别搜索模块1816可评估存储缓冲器1810中的元素的PO值的范围。在另一实施例中,搜索模块1816可识别这种范围,从而存储缓冲器1810的候选元素不请求引起数据相关性错误。在又一实施例中,搜索模块1816可整理候选元素并且对它们进行排序以用于根据PO的正确退出。
当存储缓冲器1810中的存储指令已执行并且能够被提交时,它可被称为高级存储。高级存储可被写到存储要求队列(SRQ) 1812,其可由先入先出数据结构实现。在一个实施例中,高级存储可被分类为包括小于EIP 1806的RPO。通过要求这一点,可确保SRQ 1812具有存储缓冲器1810中具有较低RPO的所有存储。在另一实施例中,为了将存储指定为高级存储,具有较低RPO的所有存储也可被指定为高级存储。这种指定可确保用于存储的退出的正确序列。在又一实施例中,高级存储可被分类为具有它的成功地翻译的线性地址和可用于执行存储的数据。通过要求这一点,高级存储可避免数据相关性问题。
在一个实施例中,搜索模块1816还可在搜索用于退出的存储缓冲器1810中的存储指令时受到存储缓冲器1810的大小的约束。具体地讲,搜索模块1816可受到存储缓冲器1810的读端口的数量(指定为N)的约束。读端口的数量限制可被并行地写到SRQ 1812的存储指令的数量。
此外,在一些实施例中,存储缓冲器1810的一部分可能已经被提交,并且因此,不需要由搜索模块1816进行整理。存储提交指针(SCP)可指定上一个提交的存储指令的PO。
在一个实施例中,搜索缓冲器1816可在存储缓冲器1810中搜索已执行但未提交的存储指令。具体地讲,搜索缓冲器1816可搜索已执行但未提交的适合提交的存储指令。这种存储指令可包括具有小于存储在EIP 1806中的PO值的RPO的那些存储指令。另外,这种存储指令可包括具有翻译的线性地址和可用于该指令的数据的那些存储指令。另外,可按照关于RPO的顺序次序执行搜索,从而仅当所有以前的存储也是高级存储时,存储能够被找到为高级存储。另外,搜索缓冲器1816可搜索用于优化或增加读取值以及将它们写到SRQ 1812的效率的指令。这种搜索因此可包括寻找由N(用于存储缓冲器1810的读端口的数量)限制的存储的数量。一旦这种N或更少的候选存储已被找到,搜索模块1816可对它们进行整理并且将它们写到SRQ 1812以用于提交。
图19图示根据本公开的实施例的对搜索模块1816的操作的约束。存储缓冲器1810可包括从最早到最晚的具有PO [6, 1, 16, 7, 5, 8, 11, 8]的未提交的元素。EIP 1806可指示PO值十二。另外,SCP 1808可指示PO值二。另外,用于存储缓冲器1810的读端口的数量可以是四。另外,假设图19的例子中示出的所有元素在其它方面适合提交,因为存储具有已被以线性方式翻译的地址并且已完成执行。
仅搜索RPO<EIP,搜索模块1816可基于候选的PO编号小于EIP 1806的PO值的事实确定在存储缓冲器1810中存在七个高级存储候选。然而,七个候选大于用于存储缓冲器1810的读端口的数量。
图20图示根据本公开的实施例的用于解决在图19中图示的方案中遇到的问题的搜索模块1816的示例性操作。可按照与如图19中所示的方式相同的方式建立存储缓冲器1910。EIP 1806仍可具有值十二,存储缓冲器1810可具有四个读端口,并且SCP 1808仍可具有值二。
搜索模块1816可包括可调整搜索指针,所述可调整搜索指针可用作针对被搜索的PO值的可变上限。如果以其他方式找到的结果的数量太大或太小,则可调整搜索指针。替代于搜索具有小于EIP 1806的PO值的PO值的存储,在一个实施例中,搜索指针可被定义为总是小于或等于EIP 1806的PO值。在另一实施例中,搜索指针可被定义为总是小于EIP 1806的PO值。在各种实施例中,基于搜索存储缓冲器1810中的候选存储的前一尝试,搜索指针可被重新定义。
EIP 1806可具有这样的效果:确保具有低于EIP的PO值的所有存储指令已经被考虑退出或已被退出。通过选择小于EIP 1806的搜索指针,搜索模块1816可确保不存在具有大于不存在于存储缓冲器1810中的EIP 1806的PO值的存储指令。这种存储可包括由于无序执行而还未被获取或者可能仍然等待被分派的存储。存储指针可确保:这种未准备好的指令不被考虑,并且因此,将不会破坏存储的次序。
另外,搜索模块1816可使用SCP 1808作为针对搜索的PO范围的下限。例如,搜索模块1816可确定初始搜索指针要具有PO值十。在第一迭代中,搜索模块1816可确定存储缓冲器1810的多少个条目包括SCP 1808和搜索指针之间的PO值。在存储缓冲器1810中可存在五个这种条目,假设每个条目以其它方式准备好提交。五个这种条目大于存储缓冲器1810上的四个读端口。因此,如果针对这五个条目执行提交,则提交可能是低效的。
SCP 1808可被视为跟踪已经提交的所有存储的PO,并且因此,大于所有提交的存储的PO。最初,搜索指针可被设置为比当前SCP 1808大经验增量值的值。
接下来,搜索模块1816可重新计算搜索指针以产生更小的PO范围从而更好地匹配存储缓冲器1810的读端口的数量。例如,搜索指针可被设置为九。在搜索的下一个迭代中,搜索模块1816可确定存储缓冲器1810的四个条目具有SCP 1808和搜索指针之间的PO值。该四个条目可因此被排序并且写到SRQ 1812。
图21A、21B和21C图示根据本公开的实施例的搜索模块1816的示例性操作。在图21A中,在(1)处,搜索模块1816可预测用于搜索指针的值。在一个实施例中,搜索指针可具有SCP 1808加偏移或增量的值。在第一迭代中,增量可具有初始值一或任何其它可接受的默认值。在各种实施例中,搜索指针可被保持为小于EIP 1806并且大于SCP 1808。
在(2)处,存储缓冲器1810的搜索可由搜索模块1816执行。该搜索可被以任何合适的方式执行。在一个实施例中,可作为CAM搜索执行该搜索。该搜索可将要确定存储缓冲器1810的多少个元素小于搜索指针。在另一实施例中,该搜索还可确定这种元素是否大于SCP 1808。在又一实施例中,该搜索可确定存储缓冲器1810的元素是否以其它方式准备好提交。这种条件可包括给定存储的线性地址被翻译并且必要的数据可用。
在(3)处,该搜索的结果可被返回。如果对提交的检查还未被执行,则在一个实施例中,它们可在从存储缓冲器1810返回结果时被执行。
在(4)处,搜索模块1816可确定存储缓冲器1810的候选存储的数量是否超过存储缓冲器1810的读端口的数量。如果这样的话,则可利用新预测的搜索指针重复该搜索,如图21B中所示。如果存储缓冲器1810的候选存储的数量在存储缓冲器1810的读端口的数量内,则可执行图21C的操作。
在图21B中,在(1)处,可预测搜索指针。搜索模块1816可再一次从SCP 1808预测增量或偏移。在一个实施例中,预测的增量可基于从前一搜索找到的结果的数量。在另一实施例中,预测的增量可基于存储缓冲器1810的读端口的数量N。
在(2)处,搜索模块1816可使用更新的搜索指针对存储缓冲器1810执行CAM搜索。在(3)处,结果可被返回,并且在(4)处,可确定存储缓冲器1810的多少个存储满足提交条件。如果与搜索匹配的存储缓冲器1810的存储的数量超过存储缓冲器1810的读端口的数量,则可重复图21B的操作。否则,搜索模块1816可执行图21C的操作。
在图21C中,在(1)处,搜索模块1816可将N个或更少的高级存储引导至整理网络2102。整理网络2102可根据PO值在硬件中对高级存储进行整理。在(2)处,整理网络2102可将已整理的高级存储引导至SRQ 1812。在一个实施例中,仅高级存储的存储缓冲器标识符可被写到SRQ 1812。高级存储可被提交。
图22是根据本公开的实施例的搜索模块预测或设置搜索指针的示例性操作的图示。在一个实施例中,搜索模块1816可利用EIP 1806的PO值设置搜索指针。在另一实施例中,搜索模块1816可利用SCP 1808的PO值设置搜索指针。在又一实施例中,搜索模块1816可利用在前一搜索中找到的存储操作的数量设置搜索指针。这种找到的存储操作的数量可被指定为M。如果以前未做出搜索,则M可被设置为零。在仍又一实施例中,搜索模块1816可利用存储缓冲器1810的读端口的数量(其可被指定为N)设置搜索指针。
搜索模块1816可保持这样的约束:搜索指针要小于EIP 1806并且大于SCP 1808。在一些实施例中,如果EIP 1806和SCP 1808分别小于两个值,则搜索指针可被设置为EIP 1806。
在一个实施例中,搜索模块1816可将搜索指针设置为EIP 1806和SCP 1808中的较小者加计算的增量值。最初,如果未执行以前的搜索,则所述增量值可被设置为默认值。例如,所述增量值可最初被设置为一。
在另一实施例中,搜索模块1816可基于M(在前一搜索中找到的存储的数量)设置增量值。因此,搜索模块1816可迭代地调整增量,直至从存储缓冲器1810选择更高效的数量的存储。在另一实施例中,搜索模块1816可基于M和N(可用于存储缓冲器1810的读端口的数量)设置增量值。
在一个实施例中,可利用足以执行数学计算的元件实现搜索模块1816。在这种实施例中,搜索模块1816可使用增量计算模型2202。增量计算模型2202可指定:目前的增量将要是以前的增量乘以M并且除以N。小数结果可被上舍入或下舍入为整数。然而,增量计算模型2202的使用可能需要乘法和除法元件。
在另一实施例中,可利用用于确定增量的移位器和加法器实现搜索模块1816。这种实施例可放弃对乘法和除法元件的需求。例如,搜索模块1816可使用启发式模型2204确定增量值。启发式模型2204可指定:以前的增量值要被移位或按位增加。例如,如果M位于0-1的范围中,则以前的增量值可被左移两位,从而导致增量增加到四倍。如果M位于二的范围中,则以前的增量值可被左移一位,从而导致增量增加到两倍。如果M位于3-4的范围中,则可保持以前的增量值。如果M位于5-8的范围中,则以前的增量值可被右移一位,从而导致增量减小到二分之一。如果M位于9-16的范围中,则以前的增量值可被右移两位,从而导致增量减小到四分之一。如果M位于17-32的范围中,则以前的增量值可被右移三位,从而导致增量减小到八分之一。如果M位于33-64的范围中,则以前的增量值可被右移四位,从而导致增量减小到十六分之一。
在启发式模型2204中指定的参数可被根据经验确定,或者可基于存储缓冲器1810的大小(具有六十四个条目的示例性大小)和存储缓冲器1810上的读端口的数量(具有四个端口的示例性大小)。其它范围可被用于其它存储缓冲器大小。搜索模块1816可因此响应于M和N之间的差异成比例地改变增量值。
从存储缓冲器1810找到满足所述条件的一组存储所需的由搜索模块1816进行的搜索迭代的数量可影响性能。如果存储缓冲器1810中的匹配的存储的数量远大于N,则可能需要较大数量的迭代。另外,产生小于N的高级存储的第一迭代可能无法利用存储缓冲器1810的所有读端口。因此,在搜索的过程期间,可如以上所示调整增量值的预测。
如果指令被严格地按顺序获取,则可按顺序退出指令,并且因此,消除对搜索模块1816的需要。然而,这种方案可能需要在获取和执行指令时使用附属于指令的年龄。另外,这将会消除无序处理(其中无序地获取指令)的优点,从而产生增加的并行性。另外,不同股由处理器1808无序地获取。这与按顺序获取指令的任何要求冲突。
图23图示根据本公开的实施例的用于搜索存储并且对存储进行排序的方法2300的示例性实施例。在一个实施例中,可在多股无序处理器上执行方法2300。方法2300可在任何合适的点开始,并且可按照任何合适的次序执行。在一个实施例中,方法2300可在2305处开始。
在2305处,要执行的有序指令流可被划分为多个股。所述股可被彼此并行地执行。所述股可在给定股内具有数据相关性,但可被相对于彼此无序地执行。另外,在每个股内,指令可被按顺序执行。指令可包括用于排序的目的的PO指示。顺序地排序的指令可能未被根据PO连续地编号。空隙可存在于连续的指令之间的PO值中。
在2310处,可执行处理步骤。这种步骤可包括例如在处理器中获取、发出、分派或执行指令。可执行执行周期。
在2315处,当分配每个存储指令时,它可被写到具有N个读端口的存储缓冲器。存储缓冲器可包括存储指令,直至它们被执行、退出和提交。因为存储指令可被无序地获取和执行,所以它们可被无序地写到存储缓冲器,并且因此,存储缓冲器中的存储指令可能无法被根据PO排序。
在2320处,可确定EIP和SCP PO值。EIP值可对应于还未被分派执行的指令的所有股之中的最小PO值。SCP值可对应于最新的退出或提交的存储指令的PO值。
在2325处,可确定用于计算搜索参数的初始增量值。默认增量值可以是一。
在2330处,可确定作为用于搜索的上限的搜索指针。在一个实施例中,搜索指针可被选择为EIP和与增量值相加的SCP之间的最小值。
在2335处,可针对存储缓冲器搜索具有小于搜索指针并且大于SCP的PO的所有元素。在2340处,结果可被评估以确定存储是否满足用于提交的条件。这种准则可包括例如它们的线性地址是否已被翻译以及数据是否可用于它们的操作。在2345处,匹配的结果可被描述为M个不同的存储指令。
在2350处,可确定M是否小于或等于N。如果M小于或等于N,并且如果所有的M个存储指令适合提交准则,则方法2300可前进至2360。如果M不小于或等于N,则方法2300可前进至2355。
在2355处,可调整增量值。在一个实施例中,可基于前一增量值和M调整增量值。在另一实施例中,可基于前一增量值、M和N调整增量值。可基于例如计算模型调整增量值,其中增量乘以M/N。在另一例子中,可使用启发式模型,从而增量值被移位,从而使增量按照关联的因子增加或减小。增量移位的量可基于确定的M的值的范围。在各种实施例中,根据前一搜索如何正确地或不好地与存储缓冲器的可用读端口的数量匹配,可因此调整增量。方法2300可返回到2330。
在2360处,可根据PO值在硬件中整理结果。在2365处,结果可被写到SRQ或以其它方式提交。在一个实施例中,存储缓冲器ID可被写到SRQ。在2370处,可确定方法2300是否将重复。如果方法2300将重复,则方法2300可返回到2305或任何其它合适的元件。如果方法2300将不会重复,则方法2300可结束。
可通过任何合适的准则来开始方法2300。另外,虽然方法2300描述特定元件的操作,但方法2300可由任何合适的组合或类型的元件执行。例如,方法2300可由图1-22中图示的元件或可操作用于实现方法2300的任何其它***实现。如此,用于方法2300的优选初始化点和包括方法2300的元件的次序可取决于选择的实现方式。在一些实施例中,一些元件可被可选地省略、重新组织、重复或组合。
本文中公开的机构的实施例可被实现于硬件、软件、固件或这种实现方案的组合。本公开的实施例可被实现为在可编程***上执行的计算机程序或程序代码,所述可编程***包括至少一个处理器、存储***(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
程序代码可被应用于输入指令以执行本文中描述的功能并且生成输出信息。所述输出信息可以以已知方式被应用于一个或多个输出装置。为了本申请的目的,处理***可包括具有处理器(诸如例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器)的任何***。
可按照高级程序或面向对象的编程语言实现程序代码以与处理***通信。根据需要,也可按照汇编或机器语言实现程序代码。事实上,本文中描述的机构不在范围上局限于任何特定编程语言。在任何情况下,所述语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性指令实现,所述机器可读介质代表处理器内的各种逻辑,当由机器读取所述代表性指令时,所述代表性指令使所述机器制造用于执行本文中描述的技术的逻辑。称为“IP核”的这种表示可被存储在有形的机器可读介质中并且被提供给各种顾客或制造设施以加载到实际制造逻辑或处理器的加工机器中。
这种机器可读存储介质可非限制性地包括由机器或装置制造或形成的物品的非暂态、有形布置,其包括存储介质,诸如硬盘、任何其它类型的盘,所述任何其它类型的盘包括:软盘、光盘、压缩盘只读存储器(CD-ROM)、压缩盘可重写(CD-RW)和磁光盘、半导体装置(诸如,只读存储器(ROM)、随机存取存储器(RAM)(诸如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM))、磁卡或光学卡或者适合存储电子指令的任何其它类型的介质。
因此,本公开的实施例还可包括非暂态、有形机器可读介质,其包含指令或包含设计数据(诸如,硬件描述语言(HDL)),所述设计数据定义本文中描述的结构、电路、设备、处理器和/或***特征。这种实施例也可被称为程序产品。
在一些情况下,指令转换器可被用于将指令从源指令集转换成目标指令集。例如,指令转换器可将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变换、仿真或以其它方式转换成将要由核处理的一个或多个其它指令。指令转换器可被实现于软件、硬件、固件或者其组合。指令转换器可位于处理器上、不位于处理器上或者部分位于处理器上并且部分不位于处理器上。
因此,公开了用于执行根据至少一个实施例的一个或多个指令的技术。尽管已在附图中描述和示出某些示例性实施例,但要理解,这种实施例仅说明而非限制其它实施例,并且这种实施例不限于示出和描述的特定构造和布置,因为在研究本公开时,本领域普通技术人员可想到各种其它变型。在诸如增长快速并且不容易预见进一步的进步的这种技术的技术的领域中,在不脱离本公开的原理或所附权利要求的范围的情况下,通过能够实现技术进步,公开的实施例在布置和细节方面可以如促进的那样容易地可修改。

Claims (20)

1.一种处理器,包括:
第一逻辑,用于无序地执行指令流,所述指令流被划分为多个股,每个股内的指令流和内容被按照程序次序(PO)排序;
第二逻辑,用于识别指令流中的最早的未分派的指令并且将它的关联的PO记录为已执行指令指针;
第三逻辑,用于识别指令流中的最近提交的存储指令并且将它的关联的PO记录为存储提交指针;
第四逻辑,用于确定具有小于执行指令指针的PO的搜索指针;
第五逻辑,用于识别存储缓冲器中的第一组存储指令,每个存储指令具有小于搜索指针的PO并且适合提交;
第六逻辑,用于评估第一组存储指令是否大于存储缓冲器的读端口的数量;和
第七逻辑,用于基于第一组存储指令大于存储缓冲器的读端口的数量的评估调整搜索指针。
2.如权利要求1所述的处理器,还包括:
第八逻辑,用于识别第二组存储指令,每个存储指令具有小于在第七逻辑调整搜索指针之后的搜索指针的PO;
第九逻辑,用于评估第二组存储指令是否大于存储缓冲器的读端口的数量;和
第十逻辑,用于基于第二组存储指令在大小方面小于或等于存储缓冲器的读端口的数量的评估提交第二组存储指令。
3.如权利要求2所述的处理器,还包括:第十一逻辑,用于在第二组存储指令被提交之前根据PO对第二组存储指令进行整理。
4.如权利要求2所述的处理器,还包括:第十一逻辑,用于将第二组存储指令中的每个存储指令的存储缓冲器标识符写到存储退出队列以提交第二组存储指令。
5.如权利要求1所述的处理器,还包括:第八逻辑,用于基于第一组存储指令的大小调整搜索指针。
6.如权利要求1所述的处理器,还包括:第八逻辑,用于基于第一组存储指令的大小和存储缓冲器的读端口的数量调整搜索指针。
7.如权利要求1所述的处理器,还包括:第八逻辑,用于基于对搜索指针的前一调整调整搜索指针。
8.一种方法,所述方法包括在处理器内:
无序地执行指令流,所述指令流被划分为多个股,每个股内的指令流和内容被按照程序次序(PO)排序;
识别指令流中的最早的未分派的指令并且将它的关联的PO记录为已执行指令指针;
识别指令流中的最近提交的存储指令并且将它的关联的PO记录为存储提交指针;
确定具有小于执行指令指针的PO的搜索指针;
识别存储缓冲器中的第一组存储指令,每个存储指令具有小于搜索指针的PO并且适合提交;
评估第一组存储指令是否大于存储缓冲器的读端口的数量;以及
基于第一组存储指令大于存储缓冲器的读端口的数量的评估调整搜索指针。
9.如权利要求8所述的方法,还包括:
识别第二组存储指令,每个存储指令具有小于在调整搜索指针之后的搜索指针的PO;
评估第二组存储指令是否大于存储缓冲器的读端口的数量;以及
基于第二组存储指令在大小方面小于或等于存储缓冲器的读端口的数量的评估提交第二组存储指令。
10.如权利要求9所述的方法,还包括:在第二组存储指令被提交之前根据PO排序第二组存储指令。
11.如权利要求8所述的方法,还包括:将第二组存储指令中的每个存储指令的存储缓冲器标识符写到存储退出队列以提交第二组存储指令。
12.如权利要求8所述的方法,还包括:基于第一组存储指令的大小调整搜索指针。
13.如权利要求8所述的方法,还包括:基于第一组存储指令的大小和存储缓冲器的读端口的数量调整搜索指针。
14.一种***,包括:
第一逻辑,用于无序地执行指令流,所述指令流被划分为多个股,每个股内的指令流和内容被按照程序次序(PO)排序;
第二逻辑,用于识别指令流中的最早的未分派的指令并且将它的关联的PO记录为已执行指令指针;
第三逻辑,用于识别指令流中的最近提交的存储指令并且将它的关联的PO记录为存储提交指针;
第四逻辑,用于确定具有小于执行指令指针的PO的搜索指针;
第五逻辑,用于识别存储缓冲器中的第一组存储指令,每个存储指令具有小于搜索指针的PO并且适合提交;
第六逻辑,用于评估第一组存储指令是否大于存储缓冲器的读端口的数量;和
第七逻辑,用于基于第一组存储指令大于存储缓冲器的读端口的数量的评估调整搜索指针。
15.如权利要求14所述的***,还包括:
第八逻辑,用于识别第二组存储指令,每个存储指令具有小于在第七逻辑调整搜索指针之后的搜索指针的PO;
第九逻辑,用于评估第二组存储指令是否大于存储缓冲器的读端口的数量;和
第十逻辑,用于基于第二组存储指令在大小方面小于或等于存储缓冲器的读端口的数量的评估提交第二组存储指令。
16.如权利要求15所述的***,还包括:第十一逻辑,用于在第二组存储指令被提交之前根据PO对第二组存储指令进行整理。
17.如权利要求15所述的***,还包括:第十一逻辑,用于将第二组存储指令中的每个存储指令的存储缓冲器标识符写到存储退出队列以提交第二组存储指令。
18.如权利要求14所述的***,还包括:第八逻辑,用于基于第一组存储指令的大小调整搜索指针。
19.如权利要求14所述的***,还包括:第八逻辑,用于基于第一组存储指令的大小和存储缓冲器的读端口的数量调整搜索指针。
20.如权利要求14所述的***,还包括:第八逻辑,用于基于对搜索指针的前一调整调整搜索指针。
CN201480076458.3A 2014-03-27 2014-03-27 用于整理和退出存储的处理器、方法、***和装置 Expired - Fee Related CN106030518B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2014/000621 WO2015145191A1 (en) 2014-03-27 2014-03-27 Instruction and logic for sorting and retiring stores

Publications (2)

Publication Number Publication Date
CN106030518A true CN106030518A (zh) 2016-10-12
CN106030518B CN106030518B (zh) 2019-03-26

Family

ID=51168300

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480076458.3A Expired - Fee Related CN106030518B (zh) 2014-03-27 2014-03-27 用于整理和退出存储的处理器、方法、***和装置

Country Status (7)

Country Link
US (1) US10514927B2 (zh)
EP (1) EP3123304B1 (zh)
JP (1) JP6306729B2 (zh)
KR (1) KR101923289B1 (zh)
CN (1) CN106030518B (zh)
RU (1) RU2663362C1 (zh)
WO (1) WO2015145191A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108241509A (zh) * 2016-12-27 2018-07-03 英特尔公司 用于高效地处理存储器排序缓冲器的分配的方法和装置
CN108304214A (zh) * 2017-12-13 2018-07-20 华为技术有限公司 一种立即数的完整性的校验方法及装置
CN113906383A (zh) * 2019-05-06 2022-01-07 美光科技公司 主机***和存储器子***之间的定时数据传送

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016193774A1 (en) * 2015-06-01 2016-12-08 Intel Corporation Multi-core processor for execution of strands of instructions grouped according to criticality
US9824012B2 (en) * 2015-09-24 2017-11-21 Qualcomm Incorporated Providing coherent merging of committed store queue entries in unordered store queues of block-based computer processors
US10831502B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Migration of partially completed instructions
US10831503B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Saving and restoring machine state between multiple executions of an instruction
US10831478B2 (en) * 2018-11-06 2020-11-10 International Business Machines Corporation Sort and merge instruction for a general-purpose processor
US11182167B2 (en) 2019-03-15 2021-11-23 International Business Machines Corporation Method to determine the oldest instruction in an instruction queue of a processor with multiple instruction threads
US11144324B2 (en) * 2019-09-27 2021-10-12 Advanced Micro Devices, Inc. Retire queue compression
RU2720901C1 (ru) * 2019-11-19 2020-05-14 Федеральное государственное бюджетное образовательное учреждение высшего образования "Тихоокеанский государственный университет" Способ помехозащищенной передачи телеметрических данных с адаптацией к состоянию канала связи
US11563570B2 (en) 2020-05-19 2023-01-24 Western Digital Technologies, Inc. Storage system and method for command execution ordering by security key

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664137A (en) * 1994-01-04 1997-09-02 Intel Corporation Method and apparatus for executing and dispatching store operations in a computer system
US5931957A (en) * 1997-03-31 1999-08-03 International Business Machines Corporation Support for out-of-order execution of loads and stores in a processor
US5966530A (en) * 1995-02-14 1999-10-12 Fujitsu, Ltd. Structure and method for instruction boundary machine state restoration
US20040003174A1 (en) * 2002-06-28 2004-01-01 Fujitsu Limited Storage controlling apparatus and data storing method
CN102171650A (zh) * 2008-11-24 2011-08-31 英特尔公司 用于将顺序程序分解为多个线程、执行所述线程和重构该顺序执行的***、方法和装置
US20120110280A1 (en) * 2010-11-01 2012-05-03 Bryant Christopher D Out-of-order load/store queue structure
WO2013188306A1 (en) * 2012-06-15 2013-12-19 Soft Machines, Inc. Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
US20130339711A1 (en) * 2012-06-18 2013-12-19 Intel Corporation Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW353732B (en) 1994-03-31 1999-03-01 Ibm Processing system and method of operation
WO1996025705A1 (en) 1995-02-14 1996-08-22 Fujitsu Limited Structure and method for high-performance speculative execution processor providing special features
US20040128476A1 (en) * 2002-12-26 2004-07-01 Robert Nuckolls Scheme to simplify instruction buffer logic supporting multiple strands
US20040199749A1 (en) * 2003-04-03 2004-10-07 Robert Golla Method and apparatus to limit register file read ports in an out-of-order, multi-stranded processor
US7480771B2 (en) * 2005-08-17 2009-01-20 Sun Microsystems, Inc. Conditional synchronization mechanisms allowing multiple store operations to become visible while a flagged memory location is owned and remains unchanged
US9946547B2 (en) * 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US7594100B2 (en) * 2006-09-29 2009-09-22 Sun Microsystems, Inc. Efficient store queue architecture
US20080082793A1 (en) 2006-09-29 2008-04-03 Mips Technologies, Inc. Detection and prevention of write-after-write hazards, and applications thereof
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US9529596B2 (en) 2011-07-01 2016-12-27 Intel Corporation Method and apparatus for scheduling instructions in a multi-strand out of order processor with instruction synchronization bits and scoreboard bits

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664137A (en) * 1994-01-04 1997-09-02 Intel Corporation Method and apparatus for executing and dispatching store operations in a computer system
US5966530A (en) * 1995-02-14 1999-10-12 Fujitsu, Ltd. Structure and method for instruction boundary machine state restoration
US5931957A (en) * 1997-03-31 1999-08-03 International Business Machines Corporation Support for out-of-order execution of loads and stores in a processor
US20040003174A1 (en) * 2002-06-28 2004-01-01 Fujitsu Limited Storage controlling apparatus and data storing method
CN102171650A (zh) * 2008-11-24 2011-08-31 英特尔公司 用于将顺序程序分解为多个线程、执行所述线程和重构该顺序执行的***、方法和装置
US20120110280A1 (en) * 2010-11-01 2012-05-03 Bryant Christopher D Out-of-order load/store queue structure
WO2013188306A1 (en) * 2012-06-15 2013-12-19 Soft Machines, Inc. Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
US20130339711A1 (en) * 2012-06-18 2013-12-19 Intel Corporation Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108241509A (zh) * 2016-12-27 2018-07-03 英特尔公司 用于高效地处理存储器排序缓冲器的分配的方法和装置
CN108241509B (zh) * 2016-12-27 2023-06-20 英特尔公司 用于高效地处理存储器排序缓冲器的分配的方法和装置
CN108304214A (zh) * 2017-12-13 2018-07-20 华为技术有限公司 一种立即数的完整性的校验方法及装置
CN108304214B (zh) * 2017-12-13 2022-05-13 超聚变数字技术有限公司 一种立即数的完整性的校验方法及装置
CN113906383A (zh) * 2019-05-06 2022-01-07 美光科技公司 主机***和存储器子***之间的定时数据传送
CN113906383B (zh) * 2019-05-06 2024-05-17 美光科技公司 主机***和存储器子***之间的定时数据传送

Also Published As

Publication number Publication date
JP2017509063A (ja) 2017-03-30
EP3123304B1 (en) 2019-08-14
US10514927B2 (en) 2019-12-24
EP3123304A1 (en) 2017-02-01
WO2015145191A1 (en) 2015-10-01
JP6306729B2 (ja) 2018-04-04
RU2663362C1 (ru) 2018-08-03
KR20160113236A (ko) 2016-09-28
CN106030518B (zh) 2019-03-26
KR101923289B1 (ko) 2018-11-28
US20160364239A1 (en) 2016-12-15

Similar Documents

Publication Publication Date Title
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN106030518B (zh) 用于整理和退出存储的处理器、方法、***和装置
TWI733710B (zh) 用於重複發生相鄰聚集的處理器、方法和單元
CN108369516B (zh) 用于加载-索引和预取-分散操作的指令和逻辑
US10055256B2 (en) Instruction and logic for scheduling instructions
US9990196B2 (en) Instruction, circuits, and logic for piecewise linear approximation
TW201729078A (zh) 用於以通道為基礎的跨步儲存操作之指令及邏輯
CN107003839B (zh) 用于移位和乘法器的指令执行方法、处理器和***
CN109791493B (zh) 用于乱序集群化解码中的负载平衡的***和方法
JP6415698B2 (ja) 計算処理用のベクトルフォーマットのための命令およびロジック
TW201723817A (zh) 用於取得多重向量元素操作之指令及邏輯
CN105745630A (zh) 用于在集群宽执行机器中的存储器访问的指令和逻辑
TW201729077A (zh) 用於設置多重向量元素操作之指令及邏輯
TWI723075B (zh) 用於向量置換的方法和處理器以及向量置換單元
TW201723815A (zh) 用於偶數與奇數向量取得操作之指令及邏輯
CN108351785A (zh) 用于部分减少操作的指令和逻辑
TWI738681B (zh) 處理器、用於檢測消抵效應之方法及消抵效應檢測單元
CN106030519A (zh) 用于从多个股分派指令的处理器逻辑和方法
US9851976B2 (en) Instruction and logic for a matrix scheduler
CN105723329A (zh) 用于识别多指令串无序处理器中的引退的指令的指令和逻辑
US10387797B2 (en) Instruction and logic for nearest neighbor unit
US20160378481A1 (en) Instruction and logic for encoded word instruction compression
CN108292214A (zh) 用于获得数据列的指令和逻辑

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190326