X86 为什么CISC处理器更难管道化?在什么意义上是一些指示;“更复杂”;比其他人?

X86 为什么CISC处理器更难管道化?在什么意义上是一些指示;“更复杂”;比其他人?,x86,cpu-architecture,instruction-set,pipelining,X86,Cpu Architecture,Instruction Set,Pipelining,根据Miles Murdoca和Vincent Heuring的“计算机架构和组织” CISC指令不太适合流水线架构。对于 流水线为了有效地工作,每个指令都需要 与其他说明的相似性,至少在相对 指令复杂性 为什么这是真的?指令的复杂性意味着什么;不是所有指令都需要一个时钟周期才能开始执行吗?如果指令正在读取或写入内存,则需要更长的时间,但RISC处理器也会读取或写入内存(当然)?这是指CISC体系结构,通常有比RISC更长的指令。因此,日程安排更为棘手。在CISC中,通常会混合使用更简单的指令和

根据Miles Murdoca和Vincent Heuring的“计算机架构和组织”

CISC指令不太适合流水线架构。对于 流水线为了有效地工作,每个指令都需要 与其他说明的相似性,至少在相对 指令复杂性


为什么这是真的?指令的复杂性意味着什么;不是所有指令都需要一个时钟周期才能开始执行吗?如果指令正在读取或写入内存,则需要更长的时间,但RISC处理器也会读取或写入内存(当然)?

这是指CISC体系结构,通常有比RISC更长的指令。因此,日程安排更为棘手。在CISC中,通常会混合使用更简单的指令和花费更长时间的更复杂的指令。因此,在管道中,有一些称为危险的东西会给管道的顺利运行带来问题。 例如,X86浮点指令将比X86加载或存储指令长。

指令的“复杂性”与它们的大小和格式的变化程度有关。以x86 IA32(Intel 32位)体系结构为例,它是CISC。指令的大小可以从1字节到15字节不等,它们的格式也有很大差异(格式是每个字段使用多少位,这些位位于何处等等)

这意味着您只有在开始解码指令后才能知道何时提取完指令。有些指令只需要一个周期就可以获取,其他指令则需要更长的时间,这会使管道过程复杂化


另一方面,所有ARM指令(RISC体系结构)正好有4个字节。因此,一旦获取了4个字节,您就知道可以将这些字节发送到管道的解码阶段,并且可以立即开始获取下一条指令

要想知道这本书的作者是什么意思,最好的办法就是直接问他们。关于问题的其他部分,在现代处理器上,简单指令(ADD/SUB/MOV、逻辑指令、移位)通常在1个周期内执行,整数乘法在3-4个周期内执行,浮点乘法在3-6个周期内执行,浮点加法在2-5个周期内执行。@MaratDukhan但什么是周期?甚至a也表示这是最基本的时间单位或完成一条指令所需的时间量,这给出了一个循环定义。每分钟生产一个小部件的装配线并不意味着小部件需要一分钟的时间来生产,每个小部件开始完成可能需要数小时或数天。然而,这条生产线的每个小部件可能只有很少的变化,因此装配线可以一分钟接一分钟地平稳运行。在现代计算机或旧计算机上,指令从开始到结束显然需要许多时钟周期。他们努力使每个时钟周期内完成的一条(或多条)指令的平均数达到指令突发的平均值,然后您暂停,然后重试。他们的陈述包括您问题的答案。每个指令都需要与其他指令具有相似性。您希望指令通过相同的装配线/管道,它们需要按照相同的顺序分解为类似的步骤。CISC传统上不做,RISC传统上做。为pdp11指令集编写一个指令集模拟器,不要完成它,只要开始。然后为旧的图片写一张,图片12或14,这需要半个小时才能完成并调试。比较完全解析和执行每个指令所需的复杂性,这些指令定义为指令式。即使您只对每个指令集做了足够的添加、比较和分支(若不相等),也足以执行一段时间的循环。这应该可以解释他们在说什么。所以你说的很简单,CISC有更多的管道危险?是的,你的指令集越规则或相似,计划就越容易。指令不仅在长度上不同,在复杂度上也不同。请查看Wikipedia上的指令调度。FPU指令是一个糟糕的例子,因为RISC CPU也有同样的问题:FP mul的延迟比integer add更长。除非您谈论的是x87指令,如
fsin
,或者是内部微码化的简单操作,可能包括一个查找表,并且需要100个周期以上,而
fmul
需要3到5个周期(完全流水线)。(CPU的编号与顺序流水线P5 Pentium一样古老,P5 Pentium没有将最复杂的指令解码到多个UOP)可变长度编码是复杂性的一个来源,但肯定不是唯一的。内存源或特别是内存目标(RMW)ALU指令是一个依赖的操作链。RISC机器总是负载存储机器,这是有原因的。现代x86 CPU可以并确实获取16或32字节的块并并行解码;找到指令边界只需要花费更多的晶体管/功率。除非出现L1i缓存未命中,否则任何指令的获取时间都不会超过2个周期(如果它跨16字节边界拆分),并且前端是流水线的(在较新的CPU中的各个阶段之间使用缓冲区来隐藏气泡)。有关Intel Sandybridge的前端提取/解码阶段,请参阅。是的,它比RISC复杂/昂贵得多,这是超标量x86 CPU必须支付的x86“税”的一部分。@PeterCordes-是的,我不认为OP的引用实际上是在谈论解码的复杂性,而是指指令应该如何具有短的、固定的延迟以完全适应例如。,一种5级流水线模型,其中每条指令在一个固定的阶段写回其结果,并且具有少量固定数量的输入,等等。