计算机体系结构的铁律可由下面公式来描写叙述:
从Programmer的角度来看,处理器的性能就是运行程序的耗费的时间。所以用Time/Program来刻画处理器性能。而这个简单的公式背后是有很丰富的内涵的,详细地说,就是该公式又能够展开为下面三个简单有内涵的公式。
- Instructions/Program:表示一个程序相应的指令数量,这部分工作主要集中在编译器领域,一般来说,指令数量越少运行速度越快。比如。用GCC编译器时,使用-O3 当然会比-O0 快不少。假设处理器支持SSE。编译器对带循环的计算密集型部分的应用进行自己主动循环展开或者向量化的话。速度还能提升一个等级。 当然,也不是那么绝对,RISC处理器的编译器一般来说编译出来的指令数量比較多。但运行速度不一定会比CISC慢。
- Cycles/Instruction:表示运行一条指令所须要的时钟周期数量,这部分工作主要集中在处理器设计领域。为了减少处理器的CPI,大家最耳熟能详的方法便是使用流水线。比如从传统的5级流水添加到25级流水,当然也会涉及到非常多其它问题,诸如遇到分支时须要使用气泡来填充流水线,这将导致的性能损失(由于平均运行6~7条指令就会越到一个分支)。当然也有解决的方法,比如使用Trace Cache。或者使用超长指令字(VLIW)的办法提升一个周期能处理的指令数量。Intel的高级矢量扩展指令集(AVX, Advanced Vector Extensions)也属于这个范畴。对了,还有支持乱序运行的处理器。招数五花八门,终于目标都是为了减小CPI,即单个指令须要的时钟周期。
- Time/Cycle:每一个时钟周期相应的时间。其倒数就是时钟频率(f,frequency)。这就是芯片设计者的领域了。在考虑给定的处理器架构下。如何集成很多其它的二极管同一时候提升到更高的主频便是他们的任务。
处理器的频率从处理器诞生到2007年左右的时候都一直在提升,之后反而在下降了。主要原因便是功耗问题(Dennard Scaling Law),功耗和频率的平方成正比。所以通过减少主频,添加核数。便成了处理器设计的主流模式了。