Intel Hyper-Threading Technology(5)

版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, https://blog.csdn.net/qq_43401808/article/details/85850573

Microarchitecture Pipeline and HT Technology

本节讲述超线程技术与微架构的关系,以及来自于两个逻辑处理器的位置是如何在流水线前端与后端被处理的。

尽管来自于两个程序或者两个线程的指令在执行核中是同时执行,也不必按照程序设计顺序(即乱序执行),流水线的前端和后端还是包括了若干个选择点,用于从两个逻辑处理器中选择指令。所有的选择点按照周期交替原则操作,除非某个逻辑处理器暂时无法使用流水线的某级。在这种情况下,流水线的这一级可以在每个周期都供另一个逻辑处理器使用。可能导致某个逻辑处理器无法使用某级流水线的原因包括:高速缓存未命中,分支预测失败,和指令依赖。

Front End Pipeline

执行跟踪片缓存区TC在两个逻辑缓冲区之间共享。在每个周期,两个逻辑处理器对TC的访问请求都会被仲裁。假设两个逻辑处理器都申请访问TC,如果在第一个周期内,某个逻辑处理器读取了一个缓存行,则下一个周期,会让另一个逻辑处理器执行访问请求。即按周期交替访问TC。

但是如果某个逻辑处理器停顿了,或者暂时无法使用TC,则另一个逻辑处理器可以使用TC的全部带宽,直到前一个逻辑处理器继续执行或者产生TC访问请求。此后,会继续仲裁机制让两个逻辑处理器交替使用TC。

当读取指令并生成微指令跟踪片之后,微指令被放置于一个队列中(即微指令队列)。这个队列将流水线的TC与寄存器别名阶段解耦合(即隔离)。如前所述,如果两个逻辑处理器都是活跃的(即开启了超线程),这个队列是分区使用的,这样可以让两个逻辑处理器在各自的指令流上“前行”。

Execution Core

假设微指令都已经处于执行就绪状态,执行引擎可以每周期分发6条微指令。一旦微指令被放置于队列中等待执行,来自于两个逻辑处理器的微指令就没有区别了(即无法在分辨出某个指令来自于哪个逻辑处理器)。执行核与存储器层级结构也对指令来自于哪个逻辑处理器一无所知。

在微指令执行后,指令被放置于重排序缓冲区ROB中。ROB将执行阶段与退役阶段解耦合。ROB是分区使用的,这样每个逻辑处理器使用一半的ROB条目。

Retirement

退役逻辑跟踪来自于两个逻辑处理器的指令,确定哪些可以被退役。然后按照周期交替的原则为每个逻辑处理器按照程序设计顺序将指令退役。如果某个逻辑处理器没有要退役的指令,则另一个逻辑处理器可以使用到全部的退役带宽。

一旦写存操作退役,处理器需要将数据写入到L1数据缓存中。硬件选择逻辑也会交替地将两个逻辑处理器的写存数据提交到数据缓存中。

猜你喜欢

转载自blog.csdn.net/qq_43401808/article/details/85850573