在b站学完计算机组成原理的指令流水线这一小节以后,内心有一些疑问。希望大佬们帮忙解答:
在指令流水线的设计中,该如何处理下面这种情况?
例如,如果取指阶段发生Cache未命中并且CPU必须等待主存DRAM,会发生什么情况?该如何保证指令流水线的正常工作?
以及,对cisc指令集设计也有些疑惑。risc由于是精简指令、长短统一、执行时间恒定,因此risc指令集计算机CPU实现流水线很好理解; 但是cisc指令长短不一且指令执行时间不固定(书上是这么说的),那是通过什么方法来实现指令流水线的呢?
参考GPT和自己的思路:
针对第一个问题,当取指阶段发生Cache未命中并且CPU必须等待主存DRAM时,指令流水线会被暂停,等待数据从主存中返回,并将数据写入Cache。这种情况通常称为“流水线停顿(pipeline stall)”。为了最小化这种情况的影响,可以使用一些技术来减少流水线停顿的次数,例如预测机制和乱序执行等。
对于第二个问题,针对CISC指令集的流水线设计,采取了一些特殊的技术来实现指令流水线的运作。这些技术包括指令重编码、多级流水线、超标量处理、动态调度等。通过这些技术的应用,可以在一定程度上缓解CISC指令执行时间不固定的问题,从而实现流水线的有效运作。