线程活单元

阅读:308发布:2020-05-15

专利汇可以提供线程活单元专利检索,专利查询,专利分析的服务。并且本 发明 涉及用来在线程不能随着指令退休而前进时为该线程 指定 优先权的方法、设备和系统 实施例 。对于至少一个实施例,所述线程是多处理器系统中的多个激活线程的其中之一,该多处理器系统包括 存储器 活 锁 破坏器逻辑和/或饥饿避免逻辑。此外还描述了其他实施例并且要求保护所述其他实施例。,下面是线程活单元专利的具体信息内容。

1、一种处理器,包括:
包括第一逻辑处理器和第二逻辑处理器的处理器内核
耦合到第一逻辑处理器的第一线程活单元;
耦合到第二逻辑处理器的第二线程活锁单元;
其中,所述第一活锁单元用来响应于缺少可用于由第一活锁单元 执行的指令而请求对第二活锁单元的停滞;以及
仲裁器;
其中,所述第一和第二线程活锁单元以及所述仲裁器还用来在所 述第一逻辑处理器和所述第二逻辑处理器之间强加优先权。
2、权利要求1的处理器,其中:
所述第一线程活锁单元还用来确定第一逻辑处理器是否在对应于 第一软件线程的指令执行期间未能前进;以及
所述第二线程活锁单元用来确定第二逻辑处理器是否在对应于第 二软件线程的指令执行期间未能前进。
3、权利要求1的处理器,还包括:
耦合到所述第一和第二逻辑处理器的存储器活锁单元。
4、权利要求3的处理器,其中:
所述存储器活锁单元还用来启动存储器活锁避免动作。
5、权利要求1的处理器,其中:
所述仲裁器用来在第一逻辑处理器和第二逻辑处理器之间强加优 先权,以便解决长等待时间高速缓存器错失。
6、权利要求3的处理器,其中:
所述第一和第二活锁单元还用来把优先权让给所述存储器活锁单 元。
7、权利要求1的处理器,其中:
所述活锁单元还用来响应于缺乏可用于执行的指令而启动饥饿避 免动作。
8、权利要求6的处理器,其中:
所述第一活锁单元还用来对于与第一逻辑处理器相关的第一软件 线程确定是否缺乏可用指令;以及
所述第二活锁单元还用来对于与第二逻辑处理器相关的第二软件 线程确定是否缺乏可用指令。
9、权利要求2的处理器,其中:
所述第一活锁单元还用来响应于确定第一逻辑处理器在对应于第 一软件线程的指令执行期间未能前进而变为激活。
10、权利要求9的处理器,其中:
如果第一逻辑处理器激活,则所述第二活锁单元用来把优先权让 给第一逻辑处理器。
11、权利要求2的处理器,其中:
所述第二活锁单元还用来响应于确定第二逻辑处理器在对应于第 二软件线程的指令执行期间未能前进而变为激活。
12、权利要求11的处理器,其中:
如果第二逻辑处理器激活,则所述第一活锁单元用来把优先权让 给第二逻辑处理器。
13、权利要求12的处理器,其中:
所述第一活锁单元用来在由第二逻辑处理器执行的高优先权锁定 操作把优先权让给第二逻辑处理器。
14、权利要求1的处理器,其中:
所述处理器内核包括至少一个附加的逻辑处理器,其中的每一个 附加逻辑处理器耦合到附加的活锁单元;以及
所述至少一个附加活锁单元连同所述第一和第二活锁单元以及所 述仲裁器用来在第一逻辑处理器、第二逻辑处理器和所述至少一个附 加逻辑处理器之间强加优先权。
15、一种系统,包括:
存储器系统;以及
第一处理器内核,其具有至少第一逻辑处理器;以及
第二处理器内核;
第一处理器内核还包括第一活锁单元,以用来确定在第一逻辑处 理器中是否存在多个条件,以及基于满足所述多个条件而确定第一逻 辑处理器被活锁;
其中,第一活锁单元还用来响应于确定第一逻辑处理器被活锁而 请求对第二处理器内核的停滞。
16、权利要求15的系统,其中:
所述第一活锁单元还用来响应于确定第一逻辑处理器被活锁而请 求冲刷与第二处理器内核相关的至少一个微体系结构。
17、权利要求15的系统,其中:
所述第一活锁单元还用来基于满足所述多个条件而确定第一逻辑 处理器是否处于指令饥饿状态。
18、权利要求17的系统,其中:
所述第一活锁单元还用来响应于确定第一逻辑处理器处于指令饥 饿状态而启动饥饿避免动作。
19、权利要求15的系统,还包括:
用来在第一和第二处理器之间仲裁优先权请求的仲裁器,其中所 述优先权请求是基于活锁确定。
20、权利要求15的系统,其中:
所述存储器系统还包括动态随机存取存储器
21、一种方法,包括:
确定对应于第一处理器的第一逻辑处理器是否在至少一个指令的 执行中未能前进;
如果是的话,声明对第二逻辑处理器的停滞操作;
确定所述停滞是否导致第一逻辑处理器的前进;
如果不是的话,确定所述第一逻辑处理器是否处于指令饥饿状态 ,并且如果是的话则采取饥饿避免动作;以及
请求对第二逻辑处理器的停滞。
22、权利要求21的方法,还包括:
请求冲刷与第二逻辑处理器相关的流线。
23、权利要求21的方法,还包括:
请求对第二处理器的停滞。
24、权利要求21的方法,其中,对第二逻辑处理器的停滞操作还 包括:
除非所述第二逻辑处理器处于激活的活锁避免状态,否则声明所 述停滞。
25、权利要求21的方法,其中,对第二逻辑处理器的停滞操作还 包括:
除非所述第二逻辑处理器正在执行高优先权锁定操作,否则声明 所述停滞。
26、权利要求21的方法,其中,对第二逻辑处理器的停滞操作还 包括:
响应于确定第一逻辑处理器已经在至少预定时间量内未能前进而 声明所述停滞。
27、在多线程处理器中,一种在多个线程和存储器活锁单元之间 指定线程优先权的方法,包括:
确定在该处理器的该存储器活锁单元和至少两个线程之间是否存 在多个条件,所述至少两个线程包括第一线程和一组剩余线程;
基于满足所述多个条件而确定第一线程是否被活锁;以及
如果是的话,为第一线程而不是该组剩余线程当中的任何一个线 程指定优先权。
28、权利要求27的方法,还包括:
确定第一线程是否已经在至少预定时间长度内被活锁。
29、权利要求27的方法,还包括:
采取动作以便刺激第一线程前进。
30、权利要求29的方法,其中,采取动作还包括:
向至少其中一个剩余线程发出停滞。
31、权利要求29的方法,其中,采取动作还包括:
响应于确定指令侧饥饿而调用活锁破坏器。
32、权利要求31的方法,还包括:
评估退休队列的一部分是否为空。
33、权利要求29的方法,其中,采取动作还包括:
响应于高速缓存器错失而向仲裁器发出优先权请求。
34、权利要求29的方法,其中,采取动作还包括:
向另一个处理器发出停滞请求。
35、一种多内核多线程处理器,包括:
多个处理器内核,所述多个处理器内核当中的每一个是能够执行 多个线程的多线程处理器;
适于与所述多个处理器内核当中的每一个通信的活锁缩减器,所 述活锁缩减器从第一处理器内核接收关于第一线程的线程进展信息, 并且响应于来自第一处理器内核的关于所述第一线程的该线程进展信 息来调节所述多个处理器内核当中的第二处理器内核的第二线程的行 为。
36、权利要求35的处理器,其中:
所述活锁缩减器包括多个活锁电路,其中的至少一个活锁电路与 所述多个处理器内核的其中之一相关。
37、权利要求35的多内核多线程处理器,其中,所述活锁缩减器 包括:
耦合到所述多个处理器内核的仲裁控制逻辑,所述仲裁控制逻辑 用来从所述多个内核接收线程进展信息以及仲裁优先权,以便确定应 当帮助哪些线程。
38、权利要求35的多内核多线程处理器,其中,每个处理器内核 包括:
线程活锁单元,其耦合到所述内核以便测量线程活锁指标;以及
存储器活锁单元,其耦合到所述内核以便测量存储器活锁指标。
39、权利要求38的多内核多线程处理器,还包括:
用来从所述多个内核当中的每一个的所述线程活锁单元和/或所述 存储器活锁单元接收活锁信息的仲裁器,所述仲裁器用来响应于所述 活锁信息而使得一个线程优先于另一个线程。

说明书全文

技术领域

发明的公开内容总体涉及信息处理系统,并且尤其涉及检测和 校正多线程处理系统内的多个并发线程之间的活(livelock)。

背景技术

为了改进信息处理系统(比如那些包括微处理器的信息处理系 统)的性能,已经采用了硬件软件技术。在硬件侧,用于改进信息 处理器系统的性能的微处理器设计方法已经包括提高时钟速度、流 线式处理、分支预测、超标量执行、无序执行以及高速缓存。许多此 类方法已经导致晶体管数量的增加,并且在某些事例中,晶体管数量 的增加速率已经大于性能改进的速率。
除了尝试只通过附加的晶体管来改进性能之外,其他的性能增强 涉及软件技术。已经被采用来改进处理器性能的一种软件方法被称作 “多线程”。在软件多线程中,可以把一个指令流划分成多个指令流, 所述多个指令流可以被并行执行。或者,可以并行执行多个独立的软 件流。
在一种被称作时间片多线程或者时间复用(“TMUX”)多线程 的方法中,单个处理器在预定的时间周期之后在各线程之间进行切 换。在另一种方法中,单个处理器在出现触发事件之后在各线程之间 进行切换,所述触发事件例如是长等待时间高速缓存器错失(cache miss)。在被称作基于事件切换的多线程(“SoEMT”)的后一种方 法中,在给定时间最多只有一个线程激活。
在硬件中越来越多地支持多线程。例如,在一种方法中,在例如 芯片多处理器(“CMP”)系统的多处理器系统中的各处理器可以并 发地对多个软件线程当中的一个进行操作。在被称作同时多线程 (“SMT”)的另一种方法中,使得单个物理处理器对于操作系统和用 户程序表现为多个逻辑处理器。对于SMT,在不需要切换的情况下, 多个软件线程可以单个处理器上同时激活并且执行。也就是说,每一 个逻辑处理器维持一整套所述体系结构状态,但是所述物理处理器的 许多其他资源被共享,比如高速缓存器、执行单元、分支预测器、控 制逻辑以及总线。从而对于SMT,来自多个软件线程的指令在每个逻 辑处理器上并发地执行。
对于支持软件线程的并发执行的系统(比如SMT和/或CMP系 统),存在发生以下情况的可能性:在两个或多个并发激活线程之间 对共享资源的争用可能会阻止至少其中一个线程继续前进。由于与另 一个激活线程的资源争用而导致一个线程不能继续前进的情况可以被 称作“活锁”。
附图简述
可以参照附图来理解本发明的实施例,其中相同的附图标记指代 相同的元件。这些附图不是限制性的,而是用于说明其中的设备、系 统和方法的所选实施例,所述设备、系统和方法用于检测和校正多线 程处理系统内的多个并发线程之间的活锁。
图1是一个处理器的至少一个实施例的方框图,该处理器包括多 个线程活锁单元,其中的每一个用来确定对应于多个逻辑处理器的其 中之一的线程前进。
图2的方框图示出能够执行所公开的技术的多线程系统的至少一 个实施例。
图3的方框图示出一个处理器的至少一个实施例的前端和执行内 核,该处理器包括对应于多个逻辑处理器当中的每一个的线程活锁单 元。
图4的方框图示出一个处理系统的至少一个实施例的存储器分层 结构,该处理系统包括对应于多个逻辑处理器当中的每一个的线程活 锁单元。
图5和6的状态图示出用于检测和减轻多个并发线程之间的活锁 的方法的至少一个实施例。
图7的方框图示出进入图5和6所示的方法的空闲状态的复位条 件。
图8的流程图示出用于在多个处理器之间仲裁活锁优先权请求的 方法的至少一个实施例。
图9的方框图示出在各线程活锁单元和一个存储器活锁单元之间 共享的活锁破坏器逻辑的至少一个实施例。
详细描述
在下面的描述中阐述了多个具体细节以便提供对本发明的更为全 面的理解,所述细节例如是处理器类型、多线程环境以及微体系结构。 然而,本领域技术人员应当理解,可以在无需这种具体细节的情况下 实践本发明。此外,没有详细示出某些公知的结构、电路等等,以避 免模糊本发明。
这里公开的方法、设备和系统可以检测并且避免多线程处理系统 中的活锁。对于至少一个所公开的实施例,线程活锁单元包括用于跟 踪逻辑处理器的软件线程的指令的退休(retirement)的机制。跟踪退 休只是跟踪线程是否在前进的一种方法。虽然这里讨论的实施例专注 于指令退休以作为前进指标,但是本领域技术人员将意识到,其他实 施例可以利用不同的或者附加的指标来确定线程是否在前进。例如, 可以评估线程进展信号或寄存器,可以跟踪指令指针的前进,或者可 以评估任何其他指示进展的信号或指标。
图1示出了用来执行多线程的处理器104和仲裁器180的至少一 个实施例。处理器104和仲裁器180可以驻留在单个芯片封装103内。 处理器104可以包括多个逻辑处理器150a-150n,以便支持并发多线 程。对于至少一个实施例,处理器104利用其多个逻辑处理器150a-150n 来提供SMT处理能。对于这种实施例,每个逻辑处理器150a-150n 具有其自身的指令定序器(例如参见图3的340)。对于这种实施例, 逻辑处理器150维持其自身的体系结构状态版本,但是可以在所有的 并发SMT软件线程之间共享单个处理器内核104的执行资源。
对于SMT,多个软件线程可以并发地运行,其中的每一个软件线 程在多个逻辑处理器150的其中之一上运行。逻辑处理器150a-150n在 这里可以被互换地称作“物理线程”。除非另行明确指明,在没有“物 理”或“软件”的前缀时,这里使用的术语“线程”总体指代激活逻 辑处理器以及该逻辑处理器正在执行的相关软件指令流。
图1示出了可以与每一个逻辑处理器150a-150n相关的线程活锁 单元(“TLU”)165a-165n。因此,对于至少一个实施例,对于处理 器104的每一个物理线程150a-150n,在每线程的基础上复制TLU 165。在这里,对应于特定物理线程150的TLU 165可以被简单地称作 该物理线程的“TLU”。
图1示出处理器104还可以包括存储器活锁单元(“MLU”)166。 存储器活锁单元166可以执行以下操作:1)基于存储器活锁指标检测 来自单个处理器104的各并发线程的各存储器操作之间的活锁,以及 2)采取动作以解决这种活锁。
下面结合图5到7更详细地讨论TLU 165的操作。一般来说,线 程活锁单元165可以执行以下操作:1)基于特定的线程活锁指标确定 对应于其相关逻辑处理器的软件线程无法前进(“被活锁”),以及2) 采取动作以解决这种活锁。对于至少一个实施例,线程活锁单元165 通过对自从其逻辑处理器已经退休了一个指令之后的周期数进行计数 来确定没有前进,或者已经以其他方式证明了可能的前进。线程活锁 单元165所能检测的其中一个特定状况被称作“指令饥饿”。指令饥 饿是这样一个状况,其中第一线程可能阻断或者过度延迟另一个线程 的指令获取。结果,我们称该另一个线程“指令饥饿”或者I饥饿。正 在经历指令饥饿的线程正在经历可用于执行的指令的缺乏,即该线程 由于没有用来退休的指令而无法前进。
当线程活锁单元165采取动作以尝试解决活锁时,该线程活锁单 元165在这里被称为“激活”。线程活锁单元165可以变为“激活” 以便执行几个活锁破坏器动作当中的任何一个,进行所述活锁破坏器 动作以便尝试刺激与该TLU 165相关的线程的前进。例如,响应于其 相关逻辑处理器150不能前进,第一逻辑处理器150的TLU 165可以 采取动作以便请求停滞一个或多个其他逻辑处理器150,或者请求对一 个或多个其他逻辑处理器150的微体系结构状态进行复位(这里有时 被称作“核爆(nuke)”)。此外,例如激活的TLU 165可以调用活 锁破坏器(例如参见下面结合图9对共享活锁破坏器950的讨论), 以便采取动作来减轻指令饥饿。此外,如果检测到长等待时间高速缓 存器错失,激活的TLU 165可以从仲裁器180请求优先权。下面结合 图5-7更详细地讨论采取这种行动的某些实施例。
因此,根据一个实施例,各TLU 165a-165n连同仲裁器180在处 理器104的各逻辑处理器150a-150n和MLU 166之间强加优先权,以 便在SMT软件线程的执行期间检测并减轻活锁状况。此外,各TLU 165a-165n自身可以在逻辑处理器150a-150n之间强加优先权,以便减 轻线程活锁。然而,在各种不同实施例中,这些特征当中的一部分或 全部可以存在也可以不存在。
图2的方框图示出多内核多线程计算系统200的至少一个实施 例,该系统200能够执行所公开的技术,以便检测并减轻多个并发线 程之间的活锁。图1和2中的相同元件具有相同的附图标记。
图2示出计算系统200包括至少一个处理器内核104a和存储器 202。存储器202可以存储用于控制处理器104a-104n的操作的数据240 和指令241。对于至少一个实施例,处理器104a可以是驻留在单个芯 片封装103内的多个处理器内核104a-104n当中的一个。包括104n的 附加的处理器是可选的。在图2中用椭圆和虚线表示附加处理器的可 选特性。
图2示出除了处理内核104a-104n之外,附加逻辑280可以驻留在 芯片封装103上。这种附加逻辑280在这里有时被称作“非内核 (uncore)”。附加逻辑280可以包括高速缓存器251以及仲裁和控制 逻辑252当中的一个或多个。高速缓存器251可以是在处理器104a- 104n之间共享的最后一级共享的统一数据和指令高速缓存器。仲裁和 控制逻辑252可以包括点对点通信控制器、全局通信队列和/或仲裁逻 辑180(见图1)。
附加逻辑280还可以可选地包括集成的存储器控制器253。集成存 储器控制器253可以提供到芯片外存储器202的接口。对于这种实施 例,芯片组255主要支持图形相关的功能。芯片组255还可以提供与 一个或多个输入/输出(I/O)设备290的连接。对于至少一个实施例, 芯片组255可以包括一个或多个芯片组设备,其中的每个芯片组设备 提供单独的接口功能。例如,其中一个芯片组设备可以支持图形功能, 而另一个芯片组设备可以支持I/O连接和/或与固件集线器(未示出) 的接口。
对于在芯片封装103内不包括集成存储器控制器253的实施例, 芯片组255可以提供到芯片外存储器202的接口。对于这种实施例, 芯片组255除了存储器控制功能之外还可以提供上面描述的图形、I/O 和/或固件功能。
虽然这里讨论的系统200的实施例具有作为仲裁和控制逻辑252 的一部分的点对点通信控制器,但是这种控制器并不是对于所有实施 例都需要的。实际上,本领域技术人员将认识到,这里讨论的活锁检 测和校正机制的实施例可以在一个采用多分支(multi-drop)总线或其 他通信拓扑的系统中执行。
如图1所示的那样,图2示出系统200的一个或多个处理器内核 104a-104n的至少一个实施例可以是一个多线程内核,该多线程内核包 括用于每个逻辑处理器150a-150n的TLU 165并且还包括存储器活锁 单元166。
对于包括多个处理器内核104a-104n的处理系统200的一个实施 例,如果对应于处理器内核104a-104n上的其中一个物理处理器150a- 150n的TLU已经采取了校正动作但是其相关物理线程150仍然不能在 其相关软件线程的指令执行过程中前进,则该TLU可以向仲裁逻辑180 发信号。在这种情况下,可能是另一个处理器内核104的动作正在干 扰第一处理器内核104a的前进的能力。正如下面将详细解释的那样, 仲裁逻辑180可以向发出请求的内核104授予优先权,以及/或者采取 动作来对其他内核进行“核爆”。
相应地,每个处理器内核104的TLU 165a-165n连同每个内核的 MLU 166以及仲裁器180可以一起形成一个协调活锁缩减器。该活锁 缩减器因此可以包括对应于每个内核104的活锁电路,其中该活锁电 路可以包括对应于该内核的TLU 165a-165n和MLU 166。正如下面将 进一步详细描述的那样,该活锁缩减器可以从第一处理器内核104a接 收关于一个线程的线程进展信息,并且可以响应于来自第一处理器内 核104a的关于第一线程的该线程进展信息来调节第二处理器内核104n 的线程的行为。
正如下面将进一步详细解释的那样,处理器104的至少一个实施 例可以被设计成响应于由TLU 165检测到物理线程150不能在其当前 指令流中前进而调用MLU 166的动作逻辑。例如,如果TLU 165采取 动作以减轻指令侧(I侧)饥饿,则可以调用MLU 166。(参见下面对 图6的状态604的讨论)。
图3的方框图示出处理器104的至少一个实施例的其他细节,该 处理器104能够执行所公开的技术,以便检测并减轻多个并发线程之 间的活锁状况。处理器104可以包括前端320,该前端预取可能被执行 的指令。
对于至少一个实施例,前端320包括获取/解码单元322,其包括 对应于一个或多个逻辑处理器150a-150n当中的每一个的逻辑上独立 的定序器340a-340n。该获取解码单元322可以从指令高速缓存器(例 如参见图4中的I高速缓存器444)获取适当的指令。该获取/解码单元 322可以包括解码逻辑,该解码逻辑把所述指令解码成最终格式或中间 格式。
因此,所述物理获取/解码单元322包括多个逻辑上独立的定序器 340a-340n,其中的每一个对应于一个物理线程150。对应于物理线程 150的定序器140确定将要由物理线程150执行的相关软件指令流(这 里也被称作“软件线程”)的下一个指令。定序器104a-104n可以利用 来自分支预测器(见图4的432)的信息,以便确定接下来将执行哪一 个指令。
图3示出处理器104的至少一个实施例包括执行内核330,该执行 内核准备用于执行的指令、执行所述指令并且退休执行过的指令。执 行内核330可以包括无序逻辑以便调度用于无序执行的指令。执行内 核330可以包括一个或多个资源362,当所述指令流过执行流水线并且 被调度来执行时,该执行内核利用所述资源来平滑所述指令流并且对 其进行重新排序。这些资源362可以包括以下各项当中的一项或多项: 用来维持未调度的指令的指令队列,存储器排序缓冲器,用来维持对 应于未完成的负载指令的条目的负载请求缓冲器,用来维持对应于未 完成的存储指令的存储请求缓冲器,以及MLU(见图1的166)等等。
执行内核330可以包括退休逻辑,其把按照无序方式执行过的指 令重新排序回到原始的程序顺序。这种退休逻辑可以包括至少一个退 休队列364来维持对应于所述执行流水线中的指令的信息,直到所述 指令被退休为止。对于至少一个实施例,可以在各逻辑处理器150a- 150n之间分割该退休队列364,从而把该退休队列的一部分分配给每 个逻辑处理器150a-150n。或者,可以对于每个逻辑处理器150a-150n 利用单独的退休队列364。
所述退休逻辑可以从各执行单元360接收执行过的指令的完成状 态,并且可以处理所述结果,从而根据所述程序顺序来提交(或退休) 适当的体系结构状态。该退休逻辑还可以包括线程活锁单元165a- 165n。对于至少一个实施例,处理器104包括对应于每个逻辑处理器 150a-150n的TLU 165a-165n。
当然,本领域技术人员将认识到,执行内核330可以按照程序顺 序来处理指令,并且不必提供无序处理。在这种情况下,退休队列364 不是重新排序缓冲器,而仅仅是按照程序顺序维持指令直到所述指令 退休为止的缓冲器。类似地,对应于这种有序处理器的执行资源362 不包括其功能是对指令进行重新排序和跟踪以用于无序处理的结构。
图4的方框图示出多线程无序处理系统400的至少一个实施例, 该系统能够实践所公开的技术。图4以及图1、2和/或3的相同元件具 有相同的附图标记。图4示出所述处理系统可以包括存储器子系统 490、处理器404和存储器控制器453。
图4示出处理器404可以包括沿着上面结合图3描述的前端320 的线的前端420。前端420提供指令信息给执行内核430。对于至少一 个实施例,前端420可以按照程序顺序提供该指令信息给执行内核 430。
前端420可以包括获取/解码单元322,其具有多个独立的逻辑定 序器340a-340n,其中的每一个对应于多个逻辑处理器150a-150n当中 的每一个。对于至少一个实施例,前端420预取有可能被执行的指令。 分支预测单元432可以提供分支预测信息,以便帮助前端420确定有 可能执行哪些指令。
执行内核430的至少一个实施例准备指令以用于无序执行、执行 所述指令并且退休执行过的指令。执行内核430可以包括TLU 165。 对应于处理器404的执行资源462可以包括MLU 166、指定队列、负 载请求缓冲器以及存储请求缓冲器。
MLU 166被设计成减轻与下列设计特征相关的活锁:逻辑处理器 150a-150n可以共享存储器系统490的资源。相应地,来自一个逻辑处 理器150的较早的(按照程序顺序)存储器指令可能被来自另一个逻 辑处理器150的较近的存储器指令所阻断。MEU 166被设计成检测并 校正这种情况。该MEU可以停滞一个逻辑处理器,从而使得另一个逻 辑处理器可以完成一个或多个存储器操作。
执行内核430可以包括退休逻辑,其在退休队列464(称作重新排 序缓冲器“ROB”)中把按照无序方式执行过的指令重新排序回到原 始的程序顺序。该退休逻辑从各执行单元360接收执行过的指令的完 成状态。执行内核430可以包括多于一个重新排序缓冲器464。也就是 说,单个已分割的重新排序缓冲器464的一部分可以维持对应于所有 逻辑处理器150a-150n的未退休的指令信息。或者,可以对于每个逻辑 处理器150维持单独的重新排序缓冲器464。
执行内核430还可以向处理器404的前端420处的分支预测器432 报告分支历史信息,以便告知最后已知的良好分支历史信息。
这里使用的术语“指令信息”指的是可以由执行内核430理解并 执行的最终格式下的基本工作单位。指令信息可以被存储在高速缓存 器425中。高速缓存器425可以被实现为执行指令高速缓存器或者执 行踪迹高速缓存器。对于利用执行指令高速缓存器的实施例,“指令 信息”包括已经从指令高速缓存器444获取的指令。在这种所获取的 指令被存储在执行指令高速缓存器中之前,它们可以(也可以不)被 解码成微操作。对于利用踪迹高速缓存器的实施例,术语“指令信息” 可以包括已经从宏指令解码的微操作的踪迹。对于既不利用执行指令 高速缓存器也不利用踪迹高速缓存器的实施例,“指令信息”还可以 包括对应于可以被存储在指令高速缓存器(例如I高速缓存器444)中 的指令的原始字节。
处理系统400包括存储器子系统490,其可以包括一个或多个高速 缓存器442、444以及存储器202。虽然在图4中没有示出,但是本领 域技术人员可以意识到,高速缓存器442、444的其中之一或二者的全 部或部分可以被物理地实现为处理器404本地的管芯上高速缓存器。 存储器子系统490可以被实现为存储器分层结构,并且还可以包括互 连453以便从存储器202向该分层结构的各层传输信息,比如数据240 和/或指令241。本领域技术人员将意识到,对于存储器分层结构可以 采用多种配置,其中包括非包含性的分层结构配置。
本领域技术人员将认识到,虽然在图4中只示出了无序处理系统 400,但是这里讨论的实施例同样适用于有序处理系统。这种有序处理 系统典型地不包括ROB 464。然而,这种有序处理系统仍然可以包括 退休队列(见图3的364),以便跟踪未退休的指令。
图5、6和7一起表示一个状态图,该状态图示出用于确定在多个 并发线程之间存在活锁状况并且用于采取动作以减轻该活锁状况的方 法500的至少一个实施例。对于至少一个实施例,比如图1-4中示出的 TLU 165的线程活锁单元可以执行方法500。该TLU 165可以是把方 法500实施为状态机的硬件单元。
现在参照图3和4来讨论图5。作为图5的背景,应当理解,对于 SMT处理器(比如分别在图3和4中示出的处理器104和404)的至 少一个实施例,每个逻辑处理器150维持一整套体系结构状态。此外, 该处理器的某些特征(比如退休队列364或ROB 464以及执行资源 362、462)可以维持对应于每一个当前激活的软件线程的微体系结构 状态信息。在特定条件下,可以停滞一个激活的线程,并且可以从SMT 逻辑处理器150中冲刷(或者说“核爆”)掉对应于该线程的微体系 结构状态。通过停滞并且“核爆”未选择的逻辑处理器(其可能正在 前进)的微体系结构状态,则所选择的逻辑处理器可以从当前节奏模 式中解脱出来,并且其能够在不与未选择的逻辑处理器发生干扰的情 况下前进。
图5示出所述方法500包括空闲状态502。图5还示出,当满足一 个或多个复位条件501时,可以进入该空闲状态502。为了简化图5和 6,方框501和状态502之间的箭头表示满足任何复位条件501。本领 域技术人员将认识到,对于一个或多个复位条件,如图5和6所示, 可以从其他状态504、506、508、602、604、606当中的一个发生到状 态502的过渡。然而,为了简单起见,在图5和6中没有示出表示这 种过渡的箭头。
转到图7,其中示出所述一个或多个复位条件501的至少一个实施 例。图7是参照图4和5进行讨论的。对于至少一个实施例,可以在 单内核处理系统或多内核处理系统中应用复位条件501。在下面的讨论 中,术语“当前逻辑处理器”表示与正在执行方法500以确定复位条 件501是否为真的TLU 165相关的逻辑处理器150。因此,虽然处理器 104中的一个或多个其他TLU 165a-165n也可以并发地执行方法500, 但是与处理器104的其他逻辑处理器150不同,“当前逻辑处理器” 是感兴趣的那个逻辑处理器。
图7示出,当TLU 165是图5和6中所示的任何其他状态(包括 状态502、504、506、508、602、606和604)时,一个或多个复位条 件501可以变为真。如果一个或多个复位条件501变为真,则触发到 状态502的过渡。如上所述,从任何其他状态到状态502的过渡由箭 头551所包含,该箭头表示从任何其他状态到空闲状态502的过渡。
图7示出,复位条件501的条件A表明,如果TLU 165已经被禁 用,则该TLU 165应当保持在/返回到空闲状态502。该条件A反映了 这样一个假设,即对于至少一个实施例,TLU 165可能被禁用。例如, 对于至少一个实施例,TLU 165可能在执行异常处理例程期间被禁用。 在可以由微代码或者其他固件执行的这种例程期间,可能会禁用活锁 检测。可能导致TLU 165被禁用的异常的一个例子是声明(assertion) 一个信号(比如停止时钟信号),该信号表明所述芯片组(例如见图2 的255)已经请求处理器104过渡到低功率状态。
图7示出,复位条件501的条件B表明,如果检测到复位触发则 TLU 165应当保持在/返回到空闲状态502。在检测到这种复位触发之 后,TLU 165通过保持在/返回到空闲状态502来复位其活锁确定行为。 对于至少一个实施例,复位触发可以由用户发起的事件激活,所述事 件例如是激活初始化引脚或者断电复位。
图7示出,复位条件501的条件C表明,如果TLU 165的相关逻 辑处理器空闲并且因此当前不尝试执行软件线程,则该TLU 165应当 保持在/返回到空闲状态502。对于至少一个实施例,该条件可以由TLU 165检测到,这是通过检查一个寄存器以及随后维持对应于该TLU 165 的“线程激活”指标。
图7示出,复位条件501的条件D表明,如果处理器内核104的 另一个逻辑处理器150处于排他性访问模式,则TLU 165应当保持在/ 返回到空闲状态502。在排他性访问模式期间,一个逻辑处理器可能正 在采取所有其他逻辑处理器都需要知道的动作。例如,有些时候一个 逻辑处理器可能正在执行一个影响对共享资源(例如ROB 464)的重 新分割的指令。或者,例如一个逻辑处理器可能执行一个做出全局改 变的指令,比如在控制寄存器中设置高速缓存器禁用比特。在这种情 况下,所有其他逻辑处理器应当停滞执行,直到所述排他性访问操作 完成为止。在这段时间期间,停滞的TLU 165不应当预期其逻辑处理 器前进,因此应当保持在/返回到空闲状态502。对于至少一个实施例, TLU 165可以确定是否满足条件D,这是通过检查一个共享信号(其 例如可能在微体系结构寄存器中被反映)以便确定处理器104的另一 个逻辑处理器150是否处于排他性访问模式。
图7示出,复位条件501的条件E表明,如果TLU 165的逻辑处 理器150已经过渡出I侧饥饿动作状态604(图6),则TLU 165应当 保持在/返回到空闲状态502。这种过渡表明已经采取了成功的动作(下 面结合状态604讨论)以便尝试减轻当前逻辑处理器150上的I侧饥 饿,因此TLU 165应当返回到空闲状态502,以便开始新的活锁检测 序列,从而为所述饥饿避免动作给出生效的时间。
图7还示出,复位条件501的条件F表明,如果所述存储器活锁 单元166当前激活,则TLU 165应当保持在/返回到空闲状态502。通 过该条件F,TLU 165把优先权让给存储器活锁单元166。这种优先权 排序方案可用于防止由TLU 165和MLU 166之间的争用而引发的活 锁。也就是说,如上所述,MLU 166可以停滞一个逻辑处理器150的 存储器操作,从而另一个逻辑处理器可以完成一个或多个存储器操 作。如果没有复位条件F,被停滞的逻辑处理器可能会错误地确定其由 于所不希望的活锁状况而不能前进。条件F确保在这种情况下TLU 165 把优先权让给MLU 166。因此,复位条件F确保每个TLU 165和MLU 166知道彼此,并且彼此协作。
图7示出,复位条件501的条件G表明,如果已经对于TLU 165 的逻辑处理器声明了“核爆”动作,则该TLU 165应当保持在/返回到 空闲状态502。对于逻辑处理器150的核爆动作具有如下结果:当前指 令以及对于完全完成当前宏操作的执行所必需的任何其他指令都被完 成。所有进一步的指令执行被停滞,并且对应于该逻辑处理器150的 所有流水线以及相关的微体系结构状态都被冲刷掉。按照这种方式, 不仅对应于该线程的处理被停滞,并且其微体系结构状态也被冲刷 掉。
例如,如果已经由另一个逻辑处理器150a-150n发起了全部“核 爆”动作,则条件G对于当前逻辑处理器可能为真。例如,如果作为 状态606完成的结果已经由另一个逻辑处理器发起了全部“核爆”动 作,则可能会满足该条件。在这种情况下,对于至少一个实施例,当 前逻辑处理器将被停滞,并且其微体系结构状态将被冲刷掉;因此, 对应于当前逻辑处理器的TLU 165应当返回到空闲状态502。
或者,即使另一个逻辑处理器尚未完成状态606,对于一个特定的 逻辑处理器也可能会满足条件G。相反地,对于当前逻辑处理器150 的“核爆”动作可以由该处理器中的几个其他事件当中的任何一个发 起,所述其他事件与方法500的各状态不相关。例如,该“核爆”事 件可以作为当前逻辑处理器150上的中断的结果而被声明,以便为无 序处理器104提供精确的异常处理。
图7还示出,复位条件501的条件H表明,如果另一个逻辑处理 器的TLU 165已经变为“激活”并且处于采取活锁破坏器动作的过程 中,则TLU 165应当保持在/返回到空闲状态502。根据条件H,如果 第一TLU 165已经从检测阶段(见502、504、506)过渡到第一TLU 165 的“激活”阶段(见508、602、606、604)(其中该第一TLU 165采 取某种类型的校正动作以尝试减轻活锁状况),则第二TLU 165让步 于第一TLU 165。满足条件H使得以下情况成为必要:每个TLU 165 知道该处理器上的其他TLU 165的状态(图3示出,对于至少一个实 施例,所有的TLU 165a-165n彼此通信)。
可能会出现一种“平局”情况,其中多于一个TLU 165尝试在同 一时钟周期期间过渡到激活状态。在这种情况下,只能把优先权授予 其中一个发出请求的TLU 165。例如,可以把优先权指定给具有最低 编号的TLU(也就是说,165a具有比165b更高的优先权,因此165b 回到空闲状态502)。或者,可以利用许多其他优先权选择机制。对于 至少一个实施例,由一个仲裁器(例如见图1的180)强加所述优先权 机制。在这种情况下用来指定优先权的仲裁策略可以(但不必)是在 下面结合图8描述的在方框806处利用的相同策略。
图7还示出,复位条件501的条件I表明,如果TLU 165已经表 现出贪婪行为因此很可能导致在另一个逻辑处理器150上的活锁状况 时,该TLU 165应当保持在/返回到空闲状态502。这种贪婪行为可以 按照几种方式当中的任何一种来识别。也就是说,如果TLU 165的处 理器150的ROB 364部分为空的原因不是I侧饥饿,例如处理器150 的ROB 364部分为空的原因是它的其中一种执行资源已满,则该TLU 165不一定应当保持在非空闲状态中。
例如,逻辑处理器150可能表现出贪婪行为,这是由于其发出占 满系统的存储器带宽的一系列存储指令,并且导致对应于当前逻辑处 理器150的存储缓冲器充满了存储指令。对于至少一个实施例,逻辑 处理器150对于指令的处理可以被停滞,直到所述执行资源(例如存 储缓冲器)不再满为止。在逻辑处理器150被如上停滞的时间内,对 应于当前逻辑处理器的ROB 364部分可能为空,但是另一种执行资源 (即存储缓冲器)已满。因此,对于条件I,当ROB 364的对应于当前 逻辑处理器150的所分配部分为空但是其存储缓冲器(或者任何其他 所指定的执行资源)充满了已退休存储指令(其数据尚未被提交给高 速缓存器或存储器)时,可以识别出所述贪婪行为。在这种情况下, 当前逻辑处理器150返回到空闲状态,并且在另一个逻辑处理器的TLU 165需要激活时隐含地让出优先权。
图7还示出,复位条件501的条件J表明,如果TLU 165的逻辑 处理器具有可用于执行的指令并且另一个逻辑处理器正在执行高优先 权锁定序列,则该TLU 165应当保持在/返回到空闲状态502。例如, 高优先权锁定序列可以是原子指令。对于原子指令,处理器的存储器 逻辑仅在锁定的线程上工作,直到完成该锁定的操作,而不管其花费 多长的时间。这种类型的高优先权锁定序列可以代表处理器中的最高 优先权。因此,如果另一个逻辑处理器当前正在执行这种类型的高优 先权锁定操作,则复位条件J通过保持在/返回到空闲状态502来强加 该优先权。如果另一个处理器正在执行一系列高优先权锁定操作,从 而当前逻辑处理器150在较长时间段内无法执行其自身的一个存储器 指令,则可以预测MLU 166将被调用,以便允许当前逻辑处理器执行 其存储器指令。因此,按照两个逻辑处理器之间的竞争的存储器指令, MLU 166可以保护一个逻辑处理器,从而当在另一个逻辑处理器上有 一系列高优先权锁定时,受保护的该逻辑处理器不会被停滞不可接受 的长时间量。
然而,如果当前逻辑处理器没有要执行的指令(即当前逻辑处理 器的ROB 464为空),则不满足复位条件J。也就是说,如果另一个 逻辑处理器当前正在执行高优先权锁定操作,但是当前逻辑处理器的 ROB 464为空,那么TLU 165不返回到空闲状态502。如果ROB部分 464为空,则当前逻辑处理器没有要处理的指令。因此,不能依赖MLU 166来保护当前逻辑处理器以防止其遭受由另一个逻辑处理器执行的 一系列高优先权锁定操作。在这种情况下,在面对这种一系列高优先 权锁定操作时,TLU 165负责保护当前逻辑处理器以防止其被停滞太 长时间。相应地,如果当前逻辑处理器150具有空的ROB 464并且在 另一线程上正在进行高优先权锁定,则当前TLU 165应当在阶段506 确定其是否应当执行I侧饥饿避免动作。
图7还示出,复位条件501的条件K表明,如果当前逻辑处理器 150已经接收到长等待时间数据,则TLU 165应当保持在/返回到空闲 状态。对于至少一个实施例,当作为高速缓存器错失的结果而一直在 等待数据或指令的逻辑处理器最终接收到所述数据或指令时,满足条 件K。此时,当前逻辑处理器应当返回到空闲状态502。这是由于如果 当前逻辑处理器150不响应于满足条件K而返回到空闲状态502,那 么该逻辑处理器150可能会错误地向仲裁器180(图1和2)发送与高 速缓存器错失相关的优先权请求530(见下面对状态506的讨论)。
图7还示出,复位条件501的条件L表明,如果当前逻辑处理器 150在相关时间期间已经退休了至少一个最终格式指令,则TLU 165 应当保持在/返回到空闲状态502。对于至少一个实施例,该最终格式 指令是微操作,并且该相关时间段是单个时钟周期。如果满足条件L, 则可以说当前逻辑处理器150已经在其线程指令流的执行中前进。相 应地,不存在活锁状况,并且TLU 165应当返回到或者保持在空闲状 态502。
图7还示出,复位条件501的条件M表明,如果逻辑处理器向仲 裁器(图1和2的180)发送优先权请求530的能力(见下面对状态506 的讨论)已经被禁用,则TLU 165应当保持在/返回到空闲状态502。 当逻辑处理器150向仲裁器180(图1和2)发送优先权请求530的能 力被禁用时,可以说“缺陷(defeature)”为真。当1)可能以其他方 式导致从状态506发送优先权请求530的任何条件为真并且2)所述缺 陷为真时,条件M可能得到满足。在这种情况下,即使用于从状态506 发送优先权请求530的条件为真,逻辑处理器150也无法发送该请求。 因此,逻辑处理器150应当保持在/返回到空闲状态502,而不是过渡 到/保持在特设情况状态506(如下讨论)。
对于至少一个实施例,如果逻辑处理器150正在经历内核上高速 缓存器错失(数据或指令)并且正在等待来自内核外来源(例如内核 外共享高速缓存器251或芯片外存储器202)的指令或数据,则条件M 的第一部分(即“1)可能以其他方式导致从状态506发送优先权请求 530的任何条件为真”)可能被满足。例如,如果出现以下情况则可能 会发生所述错失:1)对于负载指令发生高速缓存器错失,并且该负载 指令处于退休状态,但是由于所述负载数据在处理器内核104上不可 用而无法退休(即在任何内核上高速缓存器中不可用,并且在负载缓 冲器(“LDRB’s”)中也不可用)。例如,如果出现以下情况则也可 能会发生所述错失:2)逻辑处理器150正在经历对应于指令获取的内 核上错失,并且正在等待来自内核外来源(例如内核外共享高速缓存 器251或芯片外存储器202)的指令信息;或者3)逻辑处理器150正 在经历对应于STA微操作(其可以是与存储宏指令相关的最终格式存 储地址微操作)的内核上错失,因此正在等待对由该存储地址微操作 指示的存储器位置的内核外取回。
同样,如果所述STA微操作处于退休状态,但是由于与所述存储 指令相关的数据所应被写入的存储器位置(存储地址)不在处理器内 核104上(在高速缓存器或存储缓冲器(“STRB’s”)中)而无法退 休,则满足所述第三条件。一般来说,所述三个条件当中的任何一个 将导致TLU 165过渡到特殊情况状态506。然而,如果所述缺陷为真, 则复位条件M表明这种过渡不应当发生,这是由于逻辑处理器150在 这种条件下发送优先权请求530的能力已经被禁用。
回到图5,可以看出存在其他状态504、506,TLU 165可以进入 所述状态以便确定是否存在活锁状况。这种状态504、506连同空闲状 态502在这里被称作“检测”状态。当TLU 165处于这种检测状态502、 504、506中时,其不被认为是“激活的”,这是由于其仅仅监视特定 条件并且不采取任何肯定动作以尝试破坏活锁。这样,当处于其中一 个检测状态502、504、506中时,逻辑处理器150将不触发结合图7 讨论的复位条件501的复位条件H,因此将不会使得其他逻辑处理器 (见150a-150n)把优先权让给当前逻辑处理器150。
进入两个剩余检测状态504和506的区别在于导致逻辑处理器150 过渡出空闲状态502的条件是下面的哪一种情况:1)通过向仲裁器180 (图1和2)发送优先权请求530而可能最终获益的情况;或者2)逻 辑处理器150可能正遭受I侧饥饿,但是由于另一个线程上的高优先权 锁定而被阻断从而无法采取动作(这些条件在这里被称作“特殊情 况”)。如果是这样,则TLU 165从空闲状态502过渡552到特殊情 况状态506。否则,TLU 165从空闲状态502过渡553到初始计数状态 504。下面将分别详细讨论状态504、506当中的每一个。
在出现以下情况时从空闲状态502进入552特殊情况状态506:1) 没有一个复位条件501为真;并且2)
a.逻辑处理器150正在经历内核上高速缓存器错失;或者
b.逻辑处理器150具有空的ROB 464,但是在另一个逻辑处 理器上正有高优先权(“HP”)锁定。
在后一种情况下(条件2b),当前逻辑处理器150可能正在经历I 侧饥饿。然而,当前逻辑处理器150还由于另一个线程正执行高优先 权锁定操作而遭受停滞。相应地,直到该高优先权锁定操作被解除为 止,当前逻辑处理器150才应当前进到任何“激活”状态。
在前一种情况下(2a),逻辑处理器150正在经历内核上高速缓 存器错失。对于至少一个实施例,可以通过检查上面结合复位条件501 的条件M所讨论的三个条件来确定这种内核上高速缓存器错失:退休 中的负载或STA指令,或者无法完成的指令获取。当然,本领域技术 人员将意识到,本实施例不是限制性的,并且可以通过评估其他的或 附加的条件而对于其他实施例确定检测到内核上高速缓存器错失。在 任何情况下,当逻辑处理器150正在经历内核上高速缓存器错失(并 且所述缺陷不为真)时,TLU 165过渡552到特殊情况状态506以便允 许向仲裁器180发送优先权请求信号530(这对于其他逻辑处理器的破 坏性最小),而不是直接过渡到更为严重动作状态,例如停滞声明状 态508,其明确地与其他逻辑处理器的处理发生干扰。
在特殊情况状态506期间,TLU 165可以利用一个计数器来对自 从进入特殊情况状态506后所经过的时钟周期的数量进行计数。对于 替换实施例,可以采用任何用于测量所经过的时间的方法以作为对时 钟周期进行计数的替换或补充。在预定数量的时钟周期(X)过期之后, TLU 165可以声明一个优先权请求530。在下面的情况下发出该优先权 请求530:1)当前逻辑处理器150正在经历高速缓存器错失;并且2) 自从TLU 165进入此次出现的特殊情况状态506后已经经过了预定时 间量(X)。
所述优先权请求530到达仲裁器180(图1和2),并且其请求仲 裁器180为当前逻辑处理器150的存储器请求给出高于来自其他逻辑 处理器(见150a-150n)的存储器请求的优先权。或者,在多内核实施 例中(见图2的104a-104n),所述优先权请求530可以请求仲裁器180 为当前处理器内核104给出高于其他处理器内核的优先权。因此,对 于单内核实施例的特定于内核的优先权请求530的可选特性在图5中 由点线表示。在发出优先权请求530之后,TLU 165可以保持在特殊 情况状态506中,直到下面讨论的其中一个退出条件变为真。
只要ROB 464的与TLU 165的逻辑处理器150相关的该部分为空 并且对应于处理器内核104的任何其他逻辑处理器(见150a-150n)正 在执行高优先权锁定操作,该逻辑处理器就保持555在特殊情况状态 506中。然而,如果TLU 165在特殊情况状态506期间确定对应于另一 个逻辑处理器的表明HP锁定正在进行中的指标从真过渡到假,则TLU 165退出特殊情况状态506并且进入554一个“激活”状态,即停滞声 明状态508,在该状态期间当前逻辑处理器150可以向其他逻辑处理器 声明停滞。因此,如果所述ROB 464部分为空,则绕过初始计数状态 504。当ROB 464为空时从状态506到状态508的过渡554实施高优先 权处理,这是由于其不花时间来执行初始倒计数状态504。如果ROB 464为空,则所述倒计数花费的时间过长;所述逻辑处理器在这种情况 下不具有任何指令,因此TLU 165被设计成尽可能快地往ROB 464中 装入更多指令。
图5示出如果TLU 165确定对应于其内核104的存储器活锁单元 166已经被触发,则该TLU 165可以过渡556出特殊情况状态506。在 这种情况下,TLU 165从特殊情况状态506过渡556到初始计数状态 504。在这种操作下,TLU 165把暂时的优先权让给MLU 166,以便允 许MLU 166尝试破坏潜在的活锁,所述潜在的活锁作为逻辑处理器150 可能正在经历的长等待时间内核上高速缓存器错失(例如参见上面对 于进入特殊情况状态506所讨论的条件2a)的结果而正在形成。在MLU 166的处理期间,该MLU 166可以为特定线程指定优先权。通过在过 渡556处把优先权让给MLU 166,TLU 165避免在MLU 166已经把优 先权指定给不同的逻辑处理器150的同时为当前逻辑处理器指定优先 权。按照这种方式,各TLU 165与MLU 166一起工作,以便每次只为 一个线程指定优先权。因此,在确定MLU 166一直不能减轻存储器活 锁并且当前逻辑处理器150在可接受的时间量之后仍然不能前进之 前,TLU 165过渡556到初始计数状态504,以便允许MLU 166在整 个预定时间段Y内运行(参见下面对状态504的进一步讨论)。
应当注意到,根据上面结合图7讨论的复位条件K,如果MLU 166 能够成功地破坏存储器活锁从而最终接收到所错失的高速缓存器信息 (数据或指令),则TLU 165从初始计数状态504过渡551回到空闲状 态502。
应当注意到,根据复位条件K,如果作为正常处理器操作的一部 分而最终接收到所请求的数据或所获取的指令,则即使没有MLU 166 的帮助也可以发生从特殊情况状态506回到空闲状态502的过渡551。
如上所述,如果不存在任何特殊情况(内核上高速缓存器错失或 者空ROB+HP锁定)并且没有复位条件501为真,则TLU 165从空闲 状态502过渡553到初始计数状态504。在该初始计数状态期间,TLU 165维持一个定时器,以便确定TLU 165是否已经在初始计数状态504 中停留了预定时间量Y。该预定时间量Y可以被确定成反映这样的时 间量:如果当前逻辑处理器150一直不能前进,那么在该时间量之后 就假定当前逻辑处理器150正在经历活锁状况。
对于至少一个实施例,TLU 165在初始计数状态504期间维持一 个倒计数定时器,其中该定时器被设置到所述预定时间量Y,随后每 个时钟周期递减该计数器。如果该计数器到达0(或者某一其他预定最 小值),则逻辑处理器150可能处在活锁状况下,并且可以被准许过 渡到一个“激活”状态。因此,对于至少一个实施例,所述定时器从 预定定时器值Y到预定最小值的倒计数表示所能够容许的不发生前进 的时钟周期的预定数量。
应当注意到,如果在初始计数状态504期间任何复位条件501变 为真,则TLU 165将过渡到空闲状态502,并且在初始计数状态504 期间所利用的计数器可以被重新初始化。一个这样的复位条件(条件 L)是最终格式指令的退休。如果所述退休不在初始计数状态504期间 发生,则当前逻辑处理器没有在其指令的执行中前进。其他的复位条 件A-K和M可以提供可能的前进的某种其他指示。如果在预定数量的 时钟周期期间没有发生任何复位条件,则TLU 165从初始计数状态504 过渡557到停滞声明状态508。
因此,图5示出可以从初始计数状态504(见过渡557)或者特殊 情况状态506(见过渡554)进入停滞声明状态508。在停滞声明状态 508期间,除了其自身的逻辑处理器(即当前逻辑处理器)之外,TLU 165向处理器104的每个逻辑处理器150a-150n声明一个停滞信号。这 种动作在对应于处理器104的所有逻辑处理器150a-150n之间强加一个 优先权。对于至少一个实施例,在停滞声明状态508期间声明的该停 滞信号使得在该停滞信号被声明时其他逻辑处理器(见150a-150n)不 能向各执行单元360发出指令。TLU 165保持在该停滞声明状态中, 并且继续向处理器104的每个其他逻辑处理器150声明该停滞信号, 直到满足下面的各退出条件的其中之一为止。
图5示出,当可以被反映为一定数量(Z1)的时钟周期的预定时 间段已经过期并且与当前逻辑处理器相关的ROB 464的所述部分不为 空时,TLU 165的至少一个实施例可以退出558所述停滞声明状态 508。在这种情况下,由于所述适当的ROB 464部分不为空,因此当前 逻辑处理器150没有在经历指令饥饿。然而,当前逻辑处理器150已 经在Z1个时钟周期的时间段内向所有其他逻辑处理器声明了停滞信 号,并且仍然未能够经历前进。使得其他逻辑处理器停滞并没有允许 当前逻辑处理器150前进,因此需要附加的动作来尝试减轻活锁状况。 因此,当所述退出条件为真时,TLU 165过渡558到图6的状态602。
另一方面,如果对应于当前逻辑处理器150的ROB 464的所指定 的部分为空,则上面讨论的对应于状态508的第一退出条件不为真。 由于所述ROB 464部分为空,因此当前逻辑处理器150可能正在经历 指令饥饿。因此,如果该ROB 464部分为空,则TLU 165在过渡559 到图6的状态604之前等待预定的时间量Z2,其中该逻辑处理器150 可以采取动作来减轻指令饥饿。
转到图6,这里参照图4对其进行讨论,从中可以看出,可以响应 于其ROB 464在至少所述预定时间量Z2内为空而从停滞声明状态508 进入I侧饥饿动作状态604。在所述I侧饥饿动作状态604期间,TLU 165 采取一个或多个动作以便往当前逻辑处理器的ROB 464部分中装入更 多的指令。这些动作在这里被称作饥饿避免动作。在状态604期间, TLU 165向其他逻辑处理器150a-150n去声明(de-assert)在状态508 期间所声明的所述停滞信号。在这种声明期间,当前逻辑处理器150 未能前进;所述停滞并没有起到帮助,并且当前逻辑处理器150仍然 在经历指令匮乏(即其ROB 464仍然为空)。实际上,在进入状态604 时可能是这样的情况:在状态508期间声明的该停滞信号阻止了另一 个逻辑处理器完成宏指令,这可能阻止了释放当前逻辑处理器150所 需要的资源。
在进入状态604时,假设当前逻辑处理器确实正遭受指令侧饥饿 (也就是说其缺少可用于执行的指令)。这种饥饿可能是由于几种因素 当中的任何一种而造成的。对于至少一个实施例,所述因素可以包括: 其指令获取请求在存储器指令仲裁逻辑(未示出)处被阻断;一个或 多个其他逻辑处理器一直在执行一系列高优先权锁定操作;或者当前 逻辑处理器150的指令获取一直重复地从被用来处理对存储器系统的 请求的任何结构接收“未被确认”响应。
在I侧饥饿状态604期间,TLU 165可以采取以下动作:1)向处 理器内核104的所有其他逻辑处理器150a-150n去声明所述停滞信号; 以及2)请求把“线程优先权”给予当前逻辑处理器。该“线程优先权” 请求可以对线程优先权逻辑(未示出)提出。如果当前逻辑处理器取 得线程优先权,则可以调用MLU 166。
简要地参照图9,其中示出了可以在I侧饥饿动作状态604(图6) 的至少一个实施例期间一起工作的TLU 165和MLU 166的某些特征。 参照图3、5和6来讨论图9。图9示出每一个TLU 165a-165n可以包 括活锁检测器920和活锁破坏器930。对于至少一个实施例,活锁检测 器920监视复位条件501并且执行检测阶段502、504、506。对于至少 一个实施例,活锁破坏器930负责执行所述“激活”状态508、602、 604和606的动作。
图9示出MLU 166包括存储器活锁破坏器940。对于至少一个实 施例,该存储器活锁破坏器940负责采取动作以便减轻存储器活锁状 况,比如上面讨论的长时间的内核上高速缓存器错失状况。
图9示出MLU 166的存储器活锁破坏器940可以包括共享的活锁 破坏器逻辑950。该共享的活锁破坏器逻辑950可以在I侧饥饿动作状 态604期间响应于当前逻辑处理器获得“线程优先权”而被调用。该 共享的活锁破坏器逻辑950可以由处理器内核104上的任何逻辑处理 器150a-150n的TLU 165调用。
返回图6,可以看出,自从当前逻辑处理器最初被给予“线程优先 权”后,当遭受I侧饥饿的该逻辑处理器150已经在连续的预定时间N (其可以反映时钟周期数)内具有被指定给它的线程优先权时,可以退 出所述I侧饥饿动作状态604。在这种情况下,TLU 165过渡651到核 爆状态606。
应当注意到,只有当I侧饥饿动作状态604期间所采取的动作不 成功时才进行过渡651。例如,重复检测到由另一个逻辑处理器发起的 自修改代码(SMC)可能迫使饥饿的线程持续丢弃及重新获取指令, 从而使其ROB 464部分保持为空。然而,在状态604期间采取的I侧 饥饿避免动作在减轻指令饥饿状况方面可能很成功。如果是这样,则 将会获取指令,并且将指令发送到当前逻辑处理器150的ROB 464的 所分配部分。在这种情况下,对于至少一个实施例,当前逻辑处理器 150将已经过渡出指令饥饿状况。相应地,复位条件E(见图7的501) 将为真,并且TLU 165将从I侧饥饿动作状态604过渡501到空闲状 态502(见图5)。
图6示出可以从停滞声明状态508进入核爆倒计数状态602。同 样,在核爆倒计数状态602期间,TLU 165向其他逻辑处理器150a-150n 去声明在状态508期间声明的停滞信号。在这种去声明期间,当前逻 辑处理器150未能前进;所述停滞没有帮助。实际上,在进入状态602 时可能是这种情况:在状态508期间声明的停滞信号阻止了另一个逻 辑处理器150完成宏指令的执行,这可能阻止了释放当前逻辑处理器 150所需要的资源。然而,所述停滞可能干扰了其他逻辑处理器的定 时,这对于当前逻辑处理器150的前进可能是有益的。
当进入核爆倒计数状态602时,当前逻辑处理器150可能处于最 终将导致前进的状态。例如,当前逻辑处理器150可能正经历存储器 活锁,其中MLU 166当前激活,但是需要更多的时间来完成其活锁破 坏器处理。在核爆倒计数状态602期间,TLU 165等待预定的时间量 (其例如可以被反映为M个周期的计数),以期望当前逻辑处理器150 将达到其中一个复位条件501。对于至少一个实施例,在图6中所示的 M和N的计数可以是相同的数字,但是并非所有实施例都要求这一 点。
对于至少一个实施例,图6示出TLU 165在下面的条件下从核爆 倒计数状态602过渡652到核爆状态606:当前逻辑处理器已经被指定 了“线程优先权”,并且已经在连续时间帧M内保有线程优先权。在 这段时间期间,尽管当前逻辑处理器150具有线程优先权,但是其未 能在线程中前进。如上所述,如果当前逻辑处理器处于指令饥饿状况, 则TLU 165也可以过渡651到核爆状态606;也就是说如果在状态604 期间采取的I侧饥饿动作不成功的话。
在状态606期间,TLU 165向处理器104的每一个其他逻辑处理 器(见150a-150n)发出一个内核内部“核爆”信号。作为该动作的结 果,希望当前逻辑处理器150现在将能够前进。对于单内核实施例, 如图1所示,对应于方法500的处理可以从状态606过渡654到空闲状 态502(见连接符“C”)。
图6示出还可以响应于外部事件而不是作为上述状态过渡的其中 之一的结果进入655核爆状态606。例如,所述外部事件可以是接收到 由可选状态608下的另一个内核上的TLU 165产生的全线程核爆请求 (如下讨论)。
如果在状态606期间发出的所述内核内部全线程“核爆”信号没 有导致当前逻辑处理器150在预定时间量P内前进,则可以发生从状 态606的可选状态过渡653。应当注意到,在图6中用点线表示状态 608。出现这种情况是由于过渡653和状态608是可选的,它们仅适用 于多内核实施例,比如图2中所示的实施例200。在状态608处,向仲 裁器180(图1和2)发送全内核核爆请求。响应于在状态608处产生 的该请求,仲裁器180的至少一个实施例启动下列动作:从所有内核 104a-104n上的所有线程150a-150n(当前逻辑处理器除外)上排空由 仲裁器180维持的所有队列。此外,阻断所有新的全内核核爆请求(见 图8的方框806),从当前逻辑处理器150发出的除外。最后,对于每 个其他处理器内核104a-104n发出全线程核爆请求(见上面对状态508 的讨论),并且对于与当前逻辑处理器150相关的处理器内核104上 的每个其他线程150a-150n(当前逻辑处理器除外)发出全线程核爆请 求。(如上所述,当其他处理器内核的逻辑处理器接收到该核爆请求 时,该核爆请求可以导致对应于所述逻辑处理器的TLU 165进入状态 606,参见上面对方框620的讨论)。TLU 165从状态608返回到空闲 状态(见连接符“D”)。
图8的流程图示出用于处理全内核核爆请求的方法800,所述全内 核核爆请求例如是在状态608期间从多内核实施例发出的。对于至少 一个实施例,方法800可以由仲裁器执行,例如图1和2中所示的仲 裁器180。对于至少一个实施例,该仲裁器可以被包括作为在这里称作 “非内核”的逻辑的内核外部分280(图2)的一部分。
图8示出方法800从方框802开始并且行进到方框804。如果已经 产生了单个全内核核爆请求(即来自第一处理器内核104a上的TLU 165),则所述处理行进到方框806。正如上面结合与状态608相关的 处理所描述的那样,在方框806为发出请求的内核104a指定优先权, 并且来自其余的内核104a-104n的所有后续的全内核核爆请求被无 视。
所述处理从方框806行进到方框808。在方框808处,向所有其他 内核104a-104n发起全线程核爆请求,所述原始全内核核爆请求所源自 的该内核除外。所述请求可以由其他内核接收,并且使得它们过渡到 核爆状态606(见图6的方框620)。所述处理随后在方框814结束。
然而,如果从多个内核接收到两个或多个同时的全内核核爆请 求,则所述处理从方框804行进到方框810。在方框810处,方法800 应用一个仲裁策略以便选择多个发出请求的内核的其中之一以作为优 先权内核。对于至少一个实施例,该发出请求的内核可以把内核ID与 所述核爆请求一起提供给仲裁器。仲裁器180随后可以应用简单的选 择算法,从而把具有最高或最低ID的内核选择作为优先权内核。所述 处理从方框810行进到方框808并且随后行进到方框814,正如在上一 段中所描述的那样。
上面的讨论描述了用来在多个线程之间协调线程优先权的方法、 设备和系统的所选实施例,以便允许在线程指令的执行中前进,同时 在活锁破坏器逻辑、I侧饥饿避免逻辑和高优先权锁定处理之间维持优 先权。这里描述的机制可以由单内核或多内核多线程系统利用。在前 面的描述中,描述了所述方法、设备和系统的多个方面。出于解释的 目的,阐述了特定的数字、实例、系统和配置以便提供更全面的理解。 然而,本领域技术人员可以明显看出,可以在没有所述具体细节的情 况下实践所述方法和设备。在其他事例中,省略或者简化了公知的特 征,以免模糊所述方法和设备。
这里描述的方法的实施例可以用硬件、硬件模拟软件或其他软 件、固件或者所述实施方法的组合来实现。可以对于可编程系统实现 本发明的实施例,该可编程系统包括至少一个处理器、数据存储系统 (包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以 及至少一个输出设备。为了本申请的目的,处理系统包括具有处理器 的任何系统,所述处理器例如是数字信号处理器(DSP)、微控制器专用集成电路(ASIC)或者微处理器。
程序可以被存储在存储介质或设备(例如硬盘驱动器软盘驱动 器、只读存储器(ROM)、CD-ROM设备、闪存设备、数字通用盘(DVD) 或其他存储设备)上,其可以由通用或专用可编程处理系统读取。当 所述存储介质或设备由处理系统读取以便执行这里描述的程序时,可 以由该处理系统中的处理器访问的所述指令提供对于该处理系统的配 置和操作。本发明的实施例可以被实现为机器可读存储介质,其可以 被配置成与处理系统一起使用,其中,如此配置的所述存储介质使得 该处理系统以特定的预定义方式操作,以便执行这里描述的功能。
在图4中示出了所述处理系统的一个例子的至少一个实施例。例 如,样本系统400可以被用来检测活锁状况以及采取校正动作以尝试 减轻这种状况。样本系统400代表基于可以从Intel公司获得的 Pentium、PentiumPro、PentiumII、PentiumIII、Pentium4 以及Itanium和Itanium2微处理器的处理系统,但是也可以使用其 他系统(包括具有其他微处理器的个人计算机(PC)、工程工作站、 个人数字助理和其他手持式设备、机顶盒等等)。对于一个实施例, 样本系统可以执行能够从Microsoft公司获得的WindowsTM操作系统 的一个版本,但是例如也可以使用其他操作系统和图形用户界面
参考图4,样本处理系统400可以包括存储器系统490和处理器 404。存储器系统490可以存储用于控制处理器404的操作的指令241 和数据240。
存储器系统490意图作为存储器的一般化表示并且可以包括多种 形式的存储器,比如硬盘驱动器、CD-ROM、随机存取存储器(RAM)、 动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪 存以及相关电路。存储器系统490可以存储由数据信号代表的指令241 和/或数据240,所述数据信号可以由处理器404执行。所述指令241 和/或数据240可以包括用于执行这里讨论的某些或所有技术的代码。
虽然已经示出并说明了本发明的特定实施例,但是本领域技术人 员显然可以看出,在不背离本发明的最广范围的情况下可以做出许多 改变和修改。例如,上面讨论的计数器值X、Y、Z1、Z2、M、N、P 可以被用作向上计数或倒计数的计数器值。每个所述计数器值可以(但 不必)是不同的值。例如,对于至少一个实施例有P>>M、P>>N、Z1>Y、 Z2>Y、P>Z1、P>Z2以及X>Z1。可以在硬件中设置这些计数器值的缺 省值。对于某些实施例,所述缺省计数器值可以是可编程的,从而例 如可以用微代码或者其他固件或软件代码对其进行修改。
因此,本领域技术人员将认识到,可以在不背离本发明的最广范 围的情况下做出许多改变和修改。所附权利要求书意图包含落在本发 明的真实范围内的所有这种改变和修改。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈