`
mibk67mibk
  • 浏览: 11140 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

系统优化法则

 
阅读更多

系统优化法则
2010年11月13日
  系统优化法则
  1)对齐法则
  存取一个字长的数据与一个字节的数据那个耗时更短?
  c/c++程序员都知道有一个对齐原则,在32位的cpu中,要四字节对齐,为什么呢?因为在大多数32位的cpu中,与存取一个字长的数据相比,存取一个字节要做更多的工作,因为cpu硬件逻辑一次只能处理一个字长的数据,如果要处理比一个字长小的数据的话,直接写是不行的,你不能为了写一个字节的数据就把同字长的其它字节数据给冲了,即然硬件不支持,就要来软的。打个比方,向内存中写一个字节,先要把这个字节所在的字长的数据读到通用寄存器中,然后再经过移位,与非等操作修改把通用寄存器,最后再写回到内存中去,这样操作一个字节就经历了读改存三大步骤,如果是写一个字长的数据就好办了,直接向内存中写就好了。
  依此类推,如果你要操作的不是内存,而是flash等其它介质,最好也能尊守这个对齐原则,flash只能整而整块的操作,最要命的是flash在写之前要擦除,而且只能整页整块的擦,那怕你只是需要一个字节,也要操整整一页或一块的数据。大多数程序员不会接触到flash的操作,因为在操作系统中,文件系统和驱动会包办这件事,但一些嵌入式程序员和驱动工程师要了解这些,特别是那些设计文件系统的高手,这更是常识了。
  还是回到传统意义的对齐这个话题,其它大多数编译器会帮你做对齐这做事,但要注意,只是可能帮你做,而不是一定会帮你做,而且有时会帮倒忙。进程间交互的一些协义数据,特别是与网络有关的数据,不仅要注意大小端的问题,对齐的问题也很关键,建议在设计协义之前,就把对齐问题考虑进去,这样不仅是为了减少误对齐的错误,还能提高一点点效率。
  2)尽量保证cache能命中
  下面是一段很有名的代码:
  代码一:
  int cache[200][300];
  for(int i = 0; i read(cache[i][j]);
  }
  代码二:
  for(int j = 0; j read(cache[i][j]);
  }
  你认为那段代码的执行效率可能会高。一般CPU中都会有cache,cache说白了就是一段片内的内存,他比外存的存取速度更快,cpu访问外存时,会把当前数据之后的一段也据也放到cache中,这样cpu在取下一个数据时就会直接在cache中去找,如果找到了就直接读出来,这叫命中,找不到就还去外存中读取(末命中)因为判断cache是否命中与从cache中读数据所耗时间大大小于访问外存的时间。
  一般而言,程序员操纵不了cache,cache动作是由硬件完成的,但只要知道cache的工作原理,写出尽量能让cache命中的代码,你的程序会快很多。代码二就有可能每次访存都不能命中cache,都要去访问外存,这样你的代码执行速度就会慢下来。
  3)让最频繁执行的代码放在存取速度最快的ram中
  毫无疑问,如果取址速度能跟得上cpu的速度,那么整个系统的效率将大大提高。但这只是一个美好的愿望,高速的ram代表着更高的成本,又要马儿跑得快,又想马儿不吃草,我们程序员能做到这一点。
  一般一个系统中的存储系统会由几级组成,片内的ram,片外的DDL或ram,片内的虽然快但容量小,我们要提高整个系统的执行效率,就要提高片内ram的使用率。把你系统中运行频率最高的代码放成速度最快的ram中,这是一个不错的选择。例如在一些有LCD的系统中,图形的运算或者是图形数据的搬运是最频繁的操作,如果把这些代码的执行位置放在速度最快的片内RAM中,LCD的显示效果和速度将会有很大的提升,而且这种提升绝对是触目惊心的。至于如何将代码定位在某段ram中,这就属于编译链接的知识了。
  4)不要打断流水线
  流水线在CPU中己不是什么新技术了,一个七级流水线的CPU的处理能力相当于七个同等频率的单级流水线的CPU的处理速度,流水线的技术相当震撼吧,所以不要随随便便的打断它。
  我们的编译器会在这方面有一定的优化,让你的代码编译出来的机器码尽量符合流水线的要求,但没有那一种编译器比人更聪明,如果你有幸写一些汇编的算法,请尽量减小指令相关和数据相关的操作,因为他们会打断流水线,让你的七个CPU只能当一个使。
  5)尽量少和低速设备打交道
  作为饱受排队之苦的中国人,这点很能理解。能不排队就不要去排队,能不访问慢设备就不要去访问,如果一定要访问,也要在一次排队后获得最多的资源,尽量减少排队的次数。当然还有另一条路可以走,就是异步访问,让设备工作结速后再通知你一下,而不用干等着。当然,资源的合理分配也能减少访问低速设备的次数,这才是最重要的。我们都知道,排队买火车票不是因为火车票少,而是因为分配不合理,每年春运中所有的人最后都能买到火车票,只不过你饱受排队之苦,或者付出更大的代价。所以资源分配方法很重要,尽量让你的系统少和慢设备打交道。
  6)用专用的硬件去完成最频繁的操作
  随着IC技术的发展和芯片设计生产成本的降低,用专用能硬件代替软件做运算越来越多的被应用,比如前面提到的图形系统,你再怎么优化,其效能也比不上一款专用的GPU来帮你。图形运算用GPU,数据搬运用DMA,编解码用专用的硬编解码器,把CPU解放出来。这样,你的系统可能就不是以CPU为中心了,而是以数据的流动(数据的存储)为中心,整个系统的速度取决于数据在各种专用处理器之间的流动速度了。
  暂时就想到这些,请添加其它的。
  谢
分享到:
评论

相关推荐

    面向程序员的数据库访问性能优化法则

    在网上有很多文章介绍数据库优化知识,...而要想做到数据库优化的高手,不是花几周,几个月就能达到的,这并不是因为数据库优化有多高深,而是因为要做好优化一方面需要有非常好的技术功底,对操作系统、存储硬件网络

    Java性能优化实战视频全集

    01 理论分析:性能优化,有哪些衡量指标?...16 案例分析:常见Java代码优化法则.mp4 17 高级进阶:JVM如何完成垃圾回收?.mp4 18 高级进阶:JIT如何影响JVM的性能?.mp4 19 高级进阶:JVM常见优化参数.mp4

    Oracle数据库访问性能优化

    根据计算机硬件的基本性能指标及其在数据库中主要操作内容,可以整理出如下图所示的性能基本优化法则:这个优化法则归纳为5个层次:1、减少数据访问(减少磁盘访问)2、返回更少数据(减少网络传输或磁盘访问)3、...

    电力系统分析与设计-英文版

    在电力系统的历史回顾和未来趋势的...第11章研究了暂态稳定性,包括摇摆方程式、等面积法则、以及考虑风力发电系统的多机稳定性。第12章介绍了电力系统控制,包括发电机电压控制、涡轮调速机控制、以及载荷频率控制。

    能量天平不确定度分析与整体系统改进.pdf

    第一代能量天平系统已经完成了整体系统实验,对其不确定度的详细分析,有助于进一步优化设计方案,改进实验过程。最后得到其整体的不确定度为2.5×10-6。针对其中主要的不确定度来源,在第2代能量系统中分别提出了...

    基于离散型粒子群优化算法的分类系统构建 (2010年)

    借鉴已有的基于粒子群葬法的分类系统,以离散型PSO为基拙构建分类系统,在操作的过程中使用变长的方法来表示粒子,对法则集进行合理的表示并进行适当的删减,使用预设法则来提高分类效果等。通过实验证明,系统能够正确对...

    数据库系统导论(第七版)

    8.6 黄金法则 183 8.7 静态约束和动态约束 184 8.8 码 185 8.9 SQL对完整性的支持 191 8.10 小结 194 练习 194 参考文献和简介 196 部分练习答案 201 第9章 视图 209 9.1 引言 209 9.2 视图的用途 211 9.3 视图检索 ...

    Java开源企业考勤系统ClockSimpleJEE4预发布版0.9.0

    2)JUnit单元测试黄金法则:在测试空库上无限次运行不出错。 3)测试并行系统:可以在正常工作时启动测试套件,测试套件任然使用测试空库, 而同时的正常操作使用产品库。 4)JUnit EE,可以使用Web界面运行JUnit测试...

    基于RSA算法的加密与解密系统研发全套论文

    另外采用拉宾-米勒测试法、欧几里得算法、蒙哥马利快速算法等优化算法对于RSA算法的密钥生成、加密等环节进行了速度上的优化,性能得到了明显的提升。本文还将就针对RSA算法的主流攻击手段加以分析,并针对不同的...

    不同优化算法在稳压器重量优化中的比较

    为解决核动力装置优化设计的方法问题,以压水反应堆核动力系统中关键设备之一稳压器为研究对象,开展重量优化设计分析。选择改进复合形算法、遗传算法、粒子群算法等作为代表性优化算法,比较了3种优化算法的全局性...

    生命线工程网络抗震优化算法研究 (2012年)

    其中,遗传算法通过对种群选择、交叉和变异操作不断进化以获得优化解,模拟退火算法则通过扰动当前解产生新解来获得优化解,遗传一模拟退火混合算法则通过将遗传算法中的变异操作以模拟退火操作代替获得优化解....

    基于Matlab混沌系统和DNA编码的彩色数字图像加密、解密、抗噪声性能分析【100011394】

    本文主要研究基于混沌系统的数字图像加密算法,在研究了相关文献后,对两种以混沌系统为核心的图像加密算法进行了改进和优化,并分别对优化后的两种图像加密算法进行仿真与性能测试。 一种是基于 Chen 超混沌系统、...

    Mysql 进阶修行学习

    SQL优化:插入数据、主键优化、order by优化、group by优化、limit优化、count优化、update优化 视图:基本语法、检查选项、更新及作用 存储过程:基本语法、变量、判断、参数、case、循环、游标、条件处理程序 ...

    论文研究-基于GA-Transmodeler的动态OD矩阵估计方法.pdf

    系统仿真旨在对多时段的动态OD矩阵实现连续动态交通分配,以得到在各个时段的OD流量对观测路段的分配比例矩阵,遗传算法则通过种群内个体的交叉、变异等遗传算子求解最优条件下的OD矩阵。仿真结果表明,这种仿真优化...

    Z-N规则(PID参数整定妙法).pdf

    该法则基于对受控对象(系统)的阶跃响应分析来确定PID控制器的比例(P)、积分(I)和微分(D)部分的参数值。 Ziegler-Nichols法则是通过观察系统的开环阶跃响应行为来获取临界比例带(Critical Gain, Kc)和临界...

    基于遗传算法并联机床电机伺服系统控制参数整定 (2010年)

    该文作者在提出基于时域特性和动态特性PID参数优化指标的基础上,利用遗传算法分别对伺服系统的速度控制环和位置控制环的多个控制参数进行优化整定,并与传统的Ziegler-Nichols调节法则得到的整定结果进行比较分析。...

    谢菲尔德遗传算法工具箱.zip

    遗传算法工具箱提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖问题的具体领域,对问题的种类具有很强的鲁棒性,所以它广泛应用于各个科学领域。遗传算法在函数优化、组合优化、生产...

Global site tag (gtag.js) - Google Analytics