2.2 高速缓存(Cache)
具有MMX™技术的处理器的在片高速缓存子系统,是由两个16K的4路线长为32字节的关联高速缓存体构成。高速缓存具有一个回写机制和一个伪LRU的置换算法。数据的高速缓存由八个按四字节边界交错的存贮体构成。
在具有MMX™技术的奔腾处理器上,只要引用的数据不在同一个高速缓存体上,就可以被一条读取指令和一条存贮指令同时访问。在具有MMX™技术的奔腾处理器上,高速缓存访问失败的迟延为8个内部时钟周期。在具有MMX™技术的动态执行处理器中,最小迟延是10个内部时钟周期。
2.3 分支目标缓存
具有MMX™技术的奔腾处理器和动态执行处理器在分支预测方面,除一个较小的异常处理外(本书2.3.1节中讨论),在功能上完全一样。
分支目标缓冲区(BTB)存贮了预先所见的分支和它们的目标。当一个分支被预取后,BTB将目标地址直接填入到指令读取单元(IFU)。一旦分支被执行,BTB将随着目标地址而改变。使用分支目标缓存时,预先所见的分支被动态预告。分支目标缓存的预测算法包括了模式匹配和每目标多达4位的预测历史位。例如,一个具有4个迭代长度的循环将百分之百地被正确预测到。遵循下列原则将提高预测性能:
编写条件分支(除循环外)可将最常执行的分支紧接在分支指令后(即失败)。
另外,具有MMX™技术的处理器有一个堆栈返回缓存(RSB, Return Stack Buffer),可以连续地为不同地址上调用的过程正确地预测其返回地址,进一步为展开具有函数调用的循环带来了益处,并删除了某些需要in-line的过程。
2.3.1 相连分支
另外,在具有MMX™技术的奔腾处理器上,如果两个分支指令的最后一个字节在同一个按四字节对齐的内存段内,则分支不可预测。如下图所示:
图2-5 相连分支的例子
这种情况,发生在两个相连分支间没有间隔指令且第二个指令只有两个字节长的情况下(如+/-128字节的相对跳转指令)。
为避免这种无法预测的情况,应使第二分支加长,在分支指令中用16位的相对位移代替8位的相对位移。
2.4 写缓存
具有MMX™技术的处理器具有4个写缓存(相对无MMX™技术的奔腾处理器的两个写缓存)。另外,写缓存可以被U管道使用,也可以被V管道使用(相对无MMX™技术的奔腾处理器的一个写缓存对应一个管道的情况)。通过对内存写操作进行安排调度,可以提高关键循环的性能。如果你不想看到写未命中,每组指令不能安排多于4条写指令。并在安排另外的写指令前调度其它指令。