用于测试事务性执行状态的指令和逻辑的制作方法

文档序号:13744856阅读:104来源:国知局
相关申请本申请是2012年2月2日提交的指定美国的当前待审的国际申请PCT/US2012/023611的部分继续申请。在先的该国际申请通过引用结合于此,如同其整体记载于本申请中。
技术领域
本公开一般涉及处理逻辑、微处理器以及相关的指令集架构的领域,这些指令集架构在被处理器或其他处理逻辑所执行时执行逻辑、数学或其他功能性操作。具体地,本公开涉及用于测试事务性执行状态的指令和逻辑。
背景技术
:半导体处理和逻辑设计的进步已允许在集成电路器件上可能存在的逻辑量的增加。因此,计算机系统配置已经从系统中的单个或多个集成电路发展到单个集成电路上存在的多个处理核和多个逻辑处理器。处理器或集成电路通常包括单个处理器管芯,其中处理器管芯可包括任意数量的核或逻辑处理器。集成电路上日益增加的核和逻辑处理器的数量使得更多软件线程能够被并发地执行。然而,可能同时执行的软件线程的数量的增加已造成与同步软件线程之间共享的数据有关的问题。用于访问多核或多逻辑处理器系统中的共享数据的一个常见的解决方案包括使用锁来保证对共享数据的多个访问之间的互斥。然而,不断增加的执行多个软件线程的能力对锁定数据产生瓶颈,导致线程要等待其它线程的完成(使它们的执行串行化),从而降低了使多个线程并发执行的益处。此外,在写入方试图修改数据的情况下,一些只读访问可使用锁来确保数据的互斥,这会带来排斥其它只读访问的不希望有的副作用。例如,考虑保持共享数据的散列表。利用锁系统,编程者可锁定整个散列表,从而允许一个线程访问整个散列表。然而,其它线程的吞吐量和性能可能不利地受影响,因为它们无法访问散列表中的任何条目,直到该锁被释放为止。替代地,散列表中的每个条目可能被锁定,从而导致软件中的许多锁结构。在这样的构造中,可能需要获得许多锁以执行特定任务,这会导致与其它线程的死锁。无论哪种方式,在将该简单示例外推到大的可缩放程序中之后,显然锁竞争、串行化、精细粒度同步以及死锁避免的复杂程度变成编程者的极其繁琐的负担。另一种最近的数据同步技术包括使用事务性存储器(TM)。通常,事务性执行包括原子地执行多个微操作、操作或指令的分组。在上述示例中,两个线程在散列表内执行,并且它们的存储器访问被监控/追踪。如果两个线程访问/改变相同的条目,则可执行冲突化解以确保数据有效性。一种类型的事务性执行包括软件事务性存储器(STM),其中通常在没有硬件支持的情况下在软件中执行对存储器访问、冲突化解、中止任务以及其它事务性任务的追踪。另一类型的事务性执行包括硬件事务性存储器(HTM)系统,其中包括用于支持访问追踪、冲突化解以及其它事务性任务的硬件。类似于事务性存储器的技术包括硬件锁省略(HLE),其中在不使用锁的情况下实验性地执行被锁定的关键区段。如果执行成功(即无冲突),则使结果全局可见。换言之,就像省略了来自关键区段的锁指令的事务那样执行关键区段,而不是执行原子地定义的事务。作为结果,在上述示例中,不是用事务来代替散列表执行,而是试验性地执行由锁指令定义的关键区段。多个线程类似地在散列表中执行,并且它们的访问被监控/追踪。如果这些线程中的任一个对同一条目进行访问/改动,则可执行冲突化解以确保数据有效性。但是如果未检测到冲突,则原子地进行对散列表的更新。如所见,事务性执行和锁省略具有在多个线程中提供更佳性能的潜力。然而,HLE和TM对于微处理器是相对新的研究领域。因此,尚未充分探索或详细研究处理器中的HLE和TM实现方式。附图说明在附图的各图中通过示例而非限制地示出本发明。图1示出用于使用指令和逻辑来测试事务性执行状态的计算系统的一个实施例。图2示出用于使用指令和逻辑来测试事务性执行状态的处理器的一个实施例。图3A示出根据一个实施例的用于提供用于测试事务性执行状态的功能的指令编码。图3B示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编码。图3C示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编码。图3D示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编码。图3E示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编码。图4A是处理器微架构中用于执行提供用于测试事务性执行状态的功能的指令的一个实施例的框图。图4B示出用于执行提供用于测试事务性执行状态的功能的指令的处理器微架构的一个实施例的要素。图5是用于执行提供用于测试事务性执行状态的功能的指令的处理器的一个实施例的框图。图6是用于执行提供用于测试事务性执行状态的功能的指令的计算机系统的一个实施例的框图。图7是用于执行提供用于测试事务性执行状态的功能的指令的计算机系统的另一实施例的框图。图8是用于执行提供用于测试事务性执行状态的功能的指令的计算机系统的另一实施例的框图。图9是用于执行提供用于测试事务性执行状态的功能的指令的芯片上系统的一个实施例的框图。图10是用于执行提供用于测试事务性执行状态的功能的指令的处理器的实施例的框图。图11是提供用于测试事务性执行状态的功能的IP核开发系统的一个实施例的框图。图12示出提供用于测试事务性执行状态的功能的架构仿真系统的一个实施例。图13示出用于转换提供用于测试事务性执行状态的功能的指令的系统的一个实施例。图14示出提供用于测试事务性执行状态的功能的装置的一个实施例。图15示出用于提供用于测试事务性执行状态的功能的过程的一个实施例的流程图。图16示出用于提供用于测试事务性执行状态的功能的过程的替代实施例的流程图。具体实施方式本申请中公开的用于测试事务性执行状态的指令和逻辑的一些实施例可结合处理器指令集架构(ISA)事务性同步扩展(TSX)来实现。这样的扩展可提供动态地检测在多线程软件环境中何时需要通过锁保护的关键区段的串行化的能力。编程者指定的代码区(称为事务性区域)可事务性地执行。如果该事务性执行成功地完成(即没有来自另一进程或线程的竞争),则在成功完成并从该事务性区域退出时,所有存储器操作或存储器中的数据的修改将如同原子地或同时地发生。硬件锁省略(HLE)是这样的扩展的一个实施例,它为编程者提供指令集接口以利用两个指令前缀提示XAQUIRE和XRELEASE来指定获取周围的事务性区域并释放保护关键区段的锁。利用HLE,处理器可省略与该锁相关联的写操作,并试图事务性地执行该区域。如果处理器检测到任何数据冲突,则将执行事务性中止,并将非事务性地并且不省略地重新执行该关键区段。受限制的事务性存储器(RTM)是用于编程者的指令集接口的另一实施例,其使用三个指令:XBEGIN和XEND,用于执行事务性区域;以及XABORT,用于明确地中止RTM区域的执行。XBEGIN指令也可指定向相对偏移量的分支,作为将在事务性中止的情况下执行的回退代码区段。回退代码可包含冲突化解步骤。明确的XABORT还可指定8位立即值以写入寄存器,例如给回退代码区段使用。本申请中公开的用于测试事务性执行状态的指令和逻辑的实施例也可结合其它处理器ISA事务性扩展、和/或结合HTM、和/或结合STM、和/或结合其它事务性执行上下文来实现。本申请中公开了用于测试事务性执行状态的新颖指令、逻辑、方法和装置。实施例包括解码用于开始事务性区域的第一指令或前缀。响应于该第一指令或前缀,产生用于一组架构状态寄存器的检查点,并追踪来自处理元件的在与该第一指令相关联的事务性区域中的存储器访问。在一个实施例中,用于编程者的指令集接口可包括用于测试事务性状态的第二指令,其中执行该第二指令以确定执行上下文是否在该事务性区域或推测性事务关键区段(诸如HLE或RTM)之内。在一个实施例中,这样的指令可用于:如果确定该指令正在事务性区域内部执行,则将标志寄存器设置为一个值(例如零)。在一个实施例中,这样的指令可用于:如果确定该指令不在事务性区域内部执行,则将标志寄存器设置为另一个值(例如一)。在一个替代实施例中,这样的指令可用于将寄存器设置为指示可能的事务性区域的嵌套级的值。在另一替代实施例中,这样的指令可用于确定访问与存储器操作数相关联的存储器是否会导致可能的事务性区域的事务性中止。在另一替代实施例中,这样的指令可用于确定是否存在足够的缓冲可用于可能的事务性区域的事务性执行。其它替代的实施例也是可能的。将理解,通过使用这样的指令的一个实施例,编程者可在可能的事务性区域(诸如HLE区域)内部动态地确定该区域是否正在事务性地被执行,或该区域是否正在事务性中止之后非事务性地被重新执行。使用这样的指令的一个实施例,编程者可在可能的事务性区域(诸如RTM区域)内部动态地确定XABORT指令是否将恢复先前的架构状态,或是否将被视为NOP(即无操作)。使用这样的指令的一个实施例,编程者可动态地确定库例程是从事务性区域内被调用还是从回退代码区段被调用。将理解,通过使用这样的指令的一个实施例,编程者可动态地确定事务性区域的嵌套级是否会接近硬件限制以及进一步的嵌套是否将会导致事务性中止。在以下描述中,陈述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等多种特定细节,以提供对本发明实施例的更透彻理解。然而,本领域技术人员应当领会,没有这些具体细节也可实践本发明。此外,没有详细示出一些公知的结构、电路等等,以避免不必要地模糊本发明的实施例。本发明的这些和其它实施例可根据以下教导而实现,并且应当明白,可在以下教导中作出各种修改和改变,而不背离本发明的更宽广精神和范围。从而,应按照说明性而不是限制性的意义来看待说明书和附图,并且本发明仅根据权利要求及其等价物来定界。图1示出用于使用指令和逻辑来测试事务性执行状态的计算系统100的一个实施例。根据本发明,诸如根据在此所描述的实施例,系统100包括诸如处理器102之类的组件,以采用包括逻辑的执行单元来执行算法以处理数据。系统100代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的III、4、Xeontm、XScaletm和/或StrongARMtm微处理器的处理系统,不过也可使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWStm操作系统的一个版本,不过也可使用其它操作系统(例如UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本发明的各实施例不限于硬件和软件的任何具体组合。实施例不限于计算机系统。本发明的替代实施例可被用于其他设备,诸如手持式设备和嵌入式应用。手持设备的一些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(PDA)以及手持PC。嵌入式应用可包括:微控制器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或可执行根据至少一个实施例的一个或多个指令的任何其他系统。图1是计算机系统100的框图,计算机系统100被形成为具有处理器102,处理器102包括一个或多个执行单元108以执行算法,以执行根据本发明的一个实施例的至少一个指令。参照单处理器桌面或服务器系统来描述了一个实施例,但替代实施例可被包括在多处理器系统中。系统100是“中枢”系统架构的示例。计算机系统100包括处理器102以处理数据信号。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任意其它处理器设备(诸如数字信号处理器)。处理器102耦合至处理器总线110,该处理器总线可在处理器102和系统100内的其他组件之间传输数据信号。系统100的诸个要素执行本领域所熟知的常规功能。在一个实施例中,处理器102包括第一级(L1)内部高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。或者,在另一个实施例中,高速缓存存储器可位于处理器102的外部。其他实施例也可包括内部高速缓存和外部高速缓存的组合,这取决于特定实现和需求。寄存器组106可在多个寄存器(包括整数寄存器、浮点寄存器、状态寄存器、指令指针寄存器)中存储不同类型的数据。提供检查点逻辑105以针对由处理器102的线程处理元件执行的线程设置寄存器组106中的一组架构状态寄存器的检查点。提供追踪逻辑103以追踪来自与高速缓存存储器104中的共享存储器的事务性区域相关联的线程处理元件的存储器访问。执行单元108(包括执行整数和浮点操作的逻辑)也位于处理器102中。处理器102还包括微代码(ucode)ROM,其存储用于特定宏指令的微代码。对于一个实施例,执行单元108包括处理事务性同步扩展(TSX)指令集109的逻辑,该指令集包括用于测试事务性执行状态的一个或多个指令。通过将TSX指令集109包括在通用处理器102的指令集内并包括相关的电路以执行这些指令,可使用通用处理器102中的受限制事务性存储器或硬件锁省略来执行许多多线程应用所使用的操作。因此,通过将受限制事务性存储器或硬件锁省略用于对共享数据执行同步,许多多线程应用可获得加速,并更为有效率地执行。这能消除在共享存储器的具有相对很少冲突的关键区段上执行不必要的同步的需要。执行单元108的替代实施例也可被用于微控制器、嵌入式处理器、图形设备、DSP以及其他类型的逻辑电路。系统100包括存储器120。存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其他存储器设备。存储器120可存储可由处理器102执行的指令和/或数据,数据由数据信号表示。系统逻辑芯片116耦合至处理器总线110和存储器120。在所示出的实施例中的系统逻辑芯片116是存储器控制器中枢(MCH)。处理器102可经由处理器总线110与MCH116通信。MCH116提供至存储器120的高带宽存储器路径118,用于指令和数据存储,以及用于存储图形命令、数据和文本。MCH116用于引导处理器102、存储器120以及系统100内的其他组件之间的数据信号,并在处理器总线110、存储器120和系统I/O122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供耦合至图形控制器112的图形端口。MCH116经由存储器接口118耦合至存储器120。图形卡112通过加速图形端口(AGP)互连114耦合至MCH116。系统100使用外围设备中枢接口总线122以将MCH116耦合至I/O控制器中枢(ICH)130。ICH130经由本地I/O总线向一些I/O设备提供直接连接。本地I/O总线是高速I/O总线,用于将外围设备连接至存储器120、芯片组以及处理器102。一些示例是音频控制器、固件中枢(闪存BIOS)128、无线收发机126、数据存储器124、包括用户输入和键盘接口的传统I/O控制器、串行扩展端口(诸如通用串行总线USB)以及网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或其他大容量存储设备。对于系统的另一个实施例,根据一个实施例的指令可被用于芯片上系统。芯片上系统的一个实施例包括处理器和存储器。用于这样一个系统的存储器是闪存存储器。闪存存储器可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可位于芯片上系统上。图2示出用于使用指令和逻辑来测试事务性执行状态的处理器200的一个实施例。在一些实施例中,根据一个实施例的指令可被实现为对具有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸多数据类型(诸如单精度和双精度整数和浮点数据类型)的数据元素执行操作。在一个实施例中,有序前端201是处理器200的一部分,其取出将要被执行的指令,并准备这些指令以在稍后供处理器流水线使用。前端201可包括诸个单元。在一个实施例中,指令预取器226从存储器取出指令,并将指令馈送至指令解码器228,指令解码器228随后解码或解释指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可执行的被称为“微指令”或“微操作”(也称为微操作数或uop)的一个或多个操作。在其他实施例中,解码器将指令解析为操作码和对应的数据及控制字段,它们被微架构用于执行根据一个实施例的操作。在包括追踪高速缓存230的一个实施例中,追踪高速缓存230接受经解码的微操作,并将它们组装为程序有序序列或微操作队列234中的踪迹,以用于执行。当追踪高速缓存230遇到复杂指令时,微代码ROM232提供完成操作所需的微操作。一些指令被转换为单个微操作,而其他指令需要若干个微操作以完成整个操作。在一个实施例中,如果需要超过四个微操作来完成指令,则解码器228访问微代码ROM232以进行该指令。对于一个实施例,指令可被解码为少量的微操作以用于在指令解码器228处进行处理。在另一个实施例中,如果需要若干微操作来完成操作,则可将指令存储在微代码ROM232中。追踪高速缓存230参考进入点可编程逻辑阵列(PLA)来确定正确的微指令指针,以从微代码ROM232读取微代码序列以完成根据一个实施例的一个或多个指令。在微代码ROM232完成对于指令的微操作序列化之后,机器的前端201恢复从追踪高速缓存230提取微操作。将理解,不一定所有实施例都包括追踪高速缓存230。乱序(out-of-order)执行引擎203是将指令准备好用于执行的单元。乱序执行逻辑具有若干个缓冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以供执行。分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。寄存器重命名逻辑将诸个逻辑寄存器重命名为寄存器组中的条目。在指令调度器(存储器调度器、快速调度器202、慢速/通用浮点调度器204、简单浮点调度器206)之前,分配器也将每个微操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作,另一个微操作队列用于非存储器操作。微操作调度器202、204、206基于对它们的依赖输入寄存器操作数源的准备就绪以及微操作完成它们的操作所需的执行资源的可用性来确定微操作何时准备好用于执行。一个实施例的快速调度器202可在主时钟周期的每半个上进行调度,而其他调度器可仅仅在每个主处理器时钟周期上调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。寄存器组208、210位于调度器202、204、206和执行块211中的执行单元212、214、216、218、220、222、224之间。也存在单独的寄存器组208、210,分别用于整数和浮点操作。一个实施例的每个寄存器组208、210也包括旁路网络,旁路网络可将刚完成的还没有被写入寄存器组的结果旁路或转发给新的依赖微操作。整数寄存器组208和浮点寄存器组210也能够彼此通信数据。对于一个实施例,整数寄存器组208被划分为两个单独的寄存器组,一个寄存器组用于低阶的32位数据,第二个寄存器组用于高阶的32位数据。一个实施例的浮点寄存器组210具有128位宽度的条目,因为浮点指令通常具有从64至128位宽度的操作数。浮点寄存器组210的一些实施例可具有256位宽或512位宽或一些其它宽度条目。对于一些实施例,在浮点寄存器组210中,可将每个元件分别写至64位、32位、16位等等的边界处。执行块211包括执行单元212、214、216、218、220、222、224,在执行单元212、214、216、218、220、222、224中实际执行指令。该区块包括寄存器组208、210,寄存器组208、210存储微指令需要执行的整数和浮点数据操作数值。一个实施例的处理器200包括有多个执行单元:地址生成单元(AGU)212、AGU214、快速ALU216、快速ALU218、慢速ALU220、浮点ALU222、浮点移动单元224。对于一个实施例,浮点执行块222、224执行浮点、MMX、SIMD、SSE以及AVX或其他操作。一个实施例的浮点ALU222包括64位/64位浮点除法器,用于执行除法、平方根、以及余数微操作。对于本发明的诸个实施例,涉及浮点值的指令可使用浮点硬件来处理。在一个实施例中,ALU操作进入高速ALU执行单元216、218。一个实施例的高速ALU216、218可执行高速操作,有效等待时间为半个时钟周期。对于一个实施例,大多数复杂整数操作进入慢速ALU220,因为慢速ALU220包括用于长等待时间类型操作的整数执行硬件,诸如,乘法器、移位器、标记逻辑和分支处理。存储器加载/存储操作由AGU212、214来执行。对于一个实施例,整数ALU216、218、220被描述为对64位数据操作数执行整数操作。在替代实施例中,可实现ALU216、218、220以支持包括16、32、128、256等各种数据位。类似地,可实现浮点单元222、224以支持具有各种位宽的多个操作数。对于一个实施例,浮点单元222、224可结合SIMD和多媒体指令对128位宽度打包数据操作数进行操作。在一个实施例中,在父加载完成执行之前,微操作调度器202、204、206就分派依赖操作。因为在处理器200中微操作被投机地调度和执行,所以处理器200也包括处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则可能存在带有临时错误数据离开调度器并运行在流水线中的依赖操作。在一些实施例中,重放机制可追踪使用错误数据的指令,并可重新执行这些指令。仅仅依赖操作需要被重放,而允许独立操作完成。处理器的一个实施例的调度器和重放机制还被设计成捕捉提供用于测试事务性执行状态的功能的指令。在不具有重放机制的一些替代实施例中,可阻止对微操作的推测性执行,并且依赖性的微操作可驻留在调度器202、204、206中直至它们被取消或直至它们无法被取消为止。术语“寄存器”指代被用作为指令的一部分以标识操作数的板上处理器存储位置。换句话说,寄存器是那些处理器外部(从编程者的角度来看)可用的处理器存储位置。然而,一实施例的寄存器不限于表示特定类型的电路。相反,一实施例的寄存器能够存储并提供数据,能够执行在此所述的功能。本文所描述的寄存器可利用任何数量的不同技术通过处理器中的电路来实现,这些不同技术诸如专用物理寄存器、利用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器组也包含八个多媒体SIMD寄存器,用于打包数据。对于以下讨论,寄存器应被理解为设计成保存打包数据的数据寄存器,诸如来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了MMX技术的微处理器的64位宽MMXtm寄存器(在一些实例中也称为“mm寄存器)。”这些MMX寄存器(可用在整数和浮点格式中)可与伴随SIMD和SSE指令的打包数据元素一起操作。涉及SSE2、SSE3、SSE4或更新的技术(统称为“SSEx”)的128位宽XMM寄存器也可被用于保持这样打包数据操作数。类似地,与AVX、AVX2、AVX3技术(或更高级的技术)相关的256位宽的YMM寄存器和512位宽的ZMM寄存器可与XMM寄存器重叠并可用于保持这样的更宽的打包数据操作数。在一个实施例中,在存储打包数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点数据可被包括在相同的寄存器组中,或被包括在不同的寄存器组中。进一步的,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。图3A是与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/products/processor/manuals/上获得的“64和IA-32英特尔架构软件开发者手册卷2:指令集参考(64和IA-32IntelArchitectureSoftwareDeveloper’sManualVolume2:InstructionSetReference)”中描述的操作码格式类型相对应的具有32或更多位的操作编码(操作码)格式360以及寄存器/存储器操作数寻址模式的一个实施例的描述。在一个实施例中,可通过一个或更多个字段361和362来编码指令。可以标识每个指令高达两个操作数位置,包括高达两个源操作数标识符364和365。对于一个实施例,目的地操作数标识符366与源操作数标识符364相同,而在其他实施例中它们不相同。对于可选实施例,目的地操作数标识符366与源操作数标识符365相同,而在其他实施例中它们不相同。在一个实施例中,由源操作数标识符364和365所标识的源操作数中的一个被指令的结果所覆写,而在其他实施例中,标识符364对应于源寄存器元素,而标识符365对应于目的地寄存器元素。对于一个实施例,操作数标识符364和365可被用于标识32位或64位的源和目的地操作数。图3B示出了具有四十个或更多位的另一个替代操作编码(操作码)格式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)字节所部分指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、直接对寄存器寻址、寄存器至存储器寻址。接下来转到图3C,在一些替代实施例中,64位(或128位、或256位、或512位或更多)单指令多数据(SIMD)算术操作可经由协处理器数据处理(CDP)指令来执行。操作编码(操作码)格式380示出了一个这样的CDP指令,其具有CDP操作码字段382和389。对于替代实施例,该类型CDP指令操作可由字段383、384、387和388中的一个或多个来编码。可以对每个指令标识高达三个操作数位置,包括高达两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可对8、16、32和64位值操作。对于一个实施例,对整数数据元素执行指令。在一些实施例中,使用条件字段381,可有条件地执行指令。对于一些实施例,可通过字段383来编码源数据尺寸。在一些实施例中,可对SIMD字段执行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,可通过字段384来编码饱和类型。现在转到图3D,其描绘了根据另一实施例的与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/products/processor/manuals/上获得的“高级向量扩展编程参考(AdvancedVectorExtensionsProgrammingReference)”中描述的操作码格式类型相对应的用于提供测试事务性执行状态的功能的另一替代操作编码(操作码)格式397。原始x86指令集向1字节操作码提供多种地址字节(syllable)格式以及包含在附加字节中的立即操作数,其中可从第一个“操作码”字节中获知附加字节的存在。此外,特定字节值被预留给操作码作为修改符(称为前缀prefix,因为它们被放置在指令之前)。当256个操作码字节的原始配置(包括这些特殊前缀值)耗尽时,指定单个字节以跳出(escape)到新的256个操作码集合。因为添加了向量指令(诸如,SIMD),即便通过使用前缀进行了扩展以后,也需要产生更多的操作码,并且“两字节”操作码映射也已经不够。为此,将新指令加入附加的映射中,附加的映射使用两字节加上可选的前缀作为标识符。除此外,为了便于在64位模式中实现额外的寄存器,在前缀和操作码(以及任何的用于确定操作码所需的跳出字节)之间使用额外的前缀(被称为“REX”)。在一个实施例中,REX具有4个“有效负荷”位,以指示在64位模式中使用附加的寄存器。在其他实施例中,可具有比4位更少或更多的位。至少一个指令集的通用格式(一般对应于格式360和/或格式370)被一般地示出如下:[prefixes][rex]escape[escape2]opcodemodrm(等等)操作码格式397对应于操作码格式370,并包括可选的VEX前缀字节391(在一个实施例中,以十六进制的C4或C5开始)以替代大部分的其他公共使用的传统指令前缀字节和跳出代码。例如,以下示出了使用两个字段来编码指令的实施例,其可在原始指令中不存在第二跳出代码时被使用。在以下所示的实施例中,传统跳出由新的跳出值所表示,传统前缀被完全压缩为“有效负荷(payload)”字节的一部分,传统前缀被重新申明并可用于未来的扩展,并且加入新的特征(诸如,增加的向量长度以及额外的源寄存器区分符)。当原始指令中存在第二跳出代码时,或当需要使用REX字段中的额外的位(例如XB和W字段)时。在下文示出的替代实施例中,将第一传统跳出和传统前缀按照上述类似地压缩,并且将第二跳出代码压缩在“映射”字段中,在未来映射或特征空间可用的情况下,重新添加新的特征(例如增加的向量长度和附加的源寄存器区分符)。根据一个实施例的指令可通过字段391和392中的一个或多个来编码。通过字段391与源操作码标识符374和375以及可选的比例-索引-基址(scale-index-base,SIB)标识符393、可选位移标识符394以及可选立即数字节395相结合,可以为每个指令标识高达四个操作数位置。对于一个实施例,VEX前缀字节391可被用于标识32位或64位的源和目的地操作数和/或128位或256位SIMD寄存器或存储器操作数。对于一个实施例,由操作码格式397所提供的功能可与操作码格式370形成冗余,而在其他实施例中它们不同。操作码格式370和397允许由MOD字段373以及由可选的SIB标识符393、可选的位移标识符394以及可选的立即数字节395所部分指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、直接对寄存器寻址、寄存器至存储器寻址。接下来转到图3E,其描绘了根据另一实施例的用于提供用于测试事务性执行状态功能的另一替代操作编码(操作码)格式398。操作码格式398对应于操作码格式370和397,并包括可选的EVEX前缀字节396(在一个实施例中,以十六进制的62开始)以替代大部分的其他公共使用的传统指令前缀字节和跳出代码,并提供附加的功能。根据一个实施例的指令可通过字段396和392中的一个或多个来编码。通过字段396与源操作码标识符374和375以及可选比例-索引-基址(scale-index-baseSIB)标识符393、可选位移标识符394以及可选立即数字节395相结合,可以标识每个指令高达四个操作数位置和掩码。对于一个实施例,EVEX前缀字节396可被用于标识32位或64位的源和目的地操作数和/或128位、256位或512位SIMD寄存器或存储器操作数。对于一个实施例,由操作码格式398所提供的功能可与操作码格式370或397形成冗余,而在其他实施例中它们不同。操作码格式398允许由MOD字段373以及由可选的(SIB)标识符393、可选的位移标识符394以及可选的立即数字节395所部分指定的利用掩码的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、直接对寄存器寻址、寄存器至存储器寻址。至少一个指令集的通用格式(一般对应于格式360和/或格式370)被一般地示出如下:evex1RXBmmmmmWvvvLppevex4opcodemodrm[sib][disp][imm]对于一个实施例,根据EVEX格式398来编码的指令可具有额外的“有效负荷”位,其被用于提供用于测试事务性执行状态的功能,并具有附加的新特征,诸如例如,用户可配置掩码寄存器、附加的操作数、从128位、256位或512位向量寄存器或待选择的更多的寄存器的选择、等等。例如,在VEX格式397可用于利用显式掩码并利用或不利用附加的一元操作(诸如类型转换)来提供用于测试事务性执行状态的功能的情况下,该EVEX格式398可用于利用显式用户可配置掩码并利用或不利用附加的需要附加操作数的二元操作(诸如加法或乘法)来提供用于测试事务性执行状态的功能。EVEX格式398的一些实施例也可用于利用隐式完成掩码并利用附加的三元操作来提供用于测试事务性执行状态的功能。此外,在VEX格式397可用于在128位或256位向量寄存器上提供用于测试事务性执行状态的功能的情况下,EVEX格式398可用于在128位、256位、512位或更大(或更小)的向量寄存器上提供用于测试事务性执行状态的功能。将理解,用于测试事务性执行状态的指令和逻辑的一些实施例可指定显式的源操作数和/或目的地操作数,而一些实施例可具有隐式的源操作数和/或目的地操作数。通过以下示例示出用于提供用于测试事务性执行状态(以下称为XTEST)的功能的示例指令:图4A是示出根据本发明的至少一个实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。图4B是示出根据本发明的至少一个实施例的要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑的框图。图4A中的实线框示出了有序流水线,虚线框示出了寄存器重命名、乱序发布/执行流水线。类似地,图4B中的实线框示出了有序架构逻辑,而虚线框示出了寄存器重命名逻辑以及乱序发布/执行逻辑。在图4A中,处理器流水线400包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处理级422、提交级424。在图4B中,箭头指示两个或更多个单元之间的耦合,且箭头的方向指示那些单元之间的数据流的方向。图4B示出处理器核490,包括耦合至执行引擎单元450的前端单元430,该前端单元和执行引擎单元两者均耦合至存储器单元470。核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或其他核类型。作为另一个选项,核490可以是专用核,诸如网络或通信核、压缩引擎、图形核或类似物。前端单元430包括耦合至指令高速缓存单元434的分支预测单元432,该指令高速缓存单元耦合至指令转换后备缓冲器(TLB)436,该指令转换后备缓冲器(TLB)耦合至指令取出单元438,该指令取出单元耦合至解码单元440。解码单元或解码器可解码指令,并生成一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出,这些输出是从原始指令中解码出、或以其他方式反映原始指令、或是从原始指令中推导而出的。解码器可使用各种不同的机制来实现。合适机构的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。指令高速缓存单元434还耦合到存储器单元470中的第二级(L2)高速缓存单元476。解码单元440耦合至执行引擎单元450中的重命名/分配器单元452。执行引擎单元450包括耦合到引退单元454和一个或多个调度器单元456的集合的重命名/分配器单元452。调度器单元456表示任意数量的不同调度器,包括预留站、中央指令窗口等。调度器单元456耦合到物理寄存器组单元458。每个物理寄存器组单元458表示一个或多个物理寄存器组,其中不同的物理寄存器组保存一个或多个不同的数据类型(诸如:标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点,等等)、状态(诸如,指令指针是将要执行的下一个指令的地址)等等。物理寄存器组单元458被引退单元454所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用重排序缓冲器和引退寄存器组、使用未来文件(futurefile)、历史缓冲器、引退寄存器组、使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看是可见的。这些寄存器不限于任何已知的特定电路类型。多种不同类型的寄存器可适用,只要它们能够存储并提供在此所述的数据。合适寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配物理寄存器的组合,等等。引退单元454和物理寄存器组单元458耦合至执行群集460。执行群集460包括一个或多个执行单元462的集合以及一个或多个存储器访问单元464的集合。执行单元462可执行多种操作(包括:移位、加法、减法、乘法)并可在多种数据类型(诸如、标量浮点、打包整数、打包浮点、向量整数、向量浮点)上执行。尽管一些实施例可包括专用于特定功能或功能组的多个执行单元,然而其他实施例可包括仅仅一个执行单元或全部执行所有功能的多个执行单元。调度器单元456、物理寄存器组单元458、执行群集460被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了诸个单独流水线(例如,均具有各自调度器单元、物理寄存器组单元和/或执行群集的标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,以及在单独的存储器访问流水线的情况下特定实施例被实现为仅仅该流水线的执行群集具有存储器访问单元464)。可以理解,在使用诸个单独流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余的是有序的。存储器访问单元464的集合耦合至存储器单元470,该存储器单元包括数据TLB单元472,该数据TLB单元耦合至高速缓存单元474,该高速缓存单元耦合至第二级(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))。应当理解,核可支持多线程(执行操作或线程的两个或多个并行的集),并且可以多种方式实现,包括:时间切割多线程、并发多线程(其中单个物理核为该物理核同时多线程执行的每一个线程提供逻辑核)、或以上的组合(诸如,时分取出和解码及之后的同时多线程,诸如超线程Hyperthreading技术)。对于一个实施例,执行引擎单元450包括用于处理TSX指令集的TSX逻辑469。通过在通用处理器核490的指令集中包括TSX指令集以及用于执行这些指令的相关联的TSX逻辑469,可在通用处理器核490中使用受限制的事务性存储器或硬件锁省略来执行大量由多线程应用所使用的操作。因此,通过将受限制的事务性存储器或硬件锁省略用于对共享数据执行同步,可更高效地加速和执行许多多线程应用。这可消除对具有相对少冲突的共享存储器的关键区段执行不必要的同步的需要。在存储器单元470中提供了追踪逻辑473以追踪来自与存储器单元470的高速缓存中的共享存储器的事务性区域相关联的线程处理元件的存储器访问。在一个实施例中,提供检查点逻辑455以针对由核490的线程处理元件执行的线程设置寄存器组单元458中的架构状态寄存器的集合的检查点。虽然在乱序执行的背景下描述寄存器重命名,但可以理解,寄存器重命名可被用于有序架构中。虽然处理器的所示出的实施例也包括单独的指令和数据高速缓存单元434/474以及共享的L2高速缓存单元476,但替代的实施例也可具有用于指令和数据的单个内部高速缓存,诸如例如第一级(L1)内部高速缓存、或多个级别的内部高速缓存。在一些实施例中,系统可包括内部高速缓存和外部高速缓存的组合,外部高速缓存位于核和/或处理器之外。或者,所有的高速缓存都可位于核和/或处理器之外。图5是根据本发明的实施例的具有集成的存储器控制器和图形器件的单核处理器和多核处理器500的框图。图5的实线框示出了处理器500,处理器500具有单个核502A、系统代理150、一组一个或多个总线控制器单元516,而可选附加的虚线框示出了替代的处理器500,其具有多个核502A-N、位于系统代理单元510中的一组一个或多个集成存储器控制器单元514以及集成图形逻辑508。存储器层级包括核内的一个或多个高速缓存级504A-N、一个或多个共享高速缓存单元506的集合、以及耦合至该组集成存储器控制器单元514的外部存储器(未示出)。共享高速缓存单元506的集合可包括一个或多个中级高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上的组合。提供了追踪逻辑503A-N,以追踪来自与高速缓存存储器504A-N和/或共享高速缓存单元506中的共享存储器的事务性区域相关联的线程处理元件的存储器访问。虽然在一个实施例中基于环形的互连单元512将集成图形逻辑508、该组共享高速缓存单元506和系统代理单元510进行互连,但替代的实施例也使用任何数量的公知技术来互连这些单元。在一些实施例中,一个或多个核502A-N能够实现多线程。系统代理510包括协调和操作核502A-N的那些组件。系统代理单元510可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核502A-N以及集成图形逻辑508的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。核502A-N可以是在架构和/或指令集上同构的或异构的。例如,核502A-N中的一些可以是有序的,而另一些是乱序的。如另一个示例,核502A-N中的两个或多个核能够执行相同的指令集,而其他核能够执行该指令集中的一个子集或执行不同的指令集。处理器可以是通用处理器,诸如酷睿(CoreTM)i3、i5、i7、2Duo和Quad、至强(XeonTM)、安腾(ItaniumTM)、XScaleTM或StrongARMTM处理器,这些均可以从加利福尼亚圣克拉拉市的英特尔公司获得。或者,处理器可以来自另一个公司,诸如来自ARM控股公司、MIPS、等等。处理器可以是专用处理器,诸如,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器、或类似物。处理器可以实现在一个或多个芯片上。处理器500可以是一个或多个基板的一部分,和/或使用多种工艺技术(诸如,BiCMOS、CMOS、或NMOS)中的任意技术被实现在一个或多个基板上。图6-8是适于包括处理器500的示例性系统,图9是可包括一个或多个核502的示例性芯片上系统(SoC)。本领域内已知的用于以下对象的其他系统设计和配置也可适用:膝上计算机、台式机、手持PC、个人数字助理、工程设计工作站、服务器、网络设备、网络集线器、交换器、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其它电子设备。一般而言,本文中公开的各种能够合并处理器和/或其它执行逻辑的系统或电子设备一般是适用的。现在参考图6,所示出的是根据本发明一个实施例的系统600的框图。系统600可包括耦合至图形存储器控制器中枢(GMCH)620的一个或多个处理器610、615。附加的处理器615的可选性在图6中通过虚线来表示。每个处理器610、615可以是处理器500的某些版本。然而,应该理解,集成图形逻辑和集成存储器控制单元不太可能出现在处理器610、615中。图6示出GMCH620可耦合至存储器640,该存储器640可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联,并且还可提供追踪逻辑以追踪来自与非易失性高速缓存中的共享存储器的事务性区域相关联的线程处理元件的存储器访问。GMCH620可以是芯片组或芯片组的一部分。GMCH620可以与处理器610、615进行通信,并控制处理器610、615与存储器640之间的交互。GMCH620还可担当处理器610、615和系统600的其它元件之间的加速总线接口。对于至少一个实施例,GMCH620经由诸如前端总线(FSB)695之类的多点总线与处理器610、615进行通信。此外,GMCH620耦合至显示器645(诸如平板显示器)。GMCH620可包括集成图形加速器。GMCH620还耦合至输入/输出(I/O)控制器中枢(ICH)650,该输入/输出(I/O)控制器中枢(ICH)650可用于将各种外围设备耦合至系统600。在图6的实施例中作为示例示出了外部图形设备660以及另一外围设备670,该外部图形设备660可以是耦合至ICH650的分立图形设备。替代地,系统600中还可存在附加或不同的处理器。例如,附加处理器615可包括与处理器610相同的附加处理器、与处理器610异类或不对称的附加处理器、加速器(诸如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器。在物理资源610、615之间会存在包括架构、微架构、热、和功耗特征等的一系列品质度量方面的各种差异。这些差别会有效显示为处理器610、615之间的不对称性和异类性。对于至少一个实施例,各种处理器610、615可驻留在同一管芯封装中。现在参照图7,所示出的是根据本发明实施例的第二系统700的框图。如图7所示,多处理器系统700是点对点互连系统,且包括经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的一些版本,如处理器610、615中的一个或多个一样。虽然仅以两个处理器770、780来示出,但应理解本发明的范围不限于此。在其它实施例中,在给定处理器中可存在一个或多个附加处理器。处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还包括作为其总线控制器单元的一部分的点对点(P-P)接口776和778;类似地,第二处理器780包括P-P接口786和788。处理器770、780可以经由使用点对点(P-P)接口电路778、788的P-P接口750来交换信息。如图7所示,IMC772和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/O724可耦合至第二总线720。注意,其它架构是可能的。例如,代替图7的点对点架构,系统可实现多点总线或者其他此类架构。现在参照图8,所示出的是根据本发明实施例的第三系统800的框图。图7和8中的类似元件使用类似附图标记,且在图8中省略了图7的某些方面以避免模糊图8的其它方面。图8示出处理器870、880可分别包括集成存储器和I/O控制逻辑(“CL”)872和882。对于至少一个实施例,CL872、882可包括诸如以上联系图5和7所描述的集成存储器控制器单元。此外,CL872、882还可包括I/O控制逻辑。图8示出不仅存储器832、834耦合至CL872、882,I/O设备814也耦合至控制逻辑872、882。传统I/O设备815耦合至芯片组890。现在参照图9,所示出的是根据本发明一个实施例的SoC900的框图。图5中的相似组件具有相同的标号。同样,虚线框是在更为先进的SoC上的可选特征。在图9中,互连单元902耦合至:应用处理器910,包括一组一个或多个核502A-N;核内的一级或多级高速缓存504A-N;以及共享高速缓存单元506;追踪逻辑503A-N,用于追踪来自与高速缓存存储器504A-N和/或共享高速缓存单元506中的共享存储器的事务性区域相关联的线程处理元件的存储器访问;系统代理单元510;总线控制器单元516;集成存储器控制器单元514;一组一个或多个媒体处理器920,可包括集成图形逻辑508、用于提供静态和/或视频照相功能的图像处理器924、提供硬件音频加速的音频处理器926、提供视频编码/解码加速的视频处理器928、静态随机存取存储器(SRAM)单元930;直接存储器存取(DMA)单元932;以及显示单元940,用于耦合至一个或多个外部显示器。图10示出处理器,包括中央处理单元(CPU)和图形处理单元(GPU),该处理器可执行根据一个实施例的至少一个指令。在一个实施例中,执行根据至少一个实施例的操作的指令可由CPU来执行。在另一个实施例中,指令可以由GPU来执行。在还有一个实施例中,指令可以由GPU和CPU所执行的操作的组合来执行。例如,在一个实施例中,根据一个实施例的指令可被接收,并被解码用于在GPU上执行。然而,经解码的指令中的一个或多个操作可由CPU来执行,并且结果被返回给GPU用于指令的最终引退。相反,在一些实施例中,CPU可作为主处理器,而GPU作为协处理器。在一些实施例中,受益于高度并行吞吐量的指令可由GPU来执行,而受益于处理器(这些处理器受益于深度流水线架构)的性能的指令可由CPU来执行。例如,图形、科学应用、金融应用以及其他并行工作负荷可受益于GPU的性能并相应地执行,而更多的序列化应用,诸如操作系统内核或应用代码更适于CPU。在图10中,处理器1000包括:CPU1005、GPU1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示设备1040、高清晰度多媒体接口(HDMI)控制器1045、MIPI控制器1050、闪存存储器控制器1055、双数据率(DDR)控制器1060、安全引擎1065、I2S/I2C(集成跨芯片声音/跨集成电路)接口1070。其他逻辑和电路可被包括在图10的处理器中,包括更多的CPU或GPU以及其他外围设备接口控制器。至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性数据来实现,该数据表示处理器中的各种逻辑,其在被机器读取时使得该机器生成执行本文描述的技术的逻辑。此类表示即所谓“IP核”可以存储在有形的机器可读介质(“磁带”)上并提供给各种顾客或制造商,以加载到实际制作该逻辑或处理器的编制机器中去。例如,IP核(诸如由ARM控股公司所开发的CortexTM处理器族以及由中国科学院计算机技术研究所(ICT)所开发的龙芯IP核)可被授权或销售给多个客户或受许可方,诸如德州仪器、高通、苹果、或三星,并被实现在由这些客户或受许可方所制造的处理器中。图11示出根据一个实施例的IP核开发的框图。存储器1130包括仿真软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可经由存储器1140(诸如,硬盘)、有线连接(诸如,互联网)1150或无线连接1160而被提供给存储器1130。由仿真工具和模型所生成的IP核信息可随后被发送给制造工厂,在制造工厂可由第三方来进行生产以执行根据至少一个实施例的至少一个指令。在一些实施例中,一个或多个指令可以对应于第一类型或架构(例如x86),并且在不同类型或架构的处理器(例如ARM)上被转换或仿真。根据一个实施例,指令可以在任何处理器或处理器类型上执行,包括ARM、x86、MIPS、GPU或其它处理器类型或架构。图12示出了根据一个实施例的第一类型的指令如何被不同类型的处理器所仿真。在图12中,程序1205包含一些指令,这些指令可执行与根据一个实施例的指令相同或基本相同的功能。然而,程序1205的指令可以是与处理器1215所不同或不兼容的类型和/或格式,这意味着程序1205中的类型的指令不能原生地被处理器1215所执行。然而,借助于仿真逻辑1210,程序1205的指令可被转换成能够由处理器1215所原生执行的指令。在一个实施例中,仿真逻辑被具体化在硬件中。在另一实施例中,仿真逻辑具体化在有形的机器可读介质中,该机器可读介质包含将程序1205中的该类指令翻译成直接能由处理器1215执行的类型的软件。在其它实施例中,仿真逻辑是固定功能或可编程硬件和存储在有形的机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,但在其它实施例中,仿真逻辑在处理器之外并由第三方提供。在一个实施例中,处理器能够通过执行包含在处理器中或者与之相关联的微代码或固件,加载具体化在包含软件的有形的机器可读介质中的仿真逻辑。图13是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但是作为替代,指令转换器可以以软件、固件、硬件或其各种组合来实现。图13示出可使用x86编译器1304来编译利用高级语言1302的程序,以生成可由具有至少一个x86指令集核的处理器1316原生执行的x86二进制代码1306。具有至少一个x86指令集核1316的处理器表示任何处理器,该处理器能够通过兼容地执行或以其它方式处理(1)英特尔x86指令集核的指令集的大部分或(2)旨在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它软件的目标代码版本,来执行与具有至少一个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示出提供用于测试事务性执行状态的功能的装置1401的一个实施例。装置1401包括耦合至解码单元1440的指令取出单元1438。解码单元或解码器可解码指令,并生成一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出,这些输出是从原始指令中解码出、或以其他方式反映原始指令、或是从原始指令中推导而出的。解码器可使用各种不同的机制来实现。合适机构的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。解码单元1440耦合至寄存器组单元1458。每个寄存器组单元1458表示一个或多个物理寄存器组,其中不同的物理寄存器组保存一个或多个不同的数据类型(诸如:标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点,等等)、状态(例如指令指针,它是将要执行的下一个指令的地址)等等。寄存器组单元1458与装置1402的检查点逻辑1455耦合。通常,架构寄存器从处理器外部或从编程者的视角来看是可见的。在一个实施例中,提供检查点逻辑1455以针对由与共享存储器的事务性区域相关联的线程处理元件执行的线程设置寄存器组单元1458中的架构状态寄存器的集合的检查点。这些寄存器不限于任何已知的特定电路类型。多种不同类型的寄存器可适用,只要它们能够存储并提供在此所述的数据。合适寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配物理寄存器的组合、等等。寄存器组单元1458耦合至一个或多个执行单元1462的集合和一个或多个存储器访问单元1464的集合。执行单元1462可以对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整型、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。寄存器组单元1458、存储器访问单元1464和执行单元1462被示为可能是复数的,因为某些实施例对于某些类型的数据/操作产生分别的流水线(例如分别具有它们自己的寄存器组单元和/或执行单元的标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,并且在分别的存储器访问流水线的情况下,实现其中仅一个或多个特定流水线具有存储器访问单元1464的某些实施例)。还应当理解,在使用分别的流水线的情况下,这些流水线中的一个或多个可以为乱序发布/执行,并且其余流水线可以为有序发布/执行。存储器访问单元1464的集合耦合至数据高速缓存单元1474,该数据高速缓存单元耦合至二级(L2)高速缓存单元1476。在一个示例性实施例中,存储器访问单元1464可包括加载单元、存储地址单元和存储数据单元,这些单元中的每一个耦合至装置1402的数据高速缓存单元1474和追踪逻辑1473,以追踪来自与数据高速缓存单元1474中的共享存储器的事务性区域相关联的处理元件的存储器访问。L2高速缓存单元1476耦合到一个或多个其他级的高速缓存,并最终耦合到主存储器。作为示例,示例性装置1401可如下地实现流水线400:1)指令取出1438执行取出和长度解码级402和404;2)解码单元1440执行解码级406;3)寄存器组单元1458和存储器访问单元1464执行寄存器读取/存储器读取级414;4)执行单元1462执行了执行级416;以及5)存储器访问单元1464和物理寄存器组单元1458执行写回/存储器写入级418。装置1401可支持一个或多个指令集(例如x86指令集(具有已经与更新版本一起添加的一些扩展,包括TSXISA1469);加利福尼亚州桑尼威尔市的MIPS技术公司的MIPS指令集(包括诸如TSXISA1469中的事务性同步之类的事务性同步);加利福尼亚州桑尼威尔市的ARM控股公司的ARM指令集(具有诸如NEON之类的可选的附加扩展,并包括诸如TSXISA1469中的事务性同步之类的事务性同步))。应当理解,装置1401可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步多线程化)。对于一个实施例,执行单元1462执行TSX指令集架构(ISA)1469以执行通过TSX控制1457协作的事务性同步。装置1402的TSX控制1457与检查点逻辑1455一起操作以设置寄存器组单元1458中的架构寄存器集合的检查点,并与存储器访问单元1464中的追踪逻辑1473一起操作以追踪来自与数据高速缓存单元1474中的共享存储器的事务性区域相关联的线程处理元件的存储器访问。如果读/写冲突出现,则可将架构状态回滚到先前的同步点,并且不进行冲突访问。对于一个实施例,装置1402的TSXISA1469包括一个或多个指令(例如上述的XTEST指令),该一个或多个指令可由执行单元1462执行以提供用于测试线程处理元件中的事务性执行状态的功能。通过在通用处理器核的指令集中包括TSXISA1469以及用于执行这些指令的相关联的逻辑,可在通用处理器核中使用受限制的事务性存储器或硬件锁省略利用装置1401来执行许多多线程应用所使用的操作。因此,通过将受限制的事务性存储器或硬件锁省略用于对共享数据执行同步,可更高效地加速和执行许多多线程应用。如上所述,当线程处理元件正在事务性地执行时,存储器访问单元1464中的追踪逻辑1473追踪来自与数据高速缓存单元1474中的共享存储器的事务性区域相关联的线程处理元件的存储器访问。这可消除对具有相对少冲突的共享存储器的关键区段执行不必要的同步的需要。图15示出用于提供用于测试事务性执行状态的功能的过程1501的一个实施例的流程图。过程1501和本文中公开的其他过程通过处理块来执行,处理块可包括专用硬件或可由通用机器或专用机器或其某种组合执行的软件或固件操作码。在过程1501的处理框1510,解码用于开始事务性区域(例如用于RTM或HLE)的第一指令或前缀。响应于解码第一指令,在处理框1520中产生用于架构状态寄存器的集合的检查点。也响应于解码第一指令,在处理框1530中追踪来自与第一指令相关联的事务性区域中的处理元素的存储器访问。在处理框1540,解码用于检测事务性区域的事务性执行的第二指令(例如XTEST指令中的一个指令)。在处理框1550,响应于解码第二指令执行操作,以确定第二指令的执行上下文是否在该事务性区域之内。然后,响应于第二指令,在处理框1560中更新第一标志(例如,如果第二指令的执行上下文在该事务性区域之内,则将其更新为零;否则将其更新为一)。在处理框1570,进一步响应于该第二指令,可选地更新寄存器(例如像XTEST.NL或像XTEST.BA那样,等等)。并且,在处理框1580中,响应于第二指令可选地更新第二标志(例如,像XTEST.BV或XTEST.MV或XTEST.BM那样,等等)。将理解,虽然本申请中公开的过程1501和其它过程按顺序被示出,但在一些替代实施例中,这些处理框的操作可按照各种不同顺序和/或彼此并行或连续地执行。图16示出用于支持用于测试事务性执行状态的过程的替代实施例1601的流程图。在处理框1605,进入事务性区域1601(例如通过遇到XACQUIRE前缀或XBEGIN指令)。在处理框1610,保存架构寄存器和状态。此时,如果在处理框1615中执行XTEST指令,则处理框1620处的测试将确定:作为在处理框1615中在事务性执行的区域1601之内执行XTEST指令的结果,未曾设置零标志。将理解,图16的流程图仅仅是示例,并且编程者可在该过程的任何点执行处理框1615的XTEST指令。继续至处理框1625,作为事务性执行区域1601的结果,缓冲存储器事务。在处理框1635,可将经缓冲的存储器位置(例如在数据高速缓存中)标记为排它的。在处理框1645中监控读集合。如果在处理框1650中,另一执行线程写入该读集合的被监控的存储器位置,则在处理框1665中中止事务性处理(称为事务性中止),并且处理器将开始将执行回滚至先前的同步点(例如保存的处理框1610的状态)。另一方面,当在处理框1650中没有其它执行线程写至该读集合的被监控的存储器位置,则在处理框1655中,根据任何读/写事务来同时监控写集合。如果在处理框1660中另一执行线程读取或写入该写集合的被监控的存储器位置,则也在处理框1665中中止事务性处理。将理解,这样的监控是不断持续的过程,按照与高速缓存一致性维护相似的方式持续地维持。在到达事务性区域的末尾之前,若没有其它执行线程在处理框1650中写入该读集合的被监控的存储器位置并且没有其它执行线程在处理框1660中读取或写入该写集合的被监控的存储器位置,则在处理框1670中退出该事务性区域1601(例如通过遇到XRELEASE前缀或XEND指令),并在处理框1675中原子地进行缓冲的存储器事务,使得它们可被其它执行线程观察到。在处理框1665中的事务性中止之后,处理器将执行回滚至先前的同步点,由此恢复保存的架构寄存器和状态,并丢弃任何未进行的存储器事务。此时,如果在处理框1615中执行XTEST指令,则处理框1620处的测试将确定,作为在处理框1665中的事务性中止之后在处理框1615中执行XTEST指令的结果,设置了零标志,并且因此不在事务性执行区域1601之内。因此,在处理框1630中,程序或线程将观看已恢复或回滚的先前同步点的处理器状态,并可在处理框1640中作为非事务性区域继续执行。根据XTEST指令的实施例,该程序可确定事务性中止是否已经发生,处理器或存储器状态原本可能不指示事务性中止是否已经发生。将理解,考虑到对事务性中止是否已经发生的观测,这样的信息可向编程者提供选项,诸如对事务性中止中结束的重试的次数进行记录和计数。还可向编程者提供其它选项,诸如根据确定该程序当前正在或者并不在事务性执行区域之内执行而跳过代码区段。也已经描述了其它各种类型的XTEST指令,这些XTEST指令可向编程者提供附加的选项,诸如在事务性中止之前获得有些事情会出错的指示(例如耗尽缓冲器空间,或某个线程也向你的线程所意图修改的相同存储器位置发出了事务,等等)。上述描述旨在示出本发明的优选实施例。根据以上讨论,应当明白的是,特别是在这样的增长迅速并且进一步的进步不容易预见的
技术领域
中,在所附权利要求及其等价物的范围之内,本领域技术人员可在安排和细节上修改本发明而不背离本发明的原理。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1