您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子百科>电脑硬件>台式机>

流水线中的相关培训教程[2]

2010年04月13日 15:59 www.elecfans.com 作者:佚名 用户评论(0

流水线中的相关培训教程[2] 

ADD指令后的所有指令都要用到ADD指令的计算结果,如图3.3.4所示, ADD 指令在 WB 段才将计算结果写入寄存器 R1 中,但是 SUB 指令在其 ID 段就要从寄存器 R1 中读取该计算结果,这种情况就叫做数据相关。除非有措施防止这一情况出现,否则 SUB 指令读到的是错误的值。所以,为了保证上述指令序列的正确执行,流水线只好暂停 ADD 指令之后的所有指令,直到 ADD 指令将计算结果写入寄存器 R1 之后,再启动 ADD 指令之后的指令继续执行。

    从图3.3.4还可以看到, AND 指令同样也将受到这种相关关系的影响。 ADD 指令只有到第五个时钟周期末尾才能结束对寄存器 R1 的写操作,所以 AND 指令在第四个时钟周期从寄存器 R1 中读出的值也是错误的。而 XOR 指令则可以正常操作,因为它是在第六个时钟周期读寄存器 R1 的内容。

    另外,利用DLX流水线的一种简单技术,可以使流水线顺利执行 OR 指令。这种技术就是:在 DLX 流水线中,约定在时钟周期的后半部分进行寄存器文件的读操作,而在时钟周期的前半部分进行寄存器文件的写操作。在本章的图中,我们将寄存器文件的边框适当地画成虚线来表示这种技术。

2. 通过定向技术减少数据相关带来的暂停

    图3.3.4中的数据相关问题可以采用一种称为定向(也称为旁路或短路)的简单技术来解决 (动画演示)。 定向技术的主要思想是:在某条指令(如图3.3.4中的 ADD 指令)产生一个计算结果之前,其它指令(如图3.3.4中的 SUB 和 AND 指令)并不真正需要该计算结果,如果能够将该计算结果从其产生的地方(寄存器文件 EX/MEM)直接送到其它指令需要它的地方(ALU 的输入寄存器),那么就可以避免暂停。基于这种考虑,定向技术的要点可以归纳为:

    (1) 寄存器文件 EX/MEM 中的 ALU 的运算结果总是回送到 ALU 的输入寄存器。

    (2) 当定向硬件检测到前一个 ALU 运算结果的写入寄存器就是当前 ALU 操作的源寄存器时,那么控制逻辑将前一个 ALU 运算结果定向到 ALU 的输入端,后一个 ALU 操作就不必从源寄存器中读取操作数。

图3.3.4还表明,流水线中的指令所需要的定向结果可能并不仅仅是前一条指令的计算结果,而且还有可能是前面与其不相邻指令的计算结果,图3.3.5是采用了定向技术后上述例子的执行情况,其中寄存器文件和功能单元之间的箭头表示定向路径。上述指令序列可以在图3.3.5中顺利执行而无需暂停。

上述定向技术可以推广到更一般的情况,可以将一个结果直接传送到所有需要它的功能单元。也就是说,一个结果不仅可以从某一功能单元的输出定向到其自身的输入,而且还可以从某一功能单元的输出定向到其它功能单元的输入。

    在 DLX 中,任何流水线寄存器到任何功能单元的输入都可能需要定向路径。前面的一些数据相关的实例均是有关寄存器操作数的,但是数据相关也有可能发生在一对指令对存储器同一单元进行读写的时候。不过,本章仅讨论有关寄存器的数据相关。

 3. 数据相关的分类

    根据指令对寄存器的读写顺序,可以将数据相关分为三类。习惯上,这些相关是根据流水线所必须保持的访问顺序来命名的。考虑流水线中的两条指令 i 和 j ,且 i 在 j 之前进入流水线,由此可能带来的数据相关有:

 

非常好我支持^.^

(1) 100%

不好我反对

(0) 0%

( 发表人:admin )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!