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

文档序号:6534135阅读:185来源:国知局
用于测试事务性执行状态的指令和逻辑的制作方法
【专利摘要】公开了用于测试事务性执行状态的新颖指令、逻辑、方法和装置。实施例包括解码用于开始事务性区域的第一指令。响应于该第一指令,产生用于一组架构状态寄存器的检查点,并追踪来自与该第一指令相关联的事务性区域中的处理元件的存储器访问。然后解码用于检测该事务性区域的事务性执行的第二指令。响应于解码第二指令而执行操作,以确定第二指令的执行上下文是否在该事务性区域之内。然后响应于第二指令而更新第一标志。在一些实施例中,响应于第二指令,可选地更新寄存器,和/或可选地更新第二标志。
【专利说明】用于测试事务性执行状态的指令和逻辑
[0001] 相关申请
[0002] 本申请是2012年2月2日提交的指定美国的当前待审的国际申请PCT/ US2012/023611的部分继续申请。在先的该国际申请通过引用结合于此,如同其整体记载于 本申请中。

【技术领域】
[0003] 本公开一般涉及处理逻辑、微处理器以及相关的指令集架构的领域,这些指令集 架构在被处理器或其他处理逻辑所执行时执行逻辑、数学或其他功能性操作。具体地,本公 开涉及用于测试事务性执行状态的指令和逻辑。

【背景技术】
[0004] 半导体处理和逻辑设计的进步已允许在集成电路器件上可能存在的逻辑量的增 力口。因此,计算机系统配置已经从系统中的单个或多个集成电路发展到单个集成电路上存 在的多个处理核和多个逻辑处理器。处理器或集成电路通常包括单个处理器管芯,其中处 理器管芯可包括任意数量的核或逻辑处理器。
[0005] 集成电路上日益增加的核和逻辑处理器的数量使得更多软件线程能够被并发地 执行。然而,可能同时执行的软件线程的数量的增加已造成与同步软件线程之间共享的数 据有关的问题。用于访问多核或多逻辑处理器系统中的共享数据的一个常见的解决方案包 括使用锁来保证对共享数据的多个访问之间的互斥。然而,不断增加的执行多个软件线程 的能力对锁定数据产生瓶颈,导致线程要等待其它线程的完成(使它们的执行串行化),从 而降低了使多个线程并发执行的益处。此外,在写入方试图修改数据的情况下,一些只读访 问可使用锁来确保数据的互斥,这会带来排斥其它只读访问的不希望有的副作用。
[0006] 例如,考虑保持共享数据的散列表。利用锁系统,编程者可锁定整个散列表,从而 允许一个线程访问整个散列表。然而,其它线程的吞吐量和性能可能不利地受影响,因为它 们无法访问散列表中的任何条目,直到该锁被释放为止。替代地,散列表中的每个条目可能 被锁定,从而导致软件中的许多锁结构。在这样的构造中,可能需要获得许多锁以执行特定 任务,这会导致与其它线程的死锁。无论哪种方式,在将该简单示例外推到大的可缩放程序 中之后,显然锁竞争、串行化、精细粒度同步以及死锁避免的复杂程度变成编程者的极其繁 琐的负担。
[0007] 另一种最近的数据同步技术包括使用事务性存储器(TM)。通常,事务性执行包括 原子地执行多个微操作、操作或指令的分组。在上述示例中,两个线程在散列表内执行,并 且它们的存储器访问被监控/追踪。如果两个线程访问/改变相同的条目,则可执行冲突 化解以确保数据有效性。一种类型的事务性执行包括软件事务性存储器(STM),其中通常在 没有硬件支持的情况下在软件中执行对存储器访问、冲突化解、中止任务以及其它事务性 任务的追踪。另一类型的事务性执行包括硬件事务性存储器(HTM)系统,其中包括用于支 持访问追踪、冲突化解以及其它事务性任务的硬件。
[0008] 类似于事务性存储器的技术包括硬件锁省略(HLE),其中在不使用锁的情况下实 验性地执行被锁定的关键区段。如果执行成功(即无冲突),则使结果全局可见。换言之, 就像省略了来自关键区段的锁指令的事务那样执行关键区段,而不是执行原子地定义的事 务。作为结果,在上述示例中,不是用事务来代替散列表执行,而是试验性地执行由锁指令 定义的关键区段。多个线程类似地在散列表中执行,并且它们的访问被监控/追踪。如果这 些线程中的任一个对同一条目进行访问/改动,则可执行冲突化解以确保数据有效性。但 是如果未检测到冲突,则原子地进行对散列表的更新。
[0009] 如所见,事务性执行和锁省略具有在多个线程中提供更佳性能的潜力。然而,HLE 和TM对于微处理器是相对新的研究领域。因此,尚未充分探索或详细研究处理器中的HLE 和TM实现方式。

【专利附图】

【附图说明】
[0010] 在附图的各图中通过示例而非限制地示出本发明。
[0011] 图1示出用于使用指令和逻辑来测试事务性执行状态的计算系统的一个实施例。
[0012] 图2示出用于使用指令和逻辑来测试事务性执行状态的处理器的一个实施例。
[0013] 图3A示出根据一个实施例的用于提供用于测试事务性执行状态的功能的指令编 码。
[0014] 图3B示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编 码。
[0015] 图3C示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编 码。
[0016] 图3D示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编 码。
[0017] 图3E示出根据另一实施例的用于提供用于测试事务性执行状态的功能的指令编 码。
[0018] 图4A是处理器微架构中用于执行提供用于测试事务性执行状态的功能的指令的 一个实施例的框图。
[0019] 图4B示出用于执行提供用于测试事务性执行状态的功能的指令的处理器微架构 的一个实施例的要素。
[0020] 图5是用于执行提供用于测试事务性执行状态的功能的指令的处理器的一个实 施例的框图。
[0021] 图6是用于执行提供用于测试事务性执行状态的功能的指令的计算机系统的一 个实施例的框图。
[0022] 图7是用于执行提供用于测试事务性执行状态的功能的指令的计算机系统的另 一实施例的框图。
[0023] 图8是用于执行提供用于测试事务性执行状态的功能的指令的计算机系统的另 一实施例的框图。
[0024] 图9是用于执行提供用于测试事务性执行状态的功能的指令的芯片上系统的一 个实施例的框图。
[0025] 图10是用于执行提供用于测试事务性执行状态的功能的指令的处理器的实施例 的框图。
[0026] 图11是提供用于测试事务性执行状态的功能的IP核开发系统的一个实施例的框 图。
[0027] 图12示出提供用于测试事务性执行状态的功能的架构仿真系统的一个实施例。
[0028] 图13示出用于转换提供用于测试事务性执行状态的功能的指令的系统的一个实 施例。
[0029] 图14示出提供用于测试事务性执行状态的功能的装置的一个实施例。
[0030] 图15示出用于提供用于测试事务性执行状态的功能的过程的一个实施例的流程 图。
[0031] 图16示出用于提供用于测试事务性执行状态的功能的过程的替代实施例的流程 图。

【具体实施方式】
[0032] 本申请中公开的用于测试事务性执行状态的指令和逻辑的一些实施例可结合处 理器指令集架构(ISA)事务性同步扩展(TSX)来实现。这样的扩展可提供动态地检测在多 线程软件环境中何时需要通过锁保护的关键区段的串行化的能力。编程者指定的代码区 (称为事务性区域)可事务性地执行。如果该事务性执行成功地完成(即没有来自另一进 程或线程的竞争),则在成功完成并从该事务性区域退出时,所有存储器操作或存储器中的 数据的修改将如同原子地或同时地发生。
[0033] 硬件锁省略(HLE)是这样的扩展的一个实施例,它为编程者提供指令集接口以利 用两个指令前缀提示XAQUIRE和XRELEASE来指定获取周围的事务性区域并释放保护关键 区段的锁。利用HLE,处理器可省略与该锁相关联的写操作,并试图事务性地执行该区域。 如果处理器检测到任何数据冲突,则将执行事务性中止,并将非事务性地并且不省略地重 新执行该关键区段。
[0034] 受限制的事务性存储器(RTM)是用于编程者的指令集接口的另一实施例,其使用 三个指令=XBEGIN和XEND,用于执行事务性区域;以及XAB0RT,用于明确地中止RTM区域的 执行。XBEGIN指令也可指定向相对偏移量的分支,作为将在事务性中止的情况下执行的回 退代码区段。回退代码可包含冲突化解步骤。明确的XABORT还可指定8位立即值以写入 寄存器,例如给回退代码区段使用。本申请中公开的用于测试事务性执行状态的指令和逻 辑的实施例也可结合其它处理器ISA事务性扩展、和/或结合HTM、和/或结合STM、和/或 结合其它事务性执行上下文来实现。
[0035] 本申请中公开了用于测试事务性执行状态的新颖指令、逻辑、方法和装置。实施例 包括解码用于开始事务性区域的第一指令或前缀。响应于该第一指令或前缀,产生用于一 组架构状态寄存器的检查点,并追踪来自处理元件的在与该第一指令相关联的事务性区域 中的存储器访问。在一个实施例中,用于编程者的指令集接口可包括用于测试事务性状态 的第二指令,其中执行该第二指令以确定执行上下文是否在该事务性区域或推测性事务关 键区段(诸如HLE或RTM)之内。在一个实施例中,这样的指令可用于:如果确定该指令正 在事务性区域内部执行,则将标志寄存器设置为一个值(例如零)。在一个实施例中,这样 的指令可用于:如果确定该指令不在事务性区域内部执行,则将标志寄存器设置为另一个 值(例如一)。在一个替代实施例中,这样的指令可用于将寄存器设置为指示可能的事务性 区域的嵌套级的值。在另一替代实施例中,这样的指令可用于确定访问与存储器操作数相 关联的存储器是否会导致可能的事务性区域的事务性中止。在另一替代实施例中,这样的 指令可用于确定是否存在足够的缓冲可用于可能的事务性区域的事务性执行。其它替代的 实施例也是可能的。
[0036] 将理解,通过使用这样的指令的一个实施例,编程者可在可能的事务性区域(诸 如HLE区域)内部动态地确定该区域是否正在事务性地被执行,或该区域是否正在事务性 中止之后非事务性地被重新执行。使用这样的指令的一个实施例,编程者可在可能的事务 性区域(诸如RTM区域)内部动态地确定XABORT指令是否将恢复先前的架构状态,或是否 将被视为NOP (即无操作)。使用这样的指令的一个实施例,编程者可动态地确定库例程是 从事务性区域内被调用还是从回退代码区段被调用。将理解,通过使用这样的指令的一个 实施例,编程者可动态地确定事务性区域的嵌套级是否会接近硬件限制以及进一步的嵌套 是否将会导致事务性中止。
[0037] 在以下描述中,陈述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等 多种特定细节,以提供对本发明实施例的更透彻理解。然而,本领域技术人员应当领会,没 有这些具体细节也可实践本发明。此外,没有详细示出一些公知的结构、电路等等,以避免 不必要地模糊本发明的实施例。
[0038] 本发明的这些和其它实施例可根据以下教导而实现,并且应当明白,可在以下教 导中作出各种修改和改变,而不背离本发明的更宽广精神和范围。从而,应按照说明性而不 是限制性的意义来看待说明书和附图,并且本发明仅根据权利要求及其等价物来定界。
[0039] 图1示出用于使用指令和逻辑来测试事务性执行状态的计算系统100的一个实 施例。根据本发明,诸如根据在此所描述的实施例,系统1〇〇包括诸如处理器102之类的 组件,以采用包括逻辑的执行单元来执行算法以处理数据。系统1〇〇代表基于可从美国加 利福尼亚州圣克拉拉市的英特尔公司获得的PENT丨UM? III、PENTIUM? 4、Xeontm、 丨tanium气XScaletm和/或StrongARMtm微处理器的处理系统,不过也可使用其它系统(包 括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执 行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWStm操作系统的一个版本,不过也 可使用其它操作系统(例如UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本发 明的各实施例不限于硬件和软件的任何具体组合。
[0040] 实施例不限于计算机系统。本发明的替代实施例可被用于其他设备,诸如手持式 设备和嵌入式应用。手持设备的一些示例包括蜂窝电话、网际协议设备、数码相机、个人数 字助理(PDA)以及手持PC。嵌入式应用可包括:微控制器、数字信号处理器(DSP)、芯片上 系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或可执行根据至少 一个实施例的一个或多个指令的任何其他系统。
[0041] 图1是计算机系统100的框图,计算机系统100被形成为具有处理器102,处理器 102包括一个或多个执行单元108以执行算法,以执行根据本发明的一个实施例的至少一 个指令。参照单处理器桌面或服务器系统来描述了一个实施例,但替代实施例可被包括在 多处理器系统中。系统100是"中枢"系统架构的示例。计算机系统100包括处理器102 以处理数据信号。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算 (RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任意其它处理 器设备(诸如数字信号处理器)。处理器102耦合至处理器总线110,该处理器总线可在处 理器102和系统100内的其他组件之间传输数据信号。系统100的诸个要素执行本领域所 熟知的常规功能。
[0042] 在一个实施例中,处理器102包括第一级(LI)内部高速缓存存储器104。取决于 架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。或者,在另一个实施例 中,高速缓存存储器可位于处理器102的外部。其他实施例也可包括内部高速缓存和外部 高速缓存的组合,这取决于特定实现和需求。寄存器组106可在多个寄存器(包括整数寄 存器、浮点寄存器、状态寄存器、指令指针寄存器)中存储不同类型的数据。提供检查点逻 辑105以针对由处理器102的线程处理元件执行的线程设置寄存器组106中的一组架构状 态寄存器的检查点。提供追踪逻辑103以追踪来自与高速缓存存储器104中的共享存储器 的事务性区域相关联的线程处理元件的存储器访问。
[0043] 执行单元108 (包括执行整数和浮点操作的逻辑)也位于处理器102中。处理器 102还包括微代码(ucode) R0M,其存储用于特定宏指令的微代码。对于一个实施例,执行单 元108包括处理事务性同步扩展(TSX)指令集109的逻辑,该指令集包括用于测试事务性 执行状态的一个或多个指令。通过将TSX指令集109包括在通用处理器102的指令集内并 包括相关的电路以执行这些指令,可使用通用处理器102中的受限制事务性存储器或硬件 锁省略来执行许多多线程应用所使用的操作。因此,通过将受限制事务性存储器或硬件锁 省略用于对共享数据执行同步,许多多线程应用可获得加速,并更为有效率地执行。这能消 除在共享存储器的具有相对很少冲突的关键区段上执行不必要的同步的需要。
[0044] 执行单元108的替代实施例也可被用于微控制器、嵌入式处理器、图形设备、DSP 以及其他类型的逻辑电路。系统100包括存储器120。存储器设备120可以是动态随机存 取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其他存储器设备。存 储器120可存储可由处理器102执行的指令和/或数据,数据由数据信号表示。
[0045] 系统逻辑芯片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。
[0046] 系统100使用外围设备中枢接口总线122以将MCH 116耦合至I/O控制器中枢 (ICH) 130。ICH 130经由本地I/O总线向一些I/O设备提供直接连接。本地I/O总线是高 速I/O总线,用于将外围设备连接至存储器120、芯片组以及处理器102。一些示例是音频 控制器、固件中枢(闪存BIOS) 128、无线收发机126、数据存储器124、包括用户输入和键盘 接口的传统I/O控制器、串行扩展端口(诸如通用串行总线USB)以及网络控制器134。数 据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或其他大容量 存储设备。
[0047] 对于系统的另一个实施例,根据一个实施例的指令可被用于芯片上系统。芯片上 系统的一个实施例包括处理器和存储器。用于这样一个系统的存储器是闪存存储器。闪存 存储器可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控 制器之类的其他逻辑块也可位于芯片上系统上。
[0048] 图2示出用于使用指令和逻辑来测试事务性执行状态的处理器200的一个实施 例。在一些实施例中,根据一个实施例的指令可被实现为对具有字节尺寸、字尺寸、双字尺 寸、四字尺寸等并具有诸多数据类型(诸如单精度和双精度整数和浮点数据类型)的数据 元素执行操作。在一个实施例中,有序前端201是处理器200的一部分,其取出将要被执 行的指令,并准备这些指令以在稍后供处理器流水线使用。前端201可包括诸个单元。在 一个实施例中,指令预取器226从存储器取出指令,并将指令馈送至指令解码器228,指令 解码器228随后解码或解释指令。例如,在一个实施例中,解码器将所接收到的指令解码为 机器可执行的被称为"微指令"或"微操作"(也称为微操作数或uop)的一个或多个操作。 在其他实施例中,解码器将指令解析为操作码和对应的数据及控制字段,它们被微架构用 于执行根据一个实施例的操作。在包括追踪高速缓存230的一个实施例中,追踪高速缓存 230接受经解码的微操作,并将它们组装为程序有序序列或微操作队列234中的踪迹,以用 于执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需的微操 作。
[0049] 一些指令被转换为单个微操作,而其他指令需要若干个微操作以完成整个操作。 在一个实施例中,如果需要超过四个微操作来完成指令,则解码器228访问微代码ROM 232 以进行该指令。对于一个实施例,指令可被解码为少量的微操作以用于在指令解码器228 处进行处理。在另一个实施例中,如果需要若干微操作来完成操作,则可将指令存储在微代 码ROM 232中。追踪高速缓存230参考进入点可编程逻辑阵列(PLA)来确定正确的微指令 指针,以从微代码ROM 232读取微代码序列以完成根据一个实施例的一个或多个指令。在 微代码ROM 232完成对于指令的微操作序列化之后,机器的前端201恢复从追踪高速缓存 230提取微操作。将理解,不一定所有实施例都包括追踪高速缓存230。
[0050] 无序执行引擎203是将指令准备好用于执行的单元。无序执行逻辑具有若干个缓 冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以 供执行。分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。寄存器重命 名逻辑将诸个逻辑寄存器重命名为寄存器组中的条目。在指令调度器(存储器调度器、快 速调度器202、慢速/通用浮点调度器204、简单浮点调度器206)之前,分配器也将每个微 操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作,另一 个微操作队列用于非存储器操作。微操作调度器202、204、206基于对它们的依赖输入寄存 器操作数源的准备就绪以及微操作完成它们的操作所需的执行资源的可用性来确定微操 作何时准备好用于执行。一个实施例的快速调度器202可在主时钟周期的每半个上进行调 度,而其他调度器可仅仅在每个主处理器时钟周期上调度一次。调度器对分配端口进行仲 裁以调度微操作以便执行。
[0051] 寄存器组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位等等的 边界处。
[0052] 执行块 211 包括执行单元 212、214、216、218、220、222、224,在执行单元212、214、 216、218、220、222、224中实际执行指令。该区块包括寄存器组208、210,寄存器组208、210 存储微指令需要执行的整数和浮点数据操作数值。一个实施例的处理器200包括有多个执 行单元:地址生成单元(AGU) 212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点 ALU 222、浮点移动单元224。对于一个实施例,浮点执行块222、224执行浮点、MMX、SIMD、 SSE以及AVX或其他操作。一个实施例的浮点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以支持包括16、32、128、256等各 种数据位。类似地,可实现浮点单元222、224以支持具有各种位宽的多个操作数。对于一 个实施例,浮点单元222、224可结合SMD和多媒体指令对128位宽度打包数据操作数进行 操作。
[0053] 在一个实施例中,在父加载完成执行之前,微操作调度器202、204、206就分派依 赖操作。因为在处理器200中微操作被投机地调度和执行,所以处理器200也包括处理存 储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则可能存在带有临时错误数 据离开调度器并运行在流水线中的依赖操作。在一些实施例中,重放机制可追踪使用错误 数据的指令,并可重新执行这些指令。仅仅依赖操作需要被重放,而允许独立操作完成。处 理器的一个实施例的调度器和重放机制还被设计成捕捉提供用于测试事务性执行状态的 功能的指令。在不具有重放机制的一些替代实施例中,可阻止对微操作的推测性执行,并且 依赖性的微操作可驻留在调度器202、204、206中直至它们被取消或直至它们无法被取消 为止。
[0054] 术语"寄存器"指代被用作为指令的一部分以标识操作数的板上处理器存储位置。 换句话说,寄存器是那些处理器外部(从编程者的角度来看)可用的处理器存储位置。然 而,一实施例的寄存器不限于表示特定类型的电路。相反,一实施例的寄存器能够存储并提 供数据,能够执行在此所述的功能。本文所描述的寄存器可利用任何数量的不同技术通过 处理器中的电路来实现,这些不同技术诸如专用物理寄存器、利用寄存器重命名的动态分 配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32 位整数数据。一个实施例的寄存器组也包含八个多媒体SIMD寄存器,用于打包数据。对于 以下讨论,寄存器应被理解为设计成保存打包数据的数据寄存器,诸如来自美国加利福尼 亚州圣克拉拉市的英特尔公司的启用了 MMX技术的微处理器的64位宽MMXtm寄存器(在 一些实例中也称为寄存器)。"这些MMX寄存器(可用在整数和浮点格式中)可与伴随 SMD和SSE指令的打包数据元素一起操作。涉及SSE2、SSE3、SSE4或更新的技术(统称 为"SSEx")的128位宽XMM寄存器也可被用于保持这样打包数据操作数。类似地,与AVX、 AVX2、AVX3技术(或更高级的技术)相关的256位宽的YMM寄存器和512位宽的ZMM寄存 器可与XMM寄存器重叠并可用于保持这样的更宽的打包数据操作数。在一个实施例中,在 存储打包数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和 浮点数据可被包括在相同的寄存器组中,或被包括在不同的寄存器组中。进一步的,在一个 实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。
[0055] 图3A是与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www) intel. com/products/processor/manuals/ 上获得的 " Intel? 64 和 IA-32 英特尔架构 软件开发者手册卷2:指令集参考(丨ntel? 64和IA-32 Intel Architecture Software Developer's Manual Volume 2:Instruction Set Reference)"中描述的操作码格式类型 相对应的具有32或更多位的操作编码(操作码)格式360以及寄存器/存储器操作数寻址 模式的一个实施例的描述。在一个实施例中,可通过一个或更多个字段361和362来编码 指令。可以标识每个指令高达两个操作数位置,包括高达两个源操作数标识符364和365。 对于一个实施例,目的地操作数标识符366与源操作数标识符364相同,而在其他实施例中 它们不相同。对于可选实施例,目的地操作数标识符366与源操作数标识符365相同,而在 其他实施例中它们不相同。在一个实施例中,由源操作数标识符364和365所标识的源操 作数中的一个被指令的结果所覆写,而在其他实施例中,标识符364对应于源寄存器元素, 而标识符365对应于目的地寄存器元素。对于一个实施例,操作数标识符364和365可被 用于标识32位或64位的源和目的地操作数。
[0056] 图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)字节所部分指定的寄存器到寄存器寻址、存 储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、直接对寄存器寻址、 寄存器至存储器寻址。
[0057] 接下来转到图3C,在一些替代实施例中,64位(或128位、或256位、或512位或 更多)单指令多数据(SMD)算术操作可经由协处理器数据处理(CDP)指令来执行。操作 编码(操作码)格式380示出了一个这样的CDP指令,其具有CDP操作码字段382和389。 对于替代实施例,该类型CDP指令操作可由字段383、384、387和388中的一个或多个来编 码。可以对每个指令标识高达三个操作数位置,包括高达两个源操作数标识符385和390 以及一个目的地操作数标识符386。协处理器的一个实施例可对8、16、32和64位值操作。 对于一个实施例,对整数数据元素执行指令。在一些实施例中,使用条件字段381,可有条件 地执行指令。对于一些实施例,可通过字段383来编码源数据尺寸。在一些实施例中,可对 SMD字段执行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,可通过字段384来 编码饱和类型。
[0058] 现在转到图3D,其描绘了根据另一实施例的与可从美国加利福尼亚州圣克拉 拉市的英特尔公司的万维网(www) intel. com/products/processor/manuals/上获得的 "Intel? 高级向量扩展编程参考(Intel? Advanced Vector Extensions Programming Reference) "中描述的操作码格式类型相对应的用于提供测试事务性执行状态的功能的另 一替代操作编码(操作码)格式397。
[0059] 原始x86指令集向1字节操作码提供多种地址字节(syllable)格式以及包含在 附加字节中的立即操作数,其中可从第一个"操作码"字节中获知附加字节的存在。此外, 特定字节值被预留给操作码作为修改符(称为前缀prefix,因为它们被放置在指令之前)。 当256个操作码字节的原始配置(包括这些特殊前缀值)耗尽时,指定单个字节以跳出 (escape)到新的256个操作码集合。因为添加了向量指令(诸如,SMD),即便通过使用前 缀进行了扩展以后,也需要产生更多的操作码,并且"两字节"操作码映射也已经不够。为 此,将新指令加入附加的映射中,附加的映射使用两字节加上可选的前缀作为标识符。
[0060] 除此外,为了便于在64位模式中实现额外的寄存器,在前缀和操作码(以及任何 的用于确定操作码所需的跳出字节)之间使用额外的前缀(被称为"REX")。在一个实施 例中,REX具有4个"有效负荷"位,以指示在64位模式中使用附加的寄存器。在其他实施 例中,可具有比4位更少或更多的位。至少一个指令集的通用格式(一般对应于格式360 和/或格式370)被一般地不出如下:
[0061] [prefixes] [rex] escape [escape2] opcode modrm (等等)
[0062] 操作码格式397对应于操作码格式370,并包括可选的VEX前缀字节391 (在一个 实施例中,以十六进制的C4或C5开始)以替代大部分的其他公共使用的传统指令前缀字 节和跳出代码。例如,以下示出了使用两个字段来编码指令的实施例,其可在原始指令中不 存在第二跳出代码时被使用。在以下所示的实施例中,传统跳出由新的跳出值所表示,传统 前缀被完全压缩为"有效负荷(payload) "字节的一部分,传统前缀被重新申明并可用于未 来的扩展,并且加入新的特征(诸如,增加的向量长度以及额外的源寄存器区分符)。
[0063]

【权利要求】
1. 一种计算机实现的方法,包括: 解码用于测试事务性状态的指令;以及 执行经解码的所述指令,以确定执行上下文是否在事务性区域之内。
2. 如权利要求1所述的计算机实现的方法,其特征在于,响应于所述执行所述经解码 的指令,将寄存器设置为第二值,所述第二值指示所述事务性区域的嵌套级。
3. 如权利要求1所述的计算机实现的方法,其特征在于,响应于所述执行所述经解码 的指令,如果所述指令在事务性区域之内执行,则将标志设置为第一值。
4. 如权利要求3所述的计算机实现的方法,其特征在于,如果所述指令在事务性区域 之内执行,则将所述标志设置成为零的第一值。
5. 如权利要求3所述的计算机实现的方法,其特征在于,响应于所述执行所述经解码 的指令,如果所述指令不在事务性区域之内执行,则将所述标志设置为第二值。
6. 如权利要求5所述的计算机实现的方法,其特征在于,如果所述指令不在事务性区 域之内执行,则将所述标志设置成第二值为一。
7. 如权利要求3所述的计算机实现的方法,其特征在于,响应于所述执行所述经解码 的指令,将寄存器设置为第二值,所述第二值指示可用于所述事务性区域的内部缓冲器的 数量。
8. 如权利要求3所述的计算机实现的方法,其特征在于,所述指令指定存储器操作数, 并且执行所述经解码的指令以确定:访问与所述存储器操作数相关联的存储器是否会导致 所述事务性区域中止。
9. 如权利要求3所述的计算机实现的方法,其特征在于,所述指令指定存储器操作数, 并且执行所述经解码的指令以确定:访问与所述存储器操作数相关联的存储器是否会导致 任何事务性区域中止。
10. 如权利要求3所述的计算机实现的方法,其特征在于,所述指令指定存储器操作 数,并且执行所述经解码的指令以确定:访问与所述存储器操作数相关联的存储器是否会 导致内部缓冲器的溢出。
11. 一种装置,包括: 解码逻辑,用于解码用于开始事务性区域的第一指令,并用于解码用于检测所述事务 性区域的事务性执行的第二指令; 检查点逻辑,用于响应于所述解码逻辑解码所述第一指令,设置一组架构状态寄存器 的检查点; 追踪逻辑,用于响应于所述解码逻辑解码所述第一指令,追踪来自与所述第一指令相 关联的处理元件的存储器访问;以及 执行逻辑,用于响应于所述解码逻辑解码所述第二指令,确定所述第二指令的执行上 下文是否在所述事务性区域之内。
12. 如权利要求11所述的装置,其特征在于,所述第一指令具有用于开始事务性区域 的前缀。
13. 如权利要求11所述的装置,其特征在于,包括: 控制逻辑,用于:如果所述第二指令在事务性区域之内执行,则将标志寄存器更新至第 一值。
14. 如权利要求13所述的装置,其特征在于,所述第一值是零。
15. 如权利要求13所述的装置,其特征在于,如果所述第二指令不在事务性区域之内 执行,则所述标志寄存器将被更新为第二值。
16. 如权利要求15所述的装置,其特征在于,所述第二值是一。
17. -种处理器,包括: 解码级,用于解码用于开始事务性区域的第一指令,并用于解码用于测试所述事务性 区域状态的第二指令;以及 执行级,用于响应于所述经解码的第二指令,确定所述第二指令的执行上下文是否在 所述事务性区域之内。
18. 如权利要求17所述的处理器,其特征在于,进一步包括: 检查点逻辑,用于响应于所述解码逻辑解码所述第一指令,设置一组架构状态寄存器 的检查点; 追踪逻辑,用于响应于所述解码逻辑解码所述第一指令,追踪来自与所述第一指令相 关联的处理元件的存储器访问。
19. 如权利要求17所述的处理器,其特征在于,所述第一指令具有用于开始事务性区 域的前缀。
20. -种系统,包括: 存储器,用于存储标识事务性区域的开始的第一指令以及用于测试所述事务性区域状 态的第二指令,以及 处理器,包括: 解码逻辑,用于解码用于开始事务性区域的第一指令,并用于解码用于检测所述事务 性区域的事务性执行的第二指令; 检查点逻辑,用于响应于所述解码逻辑解码所述第一指令,设置一组架构状态寄存器 的检查点; 追踪逻辑,用于响应于所述解码逻辑解码所述第一指令,追踪来自与所述第一指令相 关联的处理元件的存储器访问; 执行逻辑,用于响应于所述解码逻辑解码所述第二指令,确定所述第二指令的执行上 下文是否在所述事务性区域之内;以及 控制逻辑,用于:如果所述第二指令在事务性区域之内执行,则将标志寄存器更新至第 一值。
21. 如权利要求20所述的系统,其特征在于,所述第一值是零。
22. 如权利要求20所述的系统,其特征在于,如果所述第二指令不在事务性区域之内 执行,则所述标志寄存器将被更新为第二值。
23. 如权利要求22所述的系统,其特征在于,所述第二值是一。
24. -种方法,包括: 解码用于开始事务性区域的第一指令; 解码用于检测所述事务性区域的事务性执行的第二指令; 响应于解码所述第一指令,设置一组架构状态寄存器的检查点; 响应于解码所述第一指令,追踪来自与所述第一指令相关联的处理元件的存储器访 问;以及 响应于解码所述第二指令执行操作,以确定所述第二指令的执行上下文是否在所述事 务性区域之内。
25. 如权利要求24所述的方法,其特征在于,包括: 响应于解码所述第二指令,如果所述操作在事务性区域之内执行,则将第一标志寄存 器更新为第一值。
26. 如权利要求25所述的方法,其特征在于,所述第一值是零。
27. 如权利要求25所述的方法,其特征在于,响应于解码所述第二指令,如果所述操作 不在事务性区域之内执行,则所述标志寄存器将被更新为第二值。
28. 如权利要求27所述的方法,其特征在于,所述第二值是一。
29. 如权利要求25所述的方法,其特征在于,包括: 如果对由所述第二指令指定的存储器操作数的访问会与另一事务性区域的执行相冲 突,则将第二标志寄存器更新为第二值。
30. 如权利要求29所述的方法,其特征在于,对所述存储器操作数的所述访问是读访 问。
31. 如权利要求29所述的方法,其特征在于,对所述存储器操作数的所述访问是写访 问。
32. 如权利要求29所述的方法,其特征在于,所述第二值是一。
【文档编号】G06F11/22GK104335183SQ201380028480
【公开日】2015年2月4日 申请日期:2013年6月19日 优先权日:2012年6月29日
【发明者】R·拉吉瓦尔, B·L·托尔, K·K·赖, M·C·梅尔腾, M·G·迪克森 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1