优化程序性能—《深入理解计算机系统》

第一部分:基本策略

1)高级设计:适当的算法和数据结构

2)基本编码原则:使编译器产生高效的代码,理解 编译器 的能力和局限性,消除不必要的内容

·消除连续的函数调用

·消除不必要的存储器引用,要考虑是否为 同一地址

以上两点,也是妨碍编译器优化的主要因素,编译器很难判断以进行优化。

3)低级优化:将一个任务分成多个部分,利用多核和多处理器的并行计算;了解计算机的时序特性,为实现指令集并行,降低不同部分之间的数据相关;利用图形数据流和确认关键路径来确定一个循环需要的时间下界

·循环展开,代码移动(将循环中不会变的计算部分,移到循环外边,如 for(int i=0;i<strlen(s);i++)中的strlen)

·多个累计变量和重新结合(如数据结合,整形编译器可以自动重新结合,浮点数因为精度的原因,不会)等

·用功能的风格重写条件操作,用条件传递代替条件控制,减小  预测惩罚

第二部分:定义与工具

1)表示程序性能:每元素的周期数(Cycles Per Element,CPE),越小越好,线性运行时间时,即为线性变量n的系数。

延迟界限(latency bound):当一系列操作必须按照严格顺序执行时

吞吐量界限(throughput bound):处理器功能单元的原始计算能力

2)现代处理器包括:指令控制单元(instruction control unit,ICU) (取址和译码 控制、退役单元(记录正在进行的处理,确保他遵守机器级程序的顺序语义))、执行单元(execution unit,EU)(功能单元和高速缓存的控制)。

数据流图:循环寄存器之间的操作链 决定了限制性能的数据相关。

3)一些限制因素:寄存器溢出(寄存器不够用)、预测错误处罚

4)理解存储器性能:加载(在链表遍历中成为关键瓶颈) 与 存储,必须注意 写/读相关。

5)代码剖析程序

unix>gcc -o1 -pg prog.c -o prog
unix> ./prog file.txt
unix> gprof prog

6)Amdahl 定律

S=Told / Tnew = 1/( (1-a)+a/k ),a 为系统某部分需要时间的百分比,将他的性能提高了k倍。


文中有很多 例子的代码和数据流图,很不错。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值