【2020/12/4修订】【梳理】计算机组成与设计 第4章 处理器 第2节 流水线 流水线冲突(docx)

配套教材:
Computer Organization and Design: The Hardware / Software Interface (5th Edition)
这是专业必修课《计算机组成原理》的复习指引。建议将本复习指导与博客中的《简明操作系统原理》配合复习。
需要掌握的概念在文档中以蓝色标识,并用可读性更好的字体显示 Linux 命令和代码。代码部分语法高亮。
计算机组成原理不是语言课,本复习指导对用到的编程语言的语法的讲解也不会很细致。如果不知道代码中的一些关键字、指令或函数的具体用法,你应当自行查找相关资料。


第四章 处理器

第一节 数据通路

第二节 流水线 流水线冲突

第三节 异常

第四节 指令级并行

注意

链接:https://pan.baidu.com/s/1Y9T_iCBTPJ81qmh8tRHugw
提取码:0000


第二节 流水线 流水线冲突
回忆一下执行一条指令的大致步骤:
(1)从内存中取指令。
(2)对指令解码(decode),并读寄存器(MIPS指令集允许解码和读写指令中指定的寄存器同时进行)。
(3)开始执行,计算需要访问的地址。
(4)从内存中访问操作数。
(5)把结果写入寄存器。
构建一个5级(stage)流水线(pipeline,也称管线)的CPU,每一级负责上述所说的一步。由于每一级用到的单元是独立的,因此我们可以这样执行:
·解码并读寄存器时,可以同时取下一条指令。
·一条指令开始执行后,下一条指令可以开始解码。
·访问内存时,下一条指令可以开始执行。
·结果写入寄存器时,可以开始根据下一条指令访问内存。
也就是说,一条指令执行到上述5步中的非第一步时,下一条指令都开始执行上一步:

(这里每一步的执行时间只是举例;并且,对读写寄存器的指令,假设写在读之前,而且各占一半周期)
由于CPU执行指令的速度是非常快的,也就是说即使是很短的时间,CPU都已经执行了很多指令。所以近似来说,流水线化后的一个CPU与流水线化之前的性能倍数之比就是流水线级数:一个核心有几级流水线,就可以近似把这一个核心看成几个核心(相当于上面的对比图中流水线化的指令全部靠在最左边,而不是每条指令相对上一条都空开一级流水线的位置,执行的指令数越多,这种估计与实际越接近)。当然,流水线结构是有额外开销的,所以实际上的性能提升并没有这么多。
每一级流水线的时钟周期是一样的,而且必须不短于耗时最长的那一步的执行周期:如果周期再调短的话,就会出现这样的情况:某级流水线对应的步骤虽然执行完毕,但是下一级流水线需要用到的单元还在被占用,所以新的指令无法进入下一级流水线,造成部分单元闲置;并且为了确保不搞乱数据,需要进行更复杂的控制。所以不如直接把每一步的周期都设成一样的。
有的指令在整条流水线期间,在某些stage上可能什么都不做。但即便如此,指令还是要通过这些stage的。

MIPS的指令集都是定长的(32-bit),所以流水线化比较容易:取指令可以在第一级流水线完成。但是x86指令短则1字节,长则十几字节,流水线化就比较麻烦了。较新的x86 CPU中,指令会被拆分成一系列微操作(micro-op),来降低流水线化的难度。
MIPS的指令格式不多,而且在这些格式中,源寄存器在指令中的位置都是一样的,所以在第二级流水线中可以在读寄存器堆的同时确定下一条指令的格式。如果指令格式比较复杂的话,这一级流水线就要拆分成更多级了。
在MIPS中,只允许L / S指令的操作数来自内存。所以第3级流水线可以同时执行并计算内存地址,然后在第4级流水线进行内存访问。x86允许其中一个操作数来自内存,这两级流水线在x86中要拆成3级(计算地址、内存访问、执行)。
MIPS强制要求内存对齐,所以传输数据到内存时只需要一级流水线就能完成了。

假如一个指令在执行的时候需要先等待流水线上前一个指令先执行完毕,那么这两个指令相互之间具有依赖关系。这可能导致流水线冲突(pipeline hazard,也称流水线冒险,流水线风险)的现象发生。流水线冲突分为3种:
·结构冲突(structural hazard):流水线上的一个指令需要使用已经被另一个指令占据的资源(部件数量不够,没法满足指令的重叠执行)。
例如,在上图所示的流水线中,假设存在第四条lw指令,那么在这个时刻,第四条lw指令和第一条lw指令就要同时访问内存&#

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值