哪些非局部效应可以改变基本块的性能?

Jos*_*vin 5 optimization x86 assembly compilation micro-optimization

一个基本块是一个汇编代码片段,其中只有一个入口点和一个出口点(维基百科的链接也有更严格的定义).许多编译器优化过程依赖于编译器在将用户代码提供给优化器之前将其分解为基本块.

我很想知道非局部效应会影响基本块本身的性能.通过非局部效应,我的意思是基本块之外的代码如何在它可能影响其运行时间之前运行,或者代码在内存中的布局方式可能会影响它.这比限制循环,分支等任意程序的性能更具限制性.

程序的其他部分,包括内存和指令缓存,我头顶缓存的使用似乎是最大可能的非局部效应.也是先前执行的指令或当前飞行中的早期指令的流水线设置的状态.我特别感兴趣的是x86/x86-64,但对其他架构的影响似乎也值得了解.还有其他非局部效应吗?

Ira*_*ter 6

这是一个简短的清单:

  • 代码和数据在内存层次结构中的位置
  • 缓存行效果
  • 其他并行执行的线程
  • 锁和其他同步
  • 中断(来自I/O设备或OS陷阱调用)
  • 由于访问模式导致的页面错误
  • 数据访问依赖性(相同与不同的内存地址)
  • 写序列化/一致性

玩得开心.