Performance 在x64-64体系结构上,movq比mov快吗?

Performance 在x64-64体系结构上,movq比mov快吗?,performance,assembly,x86-64,instructions,Performance,Assembly,X86 64,Instructions,Agner Fog针对Skylake的说明表显示了以下两种说明: MOV r32/64,M1 P232 0.5 MOVQ r64,mm/x1 p02 1 其中,每条指令在融合域中有1个微操作,在未融合域中有1个微操作,MOV的每个端口有23个微操作,MOVQ的每个端口有0个微操作,每条指令的延迟为2,互易吞吐量列中的延迟为0.5 vs 1 我的问题是,阅读这些统计数据,这两条指令中哪一条更快?直观地看,MOV的每个端口23微操作似乎比每个端口零微操作产生的端口压力大得多。在定义部分,Fog说“当

Agner Fog针对Skylake的说明表显示了以下两种说明:

MOV r32/64,M1 P232 0.5

MOVQ r64,mm/x1 p02 1

其中,每条指令在融合域中有1个微操作,在未融合域中有1个微操作,MOV的每个端口有23个微操作,MOVQ的每个端口有0个微操作,每条指令的延迟为2,互易吞吐量列中的延迟为0.5 vs 1

我的问题是,阅读这些统计数据,这两条指令中哪一条更快?直观地看,MOV的每个端口23微操作似乎比每个端口零微操作产生的端口压力大得多。在定义部分,Fog说“当流水线中的某些瓶颈限制每个时钟周期的μOp数时,指令生成的μOp数非常重要。”


我的解释正确吗?MOVQ比MOV快?当MOV从堆栈到寄存器时会有所不同吗?

您列出的两条指令完全不同;一个是32位存储器,另一个将数据从64位通用寄存器传输到MMX或SSE寄存器。苹果和桔子。另外,p23意味着它可以在端口2和3上执行。它没有说明所需的µ运算数。对不起,我的操作数顺序搞错了;第一个是从内存加载,另一个是从SSE/MMX到通用传输。不同的指令。原则上,但请注意,这些计时并没有考虑到额外付费的内存访问延迟。尽量将数据保存在寄存器中。@prl:Modern Linux会“急切地”保存/还原FPU,因为即使是标量整数代码也会使用一些SSE指令,例如16字节拷贝或归零,或用于memcpy/strlen/etc.库函数。我想其他现代操作系统也是类似的。