CPU长指令(VLIW)失败的主要原因是什么,VLIW真的无药可救吗?

software和hardware之间总是存在tradeoff:要么是hardware结构复杂,software灵活。要么是hardware结构保持简洁清晰,software干一些脏活累活。VLIW就是属于后一种。

与Superscalar架构不同,VLIW将检查指令依赖关系的工作全部交给了编译器:编译器将没有依赖关系的指令打包成一个bundle,hardware不需要动态调度,只是负责取指、执行。

VLIW创始人Josh Fisher于1983年发表的论文Very Long Instruction Word architectures and the ELI-512提出了VLIW的Trace Scheduling思想,优化代码中最经常执行的路径。不过当时很多科学家对这种方式持怀疑态度,也许从学术角度来看这种思想有点意思,但人们压根不相信,可以建造一台依靠software而不是hardware来提速的计算机。但是Josh Fisher一直相信VLIW架构远远超出了一个学术项目范畴,它有潜力改变所有的科学计算。(Josh Fisher也发明了Instruction-level Parallelism这个术语)

Trace Scheduling

第一个VLIW编译器Bulldog由Josh Fisher和他的研究生John Ellis、Alex Nicolau和John Ruttenberg编写。John Ellis在1984年发表了博士论文Bulldog: A Compiler for VLIW Architectures,这篇论文被评选为ACM年度最佳计算机科学论文。

The Bulldog VLIW Compiler

Multiflow

也是1984年,Josh Fisher离开了耶鲁大学创建了Multiflow公司。他认为,为了追求利润,工业界会比固守计算机理论的学界同行对新技术更感兴趣 。不过生意并没有想象中的好做,这期间,计算机行业正在发生变化,硬件变得更便宜,以乔布斯的NeXT公司为代表生产的个人电脑可以运行许多科学应用,Multiflow公司遇到了严重的资金困难。到1990年公司关门为止,Multiflow一共只卖了125台机器(数据来源:Multiflow),Josh Fishe也加入了惠普实验室。

但是,故事到这里远远没有结束。

Itanium

当时,还有另外一家从事VLIW相关研究的公司Cydrome,在几年的经营后,也发现无以为继。其首席构架师以及联合创始人Bob Rau也加入了惠普。Bob Rau和Josh Fisher两个对处理器发展方向有着相同看法的人碰到了一起。他们依然相信,VLIW将成为未来主流的处理器指令集架构。

当时惠普内部开始觉得自己单独开发生产处理器的成本太高,于是找到了英特尔一起合作。当年英特尔有一个如鲠在喉的对手——AMD,促使英特尔其想跳出自己的X86构架,另辟道路发展。到1994年,英特尔和AMD两家公司一家花费了约2亿美元的法律费用,两家公司已经势如水火。此时惠普提出的新的处理器计划采用了和市场上其他厂商完全不同的方案,当时的英特尔认为找到了新的市场来甩掉这些跟屁虫。

1994年英特尔和惠普签订协议,宣布共同开发面向高性能计算(HPC)的处理器,也就是后来的Itanium,安腾。他们以VLIW指令作为基础,提出了显式并行指令集运算EPIC( Explicitly parallel instruction computing)。

由于这两个企业影响力巨大,他们的联合引起了整个行业的关注,各大软硬件企业纷纷表示此后将支持这个新的构架。除了发起方惠普和英特尔以外,渐渐的包括IBM、Novell、微软、Sun、甲骨文、红帽、DELL等一众企业都纷纷表示将支持新的构架。

至此,Josh Fisher和Bob Rau终于完成了自己创业时未完成的使命,把自己的技术理想打造成了万众瞩目的工业标准。

但,这也是一段噩梦的开始。上面提到,VLIW将复杂的指令调度交给编译器,处理器硬件只要在意性能,但英特尔和惠普忽略了在软件构造上的巨大挑战,这种难度完全超乎了想象。原计划1997年发布的首个安腾版本一直拖到了2001年才发布。

安腾最初的目的是通过降低硬件的复杂度大大提高硬件的效率,但是在实际开发中,发现软件优化实在太难了,实际上安腾最后还是保留了之前希望砍掉的分支预测功能,以保证整个软硬件系统协调运作。2002年,英特尔发布了第二代安腾处理器,有评论认为这是一款批着EPIC外衣的RISC处理器,安腾设计复杂度更高,功耗不降反升。

从1994年到2002年,8年时间,安腾的发展举步维艰,但是科技行业的发展瞬息万变。

2000年,AMD发布了基于X86的64位扩展技术AMD64,这个扩展允许64位和32位程序都可以在同一个处理器上运行。2003年,AMD推出面向服务器的产品Opteron(皓龙)的时候,大家似乎看到了新的希望。因为Opteron良好的性能,对原有32位程序的完美兼容,AMD很快打开了市场。

而英特尔这时候意识到,安腾也许不是一条正确的道路。英特尔在内部搞起了现在互联网公司常用的田忌赛马战术。2004年,英特尔宣布在其另外一条服务器产品线至强旗下引入 x86-64技术(实际上就是AMD64的翻版),以应对AMD的竞争。此时的英特尔,虽然还在履行和惠普的合约,继续更新安腾,但多少已经心不在焉,主要精力都转到主战场至强上去了。

安腾弱势的表现,让主流大厂商都已经停止对安腾的支持。而英特尔凭借强大技的术和生产制造能力,后来居上,最终将AMD再次碾压,安腾对英特尔来说也没有了价值。2010年,英特尔停止在自己新的C++编译器里面添加安腾支持,这基本上是判了安腾的死刑。

从1994年惠普和英特尔宣布启动处理器合作项目开始,到最后一代安腾发布,整整经过了23年时间。这期间英特尔换了4个CEO,惠普换了6任CEO。

回过头来看,安腾有几个比较严重的问题:

  • 不兼容。如果你想让你的应用在IA64的安腾服务器上运行,你需要重新编译一份IA64的应用。早期的安腾虽然兼容IA-32,但是性能很低。
  • 当处理器的执行宽度(execution width),指令执行延迟时间,执行单元个数(function unit)改变时,需要重新编译程序来适应。但是Superscalar却不需要。
  • 安腾缓慢的发展期间,AMD64的崛起,让英特尔不得不调整方向。

但是VLIW真的无药可救吗?现在可能无法下出定论。VLIW在DSP以及ATI GPU都有应用。后续如果有新的应用场景、其他技术的发展,说不定会重新带动VLIW。Google的TPU也用到了VLIW,而且它用到的systolic array技术在1979年被H. T. Kung和Charles E. Leiserson在论文Introduction to VLSI Systems中描述,而早在1944年的Colossus Mark II就采取了类似的技术。