NetBurst与K7/8 Cache设计上的一些异同

NetBurst与K7/8 Cache设计上的一些异同

之所以拿Intel放弃的NetBurst架构而非现在最新的Core架构来做比较,是因为我觉得NetBurst中的Cache设计十分先进,在一定呈度上代表了未来的发展趋势。虽然这次实验失败了,但还是可以拿出来做一些简单的分析。

用CPU-Z等软件来查看NetBurst架构P4的信息,会发现其L1和其它CPU有些不一样。它没有了以前的“Instruction Cache”,取而代之的是一个称为“Trace Cache”的东西。并且其容量也不再是KByte,而是μOps。这是怎么回事呢?

先来看看CPU运行程序时的基本操作流程:首先CPU会根据IPR(Instruction Pointer Rigster)提供的地址取得指令,然后对指令进行解码,得出操作地址数和操作码。再由操作地址数获得操作数,并由ALU结合操作码计算出操作数,最后保存在寄存器中。这其中最为复杂的就是解码操作。现代CPU为了提高指令执行效率,借签了RISC的设计理念,将不同的X86指令解码为长短统一、内容简单的微指令并以超标量的方式执行。

在以前的CPU设计中,一般是等到CPU需要执行某指令时,才对其进行解码。在引入了分支预测后,就可以预先读取CPU可能用到的指令,并解码,以备CPU需要时直接调用。这就是Trace Cache的作用。它可以将分支预测得到的X86指令事先解码为微指令并存储在一个被称为回溯片断(trace segment)的逻辑组中,并且这些解码后的指令非常灵活,它能够在进入trace segment前决定是否直接进入流水线来执行。当trace segment中的微操作指令执行后,trace cache就会马上变成“执行模式(execute mode)”,这种模式下,微指令就会依据预测时的顺序来被CPU提取,并执行。这样一来,Trace cache存储的指令就是CPU可以直接执行的微操作,并且由于是存放在L1中,使得CPU每次需要时都可以马上取得译码好的微指令,再加上超低的延迟可以让CPU执行频率迅速增大,使CPU的主频达到前所未有的高度。还有一个重要的好处就是可以让CPU本身的X86解码单元减少,简化CPU结构。总的来说,Trace Cache引入的最终目的就是为了减少X86指令解码器,缓解长流水线出现预测失误所带来的性能损失,并代替原始的L1指令缓存。

由于Intel一直没有公布Trace Cache的具体大小,只是透露其可以装入12条微指令,因此其单位是12μOps。

然而,这种大胆的Cache设计最大的弊端在于,一旦分支预测出现错误,后果将是极其严重的。因此Intel希望借助于较大的L2来缓减预测出错引起的性能损失,这就要求L2拥有极高的命中率。因此Intel在NetBurst架构中采用了8路组相联(其命中率可以达到完全相联的水平),容量为2MB的L2,并提供256b带宽,以确保其低延迟。但从实际效果来看,显然由于流水线级别的增加给分支预测带来了不可估计的难度,即使有2MB L2坐镇,也难保P4的“高频低能”。

对于K7/K8来说,其Cache设计同Intel也有相似之处。AMD历来重视L1,64K Ins+64K Dat,2路组相联的设计让AMD拥有高命中率和低延迟的L1。然而在Instrution Cache中AMD的设计思路又与其它CPU有所不同。首先其Ins中并不存储传统的X86指令,而是存储着分支预测出来的X86指令的信息。再根据这些信息将指令解码成1~2条“宏操作”来执行。由于AMD CPU采用了3条流水线的超标量结构,因此其可以保证同时执行6条这样的宏操作。显然,相比之下AMD CPU的指令执行效率要优于Intel,因此就可以解释为什么AMD 2.4G可以打败Intel 3.2G了。 然而从这样的L1设计来看,似乎和Intel有些异曲同工之妙。

对于L2,AMD历来只有很少的256K或512K。这是由于AMD的Cache设计思想所致。在一般的Cache中,下级Cache总是要保留一个上级Cache的映象,即L1中的数据在L2中也能够找到。L2在L3中能够找到相同数据。然而AMD并没有这样做,它的L2中保存的数据都是L1中替换下来的,以保证CPU在下次使用中能够在L2中找到。因此,AMD的Cache结构呈现出L1+L2的“怪异”现像,它的L2对于整体性能并不起决定性作用。Sempron 2600+(128K L2)同2800+(256K L2)性能相同,就是这个原因。




文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.