深入理解计算机系统--优化程序性能

本文探讨了提升程序性能的方法,包括理解优化编译器的工作原理、减少循环开销、改进内存访问模式等关键策略。通过具体实例展示了如何进行代码优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第五章 优化程序性能

   编写高效程序需要两类活动:第一,我们选择一组最好的算法和数据结构;第二,我们必须编写出编译器能够有效优化以转换成高效可执行的代码的源代码。

  对于第二个,理解优化编译器的能力和局限性是很重要的。

  事实上,编译器只能执行有限的程序转换,而且妨碍优化的因素(optimization blocker)还会阻碍这种优化,妨碍优化的因素就是程序中那些严重依赖于执行环境的方面。

  代码剖析程序(profilers)

  研究汇编代码是理解编辑器以及产生的代码会如何运行的最有效的手段之一。

 5.1 优化编译器的能力和局限性

     一、存储器别名使用(memory aliasing)

     编译器必须假设不同的指针可能会指向存储器中同一个位置。这造成了一个主要的妨碍化因素,这也可能是严重限制编译器产生优化代码机会的程序的一个方面。 

    二、函数调用

      编译器会假设最糟的情况,并保持所有的函数调用不变。

 5.2 表示程序性能

    CPE (cycles per element)

 5.3 程序示例

 5.4 消除循环的低效率

    代码移动(code motion)

    渐近的低效率

 5.5 减少过程调用

 5.6 消除不必要的存储器引用

 5.7 理解现代处理器

   5.7.1 整体操作

    

  5.7.2 功能单元的性能

  5.7.3 更近地观察处理器操作

 5.8 降低循环开销

    减少循环展开次数

 5.9 转换到指针代码

 5.10 提高并行性

  5.10.1 循环分割

     二次循环展开并使用二路并行

 5.10.2 寄存器溢出

 5.10.3 对并行的限制 

 5.11  综合:优化合并代码的效果小结

 

   5.11.1 浮点性能异常

   5.11.2 变换平台

 5.12 分支预测和预测错误惩罚

   指令流水线化

 5.13 理解存储器性能

   5.13.1 加载的执行时间

   5.13.2 存储的执行时间

 5.14 现实生活:性能提高技术

 5.15 确认和消除性瓶颈

          

 

    

   

   

    

 

    

  

   

    

   

  

  

   

   

  

   

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值