EMACS & 程序 编程点滴...
天下难事必作于易,天下大事必作于细
软件优化
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指令去除分支