EMACS & 程序 编程点滴...

天下难事必作于易,天下大事必作于细

Lastupdated: 2009-10-06

软件优化

TOP优化时钟周期的耗费

TOP引起CPU周期耗费的原因

内存存取
  • 尽量使用与数据总线(外部总线)宽度相同的内存变量
  • 对于大于总线宽度的内存变量,不要拆分为总线宽度大小,让CPU去做会更好
取指令
  • 指令的执行时间取决于指令的上下文

    总线宽度决定了指令进入指令预取队列需要时间。取指令与EU操作是并行的。所以根据上下文,指令的执行时间是不同的。

整体的指令执行时间 = 取指令时间 + EU执行时间
DRAM刷新迫使EU等待内存访问,造成周期耗费

TOP对其优化

  • 尽可能使用短指令,减少指令预取队列时钟周期耗费
  • 尽可能多地使用寄存器,减少读写内存操作
  • 减少8位总线时钟周期耗费,尽量使用以字节为单位的内存访问,同时用寄存器保存字长变量
  • 受DRAM刷新影响较小的指令是EU执行时间与取指令时间之比较大的指令,所以仅仅为了减少DRAM的刷新时间而用慢指令是不可取的

TOP分支

现代CPU所采用的体系结构主要通过深度流水来提高处理器的时钟频率,采用复杂设计来深入挖掘单处理器指令流中的指令级 并行性。其中指令分支预测是很关键的技术之一。如何有效的提高分支预测的效率,不光是硬件需要解决的问题,其实软件实 现中,适当地改善编码的形式,可以大大提高预测的质量。
  • if语句优化
    1
    
    if (t1==0 && t2==0 && t3==0)  -->   if ((t1|t2|t3) == 0)
    
  • 使用CMOV移除分支

    Pentium Pro中引入cmove指令,可以移除分支。Intel C++编译器的 -Qxk 编译选项支持该功能。

  • 使用SIMD指令去除分支
© www.yifeiyang.net
net tracking

                                                                                                 stats