原理篇-局部性与并行性

 

概要:局部性原理是计算机系统最重要的理论。也是软件优化的最重要的基础。而系统的并行性,则保证了系统资源的充分使用。最理想的,最高效的软件就是系统的各个部件(CPU,内存,I/O设备等)都充分运转,而彼此间的耦合程度又最低,在合理的算法调度下,相关的软硬件资源都能像流水线一样运作,从而最快最好的完成计算。

描述:

要理解软件优化,首先对软件要有个本质的认识。软件是什么呢?它是一组在计算机平台上运行的逻辑代码。这个概念比较拗口。第一,软件是一组计算机能理解并运行的二进制逻辑代码。第二,软件一定是运行在某个计算机平台上,可能是大型机,可能是PC,可能是手机。

首先,软件既然是计算机的逻辑,那么好的软件就是贴合计算机体系结构的逻辑,贴合的程度越高,软件的性能越好。现代计算机,从大型机到手机,其体系结构都体现出一个基本的原理:局部性原理。80%的计算机资源(CPU,内存……)是花费在20%的代码上的。Cache技术就是这个原理的集中体现,无论是硬件(如CPUcache)还是系统软件(如操作系统的working set),以至于上层应用软件(如浏览器缓存最近访问的页面)都是尽可能的遵循局部性原理,这样就提高了整个计算机系统的性能。局部性原理在软件优化上有两个外延。第一,去优化消耗80%计算机资源的20%的代码,而不是去优化消耗20%计算机资源的80%的代码。第二,在优化重要的20%代码时,对软硬件资源的使用,都要尽量使其贴合局部性原理。如经常使用的数据结构应该尽量紧凑,使其符合内存空间局部化。算法应当尽量重用资源与计算,使其符合时间局部化。

其次,软件是运行在某个计算机平台上的。计算机系统是个复杂的软硬件系统。从CPU到内存,从内存到I/O设备,每个部件间都有并行的基础,部件内部同样也有并行的可能。

这里以CPU为例。多核的计算机的并行性是最直观的,以双核为例,如果一个计算可以分为互不依赖的两个部分,那么理想的状况,这个计算的速度马上翻倍。另外在CPU内部,多级流水线技术使得CPU能最高效的运转,它的硬件基础是CPU的取指,译码,执行,访存,写回等子操作都是由相关的子部件完成的。而某些CPU还有SIMD指令(如XSCALEWMMXARM11NEON),更是并行性的直接体现。汇编程序员的主要工作就是选择使用最有效率的指令并用流水线技术调整指令顺序,从而打败编译器,提升代码性能。在单核机器上,我们熟悉的多线程同样是利用并行性,当然这里的并行和CPU无关,而和CPU与其他硬件的并行相关。如多线程最常用的状况就是一个线程在后台做复杂运算,另一个线程更新UI。这正是因为I/O设备的速度远低于CPUUI线程用一个很有限的时间片就可以完成UI更新,而把主要CPU资源留给了后台运算。这种硬件间的速度不匹配性是并行的基础之一。多线程对单个线程没有任何补益,相反,由于线程切换的代价损害了单个线程的性能,但它能提升某些程序的整体性能。对多线程的讨论请参考Item 2,多线程。

       局部性和并行性是提升软件性能的两个根基。软件优化,从架构设计到模块的算法实现都要充分应用这两个系统特性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值