RISC的前世今生

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




[编者注:原文可参阅:http://blog.sina.com.cn/s/blog_685fc2ec0101h1ws.html ]

【注:本文缩减版已发表在电脑报2013年第44期 A.新闻周刊,这个版本是写给实验室内部刊物《国重快讯》的加长版,写作过程中得到中科院计算所包云岗老师的大力指点,在此表示感谢。】

导语:RISC与CISC两大体系结构设计哲学的争斗已经成为大家耳熟能详的历史,但是RISC的由来,在学术界和工业界以外却很少见到有人提及。本文基于伯克利RISC项目领导者之一David Patterson的口述自传以及ACM数据库的公开文献整理,向大家介绍RISC从发明到广为流传的那段故事。

 

三十年前的论战

 

“我们认为,基于RISC理念设计的处理器只有在极少数情况下慢于CISC处理器……过多的指令使得CISC处理器的控制逻辑复杂……研发成本上升……编译器也不知道该如何利用这么复杂的指令集……CISC的设计思路应当反思。” —— RISC的早期倡导者之一,David Patterson

 

“RISC与CISC的区别缺乏明确定义,而且RISC缺乏有力实验证明其宣称的优势,仅停留在纸面的设计是不够的,我们在VAX结构的设计中发现很多与RISC理念相反的地方……实验数据证明RISC的出发点有误……”—— CISC结构的设计者代表,Douglas W. Clark和William D. Strecker.
很难相信,观点如此背道而驰的两篇文章,竟然同时刊登在美国计算机学会旗下的同一期《计算机体系结构通讯》杂志上。但事实上,正是论战双方的私下联络以及杂志编辑的有意安排,使得这场1980年的论战得以见诸报端,于是留下了可供后人追溯的足够史料。双方都是杰出的结构设计者,这场争论可不是街边卖艺的龙套角色因为一言不合而大打出手的闹剧,CISC与RISC实际上代表着结构设计中的两大流派, 这场论战实际上是两大流派的旗手公开进行的华山论剑,渊源颇深。
在上世纪七十年代,内存容量和速度是性能的最大瓶颈,以至于程序的大小被作为执行速度的一个间接衡量指标,而指令格式不定长的指令集能够提供更高的代码密度,在同样的一块存储器空间里能装载更多指令,从而间接提高速度,加之当时的编译器无力进行寄存器分配,也无力配合微结构特征进行深层次的针对性优化,使得架构师们普遍偏爱内存-内存以及寄存器-内存风格的操作模式,连基于堆栈的指令集也一度流行。这些都是典型的复杂指令集(CISC)特征。

时势造英雄,在1980年前后,几乎所有的新处理器设计都在按照CISC的路线发展,惯性的车轮越滚越远,CISC不断加入新的指令,使用微码控制,试图在指令集架构层面对高层编程语言提供更直接的支持,这种发展路线使得硬件研发成本不断提高,研发周期变长,最终甚至殃及软件,连编译器都不知道该如何利用越来越复杂的指令集。CISC流派的不断前推,实质上是令体系结构在错误的发展方向上越陷越深。来自IBM研究院的John Cocke首先意识到,更加精简清爽的指令集设计将有助于减少硬件开发难度和成本,同时也有利于编译器进行代码优化工作,于是在他领导下的IBM 801项目第一次对RISC的概念进行了实践,这项起步于1975年的项目,直到80年代后才将成果公开发表,其中就包括改变了产业技术格局的graph coloring寄存器着色算法。稍落后于IBM研究院,来自加州大学伯克利分校,斯坦福大学的几位科学家也逐渐认清CISC的弱点,开始尝试反其道而行之,着手进行新的设计。那时刚刚博士毕业四年,在伯克利任教的年轻老师David Patterson就是其中一员,他决定在研究生课程中检验自己的想法,让学生们试着构建一个指令精简化的微处理器作为大作业。

 

RISC诞生与发展的缩影     David Patterson,已从当年不敢向伯克利申请职位的小老师,蜕变为计算机体系结构领域的宗师级人物

 

在微处理器流片成功之前,David就撰写了文章发表在《计算机体系结构通讯》上,描述自己构建处理器的新方法,认为这种精简设计将降低硬件设计成本,缩短开发周期,方便编译器进行代码生成,达到更高的性能,结果引起争论和质疑,于是有了这场载入体系结构发展史的论战。

反败为胜

 

ACM数据库收录的影印文档中保留下的点点墨迹,似乎象征着这场论战中四溅的火星。当时站在David对立面的人,包括当时深受尊敬的VAX CISC结构设计者Douglas W. Clark和William D. Strecker,David在文章中大量转述VAX的工程经验,试图证明RISC的优势,但VAX结构设计者们的现身说法使得局面对David非常不利,他们以自己的第一手数据将David文章中宣称的RISC优势逐一驳倒,而David手中并没有自己的硬件实测数据,十分被动。更加雪上加霜的是,第一组学生们流片回来的处理器,并未能体现出具备说服力的速度优势,其主频尚不到当时部分商业级芯片的三分之一,于是进一步引发了嘲笑。

所幸第二组学生进行的设计较为成功,于是David和学生们的成果得以登陆1983年国际固态电子电路大会(ISSCC)进行展示,这个会议只接受流片成功的芯片设计投稿,因此门槛较高,同时也因为成果卓越,受到学术界和工业界的广泛关注,是集成电路领域的顶级学术会议。David在这里打了一个漂亮的翻身仗,尽管制造工艺是老旧的MOSIS,主频仍旧比VAX,摩托罗拉,Intel等竞争对手同期制造的处理器慢上几乎一半,晶体管数量也只有几分之一,但是更加清爽的新式设计在编译器等其他工具的辅助下竟然将来自工业界的竞争对手们尽数击败,完成了漂亮的反击。David领导的学生团队凭借这一全新理念进行的课程设计,仅有区区几十条指令,竟胜过指令数目多达几百条的商业级芯片,这一事实对于CISC流派的支持者们是极大的冲击,ISSCC大会现场所有的大牌人物都目睹了这一历史性时刻,业界哗然。RISC提倡简化指令集设计,固定指令长度,统一指令编码格式,加速常用指令,在当时来看与当时占据主流的CISC哲学颇有些背道而驰的意味,RISC和David Patterson早年受到质疑和攻击也就不难理解。但有了流片成功的芯片与硬件测试结果在手,加之1983年的ISSCC大会上聚集了几位与David Patterson观点相同的支持者,RISC流派已经开始占据上风。

 

RISC诞生与发展的缩影当时流行的VAX计算机

 

风靡业界

 

出于兼容性的考虑,David和学生们设计的芯片从未流入商业市场售卖,但是在David等人的推动和宣传下,RISC的设计理念随后如星火燎原般扩散,一大批公司开始采用这种理念设计新处理器,包括后来几近统一武林的Intel。而当初提倡RISC的先行者们也纷纷功成名就,John Cocke在1987年将计算机科学领域的最高奖项“图灵奖”收入囊中,而David Patterson在芯片设计与计算机体系结构领域也已经与“泰山北斗”划上等号。

 

RISC诞生与发展的缩影                                      ARM就是典型的RISC处理器

RISC的设计理念催生的一系列新结构中包含了许多我们耳熟能详的名字,包括学术上认为比较成功的DEC Alpha,后来写入经典教科书的MIPS,绕过指令级并行度障碍,追求线程级并行的SUN SPARC,以及现在统治嵌入式市场的ARM。这些雨后春笋般涌现的RISC处理器将CISC vs RISC的世纪之战推向更高潮,复杂指令集和精简指令级划分为两个阵营,争论不断。以x86为代表的复杂指令集,其指令编码格式混乱,导致编码器复杂,流水线设计较为困难,指令不定长也带来指令对齐方面的额外挑战。而RISC指令集的编码格式相对整洁,流水线设计容易,但是由于指令定长,导致一些比较大的常数\地址必须拆散才能加载,代码密度不够高,某些情况下会浪费指令缓存的容量和带宽,因此两种指令集都不是不败金身,本质上都属于双刃剑。在计算机体系结构还未发展成熟的时候,内存与编译器的缺憾给CISC留下了立足之地,但随着编译技术的进步以及存储体系的进化,程序大小所带来的间接优势越来越不明显,而RISC指令集上能够简化流水线设计,这项优点对架构师们反倒越来越具有吸引力,以至于连Intel都举棋不定,只得两条腿走路。Intel在继续更新CISC产品线的同时,也推出了i860系列RISC处理器,安迪•格鲁夫当时表示,CISC处理器是Intel一直在做的产品线,兼容所有软件,而RISC处理器速度更快,但没有什么软件能在它上面运行。连Intel都不知道未来发展方向会是在RISC还是CISC,只好两头下注。在风头最劲的时候,RISC处理器一度在服务器市场占据统治地位。当时的争论与工业实践中提炼出的RISC优势,直到现在仍被许多人谈论,但是,历史的进步无情地碾碎了这一切。

 

融为一炉

强大的Intel进入90年代后开始逐渐发力,追赶性能领先的RISC阵营,在90年代中期的P6结构里,Intel引入了乱序多发射技术,从微结构的角度上看,这标志着 Intel已经在CISC阵营中拔得头筹,但与当时RISC阵营中的旗舰之一MIPS R10000相比仍有不足,与另一龙头DEC Alpha更无法相提并论。值得一提的是,P6第一次实现了CISC指令集在解码阶段上向RISC类指令的转化,将后端流水线转换成类RISC的形式,弥补了CISC流水线实现上的劣势。许多人认为这是Intel在向RISC指令集学习,是在事实上宣布了RISC的胜利,可是ARM也于同期引入了代码密度更高的Thumb新指令集,力图提高指令缓存等劣势项目上的效率,这表明RISC也在向CISC取经,双方都在相互取长补短。而RISC风格的设计的确能输出速度优势,这在一部分人心目中催生了错误的RISC优越论。实质上随着体系结构和微电子技术的进步,CISC在结构上的所谓劣势逐渐缩小,乃至消失, 而RISC阵营却在Intel的猛攻下节节败退,时至今日,Intel的服务器CPU占据了95%的市场份额,RISC的优越论也逐渐偃旗息鼓,大家开始转而关注微结构与物理设计实现,并发掘操作系统、编译器与上层应用当中埋藏的可能性。
RISC诞生与发展的缩影

在P6这一微结构中,Intel第一次引入RISC风格的流水线

今年的国际高性能计算机体系结构大会上,来自美国威斯康辛大学的一个研究小组做了一个测量分析报告,根据他们披露的测试数据,CISC与RISC在指令集架构层面上的差异已经被弥合,在Cortex-A8以上级别的处理器中,由先进的微结构和物理设计、工艺实现带来的改进足以掩盖指令集架构层面的劣势。因此我们可以说,CISC vs RISC的世纪之战实际上没有胜负,双方的精华已经融为一炉。结果这个报告受到一些学者的批评,有意思的是,批评的原因并不是在于报告本身结论错误,而是因为这个报告所得出的结论,其实是大家早都已经认可的共识,没有必要再在大会上宣读!

如何评价一个结构设计理念是好是坏呢?笔者认为,应当是后人们看来理所当然的 —— “为什么不这样做呢?还好当初没有放弃这条路!”今天我们谈到RISC留下的遗产时,已经很难找到负面评价的理由,RISC不再是缺乏支持的异类,而是现代计算机体系结构的基本组成部分之一,没有人再对RISC存在的必要性提出怀疑,这大概就是对它最好的认可。

参考文献

[1] Douglas W. Clark and William D. Strecker. Comments on “The Case for the Reduced Instruction Set Computer,” by Patterson and Ditzel. ACM SIGARCH Computer Architecture News, 1980. 8(6), pp. 34-38.
[2] David A. Patterson and David R. Ditzel. The case for the reduced instruction set computer. ACM SIGARCH Computer Architecture News, 1980. 8(6), pp. 34-38.
[3] David A. Patterson and Carlo H. Sequin. RISC I: a reduced instruction set VLSI computer. 25 years of the international symposia on Computer architecture (selected papers), 1998, pp. 216-230.
[4] David A. Patterson. Reduced instruction set computers. Communications of the ACM – Special section on computer architecture, 1985. 28(1), pp. 8-21.
[5] John Mashey. Oral History of David Patterson. 2007
[6] Linley Gwennap. Intel’s P6 Uses Decoupled Superscalar Design. Microprocessor Report, 1995.
[7] Emily Blem, Jaikrishnan Menon, and Karthikeyan Sankaralingam. Power Struggles: Revisiting the RISC vs. CISC Debate on Contemporary ARM and x86 Architectures.19th IEEE International Symposium on High Performance Computer Architecture, 2013.

(3个打分, 平均:3.67 / 5)

雁过留声

“RISC的前世今生”有2个回复

  1. xyz 于 2014-01-28 11:08 下午

    要讲 RISC 的历史,也要听听 Yale Patt 是怎么评价的吧~ “Hype..~”

  2. ke 于 2014-02-12 9:32 上午

    佩服!