2016-09-29 70 views
-2

在我的毕业计算机体系结构上,这位教授谈到了MIPS中的流水线操作,但也表示由于x86指令集的某些情况(我不太记得),x86处理器需要增加一个逻辑,处理汇编指令和流水线。实际英特尔x86处理器为了流水线而需要多少开销?

我不是在寻找一个直接的数字答案,而不是有关该主题的文件或提示:正在做什么翻译的x86指令,允许流水线,如何做到这一点的逻辑工作等

谢谢一堆。

+0

请参阅https://en.wikipedia.org/wiki/Micro-operation术语是微操作或微操作。此外,Agner Fog的任何内容都会很好,所以请参阅:http://www.agner.org/optimize/ –

回答

-1

MIPS指令集是RISC指令集,其设计使其易于管道化,而x86指令集只是像恶性肿瘤一样增长。流水线式的x86实现通常将每个x86指令转换为一个或多个类似RISC的操作,然后再进行流水线操作。

3

关于http://realworldtech.com/的许多论坛主题都讨论了x86晶体管计数/性能/功耗方面x86 CPU的成本与MIPS等简单解码ISA相比的成本。

10%是一个猜测数字。其中一些成本是固定的,并且不会随着您的CPU更强大而扩展。例如需要3个额外的流水线阶段才能将x86指令解码为复杂度相似以分离MIPS指令的uops流。带有内存目标的ADD可能解码为加载,添加和存储。 (在管道的某些部分的微融合使得它比这更复杂)。

解码变长x86指令是并行处理能力很强(当前设计中每个时钟最多4个)。 x86不只是可变长度,确定长度(即下一条指令的开始)需要查看很多位,因为有可选的前缀和各种其他复杂性。 Intel和AMD之间的Agner Fog's blog post about the "instruction set war"讨论了x86操作码编码空间的混乱状态的一些成本。 (另请参阅他的microarch pdf以了解AMD和Intel在现代x86设计中的管道,旨在寻找真正的代码/理解性能计数器的瓶颈,但如果您只是好奇CPU如何工作,也很有趣)。

解码x86指令的代价是如此之高以至于传统的L1 I-cache以及Intel's Sandybridge microarchitecture family uses a small/fast decoded-uop cache。即使是大型循环通常也适用于uop缓存,与传统解码器运行相比,可节省功耗并提高前端吞吐量。大多数其他ISA不能从解码指令缓存中获得近乎多的好处,所以他们不使用它们。 (Intel之前曾在Pentium 4中尝试过一种解码 - 追踪追踪缓存(没有L1 I-cache和较弱的解码器),但是SnB的uop缓存是而不是追踪缓存,传统解码器仍然足够快。)

OTOH是x86的一些传统行李(如部分FLAGS更新),对流水线的其余部分和乱序内核造成了成本。现代x86 CPU必须分别重命名FLAGS的不同部分,以避免像DEC/JNZ这样的错误依赖。 (其中​​)。英特尔尝试不这样做(在Pentium4中也称为netburst微架构家族)。他们认为他们可以强制每个人用避免INC/DEC的编译器重新编译他们的代码,并使用add eax, 1(它修改所有的标志)。 (This optimization advice stuck around for ages in their official optimization manual, long after P4 was obsolete, and many people think it's still relevant


有些人认为,86强大的内存排序语义应该被认为是“86税”,减少并行流水线CPU可以利用的一部分,但其他人(例如,Linus Torvalds)会争辩说让硬件为你做这件事意味着你不需要在多线程代码中遍布各处的屏障指令。而且,如果屏障指令是“便宜的”(不是完整的存储缓冲区或任何其他内容),则需要硬件足够详细地跟踪内存排序,以至于它们可能会使内存隐含起来。

+1

我还要添加MIPS指令集有其自己的传统行李。例如,分支延迟插槽与经典的5状态管线绑定,在现代设计中没有意义。 –

+0

@RossRidge:对,好点。在ISA中暴露微体系结构细节总是会在事情发生变化时变成负担。例如如果没有重新编译,VLIW架构不能很好地扩展。我从来没有真正学过IA-64,但显然它暴露了很多。当这个论点出现时,通常是关于ARM,以及一旦ARM CPU的设计和制造得到改善,它将如何最终占领全球,而英特尔的流程优势无法支付x86税。而另一方则认为,x86税收是一个平价。我根据这个问题取代了MIPS。 –