CMU 15213笔记 第五章

Program Optimization

  • GCC优化级别
    • -Og最低优化
    • -O1,-O2,-O3优化程度依次递增
    • 优化可能会增加程序的大小,也可能使得程序更难调试
  • 常用优化手段

    • code motion
      • 将不变量移到循环外,避免重复计算
        这里写图片描述
        这里写图片描述
    • redution in strength
      • 将开销大的操作用开销小的代替
        • 乘法用位移或者加法代替
          这里写图片描述
    • 尽量用寄存器操作代替读取和写入内存
      这里写图片描述
      这里写图片描述

      • 编译器不会自动优化,因为不能确定b和a是否指向同一块地址
    • loop unrolling

      • 在一次循环中进行多次操作,来减少循环总次数
        这里写图片描述
      • 改变计算的次序
        • 具体原因见CSAPP-5.9.2
          这里写图片描述
  • 现代处理器采用分支预测来提高流水线效率
    • 通过使用条件传送指令代替条件控制指令来避免选择分支
      • 见第二章内容
  • code profiler
    • Unix系统提供了GPROF程序
      • 提供每个函数花费的时间,占总时间比和调用次数
        • 通过观察bottleneck来优化程序
        • 见CSAPP-5.14.2例子
      • 编译时添加-pg指令避免编译器将函数优化为内联函数,这样无法追踪函数调用
  • 下面链接的博客表达了对本章的批判.虽然有些偏激,但是里面的内容反而有助于我们理解本章,可以结合评论区食用
    https://www.cnblogs.com/chkkch/archive/2011/06/24/2089378.html

猜你喜欢

转载自blog.csdn.net/winter_wu_1998/article/details/80687074
CMU