小编bry*_*rto的帖子

为什么在执行指针追逐时这条跳转指令如此昂贵?

我有一个执行指针追踪的程序,我正在尝试尽可能地优化指针追踪循环。我注意到perf record检测到函数中大约 20% 的执行时间myFunction()用于执行跳转指令(用于在读取特定值后退出循环)。

需要注意的一些事项:

  • 指针追踪路径可以轻松放入 L1 数据缓存
  • 使用__builtin_expect以避免分支预测错误的成本没有显着影响

perf record 有以下输出:

Samples: 153K of event 'cycles', 10000 Hz, Event count (approx.): 35559166926                                                                                                                                                               
myFunction  /tmp/foobar [Percent: local hits]                                                                                                                                                                            
Percent?      endbr64                                                                                                                                                                                                                       
      ...
 80.09 ?20:   mov     (%rdx,%rbx,1),%ebx                                                                                                                                                                                                    
  0.07 ?      add     $0x1,%rax                                                                                                                                                                                                             
       ?      cmp     $0xffffffff,%ebx                                                                                                                                                                                                      
 19.84 ?    ? jne     20                                                                                                                                                                                                                    
      ...
Run Code Online (Sandbox Code Playgroud)

我希望在这个循环中花费的大部分周期都用于从内存中读取值,这是由 perf 确认的。我还希望剩余的周期在执行循环中剩余的指令时会有些均匀地花费。相反, perf 报告的是剩余周期的很大一部分用于执行跳转。

我怀疑通过了解用于执行这些指令的微操作,我可以更好地了解这些成本,但我对从哪里开始有点迷茫。

x86 assembly pointers cpu-architecture perf

2
推荐指数
1
解决办法
100
查看次数

标签 统计

assembly ×1

cpu-architecture ×1

perf ×1

pointers ×1

x86 ×1