31. 不同的微处理器间的比较

优质
小牛编辑
127浏览
2023-12-01

下面的表格概括了奔腾家族处理器之间的一些重要的区别:

PPlainPMMXPProPIIPIII
代码cache, kb81681616
数据cache, kb81681616
具备2级cache, kb00256512 *)512 *)
MMX指令不支持支持不支持支持支持
XMM指令不支持不支持不支持不支持支持
条件传输指令不支持不支持支持支持支持
乱序执行不支持不支持支持支持支持
分支预测
分支目标缓存的表项数目(BTB entry)256256512512512
返回站缓存的尺寸(RSB size)04161616
分支预测失败的惩罚3-44-510-2010-2010-20
部分寄存器延迟00555
FMUL的执行时间33555
FMUL的吞吐率1/21/21/21/21/2
IMUL的执行时间99444
IMUL的吞吐率1/91/91/11/11/1

*)Celeron:0-128,Xeon:512及512以上,和许多其它的变种处理器有。
在一些处理器上,2级cache以一半速度运行。

上表的注释:

如果无法将程序的关键部分控制在较小的内存空间里的话,代码cache的尺寸就很重要了。

如果关键部分处理的数据量不小的话,那么数据cache的尺寸很重要。

MMX和XMM指令对于处理大块并行数据的程序很有用,比如声音和图像处理。
在其它应用下可能用MMX和XMM指令也没多大优势。

条件传输指令很有用,用于避免那些不大好预测的条件跳转。

乱序执行改进了性能,尤其对于未优化的代码而言。 它包括自动进行指令重排和寄存器重命名。

具备好的分支预测方法的处理器能够预知简单的重复模式的转移。
如果分支预测失败的代价很高的话,那么好的分支预测机制就是最重要的。

当子过程在不同的位置被调用时,返回栈缓存(RSB)改进了返回指令的预测。

部分寄存器延迟使得混合处理不同尺寸的数据(8,16,32位)变得更困难。

乘法指令的延迟时间是指在依赖链中花去的时间。
1/2的吞吐率意味着执行可以被流水化,每2个时钟周期可以开始一个新的乘法指令。 这指明了处理并行数据可以达到的速度。

本文档中描述的大多数优化对于其它类型的处理器没什么副作用(要有也是很小的副作用),包括非Intel处理器。
但同时,也要意识到几个问题:

在PPlain和PMMX上规划浮点代码时,经常需要大量的FXCH指令。
在老式的处理器上会减慢执行速度,但在奔腾家族和高级的非Intel处理器上不会。

在PMMX,PII和PIII上利用MMX指令,以及在PPro,PII和PIII上利用条件传输指令,如果想让你的代码兼容早期处理器的话,可能会出现问题。
解决办法是将你的代码写成几个版本,每个分别为特定的处理器优化。 在运行的时候,你的程序要检测处理器类型,然后选择版本适当的代码(27.10节)。