专利名称:用于多线程的寄存器检查点机制的制作方法
技术领域:
本公开一般涉及信息处理系统领域。本公开尤其涉及用于推测性多线程 (speculative multithreading)的寄存器检查点机制。
背景技术:
为了提高诸如包括微处理器的那些信息处理系统的性能,已开发出硬件和软件技 术两者。一种已开发来改善处理器性能的办法被称为“多线程”。在多线程中,一个指令流 被拆分成能并行执行的多个指令流。在仅软件多线程办法中,诸如时间复用多线程或接通 事件多线程,这多个指令流是在同一共享处理器上交替地执行的。日益增加地在硬件中支持多线程。例如,在一种办法中,诸如芯片多处理器(CMP) 系统等多处理器系统中的处理器可同时各自对多个线程之一进行动作。在被称为同时多线 程(SMT)的另一种办法中,使得单个物理处理器对操作系统和用户程序而言看起来是多个 逻辑处理器。即,每个逻辑处理器维持完整的架构状态集,但物理处理器的几乎所有其他资 源都被共享,这些资源诸如高速缓存、执行单元、分支预测器控制逻辑和总线。这些线程同 时执行并且比时间复用多线程或接通事件多线程更好地利用共享资源。对于诸如CMP和SMT多线程系统等为多线程提供硬件支持的那些系统,在单线程 应用的执行期间,一个或更多个线程可能是空闲的。利用另外的空闲线程来推测性地使单 线程应用并行化可提高执行速度,但常常难以确定单线程应用的哪些部分应由另外的空闲 线程来推测性地执行。推测性线程并不总是保证是独立的。在运行时间可能产生线程间依 存性,这导致误推测并且将简单地造成推测失败。为了解决误推测,可能需要恢复正确的架 构状态。迄今为止,尚未完全探索出用于解决推测性多线程系统中的此类误推测的高效机 制。
本发明通过示例进行说明,而且不旨在受限于附图的各图。图1示出对推测性多线程使用寄存器检查点机制的多线程处理系统的一个实施 例。图2示出对推测性多线程使用寄存器检查点机制的过程的一个实施例的流程图。图3示出对推测性多线程使用寄存器检查点机制的过程的替换性实施例的流程 图。
具体实施例方式公开了在多线程处理系统中使用寄存器检查点机制来支持推测性多线程的方法 和装置。每当在运行时间产生线程间依存性时,它们可能导致误推测。解决误推测可能要 求恢复正确的架构状态并且执行回退到安全点。本发明的一些实施例包括存储器,该存储器具有存储用于在多个线程中进行误推测恢复的检查点数据的存储区域。多线程单元并发 地执行线程。线程单元可执行检查点掩码指令以便将存储区域初始化为存储活跃检查点数 据,其包括寄存器内容和指示所存储的寄存器内容的有效性的检查点掩码。随着寄存器内 容改变,线程单元可执行检查点写指令以便为活跃检查点存储寄存器内容并更新检查点掩 码。线程单元还可执行恢复函数指令以存储关于活跃检查点的检查点恢复函数的指令指 针,并且响应于线程中的误推测分支到检查点恢复函数。线程单元随后执行一个或更多个 检查点读指令以便将数据从有效检查点存储区域复制到必要的寄存器中以恢复正确的架 构状态,执行可从该架构状态重新开始。由此,此类寄存器检查点机制可提供可恢复的有效架构状态而不需要线程间同 步。线程单元异步地执行线程并且因此无缝地协作以合并及构建架构状态。将领会,本发 明的实施例允许精细粒度的推测性多线程。出于以下讨论的清晰目的,在误推测的上下文 中解决维持可恢复的有效架构状态,但是将领会,在诸如中断、异常、上下文切换等任何数 目个非预期打断的情形中,可以用基本上相同的方式来促成恢复。同样出于以下讨论的清 晰目的,假定指令以顺序次序提交或变得全局可见。本发明的这些和其他实施例可根据以下教示来实现,并且应当明显的是,可在以 下教示中作出各种修改和改变而不脱离本发明的较宽泛精神和范围。因此,说明书和附图 应当以说明性而非限制性的意义来对待,并且本发明仅根据权利要求及其等效技术方案来衡量。如已提到的,推测性线程并不总是保证是独立的。已使用多种技术来静态地或在 运行时间检测和解决线程间依存性。这些技术可以是基于软件或基于硬件的,或者这两者 的组合。基于硬件的高速缓存一致性基础设施例如可用于检测线程间依存性、和/或通过 针对名称依存性重命名和/或针对运行时间的真正依存性进行转发来解决线程间依存性。在软件中,可执行依赖于编译器静态地私有化数据的能力的名称依存性解决方 案。那么其他依存性可在运行时间检测,并且将简单地造成推测失败。动态重命名也可用 来解决软件中的名称依存性,但在推测性执行之后需要恢复阶段。真正数据依存性可通过 广播共享数据的地址并强迫这些地址上的线程在相关联开销下进行同步来解决。懒惰转发 技术也可用于真正数据依存性以降低同步开销。也可在软件中用检查码和数据结构来扩张 推测性负载和存储以检测误推测。每当在运行时间产生线程间依存性时,它们可能导致误推测。不管用于检测误推 测的机制如何,解决误推测可能要求恢复正确的架构状态并且使执行回退到安全点。本文 中所公开的技术针对维护架构状态检查点并且使执行回退到安全执行点,这些安全执行点 与独立于可用于依存性解决方案并检测误推测的其他机制的那些检查点相对应。图1示出对推测性多线程使用寄存器检查点机制的多线程处理系统101的一个实 施例。系统101的实施例可包括存储器114,该存储器具有存储用于在多个推测性线程中 进行误推测恢复的检查点141数据和检查点145数据的存储区域。多个线程单元111-131 经由总线或任何其他互连117与存储器114耦合,并且线程单元111-131并发地执行其相 应的线程。系统101的一些实施例还包括诸如处理器102等处理器,其具有多个线程单元 111和121。将领会,用于存储检查点141数据和检查点145的存储区域可由编译器或由操 作系统在存储器114中分配,或者存储器114在硬件中可以处于隐藏或别名状态。
线程单元111-131可通过其相应的执行单元112-132执行检查点掩码指令以便 将存储区域初始化为存储活跃检查点141数据,包括多个存储位置143-144用于存储寄存 器113-133内容和指示所存储的寄存器113-133内容的有效性的检查点掩码。将领会,在 一些实施例中,执行单元112-132中的一个或更多个可由线程单元111-131中的一些物理 地共享。在一些实施例中,管理两个存储区域,一个用于存储活跃检查点141数据,一个用 于存储最近有效检查点145数据。随着寄存器113-133内容改变,线程单元111-131可通 过相应的执行单元112-132执行检查点写指令以便为活跃检查点141存储其相应的寄存器 113-133内容并更新关于所存储的相应寄存器的检查点掩码。对于一些实施例,更新检查点 掩码直至所有感兴趣的寄存器内容都已被存储,此时活跃检查点变成最近有效检查点,并 且可通过执行另一个检查点掩码指令来初始化新的活跃检查点。对于一些实施例,通过在 活跃检查点掩码完全有效时响应于第一个成功的检查点掩码指令复制检查点数据,活跃检 查点可变成最近有效检查点。对于替换性实施例,可交换指针115和116。线程单元111-131还可通过相应的执行单元112-132执行恢复函数指令以便将关 于检查点恢复函数的指令指针存储在用于活跃检查点141数据的存储位置142。对于一些 实施例,每个推测性线程可在用于活跃检查点141数据的存储位置142中存储对应截然不 同的检查点恢复函数的截然不同的指令指针。响应于线程单元111-131中任一个的推测性 线程中的误推测,这些线程单元111-131可分支到检查点恢复函数。线程单元111-131随 后可通过相应的执行单元112-132执行一个或更多个检查点读指令以便将数据从有效检 查点145存储区域复制到必要的相应寄存器113-133中以恢复正确的架构状态,执行可从 该架构状态重新开始。对于支持推测性多线程的寄存器检查点机制的指令的一个实施例,在表1中给出 描述。
指令范围描述CP—MASK register—mask (0 _掩码寄存器_掩 码)全局通过将寄存器检查点掩码设置为 register_mask来初始化活跃检查点。任 选地将所提交的检查点信息复制到活跃 检查点中。REC0VERY_FUNC ip (恢复_函数ip)线程指定用于在活跃检查点中执行线程的恢 复路线的指令指针(ip)。CP_WRITE reg, address 寄存器,地址)全局将架构寄存器的内容存储到活跃检查点 存储的地址并将相应的检查点掩码设为 有效。CP_READ reg, address 寄存器,地址)线程将所存储的寄存器内容从有效检查点存 储中的地址加载到架构寄存器中。
7
表1.检查点指令描述将领会,可作出或使用表1中所示的检查点指令的各种替换性实施例而不脱离本 发明的原理。例如,检查点掩码可能无需由检查点掩码指令来显式地设置,而是可提供寄存 器计数作为自变量。图2示出对推测性多线程使用寄存器检查点机制的过程201的一个实施例的流程 图。过程201和本文中所公开的其他过程由处理块来执行,处理块可包括专用硬件或软件、 或者可由通用机器或由专用机器或由这两者的组合执行的固件操作码。过程201和本文中 所公开的其他过程的处理块也可由一个或更多个线程单元并发或并行或顺序或无序地执 行。在处理块211中,执行检查点掩码指令以便将用于活跃检查点141的存储器存储 区域初始化为存储至少第一数据143和第二数据144。在处理块212中,当发生中央处理单 元(CPU)写时,例如在关键寄存器的内容可能已改变的情形中,处理前进到处理块213,在 那里执行检查点写指令以存储与已改变的寄存器内容相对应的第一数据143、以及存储第 二数据144,第二数据144的状态指示关于该检查点写指令的已改变的寄存器内容的有效 性状态。否则处理前进到处理块214,在那里如果检测到误推测或其他需要回退的事件,则 处理前进到处理块215并且执行回退到最近有效检查点145。如果没有检测到误推测或其 他此类事件,则处理从处理块214正常地前进到处理块211并且初始化新的活跃检查点。对于过程201的一些实施例,检查点掩码指令、检查点写指令以及用于使执行回 退到最近有效检查点的恢复码全部由编译器静态地插入线程中。对于过程201的一些替换 性实施例,检查点掩码指令、检查点写指令以及用于使执行回退到最近有效检查点的恢复 码可由动态优化器或通过微代码或由动态硬件机制动态地插入线程中。图3示出对推测性多线程使用寄存器检查点机制的过程302的替换性实施例的流 程图。在处理块311中,执行恢复函数指令以便在用于活跃检查点141的存储器存储区 域中存储包括关于检查点恢复函数的指令指针的第一数据142。在处理块312中,当发生 CPU写时——例如在关键寄存器的内容可能已改变的情形中,处理前进到处理块313,在那 里执行检查点写指令以存储与已改变的寄存器内容相对应的第二数据143、并且存储第三 数据144,第三数据144的状态指示关于该检查点写指令的已改变的寄存器内容的有效性 状态。否则处理前进到处理块314,在那里如果检测到误推测或其他此类事件,则处理前进 到处理块315,并且响应于误推测采取去往关于所述检查点恢复函数的指令指针所指定的 位置的分支。随后在处理块316中,执行一个或更多个检查点读指令以便将所存储数据147 从用于最近有效检查点145的所述存储器存储区域复制到必要的相应寄存器中。如果在处 理块314中没有检测到误推测或其他此类事件,则处理可正常地前进到处理块311并且构 建新的活跃检查点。将领会,在过程301的一些实施例中,恢复函数指令、检查点写指令以及这一个或 更多个检查点读指令可由编译器静态地插入线程中,或者可由动态优化器或通过任何其他 合适的方法动态地插入线程中。以上描述旨在解说本发明的优选实施例。根据以上讨论还应该清楚,尤其是在快速增长且不容易预见进一步进步的这些技术领域,本领域技术人员可在装置和细节上修改 本发明而不脱离落在所附权利要求及其等效技术方案的范围内的本发明原理。
权利要求
一种装置,包括多个线程单元,用于并发地执行多个线程,所述多个线程单元中的每一个能够执行检查点写指令;以及存储器存储区域,用于存储关于在所述多个线程中的一个的执行期间遭遇的检查点写指令的第一数据,所述第一数据对应于由所述检查点写指令正在写的内容数据;其中所述存储器存储区域还用于存储关于所述检查点写指令的第二数据,所述第二数据的状态响应于所述检查点写指令的执行指示所述检查点写指令的执行状态。
2.如权利要求1所述的装置,其特征在于,所述多个线程单元中的每一个还能够执行 检查点掩码指令以初始化所述第二数据的状态。
3.如权利要求2所述的装置,其特征在于,执行所述检查点掩码指令针对活跃检查点 初始化所述第二数据的状态。
4.如权利要求3所述的装置,其特征在于,执行所述检查点掩码指令将所提交的有效 检查点复制到所述活跃检查点中。
5.如权利要求1所述的装置,其特征在于,所述多个线程单元中的每一个还能够执行 检查点读指令以将所述第一数据从所述存储器存储区域复制到寄存器中。
6.如权利要求1所述的装置,其特征在于,所述存储器存储区域还用于存储关于检查 点恢复函数的第三数据。
7.如权利要求6所述的装置,其特征在于,所述第三数据响应于在所述多个线程中的 所述一个的执行期间遭遇的恢复函数指令存储关于所述检查点恢复函数的指令指针。
8.一种多线程处理器,包括多个线程单元,用于并发地执行多个线程,所述多个线程单元中的每一个能够执行检 查点写指令并且还能够执行检查点掩码指令;所述多个线程单元中的一个的执行单元,响应于所述检查点掩码指令将存储器存储区 域初始化为存储至少第一数据和第二数据;以及所述执行单元响应于所述检查点写指令存储与所述检查点写指令正在写的寄存器内 容数据相对应的所述第一数据、并且存储所述第二数据,所述第二数据的状态指示关于所 述检查点写指令的所述寄存器内容数据的执行状态。
9.如权利要求8所述的处理器,其特征在于,所述多个线程单元中的每一个还能够执 行检查点读指令以将所述第一数据从所述存储器存储区域复制到寄存器中。
10.如权利要求9所述的处理器,其特征在于,所述多个线程单元中的每一个还能够执 行恢复函数指令以在所述存储器存储区域中存储包括关于检查点恢复函数的指令指针的 第三数据。
11.一种用于推测性地执行多个线程的机器实现的方法,包括执行检查点掩码指令以将存储器存储区域初始化为存储至少第一数据和第二数据;以及执行检查点写指令以存储与所述检查点写指令正在写的寄存器内容数据相对应的所 述第一数据、并且存储所述第二数据,所述第二数据的状态指示关于所述检查点写指令的 所述寄存器内容数据的状态。
12.如权利要求11所述的方法,其特征在于,还包括执行恢复函数指令以在所述存储器存储区域中存储包括关于检查点恢复函数的指令 指针的第三数据。
13.如权利要求12所述的方法,其特征在于,还包括执行检查点读指令以将所述第一数据从所述存储器存储区域复制到所述寄存器中。
14.如权利要求12所述的方法,其特征在于,执行所述检查点读指令是响应于所述多 个线程中的误推测而分支到由关于所述检查点恢复函数的所述指令指针所指定的位置的结果。
15.一种用于多个线程中的误推测恢复的机器实现的方法,包括执行恢复函数指令以在存储器存储区域中存储包括关于检查点恢复函数的指令指针 的第一数据;响应于所述多个线程中的误推测而分支到由关于所述检查点恢复函数的所述指令指 针所指定的位置;以及执行检查点读指令以将第二数据从所述存储器存储区域复制到寄存器中。
16.如权利要求15所述的方法,其特征在于,还包括执行检查点掩码指令以针对新检查点将所述存储器存储区域初始化为存储至少所述 第一数据、所述第二数据和第三数据;以及执行检查点写指令以存储与所述检查点写指令正在写的寄存器内容数据相对应的所 述第二数据、并且存储所述第三数据,所述第三数据的状态指示关于所述检查点写指令的 所述寄存器内容数据的状态。
17.如权利要求16所述的方法,其特征在于,执行所述检查点掩码指令将所提交的有 效检查点复制到活跃检查点中。
18.一种多线程处理系统,包括存储器,其具有存储用于在多个线程中进行误推测恢复的数据的存储器存储区域;多个线程单元,用于并发地执行所述多个线程,所述多个线程单元中的每一个能够执 行检查点写指令并且还能够执行检查点掩码指令;所述多个线程单元中的一个的执行单元,响应于所述检查点掩码指令将所述存储器存 储区域初始化为存储至少第一数据和第二数据;以及所述执行单元响应于所述检查点写指令存储与所述检查点写指令正在写的寄存器内 容数据相对应的所述第一数据、并且存储所述第二数据,所述第二数据的状态指示关于所 述检查点写指令的所述寄存器内容数据的执行状态。
19.如权利要求18所述的系统,其特征在于,所述多个线程单元中的每一个还能够执 行检查点读指令以将所述第一数据从所述存储器存储区域复制到所述寄存器中。
20.如权利要求19所述的系统,其特征在于,所述多个线程单元中的每一个还能够执 行恢复函数指令以在所述存储器存储区域中存储包括关于检查点恢复函数的指令指针的 第三数据。
21.—种多线程处理系统,包括存储器,其具有存储用于在多个线程中进行误推测恢复的数据的存储器存储区域;多个线程单元,用于并发地执行所述多个线程,所述多个线程单元中的每一个能够执 行恢复函数指令并且还能够执行检查点读指令;所述多个线程单元中的一个的执行单元,响应于所述恢复函数指令在所述存储器存储 区域中存储包括关于检查点恢复函数的指令指针的第一数据;所述多个线程单元中的所述一个,响应于所述多个线程中的误推测分支到由关于所述 检查点恢复函数的所述指令指针所指定的位置;以及所述执行单元,响应于所述检查点读指令将第二数据从所述存储器存储区域复制到寄 存器中。
22.如权利要求21所述的系统,其特征在于响应于检查点掩码指令,所述多个线程单元中的所述一个针对新检查点将所述存储器 存储区域初始化为存储至少所述第一数据、所述第二数据和第三数据;以及响应于检查点写指令,所述多个线程单元中的所述一个存储与所述检查点写指令正在 写的寄存器内容数据相对应的所述第二数据、并且存储所述第三数据,所述第三数据的状 态指示关于所述检查点写指令的所述寄存器内容数据的状态。
23.如权利要求22所述的系统,其特征在于,执行所述检查点掩码指令将所提交的有 效检查点复制到活跃检查点中。
全文摘要
公开了使用寄存器检查点机制来解决多线程误推测的方法和装置。恢复有效的架构状态并且执行回退。一些实施例包括用于存储检查点数据的存储器。多线程单元并发地执行线程。它们执行检查点掩码指令以便将存储器初始化为存储活跃检查点数据,其包括寄存器内容和指示所存储寄存器内容的有效性的检查点掩码。随着寄存器内容改变,线程执行检查点写指令以存储寄存器内容并更新检查点掩码。线程还执行恢复函数指令以存储至检查点恢复函数的指针,并且响应于线程中的误推测分支到检查点恢复函数。线程随后执行一个或更多个检查点读指令以便将数据从有效检查点存储区域复制到必要的寄存器中以恢复有效的架构状态,执行可从该架构状态重新开始。
文档编号G06F9/38GK101916183SQ20101016108
公开日2010年12月15日 申请日期2010年4月6日 优先权日2009年4月8日
发明者A·冈萨雷斯, A·马丁内斯, C·玛德里斯, E·G·康迪那, F·拉托瑞, J·M·康迪那, P·洛佩茨, R·马丁内斯 申请人:英特尔公司