根据 Miles Murdoca 和 Vincent Heuring 的“计算机体系结构和组织”,
CISC 指令不太适合流水线架构。为了使流水线有效地工作,每条指令都需要与其他指令有相似之处,至少在相对指令复杂度方面是这样。
为什么这是真的?指令的复杂性是什么意思;不是所有指令都需要一个时钟周期才能开始执行吗?如果指令正在读取或写入内存,那么它会花费更长的时间,但 RISC 处理器也会读取或写入内存(当然)?
根据 Miles Murdoca 和 Vincent Heuring 的“计算机体系结构和组织”,
CISC 指令不太适合流水线架构。为了使流水线有效地工作,每条指令都需要与其他指令有相似之处,至少在相对指令复杂度方面是这样。
为什么这是真的?指令的复杂性是什么意思;不是所有指令都需要一个时钟周期才能开始执行吗?如果指令正在读取或写入内存,那么它会花费更长的时间,但 RISC 处理器也会读取或写入内存(当然)?
指令的“复杂性”与它们的大小和格式可以变化多少有关。以 x86 IA32 (Intel 32-bits) 架构为例,即 CISC。指令的大小可以从 1 到 15 个字节不等,它们的格式也有很大差异(格式是每个字段使用多少位,这些位的位置等等)。
这意味着您只有在开始解码指令后才能知道何时完成获取指令。一些指令只需要一个周期即可获取,而另一些则更多,这使流水线过程复杂化。
另一方面,所有 ARM 指令(RISC 架构)正好有 4 个字节。因此,一旦您获取 4 个字节,您就知道您可以将这些字节发送到管道的解码阶段,并且您可以立即开始获取下一条指令。
这意味着对于 CISC 体系结构,通常存在比 RISC 相对较长的指令。所以调度比较棘手。在 CISC 中,通常会混合使用更简单的指令和需要更长时间的更复杂指令。因此,在管道中存在一些称为危险的东西,它们可能会给流畅的流水线带来问题。例如,X86 浮点指令将比 x86 加载或存储更长。