计算机体系结构的铁律可由以下公式来描述:
从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),功耗和频率的平方成正比。所以通过降低主频,增加核数,便成了处理器设计的主流模式了。