一.编写高效的程序:

  1.选择合适的算法和数据结构。

  2.编写出编译器能够有效优化以转换为高效可执行的源代码。

  3.并行计算。当然重点还是第一个,良好的算法和数据结构大大减小了程序的时间复杂度。

二.优化编译器的局限性:

  编译器可以对程序进行不同程序的优化,在终端中,编译时添加命令行选项-O1,-O2等等可以进行不同级别的优化,这样虽然提高了程序的性能,但是也加大了程序的规模。

  首先要进行安全的优化,在这个例子中:

  void twiddle1(int *xp,int *yp)
{
*xp+=*yp;
*xp+=*yp
}
void twiddle2(int *xp,int *yp)
{
*xp+=**yp;
}

编译器是不会将twiddle1优化成twiddle2的,虽然twiddle2只需要三次访问内存,而twiddle1需要6次。编译器需要考虑xp和yp相等的情况,这样两个函数的结果就会不同,两个指针可能只想同一个存储器位置的情况成为存储器别名使用。第二个妨碍优化的因素是函数调用,f()+f()+f()+f()和4*f()总会有点区别的,因为执行一次f()有可能就修改了全局变量的值,在下次调用时环境就可能不同,属于函数的副作用

三.理解现代处理器

  考虑利用处理器的微体结构的优化,完成一些基本的优化。

  1.整体操作(ICU,EU)。

  2.分支预测:现代处理器中采用了分支预测的技术,处理器在执行某条指令序列时会预测下一条指令的位置,是否选择分支,预测分支的目标地址,投机执行,如果预测错误,将状态重新设置到分支点的状态。

  3.功能单元的特性:延迟,运算所需要的总时间;发射时间,两个连续的同类型运算之间需要的最小时钟周期数。

  4.关键路径:这是执行一组机器指令所需要时钟周期数的一个下界,循环运算中,有些数据是不能同时并行运算的,他们必须一个接一个的运算,因为后一次运算依赖于前一次

计算的结果。所以该计算流程就是该循环中的关节数据流。该数据流处理的必须用时,就成为了优化的界限。

四.程序级的优化

  每元素的周期数,Cycles Per Element 来表示程序的性能。

  1.代码移动。比如将循环中计算结果不会改变的计算移出,减少计算。

  2.减少过程的调用。

  3.消除不必要的存储器引用。减少对存储器的访问,比如 *dest=*dest*a[i]中,每次循环都要进行一次存储器的访存。可通过先赋值给一个局部变量,最后再赋值给*dest。

  4.循环展开。通过增加每次迭代的计算的元素的数量,减少循环的迭代次数。展开的次数越高,CPE 性能越接近1。他减少了不直接有助于程序结果的操作的数量,比如循环索引的计算和条件分支,其次减少了整个计算中关键路径上的操作数量。

  5.提高并行性。多个积累变量,通过多个变量计算最后再合并以提高程序性能。重新结合变换,对于一个计算表达式中,两个连乘,我们可以使用括号,让后一次乘法先进行,然后再进行前一次乘法。这样做的能提升程序速度的原理在于,如果使用顺序乘法,第一次乘法结果与第二次乘法结果都会保存在同一个寄存器中,无形中增长了关键路径。通过该优化方法,能使得关键路径变短。

  其实说这么多,最好的还是选择个合适数据结构和算法来实现程序的优化,对于大数据,可能需要的这些优化措施多一些。

CSAPP--优化程序性能的更多相关文章

  1. CSAPP 5 - 优化程序性能

    CSAPP 5 - 优化程序性能 1. 概述 首当其冲的,还是要编写出好的算法和数据结构,优化内部结构 其次才是编写出能让编译器 易优化的,高效的可执行代码.这点在特定的机器上可能有着特定的不同的优化 ...

  2. 优化程序性能(CSAPP)

    [前言]虽然现在没有接触过大型项目,但是工作了会注重性能.学习一下,应该能更好更快的理解别人写的经典优化的代码.结合CSAPP和自己的理解,总结一下. 一.程序优化综述 1.高效程序的特点 (1)适当 ...

  3. C# ASP.NET 优化程序性能、降低内存使用、提高程序运行速度

    首先纪念一下今天的股票大跌抓个图,虽然我自己损失不是很大,但是应该大多人都损失不小.也可能有人会继续跳楼,也可能是股市一个新的转折点来了. 接着还是重点关注自己写代码优化的主题吧.软件系统当访问量不大 ...

  4. web应用程序性能优化

    web应用程序基本上都是在浏览器地址栏输入一段网站,然后进入,最后浏览器显示你想要的东西. 这就是用户所能体会到的东西.那作为程序员我们看到了什么呢? 一次HTTP 请求主要的流程是: 1.DNS服务 ...

  5. iOS 程序性能优化

    前言 转载自:http://www.samirchen.com/ios-performance-optimization/ 程序性能优化不应该是一件放在功能完成之后的事,对性能的概念应该从我们一开始写 ...

  6. C++ 应用程序性能优化

    C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...

  7. java程序性能优化

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  8. Java程序性能优化——让你的java程序更快、更稳定

    1.Java性能调优概述 1.1.Web服务器,响应时间.吞吐量是两个重要的性能参数. 1.2.程序性能的几个表现: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:分配是否合理,是否过多 ...

  9. Java程序性能优化技巧

    Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...

  10. 《Java程序性能优化:让你的Java程序更快、更稳定》

    Java程序性能优化:让你的Java程序更快.更稳定, 卓越网更便宜,不错的书吧

随机推荐

  1. Qt之QTableView显示富文本(使用了QAbstractTextDocumentLayout和QTextDocument)

    http://blog.csdn.net/liang19890820/article/details/50973099

  2. C++代码覆盖率工具Coverage Validator

    市面上的C++代码覆盖率工具大都收费,Coverage Validator也不例外.Coverage Validator应该少有人听过,我也是在stackoverflow里听别人介绍的.所以下载了试用 ...

  3. 迅雷程浩:企业外包服务,下一个大的风口?(2B业务一定要懂销售和营销的人,这点和2C 不一样)

    我今年暑假去了趟硅谷,一天去一个朋友的公司拜访,发现这公司没有前台,前台桌子上放了一个显示器.我刚进去,显示器里的老印就跟我打招呼 "How may I help you?" 事后 ...

  4. uboot之board.c源码分析

    /lib_arm/board.c 主要完成了一些初始化的操作,最重要的是有start_armboot函数 _armboot_start地址为多少?? /* * * U-Boot code: 00F00 ...

  5. BZOJ3297: [USACO2011 Open]forgot

    3297: [USACO2011 Open]forgot Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 54  Solved: 38[Submit][ ...

  6. BZOJ1639: [Usaco2007 Mar]Monthly Expense 月度开支

    1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 529  Solved: ...

  7. 切割 bitmap

    最近在安卓手机控制蓝牙打印机打印图片,有时候图片太大,考虑到bitmap的切割,在此,献上代码,各位小主指点 public class ImageSplitter { public static Ar ...

  8. GF(2^8)乘法

    最近在学AES,实现了一下伽罗瓦域(2^8)乘法. 至于什么是伽罗瓦域解释起来比较复杂,我也不一定能解释清楚,自行google.这里只是给出一个简单直观的实现. #include<iostrea ...

  9. UVA 195 Anagram

    题意:求输入字符串的所有组合,按字典序输出! 解法:使用枚举(枚举前先找出最字符串的最小字典序)枚举时加上枚举生成条件! #include <iostream> #include < ...

  10. Hibernate介绍

    1.什么是Hibernate? 首先,Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等. 并且Hibern ...