基本块是只有一个入口点和一个出口点的程序集片段(维基百科链接也有更严格的定义)。许多编译器优化过程依赖于编译器将用户代码分解为基本块,然后再将它们提供给优化器。
我很想知道哪些非局部效应会影响基本块本身的性能。非局部效应是指基本块之外的代码在可能影响其运行时间之前如何运行,或者代码在内存中的布局如何影响它。这比担心带有循环、分支等的任意程序的性能更具限制性。
程序的其他部分(内存和指令缓存)使用我的头缓存似乎是最大可能的非本地影响。还有先前执行的指令或当前正在运行的较早指令的管道设置状态。我特别对 x86/x86-64 感兴趣,但对其他架构的影响似乎也值得了解。还有其他非局部效应吗?