涉及内存访问的mov指令是否比寄存器之间的mov更慢

时间:2018-04-04 06:41:56

标签: performance caching cpu-architecture

考虑来自L1 Cache的最佳内存访问情况。它通常需要4个cpu周期(从here引用),而寄存器访问需要一个cpu周期。 所以只需比较寄存器之间的mov指令,例如带有内存参与的mov指令的“movl%eax,%ebx”“movl(%eax),%ebx”,对于后者,它总是花费4个左右的时间比前者更多吗?如果是这样,在等待内存数据时CPU会做什么?

1 个答案:

答案 0 :(得分:1)

注册mov的寄存器需要0.5个时钟(执行mov指令的单元的吞吐量为2个指令/时钟,延迟时间为一个时钟周期)。

在内存获取的情况下,执行获取的微操作已被发送到CPU上的执行单元并等待数据到达。 CPU在此时间间隔内所做的工作取决于正在执行的程序。如果流中有其他指令不依赖于从内存中获取数据,那么它们将并行执行。如果以下每条指令都依赖于这条数据(在指令流的窗口中),则CPU将停止等待数据到达。

如果您对此更详细的工作方式感兴趣,请查看Agner Fog的resources,但特别是他的指导时间实验here