第3章 流水线技术部分课后习题

3.1 解释下列术语
  • 流水线: 把一个重复的过程分解为若干个子过程(相当于上面的工序),每个子过程由专门的功能部件来实现。把多个处理过程在时间上错开,依次通过各功能段,这样每个子过程就可以与其他子过程并行进行
  • 单功能流水线:只能完成一种固定功能的流水线
  • 多功能流水线:流水线的各段可以进行不同的连接,实现不同的功能
  • 静态流水线:在同一时间内,多功能流水线中的各段只能按照一种功能的连接方式工作
  • 动态流水线:在同一时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能
  • 部件级流水线(运算操作流水线):把处理机的算术逻辑运算部件分段,使得各种类型的运算操作能按流水方式进行
  • 处理机流水线(指令流水线):把指令的解释执行过程按照流水方式处理
  • 处理机间流水线(宏流水线):由两个或者两个以上的处理机串行连接起来,对同一数据流进行处理,每个处理机完成整个任务中的一部分
  • 线性流水线:流水线的各段串行连接,没有反馈回路。数据通过流水线的的段时,每个段最多只流过一次
  • 非线性流水线:流水线中除了有串行的连接外,还有反馈回路
  • 顺序流水线:流水线输出端任务流出的顺序与输入端任务流入的顺序完全相同
  • 乱序流水线:流水线输出端任务流出的顺序与输入端任务流入的顺序可以不同,允许后进入流水线的任务先完成(从输出端流出),又称为无序流水线、错序流水线、异步流水线
  • 吞吐率:单位时间内流水线所完成的任务数量或输出结果的数量
  • 流水线加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
  • 效率:流水线中的设备实际使用时间与整个运行时间的比值
  • 数据相关:对于两条指令i和j,如果下述条件之一成立,则称指令j与指令i数据相关:指令j使用指令i产生的结果;指令j与指令k数据相关,而指令又与指令i数据相关
  • 名相关:如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关
  • 控制相关:控制相关是指分 支指令引起的相关。它需要根据分支指令的执行结果来确定后续指令是否执行
  • 反相关:如果指令j写的名与指令i读的名相同,则称指令i和j发生了反相关
  • 输出相关:如果指令j与指令i写相同的名,则称指令i与指令j发生了输出相关
  • 换名技术:名相关的两条指令之间并没有数据的传送,只是使用了相同的名。可以把其中一条指令所使用的名换成别的,以此来消除名相关
  • 结构冲突:因硬件资源满足不了指令重叠执行的要求而发生的冲突
  • 数据冲突:当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而发生的冲突
  • 控制冲突:流水线遇到分支指令和其他会改变PC值的指令所引起的冲突
  • 定向:用来解决写后读冲突的。在发生写后读相关的情况下,在计算结果尚出来之前,其他指令不不真正立即需要该计算结果,将该计算结果从其产生的地方直接送到其他指令需要它的地方,来避免停顿
  • 写后读冲突:指令j用到指令i的计算结果,而且在i将结果写入寄存器之前就去读该寄存器,因而得到的是旧值
  • 写后写冲突:指令j与指令i的结果单元相同,而且j在i写入之前就对该单元进行了写入操作,导致写入顺序错误。这时在结果单元留下的是i写入的值,而不是j写入的。
3.2 简述流水线技术的特点
  1. 流水线把一个处理过程分解成若干个子过程,每一个子过程由一个专门的功能部件来实现。
  2. 流水线中各段的时间应尽可能相等,否则将引起流水线堵塞、断流
  3. 流水线每一个功能部件的后面都要有一个缓冲寄存器,称为流水寄存器
  4. 流水技术适合大量重复的时序过程,只有在输入端不断地提供任务,才能充分发挥流水线的效率
  5. 流水线需要通过时间和排空时间
3.3 解决流水线瓶颈问题有哪两种常用方法?
  1. 细分瓶颈段
  2. 重复设置瓶颈段
3.4 减少流水线分支延迟的静态方法有哪些

1. 在流水线中尽早判断出分支转移是否成功
2. 尽早计算出分支目标地址

  1. 预测分支失败
  2. 预测分支成功
  3. 延迟分支
3.5 简述延迟分支方法中的3种调度策略的优缺点
调度策略 对调度的要求 对流水线性能改善的影响
从前调度 分支必须不依赖于被调度的指令 总是可以提高流水线性能
从目标处调度 如果分支转移失败,必须保证被调度的指令对程序的执行没有影响,可能需要复制被调度指令 分支转移成功时,可以提高流水线性能。但由于复制指令,可能加大程序空间
从失败处调度 如果分支转移成功,必须保证被调度的指令对程序的执行没有影响 分支转移失败时,可以提高流水线性能
3.6 列举出下面循环种所有相关,包括输出相关、反相关、真相关
 a[i] = b[i] + a[i] ;                 /* S1 */
 c[i+1] = a[i] +d[i] ;               /* S2 */
 a[i-1] = 2 * b[i] ;                 /* S3 */
 b[i+1] = 2 * b[i] ;                /* S4 */
 a[i+1] = b[i+1] + a[i+1] ;          /* H1 */
 c[i+2] = a[i+1] +d[i+1] ;          /* H2 */
 a[i] = 2 * b[i+1] ;               /* H3 */
 b[i+2] = 2 * b[i+1] ;            /* H4 */

对于单次循环,其中:

    输出相关:无。

    反相关:无。

    真相关:S1 和S2。                                            

由于循环引入的相关,其中:

    输出相关:S1 和H3                                           

    反相关:S1 和H3、S2 和H3。                                

    真相关:S4 和H1、S4 和H3、S4 和H4。     

小结

数据相关(真数据相关) 指令j使用指令i的结果
指令j与指令k数据相关,而指令k又与指令i数据相关
名相关(反相关) j写的名与指令i读的名相同
名相关(输出相关) 指令i与指令j写相同的名
控制相关 分支指令
发布了24 篇原创文章 · 获赞 6 · 访问量 1353

猜你喜欢

转载自blog.csdn.net/Alexhcf/article/details/103787592