作者:搜狗实验室 来源:搜狗实验室   酷勤网收集 2008-07-11

摘要
  乱序优化是现代编译器非常重要的特性,本文介绍了什么是乱序优化,以及由此引发的一个 gcc bug,希望引起各位开发者的注意。

乱序优化 

乱序优化和 cpu 的乱序执行很类似。

现代 CPU 都采用流水线结构,流水线的各级可以同时执行不同的指令,也只有用多条指令将流水线填满以后,CPU 的能力才能得到充分发挥。

乱序执行(out-of-orderexecution),是指 CPU 允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。这样将根据各个电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路单元执行,在这期间不按规定顺序执行指令,然后由重新排列 单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使 CPU 内部电路满负荷运转并相应提高了CPU 的运行程序的速度。

由于 CPU 流水线的指令预取范围有限, 所以只能在很小的范围内判断指令是否能够并发,如果相隔比较远的指令才可以并发就无能为力了。编译器可以分析相当长的一段代码从而把能够并发的代码尽量靠近,这就是所谓的乱序优化。

乱序优化的关键在于编译器能够正确的识别哪些代码能够并发,如果发生误判就会导致不可预见的 bug。一般情况下都没有问题——但是如果你写出一些太过诡异的代码就很难讲了。

文档下载地址:http://www.sogou.com/labs/report/1-2.pdf (酷勤网备用地址:sogouLabs_1-2_gcc.pdf

来自:http://labs.blog.sohu.com/94227817.html

延伸阅读:
搜狗实验室技术交流文档:epoll简介

分类: 系统架构 设计模式



关于酷勤 | 联系方式 | 免责声明 | 友情链接