第1页:前言 第2页:用X86抢占新市场 第3页:“原子”的孕育与诞生 第4页:核心架构透视 第5页:半乱序执行、微操作融合与超线程 第6页:执行单元与低功耗下的长流水线 第7页:不协调的缓存与Sea-of-FUBs设计 第8页:双模式FSB、核心频率与性能预览 第9页:Poulsbo:不同寻常的革新芯片组 第10页:Atom全家族成员预览 第11页:结语
指令也疯狂:安全指令识别
顺序执行架构最怕遇到的情况就是执行一条高延迟的指令时所需要的数据迟迟未被送到缓存中来。由于顺序执行CPU必须按顺序执行指令,所以一旦当前需要被执行的指令所需要的数据无法在内存中获取到的时候,执行单元就必须一直处于空闲等待的状态中,有时需要耗费上百个时钟才能从内存中获取到数据,这不仅大大降低性能,更糟的是整个空闲等待的过程都需要消耗电力,这种结果完全违背了我们设计低能耗CPU的初衷。
乱序执行处理器就可以通过简单的指令执行排序机制来解决这个问题。排序器只需挑出下一个已经准备好被执行的指令,然后对于那些可单独执行的指令则先放一边等待从主内存中获取到数据之后再进行。我们前面已经证实完全的乱序执行架构的能耗超过Atom的极限,而完全依赖于顺序执行的结果同样不可取。最后奥斯丁团队找到了一个明智的折中方案。
Austin小组采用的折中方案是一种叫做“安全指令识别(Safe Instruction Recognition,简称SIR)”的算法,该算法的工作机制如下:当Atom需要执行一条高延迟的浮点运算,而后面有跟着一条短延迟整数操作时,顺序执行机制需要等浮点操作完成之后才能去执行后面的整数操作;但是采用SIR就可以先查看两条指令所需的数据是否有关联(比如前面是C=A+B,后面是D=C+F),如果没有关联SIR就允许将后面的整数操作提前执行,从而节省时间提高效率。
SIR只在这种特殊情况下有效,它给Atom的顺序执行架构带来几分乱序执行的能力,所以严格来看Atom可以被称为“半乱序执行”架构。预计未来Atom在指令执行方面也将愈来愈灵活。
CISC归来:宏操作执行
奔腾Pro是Intel首款RISC核心,它的诞生结束了上世纪九十年代那场RISC vs CISC之争。对于程序员来说,奔腾Pro仍然是一颗x86 CISC CPU,但它在接收到x86指令之后就可以将其编译成多个小的微操作(micro-ops),以供更快更高效的RISC核心运行。
奔腾Pro保持了向后兼容过去Intel x86 CPU的能力,这样不单能够靠高性能的RISC核心提升性能,而且一些CISC架构的优势也能得以保存。事实证明部分x86指令不宜被打散成多个小的微操作,因为个别操作间会有冲突。因此从奔腾M开始,Intel加某些特定的微操作融合在一起,以便让流水线更好地处理,从而起到节能高效的目的。Intel称这种特性为“微操作融合(micro-op fusion)”。这种将两个微操作合二为一送往流水线的做法可以有效提高CPU的“带宽”,提高指令的吞吐量。不过其内核仍然是一颗高效的RISC核心,只是拥有更多特定情况下的加速特性。小熊在线www.beareyes.com.cn
Atom则更进一步,内核在处理x86指令时无需将其打散为多个微操作,这是由于Atom不能乱序执行,缺乏优化排序的大量微操作反而会降低性能。再者保持指令的完整性可以减少吞吐量,这样就好比增加了Atom的“带宽”。对于load-op-store 和 load-op-execution这类格式的指令,Atom的解码器都将其视为一个单一的微操作。换句话说,现在一条读取、运算以及储存计算结果的指令将被视为一个单一的微操作,而不用被分割成3部分。这样做的好处就是被送往流水线处理的微操作只有一个而不是三个,从另一个角度看就是节省了带宽。所以Atom虽然只是一个双指令并发架构,但是在某些情况下的指令吞吐量却不比某些台式CPU差。
过于Intel在将x86指令分割为更小、RISC类操作上大费周章,以求能够设计出性能更高的核心来应付大量被分割出来的微操作。讽刺的是在如今越来越注重性能/功耗比的今天,Intel必须回到原地反过来去保护x86指令的完整性。
超线程回归
虽然Atom支持双指令并发,但是由于同一线程内的两条指令所占用的数据相互独立,因此要同时执行两条指令绝非易事。为了解决这个难题,Intel为Atom核心引入SMT(Simultaneous Multi-Threading,并发多线程技术),让核心同时具备双线程的执行度。当年P4上的超线程技术(Hyper-Threading)实际上就是SMT中的一种,所以此举可以看成是超线程的回归。还记得我们前面提到的那条性能/功耗比黄金定律吗?Intel让Atom支持SMT就是遵循该定律的最好例证。SMT为Atom带来30~50%的性能提升,但功耗只增加了20%!
Atom具备32路的指令调度排列,在开启SMT之后,每线程又具备16路排列。排序器无需每个时钟都在各线程间做跳转,而是根据需要智能完成,唯一的限制就是每时钟只能分配两个操作。所以如果当前线程的指令需要等待数据被送到才能继续执行,下一个时钟排序器就可以从另一个线程里挑选一个操作工核心处理,这样就不会形成空等状态,顺序执行架构的缺陷让SMT成为保证Atom流水线随时保持充盈状态的保障。