独特的x86指令集
包括笔者接触的一些编辑在内,偏向于“学术”的业界人士对x86指令集大概都不会有好感,包括x87,甚至包括IA64指令集在内,Intel创造出的典型的CISC指令集都不能称之为一个“优美”的设计,例如Intel Nehalem-EP处理器首发深度评测中提到的,x86指令集采用的堆叠指令:
为什么直联架构可以很明显地提升性能?这要先从x86架构的存储体系说起。在很久很久以前,在一个记忆体短缺的时代——不仅仅处理器外面记忆体很少,处理器里面也是。使用了CISC架构的x86处理器里面只有8个GPR通用寄存器(一般的RISC处理器有32个以上的通用寄存器,现在的x86-64有16个通用寄存器),由于通用寄存器数量上的短缺,因此不像RISC处理器那样,CISC的x86处理器使用了堆叠运算指令。堆叠运算也就是将运算结果保存在源寄存器上的,如ADD AX, BX指令会将AX寄存器与BX寄存器的内容相加,并将结果保存到AX上——这样对比于使用三个寄存器做同一运算的非堆叠指令RISC架构就节约了一个寄存器,然而相应地源寄存器的内存就销毁了。x86架构需要执行大量的Load/Store微指令(Pentium Pro开始具备)来进行寄存器-寄存器或寄存器-内存之间的数据搬运操作。RISC处理器当中,Load/Store操作也很频繁。
现在来看这样的设计简直是无法想象,不过这样脑残的设计不仅仅用到了今天,而且还加速到了一个不可思议的境界……在与各种RISC架构处理器的交锋也不落下风……回到架构上,由于x86架构实际上是通过耗费寄存器带宽及缓存-内存带宽来节约处理器内部寄存器数量,大量的Load/Store操作(Load操作占据了x86 uops当中的约30%),对缓存乃至内存的性能非常依赖。
不幸地,或者幸运地,x86/x87/ia64这些奇怪的指令集架构不仅仅活得很好,并且对“优美”的RISC架构造成了越来越大的威胁,为什么呢?
经济性原理
按理来说,一种指令集架构应该具有长远的考量,作为实际的处理器产品,应该服从于指令集的大架构才对,然而在实际上,x86指令集从出现开始就很诡异,并不断地在新的处理器当中进行更新,并且提供的指令集有些匪夷所思,每次推出新指令集扩展后,都会让人感到:这个指令挺好,为什么不在上一次更新中和其有关联的指令一起推出呢?等等。
其实,这些都是为了利于生产制造而导致的。从经济性原理上说,及早推出产品、加大出货量才是正途,这些哪些的缺点可以留待下一代产品来完成。如果没有“量”,活不到下一代,那么空有完美的架构也无济于事。很多架构优秀的商用处理器厂商就是制造不力这样倒下了。
反过来说,既然有了量,那么就有了研发费用,因此Intel每推出一代新的产品,确实会具有这样那样的更新,至于其它厂商们,能不能顺利出新产品还是一个问题。
成本与效益
在当年以IBM为首开始铜布线技术的时候,Intel仍然坚守着铝布线技术(铜矿——Coppermine Pentium III就没有用铜布线),在IBM为45nm AMD Operton提供浸润式技术的时候,Intel还在用通常的光刻技术(32nm会采用),然而,Intel并没有因此而吃亏,虽然没有采用昂贵的特殊制程技术,通过尽快地进行制程工艺的缩小化,Intel也达到了相同的降低耗电、提升频率等目的。
就是这样,Intel注重成本及效益,希望把同样的资源做最大化利用,从商人的角度来讲,无疑是非常正确的。一味地追求最新的技术,恐怕最终会沦落到没钱被别人收购的下场。