那些年的那些事CISC和RISC发展中的纠缠
本文来自http://www.cnbeta.com/articles/224544.htm
ARM、ARM、ARM,没错ARM仿佛一夜之间就火了,平板、手机等领域随处可见它的影子,甚至已经有人预言未来有相当一部分原属于传统x86势力范围 的台式机份额也将被ARM占据。在这种情况下,大家不可避免地将ARM和传统的x86处理器进行比较,有力挺ARM的,也有支持x86的。事实上,ARM 并非突然冒起,它几乎和x86同时崛起于上个世纪末期。
CISC也奋斗过,希望在RISC的世界中分得一杯羹。
ARM是基于RISC的产品,而PC的代言人是x86,基于CISC。ARM、x86之争,其实就是RISC和CISC之争。RISC和CISC在长达 30年的纠葛之后,再一次正面碰撞到了一起。如果说之前的RISC和CISC的碰撞都只是部分领域的小打小闹,那么现在ARM和x86有可能带来的是一场 技术革命,一场全局化的战争。今天,我们将追本溯源,来看看RISC和CISC在历史上的交锋,和那些鲜为人知的故事。
今天,业内普遍认为PC性能的提升,特别是CPU性能的提升,动力来自于晶体管制造技术的不断进步。只有晶体管数量更多、运行频率更高,才能在单位时间内 完成更多的工作任务,这也是上个世纪70年代以前的PC发展主流思想。当时的计算机速度很慢,特别是存储速度非常慢,广泛使用的慢速磁带存储设备以及大容 量内存的缺乏,让计算机对每一字节空间的应用都很珍惜。在这样的情况下,人们倾向于在一条指令中完成更多的工作,比如“从内存和寄存器读取数据相加后,写 入内存”。这实际上是四条指令,首先是从内存读取数据,其次是从寄存器读取数据,第三是相加,最后才是写入内存。一条指令可以完成四项工作,这是当时计算 机的主流设计方案。
在上世纪70年代左右,IBM以及其他企业的从业人员发现,目前的PC发展方向存在一定的问题。如果按照现在指令集发展的方向继续发展的话,那么现有的指 令集系统会越来越复杂。而同时期编译器的流行,让这种情况发生了变化:一方面指令集越来越复杂,一方面编译器却很少使用这么多复杂的指令集。而且如此多的 复杂指令,CPU难以对每一个指令都做出优化,甚至部分复杂指令本身耗费的时间反而更多。对这件事情的总结,就是后来著名的“8020”定律,也就是在所 有的指令集中,只有20%最常用,80%基本上罕有问津。
时间进入了1980年代, Reduced Instruction Set Computing,也就是RISC精简指令集开始出现。这种指令集的优势在于将计算机中最常用的20%的指令集集中优化,而剩下的不常用的80%则采用 拆分为常用指令集等方式运行。在RISC提出之后,人们才赋予了传统指令集一个正式的名称:Complex Instruction Set Computing,也就是CISC复杂指令集。一时间,掀起了关于RISC和CISC究竟谁更好的争论。
英特尔的选择 在指令集争论还没有结束的时候,英特尔在IBM不屑一顾地眼光下接下了为IBM生产民用PC的中央处理器的业务。实际上IBM并非无法自己生产CPU,而 是IBM觉得个人PC远没有大型主机的利润高,自家的Power架构用在兼容机上实在是“杀鸡焉用牛刀”。英特尔于是在之前研发的C4004处理器的基础 上继续开发——C4004处理器也并非英特尔自愿开发的产品,而是来自于日本一家名为Busicom的厂商的订货需求。也就是这个订货需求,为日后的 x86的发展打下了基础。
兼容PC的发展,带来了全球的信息化革命大潮。
很快英特尔生产了8086处理器,并依靠PC的快速发展一炮走红。这个时间段恰好是RISC开始崭露头角,CISC被众人鄙视的年代。在RISC提出后, 业内对RISC的未来发展进行了几乎一边倒的赞扬。从教学开始,美国大学计算机原理和系统结构的教材和教学模式全部来自于RISC的发明人 Hennessy的理论,介绍的内容则是Hennessy研发的以RISC为基础的MIPS架构。而当时的研发论文IEEE和ACM发表的内容也基本上都 对RISC提出了各种褒扬,x86以及CISC被认为是没有什么前途的东西。
英特尔在当时的确是一个小公司,旗下只有几款产品,CPU业务也才刚起步。面对整个业界一边倒向RISC的现状,英特尔要么一条道走到黑继续兼容自己的 8086下定决心做x86,要么放弃看起来没有什么希望的CISC投入RISC的怀抱。实际上当时PC刚刚起步,市场空间和前景极为庞大,如果放弃PC市 场,可能对英特尔未来的发展带来巨大的不确定性。况且当时的PC用户已经有不少了,加上市场惯性,英特尔至少可以坚持开发两三代产品满足这部分PC用户的 需求。在这样的情况下,英特尔毅然决定继续开发x86,于是80286和80386等产品依次出炉。后来的事情大家都知道了,英特尔依靠PC市场赚得盆满 钵盈,坚定了其在x86市场继续发力的决心。
高性能的RISC没有进入通用PC市场 PC市场拱手让人、甚至连专利都没有注册,堪称IBM百年来最大的失误。看着自己当年随意选择的英特尔渐渐成长为可与自己匹敌的业界巨头,就连“备 胎”AMD(AMD当时是IBM根据反垄断条例而选择的x86处理器第二供货商)都逐渐发展壮大,IBM后悔不迭。不过没关系,RISC还在,IBM还可 以在高性能市场上呼风唤雨。
事实上,在上世纪80年代中末期,大量基于RISC的新指令集和产品的问世,让人们看到了精简指令集的威力。SGI的工作站基于MIPS,速度超 群;IBM的Power系列就不用说了,堪称巨型计算机的首选产品;还有DEC Alpha架构的处理器,都是RISC的代表之作。RISC在高性能计算机上展现出的强大魅力,让用户和业界为之神往。
在这种情况下,英特尔也坐不住了。俗话说,吃着碗里的,看着锅里的。英特尔碗里面吃着x86这块大肥肉,锅里的RISC虽然是小肥牛,但也的确不错。于 是,英特尔秘密开发了基于RISC的处理器80860,希望打入通用计算机市场。但问题是,谁用呢?PC已经是x86架构了,RISC连兼容的操作系统和 软件都没有,从头去建立生态系统和软件圈子,当时的英特尔很难成功。但英特尔决定多做一代试试看,于是不久之后又推出了新的80960处理器,依旧是 RISC架构,向下兼容80860,继续延续完全卖不动的“宿命”。于是英特尔想想干脆算了,直接做x86,一条道走到黑!
被拒绝的Acorn 乱世出英雄,在上世纪70年代末80年代初,RISC刚被提出、CISC被众人鄙视、PC刚刚起步的乱世年代,一家小公司的出现,改变了RISC和CISC在业界的态势。
就是在这间仓库中,ARM公司的几大股东在一起开会,对全球移动计算市场产生巨大震撼的ARM架构就此诞生。
这家公司始创于1978年12月5日,创始人是物理学家赫尔曼·豪泽(Hermann Hauser)和工程师Chris Curry。公司的名字也很有意思,叫做Cambridge Processing Unit,意为剑桥处理器公司,简写为CPU。
1979年,CPU公司改名了,叫做Acorn,主营业务从为市场提供电子设备,转向提供比较廉价的计算机设备。有多廉价呢?定价在500英镑以内。但是 公司很快发现,摩托罗拉的CPU太慢价格又贵(摩托罗拉很快在CPU市场上被英特尔打得找不到北,惨淡收场)。于是Acorn公司去找英特尔索要 80286的设计资料,打算自行搭建PC兼容机,但被英特尔无情拒绝了。
不知道英特尔会不会为这个决定而痛苦终身?被拒绝后的Acorn虽然火冒三丈,但志气滔天:不就是CPU吗!买不到还不能自己做吗?1985年,一款使用RISC指令集,名字叫做Acorn RISC Machion的CPU诞生了,它的简称就是ARM。
ARM的特点是性能功耗比非常优秀,比如苹果的首款掌上触屏个人电子设备Newton Message Pad就使用了ARM处理器,随后还生产了多个型号。可惜由于软件和硬件技术局限等问题,它没有获得太大成功。但这为ARM的发展奠定了基础。1990 年,Acorn公司干脆改名为ARM。苹果出资150万英镑入股,Acorn公司以价值150万英镑的知识产权和12个工程师入股。还有一个大股东是 VLSI,是一家芯片制造商。接下来由于市场不景气等原因,ARM决定开放授权,成为一家设计公司,将自己的设计和知识产权授权给其他厂商生产芯片。这成 为ARM辉煌的起点。
英特尔的逆袭和ARM的扩大 英特尔最终发达起来了,占据了全球PC市场的绝大部分份额,IBM再也无法撼动英特尔的地位。但CISC的性能始终是硬伤,英特尔肯定看到了这一点,如果 x86的性能一直无法赶上在顶端的RISC处理器,英特尔就没有办法把触手伸到最肥沃的服务器和超级计算机市场。从原理来说,x86架构基于CISC,本 身问题不少,效率和发展方向都成问题。不过英特尔并不担心,在潜心研究了RISC后,英特尔开始大胆在基于CISC的x86中引入RISC的设计思想,增 加了额外的一些“翻译层”。CPU外部依旧是x86,但是内部运行更为类似精简的RISC,于是CPU效能得到极大的提升。
Atom本来是英特尔进入超便携移动计算市场的利器,但是ARM成功阻击了它。
在Pentium品牌推出后,英特尔开始逐渐在x86中引入RISC的设计思想。借助PC市场上攫取的巨额利润,英特尔开始疯狂提升x86处理器的性能。 于是,在服务器和超级计算机市场上,英特尔的Xeon品牌开始逐渐发力,性能和当时的RISC处理器相比已不落下风甚至略有胜出。最终英特尔完成了逆袭的 过程,x86在服务器市场上大放光彩,甚至开始占据绝大部分市场份额,成就了CISC战胜RISC的神话。
不过在移动计算市场上,英特尔却无法复制这样的神话。高性能市场对功耗敏感度不高,性能是最重要的指标,英特尔可以凭借强大的研发能力来威胁对手,获取胜 利。但移动计算市场对功耗极为敏感, 英特尔几次试图进入都无法获得成功。ARM在这个领域遍地开花,从手机到平板电脑,ARM凭借自己超高的性能功耗比屡获成功。
目前,x86处理器占据了超过90%的个人电脑市场,以ARM为代表的RISC产品则同样占据了超过90%的移动计算市场。两强都想、都有希望进入对方的领地。究竟谁能胜利,我们拭目以待。
那些年的那些事CISC和RISC发展中的纠缠的更多相关文章
- [转] CISC与RISC
点击阅读原文 这里就不去管细节,简单来谈一下,ARM和X86之间为什么不太具有可比性的问题.要搞清楚这个问题首先要明白什么是架构,之前也有很多人提到了架构不同,但架构是什么意思?它是一个比较 ...
- 计算机指令集CISC与RISC
当接触一新CPU时商家会首先描述它是RISC指令集,这意味着什么,从这个描述你能了解多少CPU特性信息? 复杂指令集计算机(CISC) 长期来,计算机性能的提高往往是通过增加硬件的复杂性来获得.随着集 ...
- CISC和RISC的区别
转载于http://blog.sina.com.cn/s/blog_9d5430ce0100x5pb.html RISC(Reduced Instruction Set Computer)和CISC( ...
- 【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
那么我们进入本章的最后一节,CISC和RISC. 我们先来回顾一下,我们这一章的一个概览.我们之前已经把指令格式和指令的寻址方式都讲完了,这两部分呢是本章的一个重点.而本章的这一部分,CISC和RIS ...
- CISC和RISC是什么?它们的特点和区别?
CISC的英文全称为“Complex Instruction Set Computer”,即“复杂指令系统计算机”,从计算机诞生以来,人们一直沿用CISC指令集方式.早期的桌面软件是按CISC设计的, ...
- 【转】Netty那点事(三)Channel中的Pipeline
[原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch3-pipeline.md Channel是理解和使用Nett ...
- 【转】Netty那点事(二)Netty中的buffer
[原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch2-buffer.md 上一篇文章我们概要介绍了Netty的原 ...
- Vertica的这些事(六)——-vertica中group-by-和join-语句的优化
vertica group by优化语句,先对语句进行explain 操作查看预执行计划,其中group by 分为 GROUPBY PIPELINED 和 GROUPBY HASH,通过执行计划可以 ...
- Vertica的这些事(三)——Vertica中实现Oracle中的ws_concat功能
vertica中没有类似Oracle中的ws_concat函数功能,需要开发UDF,自己对C++不熟悉,所有只有想其他方法解决了. 上代码: SELECT node_state, MAX(DECODE ...
随机推荐
- 方案:抵御 不明SSL证书导致的 中间人攻击
基于SSL数字证书的中间人攻击已经不是一个新技术了,但是我发现很多人并不清楚这种威胁,甚至感觉无所谓,我相信他们是由于短暂的无知蒙蔽了双眼,希望这篇文章可以让更多的人知道这种攻击方式,并清除这种网络威 ...
- 【HDU 4738 Caocao's Bridges】BCC 找桥
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:给定一个n个节点m条边的无向图(可能不连通.有重边),每条边有一个权值.判断其连通性,若双 ...
- 《Algorithms 4th Edition》读书笔记——3.1 符号表(Elementary Symbol Tables)-Ⅲ
3.1.3 用例举例 在学习它的实现之前我们还是应该先看看如何使用它.相应的我们这里考察两个用例:一个用来跟踪算法在小规模输入下的行为测试用例和一个来寻找更高效的实现的性能测试用例. 3.1.3.1 ...
- Unity3D 灰度shader(改编自NGUI)
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:[] 本文链接地址: 灰度shader 废话不多说,直接图解流程: 1.原图 2.改动shader 打开NGUI自带的shader ...
- extjs tree check 级联选择
extjs4 tree check 级联选择 实现效果: 关键代码: function changeAllNode(node, isCheck) { allChild(node, isCheck); ...
- Cocos2d-x 3.0rc0版本号项目的创建和部署
<1>执行setup.py 依照提示.加入你须要加入的环境变量 <2>创建项目批处理文件Create-Cocos2d-x 3.0-Project.bat 内容例如以下: @ec ...
- Android应用程序注册广播接收器(registerReceiver)的过程分析
前 面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/发布机制,因此,使用这种消息驱动模型的第一步便是订阅消息:而对 Android应用程序来说,订阅消息其实就是注册广播接收器, ...
- ZOJ 3329 One Person Game 带环的概率DP
每次都和e[0]有关系 通过方程消去环 dp[i] = sigma(dp[i+k]*p)+dp[0]*p+1 dp[i] = a[i]*dp[0]+b[i] dp[i] = sigma(p*(a[i+ ...
- [HeadFirst-HTMLCSS学习笔记][第十三章表格]
表格 -table 块 tr 行 table row th 表头 table head td 表数据 table data; caption 表格标题 <table> <captio ...
- C# WebForm 使用NPOI 2 生成简单的word文档(.docx)
使用NPOI可以方便的实现服务端对Word.Excel的读写.要实现对Word的读写操作,需要引用NPOI.OOXML.dll,应用命名空间XWPF. 本文使用NPOI 2.0实现对Word的基本生成 ...