软件优化技术真经-总论篇

转自:http://blog.csdn.net/hbffff/article/details/498366

软件优化是一项系统工程。要理解软件优化,首先对软件要有个本质的认识。软件是什么呢?它是一组在计算机平台上运行的逻辑代码。这个概念比较拗口。第一,软件是一组计算机能理解并运行的逻辑代码。第二,软件一定是运行在某个计算机平台上,可能是大型机,可能是PC,可能是手机。好,认识了这两点。就可以正确认识软件优化。

首先,软件既然是计算机的逻辑,那么好的软件就是贴合计算机体系结构的逻辑,贴合的程度越高,软件的性能越好。现代计算机,从大型机到手机,其体系结构都体现出一个基本的原理:局部性原理。80%的计算机资源(CPU,内存……)是花费在20%的代码上的。Cache技术就是这个原理的集中体现,无论是硬件(如CPU的cache)还是软件(如操作系统的working set),都是尽可能的重用“计算”,这样就提高了整个计算机系统的性能。局部性原理在软件优化上有两个外延。第一,去优化消耗80%计算机资源的20%的代码,而不是去优化消耗20%计算机资源的80%的代码。第二,在优化重要的20%代码时,无论是数据结构还是算法,都要尽量使其贴合局部性原理。经常使用的数据结构应该尽量紧凑,使其符合空间局部化,这样就可以最大限度的利用CPU的data cache。算法应当尽量重用计算,使其符合时间局部化。当然,算法和数据结构不是孤立的,在局部性原理指导下,二者的密切协作对软件性能是起决定性作用的。

其次,软件是运行在某个平台上,那就要充分利用该平台的特性去做优化。如果说局部性原理是个“泛化”的原则,那么平台优化就是“特化”技术了。各种平台的差别很大,所以所用的技术当然会有所不同。PC的内存和手机的内存不是一个数量级的,当然对数据结构和算法都要有不同的设计;超线程的CPU,双内核CPU都对优化提出不同要求;CPU的流水线结构不同,对汇编指令的调整也就不同;有的CPU有SIMD指令,当然可以充分利用。另外,这里的“平台”除了指硬件(CPU体系和内存体系),还包括系统软件,特别是操作系统和编译器。要清楚,我们的软件是在操作系统的调度下与硬件资源打交道的,所以要清楚操作系统的特性(如它是如何管理进程/线程,如何调度页面,页面大小是多少)。编译器是软件的代言人,我们用高级语言写的程序只是程序员逻辑,经过编译器这一中间层,未必能贴合CPU逻辑,所以要了解不同编译器的特性,使程序逻辑尽量贴合编译器思维,这样能生成更高效的代码。总而言之,既然要在某个平台上做优化,就要对该平台有深入的认识,包括硬件(CPU体系和内存体系)和系统软件(操作系统和编译器)。

以上两点就是软件优化的基础。脱离了这个基础,优化就将成为空中楼阁。

在后文中,我将探讨软件优化的框架。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值