CN107408035B - 用于缕程间通信的装置和方法 - Google Patents

用于缕程间通信的装置和方法 Download PDF

Info

Publication number
CN107408035B
CN107408035B CN201580077451.8A CN201580077451A CN107408035B CN 107408035 B CN107408035 B CN 107408035B CN 201580077451 A CN201580077451 A CN 201580077451A CN 107408035 B CN107408035 B CN 107408035B
Authority
CN
China
Prior art keywords
instruction
instructions
processor
strand
register
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.)
Expired - Fee Related
Application number
CN201580077451.8A
Other languages
English (en)
Other versions
CN107408035A (zh
Inventor
A·笛托弗
D·玛司兰尼克夫
S·施希洛夫
V·布洛夫
P·玛特弗耶夫
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 CN107408035A publication Critical patent/CN107408035A/zh
Application granted granted Critical
Publication of CN107408035B publication Critical patent/CN107408035B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

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

处理器包括执行单元、前端和执行引擎。前端包括用于接收有序指令的不同缕程中的指令和用于将指令发送到执行引擎的逻辑。引擎包括逻辑,用于确定不同缕程中的指令引用映射到物理寄存器的相同的逻辑寄存器、指令相互引用、以及在定义逻辑寄存器的指令之后处理了引用指令中的另一个指令的一个指令。

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示出了根据本公开的实施例的用于实现经由共享寄存器堆的缕程间(inter-strand)通信的系统的框图;
图19示出了根据本公开的实施例的用于实现经由共享寄存器的缕程间通信的系统的示例操作;
图20示出了根据本公开的实施例的用于实现经由共享寄存器堆的缕程间通信的系统的更具体的框图;
图21A-21E示出了根据本公开的实施例的用于实现经由共享寄存器的缕程间通信的系统的进一步的示例操作;
图22是根据本公开的实施例的用于经由共享寄存器的缕程间通信的示例方法的图示。
具体实施方式
以下描述描述了用于处理器、虚拟处理器、封装、计算机系统或其他处理装置中的经由共享寄存器堆的缕程间(inter-strand)通信的装置和方法。此类处理装置可以包括乱序处理器。该装置和方法可以利用处理逻辑以及一个或多个指令。在以下描述中,陈述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等众多特定细节,以提供对本公开的实施例的更透彻理解。然而,本领域技术人员将领会,没有这些具体细节也可实施实施例。此外,没有详细示出一些公知的结构、电路等,以避免不必要地使本公开的多个实施例模糊。
虽然参照处理器来描述下列各实施例,但是,其他实施例也适用于其他类型的集成电路和逻辑器件。本公开的实施例的类似技术和教导可应用于可受益于更高的流水线吞吐量和改善的性能的其他类型的电路或半导体器件。本公开的多个实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并可以应用于其中可以执行对数据的操纵或管理的任何处理器和机器。另外,下列描述提供了示例,并且为了进行说明,所附附图示出各种示例。然而,这些示例不应该被理解为具有限制性意义,因为它们仅仅旨在提供本公开的多个实施例的示例,而并非对本公开的多个实施例的所有可能的实现方式进行穷举。
虽然下述的示例是在执行单元和逻辑电路情境下描述指令处理和分配,但本公开的其他实施例也可通过存储在机器可读有形介质上的数据和/或指令来完成,这些数据和/或指令在被机器执行时使得机器执行与本公开至少一个实施例相一致的功能。在一个实施例中,与本公开的多个实施例相关联的功能被具体化在机器可执行指令中。这些指令可用来使可以通过这些指令而被编程的通用处理器或专用处理器执行本公开的步骤。本公开的多个实施例也可以作为计算机程序产品或软件来提供,该计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,这些指令可被用来对计算机(或其他电子设备)进行编程以执行根据本发明的多个实施例的一个或多个操作。此外,本公开的多个实施例的多个步骤可由包含用于执行这些步骤的固定功能逻辑的专用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。
被用于对逻辑进行编程以执行本公开的诸个实施例的指令可被存储在系统的存储器(诸如,DRAM、高速缓存、闪存、或其他存储器)中。此外,指令可经由网络或通过其他计算机可读介质来分配。因此,机器可读介质可包括用于以机器(例如,计算机)可读的形式存储或发送信息的任何机制,但不限于:软盘、光盘、紧致盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或在互联网上经由电、光、声、或其他形式的传播信号(例如,载波、红外信号、数字信号等)发送信息中所使用的有形的机器可读存储器。因此,计算机可读介质可以包括适用于以机器(例如,计算机)可读形式存储或发送电子指令或信息的任何类型的有形的机器可读介质。
设计会经历多个阶段,从创建到仿真到制造。表示设计的数据可以用多种方式来表示该设计。首先,像仿真中可以有用的那样,可以使用硬件描述语言或另一功能性描述语言来表示硬件。此外,可以在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,设计在某个阶段可以达到表示硬件模型中各种设备的物理布置的数据的层级。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于制造集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在任何设计表示中,数据可以被存储在任何形式的机器可读介质中。存储器或者磁或光存储设备(诸如,盘)可以是存储经由光或电波发送的信息的机器可读介质,调制或以其他方式生成这些光或电波以发送这些信息。当发送指示或承载代码或设计的电载波达到实现该电信号的复制、缓冲或重新发送的程度时,可以产生新的副本。因此,通信供应商或网络供应商会在有形机器可读介质上至少临时地存储具体化本公开的诸个实施例的技术的物品(诸如,编码在载波中的信息)。
在现代处理器中,可以将多个不同的执行单元用于处理和执行各种代码和指令。一些指令可以更快地完成,而其他指令可能需要多个时钟周期来完成。指令的吞吐量越快,则处理器的总体性能越好。因此,使许多指令尽可能快地执行将会是有利的。然而,可能存在具有较大的复杂度并且在执行时间和处理器资源方面要求更多的某些指令,诸如浮点指令、加载/存储操作、数据移动等等。
因为更多的计算机系统被用于互联网、文本以及多媒体应用,所以已逐渐地引进了附加的处理器支持。在一个实施例中,指令集可与一个或多个计算机架构相关联,一个或多个计算机架构包括:数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构来实现,微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同微架构的诸个处理器可共享公共指令集的至少一部分。例如,
Figure BDA0001399107120000051
奔腾四(Pentium 4)处理器、
Figure BDA0001399107120000052
酷睿(CoreTM)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices,Inc.)的多个处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如,ARM控股有限公司、MIPS或它们的授权方或兼容方)设计的多个处理器可共享至少一部分公共指令集,但可包括不同的处理器设计。例如,ISA的相同寄存器架构在不同的微架构中可使用新的或公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、寄存器重命名表(RRT)、重排序缓冲器(ROB)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可包括:可由软件编程者寻址或不可由软件编程者寻址的一个或多个寄存器、寄存器架构、寄存器堆、或其他寄存器集合。
指令可以包括一个或多个指令格式。在一个实施例中,指令格式可指示多个字段(位的数量、位的位置等)以指定将要被执行的操作以及将要对其执行操作的操作数等。在进一步的实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可被定义为具有指令格式字段的不同的子集,和/或被定义为具有不同解释的给定字段。在一个实施例中,可以使用指令格式(并且,如果定义过,则以该指令格式的指令模板中的给定的一个)来表示指令,并且该指令指定或指示操作以及该操作将操作的操作数。
科学应用、金融应用、自动向量化通用应用、RMS(识别、挖掘和合成)应用以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(SIMD)指的是使得处理器对多个数据元素执行一个操作的指令类型。可将SIMD技术用于可将寄存器中的多个位逻辑地划分为多个固定尺寸或可变尺寸的数据元素(每个数据元素表示单独的值)的处理器中。例如,在一个实施例中,可将64位寄存器中的多个位组织为包含四个单独的16位数据元素的源操作数,每个数据元素表示单独的16位的值。该数据类型可被称为“紧缩”数据类型或“向量”数据类型,并且该数据类型的操作数可被称为紧缩数据操作数或向量操作数。在一个实施例中,紧缩数据项或向量可以是存储在单个寄存器中的紧缩数据元素的序列,并且紧缩数据操作数或向量操作数可以是SIMD指令(或“紧缩数据指令”或“向量指令”)的源操作数或目的地操作数。在一个实施例中,SIMD指令指定了将要对两个源向量操作数执行以生成具有相同或不同尺寸的、具有相同或不同数量的数据元素的、具有相同或不同数据元素顺序的目的地向量操作数(也被称为结果向量操作数)的单个向量操作。
诸如由
Figure BDA0001399107120000071
酷睿(CoreTM)处理器(具有包括x86、MMXTM、流SIMD扩展(SSE)、SSE2、SSE3、SSE4.1、SSE4.2指令的指令集)、ARM处理器(诸如,ARM
Figure BDA0001399107120000072
处理器族,具有包括向量浮点(VFP)和/或NEON指令的指令集)和MIPS处理器(诸如,中国科学院计算机技术研究所(ICT)开发的龙芯处理器族)所采用的SIMD技术之类的SIMD技术在应用性能上带来了极大的提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。
在一个实施例中,目的地寄存器/数据和源寄存器/数据可以是表示对应数据或操作的源和目的地的通用术语。在一些实施例中,它们可由寄存器、存储器或具有与所描绘的那些名称或功能不同的名称或功能的其他存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其他存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其他存储区域,等等。在其他实施例中,SRC和DEST存储区域中的两个或更多可对应于相同存储区域中的不同数据存储元素(例如,SIMD寄存器)。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回至两个源寄存器中作为目的地寄存器的那个寄存器,源寄存器中的一个也可以作为目的地寄存器。
图1A是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为可以包括用于执行指令的执行单元的处理器。根据本公开,诸如在本文中所描述的实施例中,系统100可以包括诸如处理器102之类的组件,该处理器102用于使用包括逻辑的执行单元以执行算法来处理数据。系统100可以代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的
Figure BDA0001399107120000073
III、
Figure BDA0001399107120000074
4、XeonTM
Figure BDA0001399107120000075
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。主处理器165的一个实施例包括解码器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队列(一个用于存储器操作,而另一个用于非存储器操作)中的一个uop队列中,为每一个uop分配条目。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划分为两个单独的寄存器堆,一个寄存器堆用于数据的低阶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。高速ALU 216和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也可以包括用于处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中可以存在将临时不正确的数据留给调度器的运行中的从属操作。重放机制跟踪并重新执行使用不正确的数据的指令。仅仅从属操作可能需要被重放,而可以允许独立操作完成。也可将处理器的一个实施例的调度器和重放机制设计成用于捕捉指令序列,以用于文本串比较操作。
术语“寄存器”可以是指可以被用作标识操作数的指令的部分的板上(on-board)处理器存储器位置。换句话说,寄存器可以是从处理器外部(从编程者的角度来看)可用的那些。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可以存储数据、提供数据以及执行本文中所描述的功能。本文所描述的寄存器可利用任何数量的不同技术,由处理器中的电路来实现,这些不同技术诸如,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储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可以被引退单元154所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用一个或多个重排序缓冲器和一个或多个引退寄存器堆、使用一个或多个未来文件(future file)、一个或多个历史缓冲器以及一个或多个引退寄存器堆;使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看可以是可见的。寄存器可能不限于任何已知特定类型的电路。各种不同类型的寄存器可适用,只要它们存储并提供本文中所述的数据。合适寄存器的示例包括但可能不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配的物理寄存器的组合,等等。引退单元454和物理寄存器堆单元458可以耦合至执行群集460。执行群集460可以包括一组一个或多个执行单元162和一组一个或多个存储器访问单元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))。
应当理解,核可以按各种方式来支持多线程操作(执行两个或更多个并行的操作或线程的集合)。可以由例如包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程提供逻辑核)或其组合来执行多线程操作支持。此类组合可以包括,例如,时分取出和解码以及此后诸如利用
Figure BDA0001399107120000211
超线程技术的同步多线程操作。
尽管可以在乱序执行的上下文中描述寄存器重命名,但是,应当理解,寄存器重命名可以用于有序架构中。虽然处理器的所示出的实施例也可以包括单独的指令和数据高速缓存单元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可以包括用于通信总线的接口1214以用于图形。在一个实施例中,接口1214可以由PCI快速(PCIe)实现。在进一步的实施例中,接口1214可以由PCI快速图形(PEG)实现。系统代理510可以包括直接媒体接口(DMI)516。DMI 516可以提供母板上的或计算机系统的其他部分上的不同桥之间的链路。系统代理510可以包括PCIe桥1218以用于将PCIe链路提供到计算机系统的其他元件。可以使用存储器控制器1220和一致性逻辑1222来实现PCIe桥1218。
核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可以包括分配模块1282。在一个实施例中,分配模块1282可以分配处理器500的资源或其他资源(诸如寄存器或缓冲器)以执行给定的指令。分配模块1282可以在调度器(诸如存储器调度器、快速调度器或浮点调度器)中进行分配。此类调度器在图5B中可以由资源调度器584表示。分配模块1282可以全部或部分地由结合图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以及存储单元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,其可包括一组一个或多个核902A-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。其他逻辑和电路(包括更多的CPU或GPU以及其他外围设备接口控制器)可被包括在图10的处理器中。
至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的机器可读介质上的表示性数据来实现,当机器读取该表示性数据时,该表示性数据使得该机器用于制造执行本文所述的技术的逻辑。可将此类表示(称为“IP核”)存储在有形的机器可读介质(“磁带”)上,并将其提供给各种顾客或生产设施,以便加载到实际制作该逻辑或处理器的制造机器中。例如,IP核(诸如由ARM控股公司所开发的CortexTM处理器族以及由中国科学院计算机技术研究所(ICT)所开发的龙芯IP核)可被授权或销售给各种客户或受许可方,诸如德州仪器、高通、苹果、或三星,并被实现在由这些客户或受许可方生产的处理器中。
图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中的类型的指令。然而,借助于仿真逻辑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芯片或模块。闪存控制器1445可以提供到存储器的访问或来自存储器的访问,存储器诸如闪存或RAM的其他实例。SPI主单元1450可以提供到通信模块的访问或来自通信模块的访问,通信模块诸如蓝牙模块1470、高速3G调制解调器1475、全球定位系统模块1480或实现诸如802.11的通信标准的无线模块1485。
图15是根据本公开的实施例的处理器的指令集架构1500的更具体的框图。指令架构1500可以实现指令集架构1400的一个或多个方面。此外,指令集架构1500可以示出用于在处理器内的指令的执行的模块和机制。
指令架构1500可以包括通信地耦合至一个或多个执行实体1565的存储器系统1540。此外,指令架构1500可以包括高速缓存和总线接口单元,诸如通信地耦合至执行实体1565和存储器系统1540的单元1510。在一个实施例中,可以由一级或多级执行来执行将指令加载到执行实体1564中。此类级可以包括,例如,指令预取级1530、双指令解码级1550、寄存器重命名级155、发布级1560、以及写回级1570。
在一个实施例中,存储器系统1540可以包括执行的指令指针1580。执行的指令指针1580可以存储标识一批指令中最旧的、未分派的指令的值。最旧的指令可以对应于最低程序顺序(PO)值。PO可以包括指令的唯一编号。此类指令可以是由多个缕程(strand)表示的线程内的单个指令。PO可以在对指令进行排序中使用以确保代码的正确执行语义。PO可以被机制重新构建,诸如评估编码在指令中的PO的增量,而不是绝对值。此类被重新构建的PO可以称为“RPO”。虽然可以在本文中引用PO,但是此类PO可以与RPO互换地使用。缕程可以包括相互数据依赖的指令序列。缕程可以通过例如编译器1806在编译时与更大的指令序列分开。执行缕程的硬件可以根据各种指令的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的处理需要存储信息。在一个实施例中,存储器系统1504可以包括加载存储单元1530以用于存储信息,诸如写入存储器或寄存器或从存储器或寄存器读回的缓冲器。在另一实施例中,存储器系统1504可以包括转换后备缓冲器(TLB)1545,其提供在物理地址与虚拟地址之间查找地址值。在又一实施例中,总线接口单元1520可以包括存储器管理单元(MMU)1544以用于促进对虚拟存储器的访问。在再一实施例中,存储器系统1504可以包括预取器1543以用于在实际需要执行指令之前从存储器请求这些指令以减少等待时间。
指令架构1500执行指令的操作可以通过不同级来实现。例如,通过使用单元1510,指令预取级1530可以通过预取器1543访问指令。可以将被检索的指令存储在指令高速缓存1532中。预取级1530可以为快速循环模式实现选项1531,其中执行形成足够小以装入给定高速缓存的循环的一系列指令。在一个实施例中,可以实现此类执行而无需访问来自例如指令高速缓存1532的附加指令。对预取哪些指令的确定可以由例如分支预测单元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。此类耦合可以通过任何合适种类的总线或接口完成,例如I2C总线、系统管理总线(SMBus)、低引脚数(LPC)总线、SPI、高清晰度音频(HDA)总线、串行先进技术附接(SATA)总线、USB总线(版本1、2、3)或通用异步接收机/发射机(UART)总线。
此类组件可以包括,例如,显示器1724、触摸屏1725、触板1730、近场通信(NFC)单元1745、传感器中枢1740、热传感器1746、快速芯片组(EC)1735、受信任平台模块(TPM)1738、BIOS/固件/闪存1722、DSP1760、诸如固态硬盘(SSD)或硬盘驱动器(HDD)的驱动器1720、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位系统(GPS)、诸如USB 3.0相机的相机1754、或以例如LPDDR3标准实现的低功率双数据率(LPDDR)存储器单元1715。这些组件可以各自以任何合适的方式来实现。
此外,在各实施例中,其他组件可以通过上文讨论的组件通信地耦合至处理器1710。例如,加速度计1741、环境光传感器(ALS)1742、罗盘1743以及陀螺仪1744可以通信地耦合至传感器中枢1740。热传感器1739、风扇1737、键盘1746以及触板1730可以通信地耦合至EC 1735。扬声器1763、头戴式耳机1764以及话筒1765可以通信地耦合至音频单元1764,音频单元可以进而通信地耦合至DSP 1760。音频单元1764可以包括,例如,音频编解码器和D类放大器。SIM卡1757可以通信地耦合至WWAN单元1756。诸如WLAN单元1750、蓝牙单元1752以及WWAN单元1756的组件可以以下一代形状因数(NGFF)实现。
图18示出了根据本公开的实施例的用于实现缕程间通信的系统1800的示例。在一个实施例中,可以利用共享寄存器堆执行此类缕程间通信。共享寄存器堆可以是物理寄存器堆。在另一实施例中,可以通过会被系统1800执行的指令中的特定指示或标注来促进此类缕程间通信。可以将标注添加到与原始指令序列分开的缕程中的代码,并且添加到会被协调的原始缕程中的代码。在进一步的实施例中,标注可以包括标记以注明给定缕程中的寄存器引用是到缕程之间共享的寄存器。通过参照此类标注的跟踪机制可以将两个缕程的执行同步。预留站条目可以由两个缕程中的标注(诸如GLOBDEF和SYNCREG指令)共享。此外,定义队列可以用于跟踪相应的GLOBDEF和SYNCREG指令的到达。可以利用预留站标识符和与GLOBDEF或SYNCREG中第一个到达的相关联的物理寄存器的标签来填充条目。条目可以用于将相同的预留站标识符和物理寄存器的标签分配到GLOBDEF或SYNCREG中第二个到达的。因此,两个指令可以共享相同的物理寄存器到逻辑寄存器。这可以通过后续指令促进通过此类物理寄存器在缕程之间共享数据。
系统1800可以乱序地取出、分派、执行和引退指令,诸如指令流1804中的那些指令。系统1800可以利用任何合适数量或种类的乱序处理器或处理实体。系统1800可以示出此类处理器的元件,其可包括任何处理器核、逻辑处理器、处理器或诸如图1-17中所示的那些的其他处理实体。
系统1800可以以任何合适的方式来实现以执行缕程间通信,同时执行指令流1804。系统1800可以包括通信地耦合至一个或多个执行单元1822和乱序执行引擎1824的前端1812。前端1812可以处理指令,使得它们可以由执行单元1822和乱序执行引擎1824执行。系统1800可以包括和所需数量一样多的执行单元1822和乱序执行引擎1824。前端1812可以部分地由例如前端201、前端单元430或前端570实现。乱序执行引擎1824可以部分地由例如乱序执行引擎203、执行引擎单元450或乱序引擎580实现。前端1812可以包括解码器1816以解码和解释来自指令流1804的指令,这些指令可以指示对指令操作数内所指示的对应的数据应当执行何种操作以及应用哪些数据。前端1812可以通过预留站1836将指令发送到执行单元。
系统1800可以在多个缕程中执行指令。系统1800可以在任何合适数量的缕程中执行指令。可以将单个指令序列分成可以在一个或多个核、执行单元或处理器上并行地执行的分开的多个指令序列或缕程。在一个实施例中,多个缕程可以存在于指令流1804中,因为它们会由处理器1802执行。前端1812可以在多个缕程之间切换,取出和解码来自各个缕程的指令。在一些情形中,处理器1802可以包括多个前端1812(诸如用于多个核),并且在此类情形中,多个前端可以各自处理给定的缕程。
乱序执行引擎1824可以包括任何合适数量或种类的元件。例如,乱序执行引擎1824可以包括调度器、分配器、引退单元、重排序缓冲器和寄存器堆。在一个实施例中,乱序执行引擎1824可以包括用于对指令中的逻辑寄存器进行重命名并且将它们分配到物理寄存器的机制。例如,乱序执行引擎1824可以包括重命名逻辑1826。重命名逻辑1826可以管理将逻辑寄存器分配到物理寄存器。此外,重命名逻辑1826可以管理经由共享寄存器堆的缕程间通信。在各实施例中,处理器1802可以包括核,核可以包括乱序执行引擎1824、执行单元1822和前端1812。
在各实施例中,乱序执行引擎1824可以包括指示对于逻辑寄存器的分配可用的物理寄存器的空闲列表、每个缕程的寄存器重命名表(RRT)或寄存器别名表(RAT)(诸如缕程0RRT 1828和缕程1RRT 1830)、以及预留站1836。预留站1836可以跟踪对指令的动态调度以用于寄存器重命名。可以发布来自指令流1804的指令并且指令指示预留站1836中的会用于访问指令执行的结果的条目。当操作数和输入是可用的时,指令准备好被执行。可以将指令发布到预留站1836,其可以缓冲该指令以及指令的操作数和输入。当所有操作数和输入是可用的时,指令的执行可以开始。
诸如上文描述的那些的寄存器重命名数据结构可以包括逻辑资源到物理资源的映射。资源可以包括寄存器、存储器位置或实现为存储器位置的寄存器。通过将逻辑资源映射到物理资源,这些资源可以促进乱序执行。在指令流1804内,可以作出对给定的逻辑资源(诸如寄存器)的重复引用。然而,对相同的逻辑资源的不同引用以及相同逻辑资源的不同操作可以不相互依赖。在此类情况中,可以乱序地、并行地或以任何其他非顺序方式执行对相同的逻辑资源的使用。为了允许对相同的逻辑资源的多个可能是同时的使用,可以实际上对不同的物理资源作出对指令流1804中的逻辑资源的不同使用。可以将单个逻辑资源到不同的物理资源的多个实例的映射存储在寄存器重命名数据结构中。如本文中所使用的,可以例如由可标识的寄存器名称描述逻辑资源,并且然后可以描述相关联的物理资源。例如,EAX寄存器的实例可以包括"EAX{10}"或"EAX{40}",其中对指令流1804内的EAX的某些引用可以被重定向到物理位置"10",并且对EAX的其他引用可以被重定向到物理位置"40"。
可以根据需要由例如分配器基于对乱序地处理指令流1804的即时需要来填充寄存器重命名数据结构。分配器可以全部或部分地由例如重命名/分配器单元452、分配级408、分配582、乱序引擎580、寄存器重命名级1555、发布级1560、发布级1560、执行引擎单元450或乱序引擎203实现。
此外,当不再需要寄存器重命名数据结构中的条目时,系统1800可以收回它们。系统1800可以包括引退单元以执行此类收回,全部或部分地由例如写回/存储器写入418、执行引擎单元450、引退单元454、写回级1570、写回级1680、乱序引擎580、或乱序引擎203实现。例如,在不会作出更多对"EAX{10}"的引用之后,对"EAX"与"{10}"之间的映射的使用可以是不必要的。
RAT可以以任何合适的方式实现,诸如由表、数组或其他合适的数据结构。RAT1828、1830可以实现寄存器堆的功能中的一些,诸如物理资源与逻辑资源之间的映射或重叠。在物理寄存器的相关联的指令被提交和引退之后,这些RAT可以跟踪需要被收回的物理寄存器。一旦指令已经被引退,可以将RRT 1832中所标识的资源与指令从RAT移除,并且然后在空闲列表中标识,从而可以将资源分配到其他虚拟资源。
在一个实施例中,乱序执行引擎1824可以包括定义队列(DQ)以用于跟踪缕程之间的通信。通信可以由指令流1804中的标志来指示,每个缕程对逻辑寄存器的某些操作会对映射到逻辑寄存器的相同的物理资源执行。对DQ 1832的管理可以由重命名逻辑1826执行。重命名逻辑1826可以由例如数字电路实现。如果指令流1804中的指令被标识为与另一个缕程中的指令相关联,则可以在DQ 1832中跟踪不同缕程中的这些指令之间的联系。DQ 1832可以以任何合适的方式实现,诸如由循环队列或其他合适的数据结构。
可以添加或以任何合适的方式实现指令流1804中的标注,注明缕程中的给定的指令用于与另一个缕程中的指令通信或协调。在一个实施例中,编译器1806可以将指令流1804修改为包括缕程之间的指令会被协调的标注。编译器1806可以实现在系统1800内、处理器1802内、或另一系统中。在处理器1802处接收指令之前或在由处理器1802处理期间可以执行此类修改。在另一实施例中,二进制转换器1814或其他处理机制可以将指令流1804修改为包括此类标注。可以将标注添加到编程代码、机器级指令、经解码的指令,或到会由系统1800执行的任何其他合适的形式的指令。将标注添加到指令流1804的结果可以是经修改的指令1810。当指令流1804可以被分成多个缕程时,经修改的指令1810可以是经修改的多缕程指令1810。这些指令中的一些(属于缕程中的任何一个)可以包括本文所述的标注。在各实施例中,结合对哪些指令会在各种缕程中执行的确定,可以将标注添加到指令流1804。
例如,编译器1806、二进制转换器1814或系统1800的另一合适部分可以确定指令流1804会被分成两个或更多个缕程的顺序指令以供由一个或多个执行单元1822执行。在一个实施例中,系统1800可以允许将依赖于相同的逻辑-物理资源映射指令置于分开的线程中以供执行。在另一实施例中,系统1800可以允许置于分开的缕程中以供执行的指令通信。此类通信可以包括对给定的逻辑-逻辑-物理资源对的使用的指示。
在一个实施例中,给定一个此类缕程中的对逻辑资源的定义,其中另一个缕程将使用所定义的逻辑资源,可以利用会置于原始缕程中的标注来修改指令流1804以注明其他缕程会使用相同的逻辑资源的定义。在另一实施例中,给定原始缕程中的对逻辑资源的定义,其中另一个缕程将使用所定义的逻辑资源,可以利用会置于另一个缕程中的标注来修改指令流1804以注明原始缕程会定义逻辑资源。标注可以以任何合适的方式来实现。例如,可以将新指令插入指令流以产生此类标志。在一个实施例中,这些新指令可以替代先前指令。
在图18的示例中,这些指令可以包括GLOBDEF和SYNCREG。GLOBDEF可以接受会在给定的缕程中被定义的逻辑资源作为参数。在一个实施例中,GLOBDEF置于产生寄存器值的缕程中。GLOBDEF可以替换会定义逻辑资源的其他指令。在一个实施例中,GLOBDEF可以执行被替换的指令的动作以定义与物理资源相关联的逻辑寄存器。在另一实施例中,GLOBDEF可以通知重命名逻辑1826,可以相对于逻辑寄存器的实例执行与其他缕程的通信。可以执行此类通信以同步对逻辑寄存器的使用,直到作出逻辑寄存器的另一定义。GLOBDEF可以置于原始的给定缕程内。SYNCREG可以接受会被GLOBDEF定义并且在另一个缕程内使用的逻辑资源作为参数。SYNCREG可以置于另一个缕程内,其中消耗寄存器的值。在一个实施例中,SYNCREG可以通知重命名逻辑1826,可以相对于逻辑寄存器的实例执行与其他缕程的通信。可以执行此类通信以同步对逻辑寄存器的使用,直到作出逻辑寄存器的另一定义。对SYNCREG的使用可以通知重命名逻辑1826:已经作出对逻辑寄存器的定义,可以协调对逻辑寄存器的执行,在原始线程上已经作出或会作出对逻辑寄存器的定义。在一个实施例中,可以协调缕程之间的执行,从而对于缕程之间的某些指令的相同的物理-逻辑资源映射作出各个缕程中的执行。
在其他实施例中,GLOBDEF和SYNCREG可以由标志、参数、位或现存指令的其他方面实现。例如,定义指令可以包括用于指定指令是否会被作为GLOBDEF来处理的标志。
可以将GLOBDEF和SYNCREG指令解码、分派并且然后执行。在执行之后,可以引退它们。
在一个实施例中,定义指令的实例在原始缕程中可以被GLOBDEF替换。在另一实施例中,在使用逻辑资源的指令的实例之前,可以将SYNCREG添加到另一个缕程。
图19示出了根据本公开的实施例的用于经由共享寄存器堆的缕程间通信的系统1800的示例操作。代码1902的原始片段可以包括指令序列,示出了指令序列中的四个指令。其他指令可以存在于这些所示出的指令之前、之间和之后。第一定义指令可以定义、产生或写入逻辑寄存器EAX的实例。对于此类写入,可以为逻辑寄存器EAX分配物理寄存器。定义指令可以包括,例如,到EAX寄存器的写操作或保存操作。定义指令随后可以是对所定义的逻辑寄存器EAX的实例的使用,其可以包括读取。然后,可以作出对逻辑寄存器EAX的后续定义,其中为逻辑寄存器EAX分配另一个物理寄存器,随后是对该第二定义的后续使用。对不同物理资源的定义到对EAX寄存器的不同使用可以允许并行地或乱序地执行使用。
可以将代码片段1902分开到多个缕程中以供并行执行。例如,代码片段1902可以产生缕程代码1904,其中已经将代码片段1902分成两个缕程以供处理器1802的一个或多个核执行。可以将缕程表示为缕程0和缕程1。缕程0可以用于执行定义指令,而缕程1可以用于执行使用指令。
可以对代码执行寄存器重命名。代码1906示出对缕程代码1904的正确寄存器重命名。EAX的第一定义指令产生对物理寄存器R10的分配。EAX的第二定义指令产生对物理寄存器R20的分配。如果第一使用指令(缕程1中)在第一定义(缕程0中)之后发生,则第一使用指令将具有正确的物理寄存器R10。如果第二使用指令(缕程1中)在第二定义(缕程0中)之后发生,则第二使用指令将具有正确的物理寄存器R20。然而,在没有缕程之间的协调的情况下,该示例可以已经幸运地简单地正确地执行了工作的缕程之间的时序,从而在寄存器重命名中不发生冲突。缕程0中的指令的顺序性质和缕程1中的指令的顺序性质不提供对缕程之间的正确执行的保证。
在另一示例中,诸如代码1908所示的示例可以示出作为缕程之间缺少协调的结果的不正确寄存器重命名。EAX的第一定义指令产生对缕程0中的物理寄存器R10的分配。缕程1中的对EAX的第一使用运用正确的物理寄存器R10。然而,如果缕程1中的对EAX的第二使用在缕程0中的对EAX的第二定义之前发生,则R10可能被不正确地使用,而非R20。
代码1910示出可以被系统1800分成多个缕程并且被标记以用于缕程间通信的顺序代码。代码1910中可以包括对EAX的定义和使用的四个组合。在第一组合中,对EAX的定义可以在缕程0中,而对EAX的使用可以在缕程1中。这两个指令会将相同的物理资源分配到逻辑寄存器EAX。该物理资源在执行时可以是R1,虽然这在代码被分成多个缕程时可能还不知道。在一个实施例中,可以为此类组合作出对指令流1804的标志,从而可以协调它们的执行,并且多个缕程可以通信。在第二组合中,对EAX的使用和定义两者都可以在缕程1内。因此,在一个实施例中,可能不对指令流1804作出用于此类组合的标志。类似地,在第三组合中,对EAX的使用和定义两者都可以在缕程0内。因此,在一个实施例中,可能不对指令流1804作出用于此类组合的标志。在第四组合中,对EAX的定义可以在缕程0中,而对EAX的使用可以在缕程1中。这两个指令会将相同的物理资源分配到逻辑寄存器EAX。该物理资源在执行时可以是R4,虽然这在代码被分成多个缕程时可能还不知道。在一个实施例中,可以对指令流1804作出用于此类组合的标志,从而可以协调它们的执行,并且多个缕程可以通信。
代码1912示出如何将代码1910分成两个缕程,以及可以如何修改代码1910以用于缕程间通信。在一个实施例中,在缕程0中的定义EAX的第一实例可以替换为GLOBDEF以定义EAX并且表示其映射会与另一个缕程共享。在另一实施例中,在使用EAX的第一实例之前,可以在缕程1中插入SYNCREG。这可以表示EAX的映射会与缕程0的对应的片段中的映射相同。映射可以是将EAX分配到物理资源R1。重命名逻辑1826可以标识缕程中的对GLOBDEF和SYNCREG的使用,并且在一个实施例中,停止缕程1中的对EAX的使用的执行,直到在缕程0中作出将EAX分配到R1。
如所计划的,定义和使用的第二和第三组合可以置于缕程0和缕程1内。
在一个实施例中,在缕程0中的定义EAX的第四实例可以替换为GLOBDEF以定义EAX并且表示其映射会与另一个缕程共享。在另一实施例中,在使用EAX的第四实例之前,可以在缕程1中插入SYNCREG。这可以表示EAX的映射会与缕程0的对应的片段中的映射相同。映射可以是将EAX分配到物理资源R4。重命名逻辑1826可以标识缕程中的对GLOBDEF和SYNCREG的使用,并且在一个实施例中,停止缕程1中的对EAX的使用的执行,直到在缕程0中作出将EAX分配到R4。
重命名逻辑1826对执行的协调可以以任何合适的方式执行。图20示出了根据本公开的实施例的用于实现经由共享寄存器堆的缕程间通信的系统的更具体的框图。图20示出了重命名逻辑1826实现对执行的协调的示例实施例。
例如,当SYNCREG或GLOBDEF指令被执行时,相关联的物理资源的标志可以置于DQ1832内。在一个实施例中,在SYNCREG或GLOBDEF的第一实例之后可以将物理资源分配到逻辑资源并且进入DQ 1832。在图20的示例中,SYNCREG-GLOBDEF对可能已经作出了逻辑资源到R1的第一映射,并且第二SYNCREG-GLOBDEF对可能已经作出了逻辑资源到R4的第二映射。
DQ 1832可以包括跟踪机制以用于指示给定的缕程是否已经遇到了SYNCREG-GLOBDEF对中的一个。在一个实施例中,可以由DQ 1832中的指针执行对哪个缕程已经先遇到了连接对中的SYNCREG或GLOBDEF的跟踪。DQ 1832可以包括用于每个相应缕程的指针,诸如缕程0指针2002和缕程1指针2004。在缕程0或缕程1处接收SYNCREG或GLOBDEF之后,如果有必要的话,相关联的物理资源可以进入对应的指针指向的DQ 1832中的条目,并且相关联的缕程指针将增加。在另一个缕程处接收SYNCREG或GLOBDEF中的另一个之后,DQ 1832可能已经包括所映射的物理资源,并且因此相应的缕程指针将递增。因此,通过使用缕程指针,DQ 1832可以跟踪基于过去的SYNCREG或GLOBDEF指令是预期SYNCREG还是GLOBDEF。此外,在一个实施例中,如果预期的GLOBDEF还未到达,则跟随先前所接收的SYNCREG的使用逻辑寄存器的指令的执行将被停止,直到预期的GLOBDEF到达。在这样的点处,可以安全地执行跟随先前所接收的SYNCREG的使用逻辑寄存器的指令。
缕程0RRT 1828和缕程1RRT 1830的内容可以取决于当前GLOBDEF或SYNCREG指令而变化。逻辑寄存器EAX的映射可以到物理寄存器值,如通过所接收的GLOBDEF或SYNCREG指令所确定的,如下文进一步详细说明。
图21A-21E示出了根据本公开的实施例的用于实现经由共享寄存器的缕程间通信的系统的进一步的示例操作。
在图21A处,可以从缕程0接收用于EAX寄存器的GLOBDEF指令以供执行。缕程0指针2002和缕程1指针2004可以指向DQ 1832中的相同的值,其在第一指令到达之前可以有效地为空。在一个实施例中,可以将传送EAX寄存器的指令的条目添加到DQ 1832。条目的值可以基于所分配的物理资源。例如,在寄存器空闲列表(RFL)2006中的位置'loc1'中的R1可以是可用的并且被分配到EAX的该实例。可以将物理资源名称及其预留站标识符(RSID)写入DQ1832。此外,缕程0指针2002可以增加。在一个实施例中,这可以指示系统1800正在等待对应于GLOBDEF的SYNCREG。可以利用逻辑-物理映射来更新缕程0RRT 1830。预留站1836中的条目可以被输入。
在一个实施例中,因为GLOBDEF已经正确地启动了EAX与R1的关联,所以可以由后续执行使用该关联,不论是在缕程0中还是缕程1中。可以由物理资源映射准备好使用的预留站1836中的标志启用关联和安全执行。否则,物理资源在预留站1836中可能被标识为未准备好使用,并且可能停止使用物理资源的后续执行。
在图21B处,可能在缕程1处接收对应的SYNCREG。缕程1指针2004可以递增。在一个实施例中,当指针之间的值是相同的时,可以弹出存储在DQ 1832中的值并且存储在缕程1RRT 1830中。
在图21C处,可以以其他正常方式接收和执行与SYNCREG或GLOBDEF不相关联的其他指令,除了可以对预留站1836检查物理寄存器的准备就绪。当例如要对预留站1836中标识为未准备好执行的物理寄存器进行执行时,此类状况可能存在。否则,可以获得必要的物理寄存器,并且RRT可以被正常地填充。
在图21D处,可以接收用于EAX的SYNCREG。可能还未接收对应的GLOBDEF。在没有来自系统1800的干预的情况下,该情形可能以其他方式导致代码1908所示的问题,如上文所讨论的。然而,当系统1800提供缕程间通信时,可以避免此类问题。
缕程1指针2004可以递增。这可以指示所接收的SYNCREG已经在对应的GLOBDEF之前到达。在一个实施例中,可以获得RFL 2006中的空闲物理寄存器(诸如R4)的名称及其RSID并且插入DQ 1832。可以将物理寄存器的信息提供到缕程1RRT 1830。在一个实施例中,该信息可以进入预留站1836。在进一步的实施例中,要被后续执行使用的物理寄存器的准备就绪可以设置为“未准备好”。可以停止对物理寄存器的后续尝试使用(诸如在缕程1中的其他指令中),直到接收对应的GLOBDEF。
在图21E处,可以接收对应的GLOBDEF。缕程0指针2002可以增加。因为该指针在缕程1的指针的后面,因此重命名逻辑1826可以确定GLOBDEF对应于先前所接收的SYNCREG。当SYNCREG被重命名时,分配了用于GLOBDEF的预留站1836中的条目和用于逻辑EAX寄存器的物理寄存器,并且该分配的结果位于由缕程0指针2002指向的DQ 1832条目中的条目中。可以将来自DQ 1832的值弹出到缕程0RRT 1828。取决于GLOBDEF源操作数的状态,预留站1836中的由SYNCREG分配的用于GLOBDEF的条目及其通过DQ 1832从SYNCREG传递到了GLOBDEF的RSID数字可以将其状态从未准备好改变为准备好
图22是根据本公开的实施例的用于经由共享寄存器的缕程间通信的示例方法2200的图示。方法2200可以在任何合适的点处开始,并且可以以任何合适的顺序执行。在一个实施例中,方法2200可以在2005处开始。在各实施例中,可以在乱序处理器的执行期间执行方法2200。
在2205处,可以将会被执行的代码分成会被彼此并行地执行的多个缕程。在一个实施例中,可以标识驻留在会共享相同的到逻辑寄存器的物理资源映射的不同缕程上的代码。这些缕程具有相同的物理资源映射可能是必要的,以将由一个缕程中的指令产生的数据传送到另一个缕程中的指令。为了实现此类通信,两个缕程可能需要共享到相同的物理资源的寄存器映射。在另一个实施例中,对于将共享相同物理资源的给定的指令集,用于定义此类寄存器的指令可以替换为或附加有用于定义寄存器和通知指令集的缕程间通信的开始的指令。可以将该指令标注为GLOBDEF并且可以置于其中出现了产生寄存器值的指令的缕程中。在又一实施例中,可以在使用相同的所分配的物理寄存器的第一执行之前将指令插入代码的其他缕程中。可以将该指令标注为SYNCREG。可以重复并且与方法2200的其他步骤并行地执行2205。
在2210处,可以将用于执行的缕程分派到一个或多个核以供执行。可以重复并且与方法2200的其他步骤并行地执行2210。可以为每个缕程重复2215-2270,只要指令会被执行。此外,可以与用于其他缕程的2215-2270的其他实例并行地为每个缕程重复2215-2270。
在2215处,在一个实施例中的给定缕程处,可以确定要执行的指令是GLOBDEF指令还是SYNCREG指令。如果否,如果指令会使用与所停止的执行(诸如由于未到达的GLOBDEF指令)相关联的物理寄存器,则仍然可以对指令进行重命名。否则,可以以其他正常方式执行指令。例如,可以执行对任何有必要的物理寄存器的重命名,可以从空闲列表获得物理寄存器,可以从空闲列表获得预留站ID,并且可以将物理寄存器的标识符写入相关联的逻辑寄存器的索引处的RRT。如果需要,可以重复方法2200。否则,如果指令是GLOBDEF指令或SYNCREG指令,则方法2200可前进到2225。
在2225处,可以确定DQ中的给定的缕程的指针是否大于或等于DQ中的另一个缕程的指针。在一个实施例中,这可以表示给定的缕程是在GLOBDEF上还是SYNCREG上等待,因为已经在另一个缕程处接收了对应指令。如果给定的缕程的指针是大于或等于另一个缕程的指针,则方法2200可以前进到2240。否则,方法2200可以前进到2230。
在2230处,可以确定该指令的对应指令已经到达了另一个缕程。因此,可能已经为所接收的指令确定了物理寄存器和预留站ID(RSID)。
在2235处,可以弹出在DQ中的缕程的指针处的条目并且用于寄存器重命名。其可以用于填充缕程的RRT。此外,值可以用于填充在被逻辑寄存器索引的条目处的RRT。可以从DQ中的条目获得RSID,并且如果需要,则取决于GLOBDEF源操作数的状态,预留站中的由SYNCREG分配的、并且其RSID编号曾通过DQ从SYNCREG传递到了GLOBDEF的用于GLOBDEF的条目可以将其状态从未准备好改变为准备好。可以执行该指令。可以允许使用物理寄存器的后续执行。方法2200可以前进到2250。
在2240处,可以确定指令是GLOBDEF-SYNCREG对中第一个到达的。在一个实施例中,在2245处,可以利用新条目填充DQ。可以从空闲列表获得物理寄存器。此外,可以将物理寄存器的指示符写入RRT。可以从空闲列表获得RSID。可以将物理寄存器的指示符和对应的RSID写入DQ条目。在一个实施例中,可以在缕程的DQ指针处索引条目。可以将物理条目指示符写入在与所接收的指令相关联的逻辑寄存器的索引处的RRT。
在一个实施例中,在2250处,缕程的DQ指针可以增加。可以将逻辑目的地重命名为物理寄存器。
在一个实施例中,在2255处,可以确定指令是否是SYNCREG。此类确定可以用于确定是否应当停止指令直到对应的GLOBDEF到达。如果指令是SYNCREG,则方法2200可以前进到2265。否则,方法2200可以前进到2260。
在2260处,指令是GLOBDEF。可以将所接收的指令和物理寄存器写入作为索引的所获得的RSID处的预留站。假设超过本公开的范围的其他因素不会阻止GLOBDEF指令分派以供执行,可以将准备就绪设置为准备好。可以重复方法2200。
在2265处,可以确定是否从2245中的空闲列表获得了RSID和物理确定。在一个实施例中,该确定可以是对在2225处作出的先前确定的引用,确定DQ中的给定缕程的指针是否大于或等于DQ中的另一个缕程的指针,表示给定缕程是在GLOBDEF上还是SYNCREG上等待,因为已经在另一个缕程处接收了对应指令。在另一实施例中,如果是,则可能需要在预留站中标注在GLOBDEF之前接收了SYNCREG,并且因此应当停止执行,直到接收GLOBDEF。在又一实施例中,如果是,则在2270中可以将预留站条目标记为“未准备好”。可以在所获得的RSID索引的条目处访问预留站。可以重复方法2200。
可以以任何合适的标准启动方法2200。此外,虽然方法2200描述了特定元件的操作,但是方法2200可以以元件的任何合适的组合或任何合适的类型的元件执行。例如,方法2200可以由图1-21中所示的元件或能操作以实现方法2200的任何其他系统实现。由此,方法2200的优选的初始化点以及包括方法2200的元件的顺序可以取决于所选择的实现。在一些实施例中,可以可选地省略、重新组织、重复或组合一些元件。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本公开的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令以执行本文描述的功能并产生输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统可以包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非瞬态的有形安排,其包括存储介质,诸如:硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本公开的各实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
在一些情形下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
因此,公开了用于执行根据至少一个实施例的一条或多条指令的技术。虽然已经描述并在附图中示出了某些示例性实施例,但是应当理解,此类实施例仅仅是对其他实施例的说明而非限制,并且这些实施例不限于所示出和所描述的特定结构和配置,因为本领域技术人员在研究了本公开文本之后可以料知到各种其他修改。在诸如本申请这样的、发展迅速且进一步的进展难以预见的技术领域中,所公开的多个实施例在通过启用技术进步所促成的配置和细节上是容易修改的,同时不背离本公开的原理和所附权利要求书的范围。

Claims (20)

1.一种处理器,包括:
一个或多个执行单元;
乱序OOO执行引擎;以及
前端,包括用于以下操作的电路:
接收有序指令的第一缕程中的第一指令和有序指令的第二缕程中的第二指令;以及
将所述第一指令和第二指令发送至所述OOO执行引擎;
其中所述OOO执行引擎包括用于以下操作的电路:
确定所述第一指令和所述第二指令对应于映射到物理寄存器的逻辑寄存器;
确定所述第一指令用于写入所述逻辑寄存器并且用于通知要与所述第二缕程共享所述逻辑寄存器;
确定所述第二指令用于指示与所述第一指令的同步;以及
确定在所述第一指令之前处理了所述第二指令,
其中,所述OOO执行引擎进一步用于:响应于确定在所述第一指令之前处理了所述第二指令,停止在所述第二缕程中的所述第二指令之后的会访问所述逻辑寄存器的指令的执行,直到所述第一指令被接收并执行。
2.如权利要求1所述的处理器,其特征在于,所述OOO执行引擎进一步用于:停止所述第二指令的执行,直到接收所述第一指令。
3.如权利要求1所述的处理器,其特征在于,所述OOO执行引擎进一步用于:通过设置预留站中的条目来停止一个或多个指令。
4.如权利要求1所述的处理器,其特征在于,所述OOO执行引擎进一步用于:利用包括预留站标识符的队列跟踪所述第一指令和第二指令是否已经到达了。
5.如权利要求1所述的处理器,其特征在于,所述OOO执行引擎进一步用于:使用包括寄存器重命名信息的队列跟踪所述第一指令和第二指令是否已经到达了。
6.如权利要求1所述的处理器,其特征在于,所述OOO执行引擎进一步包括用于以下操作的电路:
在所述第一指令或第二指令到达之后将用于所述物理寄存器的寄存器重命名信息添加到队列;以及
分配跟踪信息以指示所述第一缕程在所述第二缕程处理所述第二指令之前还是之后处理所述第一指令。
7.如权利要求1所述的处理器,其特征在于,所述前端进一步包括用于以下操作的电路:添加一个或多个指示符以指示在所述第一指令和所述第二指令中对所述逻辑寄存器的使用会被映射到相同的所述物理寄存器。
8.如权利要求1所述的处理器,其特征在于,所述第一指令包括用于标识所述逻辑寄存器的第一标签,并且所述第二指令包括用于标识所述逻辑寄存器的第二标签。
9.如权利要求1所述的处理器,其特征在于,进一步包括一个或多个执行单元,用于执行所述第一和第二指令。
10.一种用于指令处理的方法,包括在处理器内:
接收有序指令的第一缕程中的第一指令;
接收有序指令的第二缕程中的第二指令;
确定所述第一指令和所述第二指令引用映射到物理寄存器的逻辑寄存器;
确定所述第一指令用于写入所述逻辑寄存器并且用于通知要与所述第二缕程共享所述逻辑寄存器;
确定所述第二指令用于指示与所述第一指令的同步;以及
确定在所述第一指令之前处理了所述第二指令,
其中,所述方法进一步包括:响应于确定在所述第一指令之前处理了所述第二指令,停止在所述第二缕程中的所述第二指令之后的会访问所述逻辑寄存器的指令的执行,直到所述第一指令被接收并执行。
11.如权利要求10所述的方法,其特征在于,进一步包括通过设置预留站中的条目来指示在所述第二缕程中的所述第二指令之后的指令要停止。
12.如权利要求10所述的方法,其特征在于,进一步包括:
在所述第一指令或第二指令到达之后将用于所述物理寄存器的寄存器重命名信息添加到队列;以及
分配跟踪信息以指示所述第一缕程在所述第二缕程处理所述第二指令之前还是之后处理所述第一指令。
13.如权利要求12所述的方法,其特征在于,进一步包括在所述第一指令或所述第二指令到达之后将预留站标识符添加到所述队列。
14.如权利要求10所述的方法,其特征在于,进一步包括添加一个或多个指示符以指示在所述第一指令和所述第二指令中对所述逻辑寄存器的使用会被映射到相同的所述物理寄存器。
15.一种用于指令处理的系统,包括用于执行如权利要求10-14中的任一项所述的方法的装置。
16.一种用于指令处理的系统,包括:
处理器,包括:
一个或多个执行单元;
乱序OOO执行引擎;以及
前端,包括用于以下操作的电路:
接收有序指令的第一缕程中的第一指令和有序指令的第二缕程中的第二指令;以及
将所述第一指令和第二指令发送至所述OOO执行引擎;
其中所述OOO执行引擎包括用于以下操作的电路:
确定所述第一指令和所述第二指令对应于映射到物理寄存器的逻辑寄存器;
确定所述第一指令用于写入所述逻辑寄存器并且用于通知要与所述第二缕程共享所述逻辑寄存器;
确定所述第二指令用于指示与所述第一指令的同步;以及
确定在所述第一指令之前处理了所述第二指令,
其中,所述OOO执行引擎进一步用于:响应于确定在所述第一指令之前处理了所述第二指令,停止在所述第二缕程中的所述第二指令之后的会访问所述逻辑寄存器的指令的执行,直到所述第一指令被接收并执行。
17.如权利要求16所述的系统,其特征在于,所述OOO执行引擎用于:停止所述第二指令的执行,直到接收所述第一指令。
18.如权利要求16所述的系统,其特征在于,所述执行单元用于执行所述第一和第二指令。
19.如权利要求16所述的系统,其特征在于,进一步包括一个或多个预留站,其中所述第一和第二指令会共享所述一个或多个预留站中的同一个。
20.如权利要求16所述的系统,其特征在于,所述第一指令包括用于标识所述逻辑寄存器的第一标签,并且所述第二指令包括用于标识所述逻辑寄存器的第二标签。
CN201580077451.8A 2015-03-27 2015-03-27 用于缕程间通信的装置和方法 Expired - Fee Related CN107408035B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2015/000775 WO2016156908A1 (en) 2015-03-27 2015-03-27 Apparatus and method for inter-strand communication

Publications (2)

Publication Number Publication Date
CN107408035A CN107408035A (zh) 2017-11-28
CN107408035B true CN107408035B (zh) 2021-11-09

Family

ID=53496895

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580077451.8A Expired - Fee Related CN107408035B (zh) 2015-03-27 2015-03-27 用于缕程间通信的装置和方法

Country Status (4)

Country Link
US (1) US20180285119A1 (zh)
EP (1) EP3274815B1 (zh)
CN (1) CN107408035B (zh)
WO (1) WO2016156908A1 (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5655096A (en) * 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
CN101046740A (zh) * 2006-03-28 2007-10-03 国际商业机器公司 用于按需临时寄存器重命名的方法和系统
CN103577159A (zh) * 2012-08-07 2014-02-12 想象力科技有限公司 使用依赖性消除的多阶段寄存器重命名

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3469469B2 (ja) * 1998-07-07 2003-11-25 富士通株式会社 情報処理装置
US7233998B2 (en) * 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US20050114632A1 (en) * 2003-11-21 2005-05-26 Intel Corporation Method and apparatus for data speculation in an out-of-order processor
US7500087B2 (en) * 2004-03-09 2009-03-03 Intel Corporation Synchronization of parallel processes using speculative execution of synchronization instructions
US7449919B2 (en) * 2006-06-30 2008-11-11 Intel Corporation Driver circuit bias control
US7506139B2 (en) * 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
DE112006004005T5 (de) * 2006-10-27 2009-06-10 Intel Corporation, Santa Clara Kommunikation zwischen Mehrfach-Ausführungsfolgen in einem Prozessor
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
CN102043755B (zh) * 2009-10-22 2012-12-05 财团法人工业技术研究院 可重组态处理装置及其系统
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
US20130246761A1 (en) * 2012-03-13 2013-09-19 International Business Machines Corporation Register sharing in an extended processor architecture
US10534614B2 (en) * 2012-06-08 2020-01-14 MIPS Tech, LLC Rescheduling threads using different cores in a multithreaded microprocessor having a shared register pool
CN104360727B (zh) * 2013-08-28 2019-02-01 威盛电子股份有限公司 微处理器及使用其省电的方法
US9652236B2 (en) * 2013-12-23 2017-05-16 Intel Corporation Instruction and logic for non-blocking register reclamation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5655096A (en) * 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
CN101046740A (zh) * 2006-03-28 2007-10-03 国际商业机器公司 用于按需临时寄存器重命名的方法和系统
CN103577159A (zh) * 2012-08-07 2014-02-12 想象力科技有限公司 使用依赖性消除的多阶段寄存器重命名

Also Published As

Publication number Publication date
CN107408035A (zh) 2017-11-28
EP3274815A1 (en) 2018-01-31
US20180285119A1 (en) 2018-10-04
EP3274815B1 (en) 2021-12-22
WO2016156908A1 (en) 2016-10-06

Similar Documents

Publication Publication Date Title
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN108292229B (zh) 用于重新出现的相邻聚集的指令和逻辑
US9823925B2 (en) Instruction and logic for a logical move in an out-of-order processor
CN108351784B (zh) 用于在乱序处理器中进行有序处理的指令和逻辑
KR101923289B1 (ko) 스토어들을 소팅 및 리타이어링하기 위한 명령어와 로직
CN107077421B (zh) 用于页表游走改变位的指令和逻辑
US20170185402A1 (en) Instructions and logic for bit field address and insertion
CN108292271B (zh) 用于向量置换的指令和逻辑
US20170168819A1 (en) Instruction and logic for partial reduction operations
US10705845B2 (en) Instructions and logic for vector bit field compression and expansion
US10095522B2 (en) Instruction and logic for register based hardware memory renaming
US20160179552A1 (en) Instruction and logic for a matrix scheduler
KR20160113677A (ko) 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법
US20210096866A1 (en) Instruction length decoding
US10133582B2 (en) Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor
WO2018005718A1 (en) System and method for out-of-order clustered decoding
EP3394721A1 (en) Instruction and logic for compression and rotation
CN107408035B (zh) 用于缕程间通信的装置和方法
EP3391197A1 (en) Instruction and logic for getting a column of data
WO2017168197A1 (en) Apparatus and method for improving performance of inter-strand communications

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
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: 20211109