如果有的话,“Itanium惨败”的技术原因是什么?

29
这篇文章中,约翰·德沃拉克称Itanium为“过去50年中的重大失败之一”。他描述了市场对该技术的过度乐观预期以及该想法的戏剧性财务结果,但没有深入探讨这个史诗般失败的技术细节。我有机会与Itanium合作了一段时间,我个人非常喜欢它的架构,与现代x86处理器相比,它非常清晰、简单和直观...

那么它的失败是由什么技术原因造成的呢?表现不佳?与x86代码不兼容?编译器的复杂性?这艘“Itanic”为什么会下沉?

Itanium processor block


2
在我看来,这与编程密切相关,因为我们编写的任何程序都会在机器内部的处理器上执行。因此,您至少需要了解它如何运作以及为什么要这样做。 - Massimiliano
3
处理器架构与编程有很大关系。我通过阅读ARM参考手册学到了很多关于操作系统的知识。 - shodanex
5
这真的与编程有关 - 只是因为它提到了硬件,并不意味着它属于服务器故障范畴。 - 1800 INFORMATION
4
为什么又被关闭了并且被踩了?“真正”的程序员不需要了解执行他们代码的机器的结构吗?很遗憾。 - Massimiliano
2
为什么Itanium处理器很难编写编译器? - phuclv
显示剩余5条评论
6个回答

33

Itanium失败的原因是,对于今天的工作负载来说,VLIW(非常长指令字)只是一个糟糕的想法。

唐纳德·克努斯(Donald Knuth)是一位广受尊敬的计算机科学家,在2008年的一次采访中表示:“‘Itanium’方法本应该是如此出色——直到发现希望的编译器基本上不可能编写。”1

这几乎完美地解释了问题。

对于科学计算,每个基本块至少包含几十条指令,VLIW可能效果良好。有足够的指令来创建良好的捆绑包。但对于更现代的工作负载,通常每个基本块只有6-7条指令,它就不起作用了(如果我没记错的话,这是SPEC2000的平均值)。编译器无法找到独立的指令放入捆绑包中。

Modern x86处理器(除了Intel Atom(Pre Silvermont)和我相信AMD E-3 ** / 4 **之外)都是乱序处理器。它们维护大约100条指令的动态指令窗口,在该窗口中,只要输入准备就绪,它们就执行指令。如果有多个指令准备好并且它们不竞争资源,则它们在同一周期内一起运行。
那么这与VLIW有何不同?VLIW和乱序的第一个关键区别在于,乱序处理器可以选择同时执行来自不同基本块的指令。这些指令无论如何都是根据分支预测进行推测性执行的。第二个关键区别是,乱序处理器动态确定这些调度(即每个动态指令都是独立调度的;VLIW编译器操作静态指令)。
第三个主要的区别是,无序处理器的实现可以尽可能地宽,而不需要更改指令集(英特尔核心有5个执行端口,其他处理器有4个等)。 VLIW机器可以且确实同时执行多个束(如果它们没有冲突)。例如,早期Itanium CPU每个时钟周期执行最多2个VLIW束,共6条指令,而后续设计(2011年的Poulson和更高版本)则可运行最多4个束=每时钟周期12条指令,并使用SMT从多个线程中提取这些指令。在这方面,真正的Itanium硬件就像传统的顺序超标量设计(如P5 Pentium或Atom),但具有更多/更好的方法,使编译器能够将指令级并行性暴露给硬件(理论上,如果它能找到足够的话,这就是问题所在)。

在性能方面,与类似规格(缓存、核心等)的Itanium相比,它们表现出色。

那么为什么现在还会有人购买Itanium呢?实际上唯一的原因就是想运行HP-UX系统。如果你需要运行HP-UX系统,那么Itanium是唯一可行的选择...
许多编译器开发者并不这样认为 - 他们总是喜欢Itanium提供更多任务、使他们重新掌控等方面。但他们不会承认Itanium已经惨败了。

脚注1:

这是关于多核处理器价值的回答的一部分。Knuth认为,利用并行处理很难;在编译时找到和暴露细粒度指令级并行性(以及显式推测:EPIC)对于VLIW也是一个难题,与将顺序程序或函数拆分成多个线程以自动利用多个内核来获取粗粒度并行性有些相关。

11年后,他仍然基本正确:对于大多数非服务器软件来说,每个线程的性能仍然非常重要,并且是CPU供应商关注的焦点,因为许多内核并不能替代它。


2
谢谢。很好的回答!这个问题等了你很久 :-) 至于这个引用,我相信它来自 Donald Knuth: http://www.informit.com/articles/article.aspx?p=1193856 - Massimiliano
1
为什么没有人设计一种架构,使指令携带额外信息(如依赖关系等),以使乱序执行更加容易/便宜?这是两种方法的最佳结合。 - Aleksandr Dubinsky
Yacoder,感谢您提供缺失的参考 :) - Vlad Petric
1
Aleksandr,这个问题有多个方面需要回答。我猜从技术上讲,通过这种方式增强乱序执行可能是可行的,但我不知道确切的方法。有几个问题:a)如果添加一些指令到指令集中,即使它不再有意义(例如延迟分支插槽),您也需要支持它。b)动态预测器往往能够很好地完成工作(例如存储-加载依赖性预测),并且适用于所有代码,包括过去的代码。c)您需要一些显著的改进来证明像这样的指令集更改是有必要的。 - Vlad Petric
Aleksandr,顺便说一下,数据流架构具有所有依赖项显式的特点。然而,所有依赖项都是显式的,这会限制您的编程(没有常规内存)。 von-Neumann和数据流之间的混合体确实存在(Wavescalar) - Vlad Petric

8

很简单,它不兼容x86。这就是为什么有x86_64芯片的原因。


3
PowerPC芯片不兼容x86,但在高性能计算领域并不是一场灾难,所以必须有更好的解释... - Massimiliano
3
没有,PowerPC 能够运行是因为苹果公司非常努力地提供了一个仿真层来支持 68000。当他们转向 Core Duo 时也是如此。在每次变更中,大部分现有软件都能继续运行。而 Itanium 则完全因为没有现有软件可用而失败了。 - SpliFF
4
换句话说,在发布时,软件开发者在等待一个良好的市场份额才会为其编写软件,而个人电脑买家则在等待足够多的软件可用后再购买。 - SpliFF
它是有效的。但是,一段时间内,Itanium在HPC中的市场份额仍在增长。因此,“鸡和蛋”的这个初始问题似乎已经得到解决。http://en.wikipedia.org/wiki/File:Top500.procfamily.png - Massimiliano
1
Itanium上的Windows有一个WoW层来运行x86应用程序。许多版本的Itanium甚至内置了一个小型的x86 CPU来运行x86代码。 - phuclv

5

Itanium的设计理念是基于极其宽广的指令级并行处理,以在时钟频率受到热限制的情况下扩展处理器性能。

但AMD Opteron通过大量使用x86_64内核实现可扩展性能,并且兼容32位x86二进制代码,从而打破了采用Itanium的局面。

相比同样处理器数量的x86服务器,采用Itanium服务器的成本要高出10倍。

所有这些因素都减缓了Itanium服务器在主流市场中的采用。Itanium的主要市场现在是一个至少100亿美元/年的任务关键型企业计算市场,该市场仅由惠普、IBM和Sun等公司占据主导地位。


3
我读了那篇文章,但完全没有他所指的“惨败”。正如他在文章末尾提到的那样,一看到Itanium,“一个接一个有前途的项目就被放弃了”。MIPS、Alpha、PA-RISC都已经消失。Sun取消了他们最后的两个大型Sparc项目,尽管即使在这些项目之前,它也不是一个很畅销的产品。PowerPC仅在嵌入式领域中幸存。
使用单一产品线杀死所有竞争对手,这怎么能不算是有史以来最伟大的微处理器胜利呢?我相信他们当时并没有预见到这一点,但即使他们知道会失败,把几十亿美元投入这个方向也非常成功。显然他们负担得起,其他人只能黯然离场。
在桌面上,在服务器房间里,甚至在超级计算机中(排名前500位的87%),x86兼容性无处不在。如果这是英特尔“惨败”的结果,那么未能成功的处理器还有什么话可说呢?
在我的书中,英特尔和Itanium与微软和MS-DOS并列:尽管技术上可能很差,但它使他们能够完全主宰行业。
编辑:从第一天开始,Itanium就具有x86兼容性,所以这不是问题所在。它虽然慢,但它确实存在。

1
据我所知,他并没有谈论英特尔的惨败,只是谈论了“Itanium 项目”的惨败... - Massimiliano
3
你认为MS-DOS是一场惨败吗?它也是一个由技术劣质产品引发的事故,直接导致了巨大的垄断长达多年。 - Ken

3

这个技术很难编写代码生成器,而且一开始就没有太多成功的原因(它是由英特尔制造的,那又怎样?)。

我听说有些JIT比解释器在Itanium上表现更差,因为gcc更好地优化了解释器;如果处理器需要那么高级别的优化,那就不行了。

非主流RISC正在失去市场;他们没有看到或希望它成为主流;太糟糕了,因为没有任何理由支持它。


0

我认为Itanium仍然有它的市场——高端系统和惠普刀片服务器。与x86相比,性能仍然要高得多。我不确定为什么有人会称其为失败,因为它为惠普创造了数十亿美元的收入(尽管这不仅仅是处理器;Itanium服务器销售也在创造收入)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接