为什么mov reg,reg指令使用perf记录读取负载帐户的结果如此多的周期?

时间:2019-08-02 02:34:46

标签: linux x86 profiling perf intel-pmu

我正在使用perf工具在Linux中对程序进行性能分析,在查看报告时,我发现一个地方确实使我感到困惑。我在下面附上几行报告:

  0.94 :          451ab5:       mov    (%r15),%r8
  0.44 :          451ab8:       mov    0x40(%rsp),%r15
  0.45 :          451abd:       mov    (%rsi),%rsi
  0.14 :          451ac0:       mov    (%r8,%rdi,4),%edi
  5.41 :          451ac4:       prefetcht0 (%rsi)
  0.11 :          451ac7:       lea    (%r15,%rdi,4),%rdi
  0.34 :          451acb:       mov    (%rdi),%r8d
  5.62 :          451ace:       add    %r8d,%eax
  0.18 :          451ad1:       prefetchnta (%rbx,%r8,4)
 24.46 :          451ad6:       mov    %r8,%r11
  0.11 :          451ad9:       mov    %eax,(%rdi)
  0.05 :          451adb:       mov    0x4(%rdx),%eax
  0.02 :          451ade:       lea    0x0(,%rax,4),%edi

我的困惑是为什么此行(mov %r8,%11)花费如此多的时间,根据我的理解,该指令仅将寄存器%r8中的数据移动到%r11中。 %r8中的数据已加载到位置 451acb

我的猜测是,该指令(mov (%rdi),%r8d)仅触发读取操作,但实际上并未“阻塞”,当指令需要使用寄存器r8的内容时,它将“阻塞”直至内容被加载到CPU缓存中。

我的问题是我的猜测是否正确?

CPU:英特尔E5-2660 v4

0 个答案:

没有答案
相关问题