11.28
另一个会导致流水线停滞的原因是计算机需要作决定。大多数情况下,在执行完一条指令
后,处理器都会获取下一个内存地址中的指令继续执行。这时,多数情况下,下一条指令
已经被保存在高速缓存中了。一旦流水线的第一道工序变为可用状态,指令就可以连续地
进入到流水线中。
但是控制转义指令略有不同。跳转指令或跳转子例程指令会将执行地址变为一个新的值。
在执行跳转指令一段时间后,执行地址才会被更新。在这之前是无法从内存中读取“下
一条”指令并将其放入到流水线中的。新的执行地址中的内存字不太可能会存储在高速
缓存中。在更新执行地址和加载新的“下一条”指令到流水线中的过程中,会发生流水
线停滞。
在执行了一个条件分支指令后,执行可能会走向两个方向:下一条指令或者分支目标地址
中的指令。最终会走向哪个方向取决于之前的某些计算的结果。这时,流水线会发生停
滞,直至与这些计算结果相关的全部指令都执行完毕,而且还会继续停滞一段时间,直至
决定一下条指令的地址并取得下一条指令为止。
对性能优化而言,这一项的意义在于计算比做决定更快
后,处理器都会获取下一个内存地址中的指令继续执行。这时,多数情况下,下一条指令
已经被保存在高速缓存中了。一旦流水线的第一道工序变为可用状态,指令就可以连续地
进入到流水线中。
但是控制转义指令略有不同。跳转指令或跳转子例程指令会将执行地址变为一个新的值。
在执行跳转指令一段时间后,执行地址才会被更新。在这之前是无法从内存中读取“下
一条”指令并将其放入到流水线中的。新的执行地址中的内存字不太可能会存储在高速
缓存中。在更新执行地址和加载新的“下一条”指令到流水线中的过程中,会发生流水
线停滞。
在执行了一个条件分支指令后,执行可能会走向两个方向:下一条指令或者分支目标地址
中的指令。最终会走向哪个方向取决于之前的某些计算的结果。这时,流水线会发生停
滞,直至与这些计算结果相关的全部指令都执行完毕,而且还会继续停滞一段时间,直至
决定一下条指令的地址并取得下一条指令为止。
对性能优化而言,这一项的意义在于计算比做决定更快