1.记住一句话
We should forget about small efficiencies,say about 97 percent of the time: premature optimization is the root of all evil.
----Donald Knuth
2.影响性能的架构因素
硬件:
(1)存储层次体系;
(2)处理器的乱序执行和流水线;
(3)并行与并发.
软件:
(1)系统调用开销;
(2)编译器优化;
(3)语言抽象性.
3.系统调用开销
read
write
open
close
mmap
gettimeofday
...
4.编译优化
现在编译器功能很强大,也会有很多陷阱,之后详细说说.
5.语言抽象性
C语言
Obj obj;
在栈上分配了sizeof(obj)个字节,O(1)的开销.
C++
Obj obj;
(1)在栈上分配了sizeof(obj)个字节,O(1)的开销;
(2)调用Obj构造函数,复杂度未知;
(3)到达下面的}时调用析构函数,复杂度未知.
一般C++标准库中构造函数的都会明确给出,但是有时候三方提供的类也许不会明确给出构造函数的
复杂度.
6.优化领域的阿姆达尔定律
1
S = ---------------------
p
1 - P + -------
Sp
p --- 优化部分占程序的比例
Sp --- 对p这一部分提升的效率
S --- 整个程序所提升的效率的百分比
如:p = 50%
Sp = 50%
则:
S = 1/(1-0.5+1) = 20
这个是相当可喜的.
在有限时间下,找准p较大的点进行优化(如果有优化空间的话),一定程序上会取得比较好的效果.
本文探讨了编程中的性能优化关键,包括硬件层次结构、并行处理、系统调用成本、编译器优化以及不同语言的抽象特性。特别强调了Don Knuth的观点:过度优化的危险。通过阿姆达尔定律解释优化策略的选择和效益计算。
2122

被折叠的 条评论
为什么被折叠?



