5

基本块是只有一个入口点和一个出口点的程序集片段(维基百科链接也有更严格的定义)。许多编译器优化过程依赖于编译器将用户代码分解为基本块,然后再将它们提供给优化器。

我很想知道哪些非局部效应会影响基本块本身的性能。非局部效应是指基本块之外的代码在可能影响其运行时间之前如何运行,或者代码在内存中的布局如何影响它。这比担心带有循环、分支等的任意程序的性能更具限制性。

程序的其他部分(内存和指令缓存)使用我的头缓存似乎是最大可能的非本地影响。还有先前执行的指令或当前正在运行的较早指令的管道设置状态。我特别对 x86/x86-64 感兴趣,但对其他架构的影响似乎也值得了解。还有其他非局部效应吗?

4

2 回答 2

6

这是一个简短的列表:

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

玩得开心。

于 2013-04-17T17:53:14.707 回答
0

如果基本块包含函数调用,那是一个很大的未知数。

于 2013-04-17T20:08:32.307 回答