Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在OoO处理器中分别执行相同指令的操作_Assembly_X86_Cpu Architecture_Instructions_Micro Architecture - Fatal编程技术网

Assembly 在OoO处理器中分别执行相同指令的操作

Assembly 在OoO处理器中分别执行相同指令的操作,assembly,x86,cpu-architecture,instructions,micro-architecture,Assembly,X86,Cpu Architecture,Instructions,Micro Architecture,假设我们有一条被分成3个微操作的指令,我们有一个无序的处理器。我的问题是:这3个UOP必须按顺序执行,或者处理器是否可以将这些UOP与其他指令中的其他UOP替换 我的意思是,在OoO处理器中,你可以无序地执行指令,但是如果我们把一条指令分成一些微操作,这些微操作可以非顺序地执行吗 例如,我们有3个说明:A、B和C。A和C分别被划分为1个uop:A1和C1,B被划分为3个uop:B1、B2、B3。OoO处理器是否可以执行,例如B1-A1-B2-C1-B3?还是必须连续执行B1-B2-B3?是的,每

假设我们有一条被分成3个微操作的指令,我们有一个无序的处理器。我的问题是:这3个UOP必须按顺序执行,或者处理器是否可以将这些UOP与其他指令中的其他UOP替换

我的意思是,在OoO处理器中,你可以无序地执行指令,但是如果我们把一条指令分成一些微操作,这些微操作可以非顺序地执行吗


例如,我们有3个说明:A、B和C。A和C分别被划分为1个uop:A1和C1,B被划分为3个uop:B1、B2、B3。OoO处理器是否可以执行,例如B1-A1-B2-C1-B3?还是必须连续执行B1-B2-B3?

是的,每个uop都是独立调度的,只需等待其输入就绪即可。(对于执行端口上的一个空闲周期,它是在发送到无序后端时分配的。)指令边界与RS aka调度程序无关

对于许多多uop指令,uop对早期的指令具有数据依赖性。但有时早期的uop只需要准备一个输入,因此每个输入到输出都有单独的最小延迟

e、 g.
添加eax,[rdi]
仅需要在装载uop完成后准备好eax。因此,通过EAX的关键路径延迟仅为1个周期。但是如果RDI没有准备好,或者RDI指向的内存没有准备好,那么add ALU uop就无法执行。但这仍然是UOP解码的重点,不像P5 Pentium必须按照顺序管道1进行加载和添加

(或者,例如,额外的uop仅用于标志输出;GP integer部分准备就绪,延迟时间为1个周期,但标志结果稍后准备就绪。生成GP integer结果的uop基本上与唯一的uop BMI2
shlx
解码为相同。)

但有些确实有一些(实际上uop级别的并行性)。例如,
xchg eax,ecx
在英特尔CPU上解码为3个寄存器拷贝UOP,我们可以分别测量eax->ecx和ecx->eax方向在1和2个周期(分别)的延迟

另一个例子是
phaddd
;它的解码非常类似于两个
shufp
uop(两个输入洗牌)和一个
padd
uop,这取决于两个洗牌。这两个随机播放都在读取两个输入来为随机播放提供信息。Ice Lake在2个端口上有随机播放单元,实际上可以并行运行随机播放UOP,使其延迟2个周期(),低于早期Intel上的3个周期,因为单个随机播放端口的资源冲突。(Ice Lake的额外shuffle端口只运行一些整数shuffle,因此,
haddps
在Ice Lake上仍然和以往一样糟糕)

请注意,我们无法确切证明每个uop都在做什么,但考虑到测量的延迟和每个端口的总uop计数,对于许多指令,只有一种合理的设计可以解释这种行为。e、 g.对于
phaddd
我们知道CPU有SIMD integer add执行单元和整数洗牌单元,因此将
phaddd
实现为3个uop最明显的方法是解码为两个硬连线洗牌模式和一个普通的
paddd
uop


脚注1: 针对P5的优化显然涉及使用x86的RISCier子集,比如避免使用除
mov
之外的内存源操作数,以及明确避免使用内存目标指令。这是因为它是一个有序的管道,并且无法将多个uop指令分开单独调度

进一步阅读:p5与后来的微体系结构:。也很好


如果你没有读过它,它是一个很好的工具,但是它没有深入到你的问题所涉及的细节层次。

是的,微操作可以独立地重新排序。