手机流量包怎么加:CH10 性能度量和分析

来源:百度文库 编辑:中财网 时间:2024/05/09 04:54:18
Performance Measurement and Analysis

10.2 基本的计算机性能方程式

时间/程序 = 时间/周期 X 周期数/指令 X 指令数/程序

  • CPU优化 (CPU optimization) ----- 最大限度地提高CPU所执行的各种操作的速度和效率 (性能方程式强调的就是这个优化过程)
  • 存储器优化 (memory optimization) ----- 最大幅度地提升代码的存储器管理的效率
  • I/O优化 (I/O optimization) ----- 最大限度地增强输入/输出操作的效率

应用程序的整体性爱到上述三种因素的其中一种因素的限制, 我们分别称为CPU约束(CPU bound), 存储器约束 (memory bound)I/O约束 (I/O bound).


10.3 数学预备知识

算术平均值

算术平均值方法不应该用于数据变化幅度较大, 或者是数据朝着较低数值或较高数值发生倾斜的情况

在恰当使用算术平均的方法时,人们又使用了加权算术平均 (weighted arithmetic mean) 来对算术平均进行改进

几何平均值

几何平均值(geometric mean) 则不管数据的颁如何都能给我们一个可以用来实行系统比较的一致的数字


10.5.1 分支优化

廷迟转移(delayed branching) 是处理分支转移对流水线的影响的一种办法. 例如, 当执行一个条件转移指令时, CPU先执行一条或多条该分支指令后面的指令, 而不管这条分支执行的结果如何. 我们可以使用这种思想, 否则分支后面的几个时钟周期会被浪费. 要实现这种想法, 可以在分去指令后插入一条指令, 并在实际转移前执行这条指令.

分支预测(branch prediction) 是指试图在指令流中猜测下一条指令的处理过程, 这样可以避免由于分去指令造成流水线作业的阻塞. 如果预测成功, 在流水线中就不会引处廷迟. 如果预测不成功, 则必须对流水线进行刷新, 必须抛弃所有由于这种错误计算所产生的计算结果. 分支预测技术根据分支转移的特点分为: 特环控制分支转移, if/then/else 分支转移或子程序分支转移


10.5.2 使用好的算法和简单的代码

操作计数 (operation counting) 是提高程序性能的一种方法. 利用这种方法, 先估算出在一个循环中所执行的指令类型的数目, 然后确定每种指令类型所需的机器周期数. 随后, 这些信息会用来实现更好的程序指令平衡.

程序优化技巧

  • 为编译器提供尽可能多的目的信息. 尽可能使用常数和局部变量. 在程序语言规则允许的情况下, 定义一些原型和声明一些静态函数. 尽可能使用数组来代替指针
  • 避免不必要的类型构造和尽量减少浮点数到整数的转换
  • 避免程序出现上溢和下溢
  • 使用合适的数据类型 (例如, 浮点, 双精度, 整型)
  • 考虑使用乘法来代替除法
  • 除去不必要的分去指令
  • 在可能的情况下, 使用迭代方法来代替递归方法
  • 在最可能的情况下, 首先建立条件语句 (例如, if, switch, case)
  • 在结构中声明变量时, 要遵循最大的元素首先声明的次序
  • 当程序有性能问题时, 在开始程序优化之前先对程序进行剖析 (profiling) 处理,成型是把程序代码拆分成小块的处理过程, 而且要对这些代码小块进行定时标记以确定哪一个代码块战胜的时间最多.
  • 永远不要抛弃使用一种只是基于系统原始性能的算法. 只有当完全优化所有的算法后才会有一个公平的算法比较出现.