从Intel和ARM双雄争霸读懂芯片的前世今生
如果有某个虚拟机,它的指令集可以无缝支持所有的编程语言,还能保证高效率,那么所有CPU的都将被OTT(over-the-top)了,就像短信被微信OTT一样。可惜还没有一个虚拟机可以实现此目标。现在大家熟知的虚拟机,都是和语言绑定的,例如JVM只支持Java、scala、kotlin等;DotNet虚拟机只支持C#、VB.net等;V8只支持Javascript、typescript等;HHVM只支持PHP。
本文引用地址:https://www.eepw.com.cn/article/201804/378885.htm同一个VM上跑的语言相互调用很容易,跨VM很难互操作。由于虚拟机实在太多了,它们反而成了新的CPU架构的拦路虎:80年代只需要搞定C语言编译器就能卖Unix工作站,如今ARM服务器要想挑战Intel,必须把所有这些基于VM的编程语言都支持得很好,JIT编译器的效率都要做得比较高才行。
第三个挑战,来自Transmeta公司对x86指令集的Emulation(Emulation这个词很难翻译,索性不翻了)。简单地说,Emulation就是把x86指令集看成一个虚拟机的指令集,然后用类似JIT编译器的技术,在非x86的CPU上跑x86的程序。未经许可用别人的ISA做CPU是违法的,但用Emulation的方式实现ISA则不违法(Intel和Transmeta只打过专利的官司没打过ISA的官司,Intel还输了)。
如今最广为人知的Emulator是Qemu,上文提到的x86、MIPS、PowerPC、Sparc、MC68000它都可以支持。一般而言,Emulation会导致性能下降一个甚至若干个数量级,根本不足为虑。
1995年,Transmeta公司成立,经过艰苦的秘密研发,于2000年推出了Crusoe处理器,用Emulation的方式,在一款VLIW(超长指令字)风格的CPU上执行x86的程序,这样就规避了没有x86指令集授权的问题。Transmeta的牛X在于,虽然是Emulation,但实现了接近Intel处理器的性能,同时功耗低很多。2000年年底Transmeta的IPO大获成功,其风光程度,直到后来谷歌IPO的时候才被超过。
Transmeta最后还是失败了,Intel在渠道上打压它是次要原因,性能不足是主要原因。虽然VLIW在90年代中后期被广为推崇,但事实证明,它的性能比起乱序执行的超标量架构,还是差一截。另外Transmeta的芯片是在台积电制造的,那个时候不比现在,台积电的工艺水平比起Intel还差很多。2000年的时候,PC还远没有性能过剩,性能还是比功耗重要。等到2010年,Intel的Atom处理器慢得一塌糊涂,依然靠着低功耗,点燃了上网本的大火。
Transmeta虽然失败了,Emulation技术仍然在发展。NVidia在2008年购买了Transmeta的低功耗技术的授权。2014年,NVidia推出了Tegra K1芯片,其中的Denver处理器,利用Emulation技术,在底层的7路超标量架构上,实现了ARM64指令集。值得注意的是,NVidia拥有ARM64的指令集的授权,它不是用Emulation技术来规避什么,而是用Emulation来提升性能,实现比硬件直接执行还要高的性能。根据评测结果,Denver超过了当时苹果最好的手机CPU。近期推出的Denver2处理器的,性能更是秒杀苹果的A9X和华为的麒麟950。
Emulation技术如果真的发展到了比直接执行还要快,Intel的麻烦才刚刚开始。微软联合高通,推出基于SnapDragon835处理器的笔记本,运行Windows 10操作系统,上面可以安装x86的软件。Intel虽然很不爽,但Emulation并不需要指令集授权,所以他只能警告说,在实现Emulator时,不许侵犯Intel的专利,而这一点,微软和高通肯定早已考虑到了。
挫折
x86生态系统曾经面对过一次最严重的、近乎灭顶之灾的挑战。这次挑战来自于谁?就来自于它的缔造者Intel。
Intel心不甘情不愿地把自己的x86指令级授权给了AMD等一众供应商,眼睁睁看着他们分享自己的利润,很不爽,于是想在x86之外另起炉灶,建设自己独享的生态系统。正巧在90年代初期,升级64位计算成为一个风潮,1991年有MIPS R4000,1992年有DEC Alpha,1995年有SUN SPARC64。1994年开始,Intel联合HP,准备趁32位升级64位的时机,抛弃原有的x86架构,新推出一个EPIC(Explicitly Parallel Instruction Computing)架构,名为IA64(Intel Architecture 64-bit)。
x86架构兼容老旧应用程序的能力是出了名的。8086把8位的8080升级为16位的时候,80386升级到32位的时候,都完全兼容旧有的程序。直到今天,Intel的处理器依然支持虚拟8086模式,在此模式下,可以运行30多年前的8086程序。升级到64bit的时候,Intel居然要放弃所有之前的8位、16位、32位应用了!可想而知当时在业界会引起怎样的轩然大波。Linux的缔造者Linus Torvalds公开对此表示反对。
IA64进展得并不顺利,EPIC本质上就是一种VLIW,如前所述,VLIW的性能比乱序超标量要差。而且EPIC的编译器非常难以开发。原定1997年就会推出产品,但直到1999年才发布IA64指令集,2001年才推出产品。另外Intel也不敢完全放弃之前的32位x86应用,它给出的解决方案是Emulation,但EPIC不像Transmeta为Emulation做了很多专门优化,跑32位x86应用的性能很差。
这个时候,千年老二AMD站了出来,为x86续命。2000年,它推出了AMD64指令集,延续了x86架构兼容老旧应用程序的优良传统,可以原生执行8位、16位、32位的老程序。2003年,AMD推出Opteron服务器CPU和Athlon64桌面CPU。
AMD64从技术上和生态上都压了IA64一头,Opteron在服务器市场上为AMD赢得了前所未有的成功。2004年,Intel推出了代号为Nocona的至强服务器CPU,它支持一种称为EM64T的技术,EM64T就是AMD64的马甲。江湖有传言说,Intel曾想提出另外一套不同于AMD64的x86升级64位的方案,但微软为了避免x86生态的分裂,极力阻止了。2012年,Intel推出了最后一代IA64的CPU,关闭了这个不赚钱的产品线。
回顾这段历史,有几点特别令人感慨。
首先,即使是看似无比强大不可战胜的Intel,不顾生态系统中其它伙伴的利益,一意孤行也是会撞南墙的。
其次,幸好由于历史的原因,x86生态中,AMD和Intel是交叉授权的关系,AMD有权加入3DNow这种多媒体扩展指令,也有权加入64位指令,如果是像如今ARM的架构级授权方式,被授权的企业不能自行加以扩展,那可能还真没有办法阻止Intel了。
最后,Intel的执行力还真是超强,掉头极快,EM64T的CPU只比AMD64的CPU晚出了一年(当然不能排除Intel早就有备份方案)。
虽然在IA64上栽了跟头,但Intel靠着自己的技术实力,持续不断地推出性能和功耗表现更好的产品,AMD在64位战役中所取得的优势,慢慢也被消磨掉了。
岁月如梭。进入移动互联网和云计算时代之后,服务器的需求量上升。这时RISC架构的服务器CPU几乎快被消灭干净了,只剩下IBM Power奄奄一息。于是Intel几乎独享了服务器市场扩大所带来的红利。但它却高兴不起来,因为移动市场形成了ARM一家独大的局面,移动终端CPU这个市场,Intel怎么也挤不进去。
正巧Intel在刚刚火过一把的上网本市场里设计了一种低功耗的x86核心,即Atom。Intel以Atom为武器,杀入了手机芯片市场。2012年,Intel的老伙计联想,推出了第一款Intel芯片的手机K800。紧接着还有Motorola的XT890。2013年,中兴、华硕也有产品问世。但三星、小米、华为、OPPO、VIVO等出货量大的厂商,都没有采用Intel的芯片。这些手机大厂,看看x86生态中做整机的联想如何艰难度日,估计心里也是一万个不乐意让Intel到移动领域来继续称王。
到2014年,Intel芯的手机还是没有打开局面,市场唱衰之声一片。但Intel并不想放弃。手机攻不下,那就攻平板!大厂攻不下,那就攻白牌!嫌我的芯片贵,我就给补贴!又过了两年,平板也没有攻下来。在移动市场赔了上百亿美金的Intel,黯然离场。
Intel失利的原因众说纷纭,我觉得根本原因还是竞争力不足:
首先,这个时候的台积电已经不是Transmeta家Crusoe芯片诞生时的吴下阿蒙,它生产的手机芯片的功耗和性能并不输给Intel;
其次,这次Intel并无生态系统的优势,要靠名为houdini的Emulator来执行ARM指令集的程序,性能打了折扣。试想,Intel芯的手机如果性能和待机时间都是iPhone的两倍,谁能抵挡得住这种诱惑?
几乎在进攻移动市场的同时,Intel也在推出产品试水物联网市场,只不过没有大举宣传。2013年10月,Intel推出一款叫做伽利略的Arduino开发板,上面的CPU叫做Quark(夸克)。Quark是比Atom(原子)还小的基本粒子,这个名字暗含着轻巧、低功耗的意思。接着,Intel在2014年的CES大会和2016年的IDF大会上,先后推出了升级的爱迪生和焦耳开发板。
Intel的大名和Arduino联系在一起多少有些奇怪。Arduino是一套可以跑在低端MCU上的C语言函数库,是电子创客们的最爱。淘宝上Arduino开发板才几十块钱。焦耳开发板上的处理器是4核心、1.5GHz,跑Arduino太浪费了。和它参数近似的Raspberry PI 3 Model B+开发板,四核64位ARM Cortex A53跑1.2GHz,淘宝价不到200块。焦耳开发板要369美元。谁会当这个冤大头?
物联网市场极度分散,有无数应用但规模都不大,Intel赚大钱习惯了,在这个微利又需要贴近客户做服务的市场里,百般不适。2017年,Intel悄悄停产了针对物联网市场的开发板。
Intel接下来所可能面对的挫折,是ARM侵入服务器和桌面领域。这个话题下文还会有简单分析。
ARM生态系统
近几年ARM风光无限,抢新闻头条的能力不逊于Intel。
在很多圈外人看来,这家高科技公司好像是在移动互联网时代新冒出来的,但其实它的历史和几乎和80286一样古老。而且它自诞生以来,就以移动(portable)设备为自己首要的目标市场。它等待一飞冲天的风口,等待了二十年。
发端
前文提到,ARM是Acorn电脑公司创造的。
Acorn电脑公司创立于1978年,在80年代初,它用6502系列CPU制造的BBC Micro电脑在英国大获成功。6502的性能慢慢跟不上时代了,Acorn想基于80286开发新的电脑,但是Intel连样片都不给——要是Intel大方些,ARM或许根本就不会诞生。
Acorn一气之下开发了ARM(Acorn RISC Machine),这是世界上第一款定位中低端(而非服务器)RISC处理器。1985年,ARM1诞生(但从未被商用),后来Acorn在1986年和1990年分别推出了ARM2和ARM3,1987年推出了RISC OS和桌面电脑Archimedes。它在英国的教育市场获得了一定的成功,但1990年之后,很快被Wintel的生态击败了。
1990年前后,研发掌上电脑成为一股风潮。当时有家叫做Active Book的公司,拿ARM2处理器开发一个叫做Personal Communicator的产品。可惜产品上市前,Active Book被AT&T收购了,AT&T把ARM2换成了自家的Hobbit处理器。
幸好东方不亮西方亮,当时的苹果公司看好ARM,把自己研发的Newton平台中的处理器,由AT&T的Hobbit,换成了ARM。这个“彼此互换”的故事听起来让人头大,大家只需要记住,ARM的第一颗商用处理器ARM2,就曾被尝试拿来做手持的电脑。
ARM的东家是Acorn,和苹果在电脑市场上有竞争。苹果公司花了6周时间说服Acorn把ARM独立出来运营。1990年11月27日,合资公司ARM正式成立,苹果、Acorn和VLSI分别出资150万、150万、25万英镑,Acorn把ARM处理器相关的知识产权和12名员工放在了新成立的公司里。此后,ARM的缩写被转而解释为Advanced RISC Machine。
为了节省成本,新公司在剑桥附近租了一间谷仓作为办公室,全力为苹果的Newton研发ARM6处理器(4和5这两个编号被跳过去了)。
评论