据我所知,intel 8086 pipelining
是一种技巧
在执行当前指令时提取 下一条指令 的说明。
This文章说, 流水线优势 之一是
消除了欧盟的等待时间,并加快了处理速度 。
我认为,像lea 0x7(%eax), %ecx
这样的指令可以分为几条指令,
像add $0x7, %eax; lea %eax, %ecx
。
我的想法)
因此,根据定义,
我认为上面的示例符合intel 8086 pipelining
的定义
因为它在一个时隙执行多个指令和
因此这样的操作加快了处理速度。
问题)
我很好奇以下说明可以作为流水线的示例。
main:
mov $0x2, %eax
mov $0x3, %esi
lea (%eax), %ecx # result: 2. Pipeling?
lea 0x7(%eax), %ecx # result: 9. Pipeling?
lea 0x7(%eax,%esi,), %ecx # result: 12. Pipeling?
lea 0x7(,%esi,4), %ecx # result: 19. Pipeling?
lea 0x7(%eax,%esi,4), %ecx # result: 21. Pipeling?
答案 0 :(得分:1)
最早的计算机没有流水线。他们获取一条指令,执行该指令所需的所有周期,然后传递给下一条指令。平均而言,一条指令需要5-6个周期。 对于80年代中期之前的所有计算机,包括8086(于78年推出),这种行为都是正确的。
在70年代后期,人们发现管道是提高效率的有效途径。第一个商业芯片是IBM 801,但在80年代中期,Sun Sparc,Berkeley Risc和MIPS的成功开发成功了。
这个想法是将所有指令分成相似的阶段,并将该阶段与独立的硬件资源相关联,这样您就可以开始一条新指令,而不必等待上一条指令完成,从而可以开始一条新指令。每个周期的指令。为了处理指令交互(危险),每〜1.5个周期有1条指令,但是与上一代相比,增益是巨大的(X3性能)。
问题在于流水线需要基于简单数据移动的特定指令集(称为RISC指令集)。新的计算机基于此方案,但旧的处理器指令集未得到改编(包括x86)。
为了从管道收益中获利,同时保持向上兼容性,intel决定基于两部分来构建微体系结构:第一个提取x86指令并将其转换为可传递的指令(称为μOps),第二个是管道执行这些μOps。它是1995年推出的Pentium Pro首次引入,并存在于所有后续版本中。
您提供的代码
lea 0x7(%eax),%ecx
翻译为
添加$ 0x7,%eax;
lea%eax,%ecx
是μOps转换的示例。转换特别有用,可以将带有内存中操作数的ALU操作转换为执行单个任务(内存传输或ALU op)的简单操作。
目前,所有计算机都是流水线化的(某些简单的μ控制器或某些嵌入FPGA的处理器除外)。
您给出的任何指令序列都将在管道中执行,当然包括问题中的指令。唯一的限制是,根据指令的交互作用,可能存在隐患,这可能意味着流水线会变慢(停顿)。
我认为上面的示例与intel 8086流水线的定义匹配
管道是微体系结构的特征,而不是指令集的特征。因此,微体系结构8086不是流水线,而是其指令集(称为x86或IA32)的后续体系结构实现。
因为它在一个时隙执行多条指令
您实际上是对的,可以在一个时隙中启动几条指令,但这是流水线之上的另一种技术,它允许在指令级别并行执行并称为超标量。