博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优化程序性能—《深入理解计算机系统》
阅读量:4138 次
发布时间:2019-05-25

本文共 956 字,大约阅读时间需要 3 分钟。

第一部分:基本策略

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倍。

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

转载地址:http://zeovi.baihongyu.com/

你可能感兴趣的文章
iOS菜鸟学习—— NSSortDescriptor的使用
查看>>
hdu 3787 hdoj 3787
查看>>
hdu 3790 hdoj 3790
查看>>
hdu 3789 hdoj 3789
查看>>
hdu 3788 hdoj 3788
查看>>
zju 1003 zoj 1003
查看>>
zju 1004 zoj 1004
查看>>
zju 1005 zoj 1005
查看>>
zju 1006 zoj 1006
查看>>
【虚拟机】虚拟化架构与系统部署(Windows系统安装)
查看>>
字节跳动安卓开发实习生面试分享
查看>>
好书分享之——《能力陷进》
查看>>
阅读笔记《c++ primer》
查看>>
阅读笔记《C++标准程序库》
查看>>
基于mirror driver的windows屏幕录像
查看>>
C语言8
查看>>
Qt实现简单延时
查看>>
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>