|
简介(我对文章分析的理解):
P4 NetBurst 因为为了提高频率,采用了超长流水线,从而导致了 Decoder 和实际的 Execution Unit 相隔了很多个时钟周期
这个时候如果执行两条 Dependent Instructions 的话,就会出现麻烦:例如
mov eax, [ecx]
add ebx, eax
这个时候 [ecx] 所指向的数据不知道在 L1/L2 还是 RAM,甚至 Page File 中。如果等第一条指令的结果出来以后
Decoder 再发送第二条指令到流水线,那么第二条指令就要用十几个时钟周期才能传输到 Execution Unit,这将造成严重的流水线
气泡,使效率降低一大截,是不可取得方案。而 Intel Netburst 设计团队想出了让人觉得不可思议的处理方法:
决定以PCI里对NetBurst最高专业水准, 教育一下I粉丝MM HeavenPR,纯学术教育:
P4 NetBurst采用Trace Cache, 从Trace Cache到Exec级,没有Decoder的。
谈谈L1 miss的情况
而是调度器和 Execution Unit之间的存在时钟间距,POWER4和POWER5和APHLA21264也都是有的。所以POWER4和POWER5和APHLA21264以及Netburst,都不会说是等到前一条相关指令真正写回结果后,才开始从调度器向Execution Unit发送下一指令。而是提前根据具体的指令延迟,预先猜测性的wake up下一条指令了, 例如:不管是否L1miss,随后2或3时钟就猜测发射。
POWER4和POWER5、APHLA21264他们为了避免理想猜测和实际不一致,猜测指令发射后,不会从保留站RS(/调度器/发射队列)删除,而是继续留在保留站RS(/发射队列)中, 直到有确认信息返回,如果出现异常(L1 miss等等),可从保留站RS重新发射。 这种方法的代价是,会导致已经发射的指令占用保留站RS,影响其他指令使用保留站RS资源。
NetBurst相当天才的一招是,猜测指令发射后,就离开了调度器,没有再继续占用调度器。如果出现异常,例如L1 miss,有staging replay机制来处理,而不是从调度器发射。
更深更激进的猜测,可能带来更大的功耗, 这点是对的。 不过呢,加强猜测,是提升性能的有效手段。
AMD的下下代处理器,必然是有replay的。
还是那句老话,我们不能因为刘翔跑不到100米短跑的世界前八, 就说刘翔的敏捷性和协调性不好。
[ 本帖最后由 hopetoknow2 于 2006-8-29 00:28 编辑 ] |
|