第52章 ARM指令集(2 / 2)
在前世的80年代末,英特尔面临一个选择,是继续设计和以前x86兼容的芯片还是转到精简指令的道路上去。如果转到精简指令的道路上,英特尔的市场优势会荡然无存:如果坚持走复杂指令的道路,它就必须逆着全世界处理器发展潮流前进。
在这个问题上,英特尔处理得很明智。首先,英特尔必须维护它通过x86系列芯片在微处理器市场上确立的领先地位。但是,万一复杂指令的处理器发展到头了,而精简指令代表了未来的发展方向,它也不能坐以待毙。
于是英特尔在推出过渡型复杂指令集的处理器80486的同时,推出了基于精简指令集的80860。这个产品事实证明不是很成功,显然,市场的倾向说明了用户对兼容性的要求比性能更重要。因此,英特尔在精简指令上推出80960后,就停止了这方面的工作,而专心做“技术落后”的复杂指令系列。
在整个20世纪90年代,只有英特尔一家坚持开发复杂指令集的处理器,对抗着整个处理器工业界。所以说,英特尔并没有拒绝新技术,它也曾经研制出两个不错的精简指令的处理器,只是看到它们前途不好时,立即停掉了它们。
所以,苹果公司想要研制ARM架构的桌面级CPU,在X86指令集一统江山的基础上,向英特尔妥协是必不可少的,要不然他也不会抛弃合作了那么多年的IBM公司。
但是要将这两种架构合二为一,却并不是这么简单。
因为,在架构上,两者之间并不相同,在于设计者考虑问题方式的不同,具体实现的方式也就不同。
比如说我们要命令一个人吃饭,那么我们应该怎么命令呢?我们可以直接对他下达“吃饭”的命令,也可以命令他“先拿勺子,然后舀起一勺饭,然后张嘴,然后送到嘴里,最后咽下去”。
从这里可以看到,对于命令别人做事这样一件事情,不同的人有不同的理解,有人认为,如果我首先给接受命令的人以足够的训练,让他掌握各种复杂技能(即在硬件中实现对应的复杂功能),那么以后就可以用非常简单的命令让他去做很复杂的事情——比如只要说一句“吃饭”,他就会吃饭。
但是也有人认为这样会让事情变的太复杂,毕竟接受命令的人要做的事情很复杂,如果你这时候想让他吃菜怎么办?难道继续训练他吃菜的方法?我们为什么不可以把事情分为许多非常基本的步骤,这样只需要接受命令的人懂得很少的基本技能,就可以完成同样的工作,无非是下达命令的人稍微累一点——比如现在我要他吃菜,只需要把刚刚吃饭命令里的“舀起一勺饭”改成“舀起一勺菜”,问题就解决了,多么简单。
这就是X86和ARM的逻辑区别。
这个区别导致了X86和ARM分道扬镳——前者更加专注于高性能但同时高功耗的实现,而后者则专注于小尺寸低功耗领域。实际上也有很多事情X86更加合适,而另外一些事情则是RISC更加合适,比如在执行高密度的运算任务的时候X86就更具备优势,而在执行简单重复劳动的时候ARM就能占到上风。
比如假设我们是在举办吃饭大赛,那么X86只需要不停的喊“吃饭吃饭吃饭”就行了,而ARM则要一遍一遍重复吃饭流程,负责喊话的人如果嘴巴不够快(即内存带宽不够大),那么ARM就很难吃的过X86。但是如果我们只是要两个人把饭舀出来,那么X86就麻烦得多,因为X86里没有这么简单的舀饭动作,而RISC就只需要不停喊“舀饭舀饭舀饭”就OK。