这是英特尔流水线指令吗?
Is this intel pipelining instruction?
据我所知,intel 8086 pipelining
是技巧
在执行当前指令时获取下一条指令。
This文章说流水线的优势之一是
消除EU的等待时间,加快处理速度。
我认为,像lea 0x7(%eax), %ecx
这样的指令可以拆分成几条指令,
喜欢 add [=13=]x7, %eax; lea %eax, %ecx
.
我的想法)
所以,根据定义,
我认为上面的例子符合 intel 8086 pipelining
的定义
因为它在一个时隙执行多条指令和
所以这样的操作 可以加快处理速度 。
问题)
我很好奇下面的指令可以作为流水线的例子。
main:
mov [=10=]x2, %eax
mov [=10=]x3, %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?
最早的计算机没有流水线。他们获取一条指令,执行指令所需的所有周期并传递给下一条指令。平均一条指令需要 5-6 个周期。
这种行为适用于 80 年代中期之前的所有计算机,包括 8086(在 78 年推出)。
七十年代后期,人们发现流水线是提高效率的有效途径。第一个商用芯片是 IBM 801,但流水线的成功是在 80 年代中期与 Sun Sparc、Berkeley Risc 和 MIPS 合作的。
想法是将所有指令拆分到相似的阶段,并将这些阶段关联到独立的硬件资源,这样您就可以开始一条新指令,而无需等待前一条指令完成,从而允许开始每个周期一条新指令。为了处理指令交互(危险),每 ~1.5 个周期多了 1 条指令,但与上一代相比的增益是巨大的(X3 性能)。
问题是流水线需要特定的指令集,基于简单的数据移动(称为 RISC 指令集)。新计算机基于此方案,但未采用旧处理器指令集(包括 x86)。
为了从流水线中获益,同时保持向上兼容性,英特尔决定采用基于两部分的微体系结构:第一部分获取 x86 指令并将其转换为可流水线指令(称为 μOps),第二部分是这些 μOps 的流水线执行。这是 Pentium Pro(于 1995 年推出)首次引入,并出现在任何后续版本中。
您提供的代码
lea 0x7(%eax), %ecx
翻译成
add [=11=]x7, %eax;
lea %eax, %ecx
是μOps翻译的例子。转换特别有用,可以将带有内存操作数的 ALU 操作转换为执行单个任务(内存传输或 ALU 操作)的更简单操作。
目前所有的计算机都是流水线的(除了一些简单的微控制器或一些嵌入在FPGA中的处理器)。
无论什么 您给出的指令序列都将在管道中执行,当然包括您问题中的指令。唯一的限制是,根据指令交互,可能存在暗示流水线减速(停顿)的危险。
I think above example matches the definition of intel 8086 pipelining
流水线是微体系结构的特征,而不是指令集的特征。因此微架构 8086 不是流水线,但其指令集(称为 x86 或 IA32)的后续架构实现是。
because it executes several instructions at one time slot
您实际上是对的,可以在一个时隙启动多个指令,但这是流水线之上的另一种技术,允许在指令级并行执行并称为超标量。
据我所知,intel 8086 pipelining
是技巧
在执行当前指令时获取下一条指令。
This文章说流水线的优势之一是
消除EU的等待时间,加快处理速度。
我认为,像lea 0x7(%eax), %ecx
这样的指令可以拆分成几条指令,
喜欢 add [=13=]x7, %eax; lea %eax, %ecx
.
我的想法)
所以,根据定义,
我认为上面的例子符合 intel 8086 pipelining
的定义
因为它在一个时隙执行多条指令和
所以这样的操作 可以加快处理速度 。
问题)
我很好奇下面的指令可以作为流水线的例子。
main:
mov [=10=]x2, %eax
mov [=10=]x3, %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?
最早的计算机没有流水线。他们获取一条指令,执行指令所需的所有周期并传递给下一条指令。平均一条指令需要 5-6 个周期。 这种行为适用于 80 年代中期之前的所有计算机,包括 8086(在 78 年推出)。
七十年代后期,人们发现流水线是提高效率的有效途径。第一个商用芯片是 IBM 801,但流水线的成功是在 80 年代中期与 Sun Sparc、Berkeley Risc 和 MIPS 合作的。
想法是将所有指令拆分到相似的阶段,并将这些阶段关联到独立的硬件资源,这样您就可以开始一条新指令,而无需等待前一条指令完成,从而允许开始每个周期一条新指令。为了处理指令交互(危险),每 ~1.5 个周期多了 1 条指令,但与上一代相比的增益是巨大的(X3 性能)。
问题是流水线需要特定的指令集,基于简单的数据移动(称为 RISC 指令集)。新计算机基于此方案,但未采用旧处理器指令集(包括 x86)。
为了从流水线中获益,同时保持向上兼容性,英特尔决定采用基于两部分的微体系结构:第一部分获取 x86 指令并将其转换为可流水线指令(称为 μOps),第二部分是这些 μOps 的流水线执行。这是 Pentium Pro(于 1995 年推出)首次引入,并出现在任何后续版本中。
您提供的代码
lea 0x7(%eax), %ecx
翻译成
add [=11=]x7, %eax;
lea %eax, %ecx
是μOps翻译的例子。转换特别有用,可以将带有内存操作数的 ALU 操作转换为执行单个任务(内存传输或 ALU 操作)的更简单操作。
目前所有的计算机都是流水线的(除了一些简单的微控制器或一些嵌入在FPGA中的处理器)。
无论什么 您给出的指令序列都将在管道中执行,当然包括您问题中的指令。唯一的限制是,根据指令交互,可能存在暗示流水线减速(停顿)的危险。
I think above example matches the definition of intel 8086 pipelining
流水线是微体系结构的特征,而不是指令集的特征。因此微架构 8086 不是流水线,但其指令集(称为 x86 或 IA32)的后续架构实现是。
because it executes several instructions at one time slot
您实际上是对的,可以在一个时隙启动多个指令,但这是流水线之上的另一种技术,允许在指令级并行执行并称为超标量。