有指令流水线的吞吐率计算试题如下:
看了网上的几个讲解并不是特别清楚。在这个文章里面 感觉是容易把基本原理搞清楚的。计算机指令-流水线和吞吐率 - MaybePin - 博客园 (cnblogs.com)
然后这里再加上一些自己的想法,巩固一下。
1. 首先如果没有流水线的工作方式,按题中描述的指令,需要1+2+3+1=7t的时间完成,8条指令就需要7*8=56t的时间完成。
2. 为了提高cpu的工作效率,把一条指令分成若干段(平时总看到取指,分析,执行三段的)这里要注意,并不是只能分成3段,比如题中分成了4段。还可以分成5段等等,分成几段就是几条流水线。
3. 为什么一条指令分成若干段之后就可以提高效率了呢。因为在同一个机器周期t内,cpu可以在不同的流水线做不同的工作(执行指令的不同段)。这样就可以在指令1取指完成后,指令2就可以马上进行取指了。比如下图:
不过在这个图中产生了其他问题,在指令1的第2段(橙色)正在工作时,指令2也需要进行第2段的工作。这样就产生了冲突。就只能把指令2向后延迟。
指令2的第2段错开了,可是继续执行,指令3又发生了重叠。只能继续向后推迟整个指令执行时间。直到如下图:
这样就可以持续执行后面的指令。
把指令执行的时间,都映射到左边
这样可以从图中看出来一种执行了 1+2+ 3*8 +1=28次(这和查询到的计算过程不同)。