深入浅出计算机组成原理学习笔记:CISC和RISC-为什么手机芯片都是ARM?(第29讲)…

一、引子

我在第5讲讲计算机指令的时候,给你看过MIPS体系结构计算机的机器指令格式。MIPS的指令都是固定的32位长度,如果要用一个打孔卡来表示,并不复杂。

深入浅出计算机组成原理学习笔记:CISC和RISC-为什么手机芯片都是ARM?(第29讲)...

而CPU的指令集里的机器码是固定长度还是可变长度,也就是 复杂指令集(Complex Instruction SetComputing,简称CISC)和 精简指令集(Reduced Instruction Set Computing,简称RISC)这两种风格的指令集一个最重要的差别。那今天我们就来看复杂指令集和精简指令集之间的对比、差异以及历史纠葛。

二、CISC VS RISC:历史的车轮不总是向前的

1、人月神话

在计算机历史的早期,其实没有什么CISC和RISC之分。或者说,所有的CPU其实都是CISC。

虽然冯·诺依曼高屋建瓴地提出了存储程序型计算机的基础架构,但是实际的计算机设计和制造还是严格受硬件层面的限制。当时的计算机很慢,存储空间也很小。
《人月神话》这本软件工程界的名著,讲的是花了好几年设计IBM 360这台计算机的经验。IBM 360的最低配置,每秒只能运行34500条指令,只有8K的内
存。为了让计算机能够做尽量多的工作,每一个字节乃至每一个比特都特别重要。

所以,CPU指令集的设计,需要仔细考虑硬件限制。为了性能考虑,很多功能都直接通过硬件电路来完成。为了少用内存,指令的长度也是可变的。
就像算法和数据结构里的赫夫曼编码(Huffman coding)一样,常用的指令要短一些,不常用的指令可以长一些。那个时候的计算机,想要用尽可能少的内存空间,
存储尽量多的指令。

2、80%的时间都是在使用20%的简单指令

不过,历史的车轮滚滚向前,计算机的性能越来越好,存储的空间也越来越大了。到了70年代末,RISC开始登上了历史的舞台。当时,UC Berkeley的大卫·帕特森(David Patterson)教授发现,
实际在CPU运行的程序里,80%的时间都是在使用20%的简单指令。于是,他就提出了RISC的理念。自此之后,RISC类型的CPU开始快速蓬勃发展。

我经常推荐的课后阅读材料,有不少是来自《计算机组成与设计:硬件/软件接口》和《计算机体系结构:量化研究方法》这两本教科书。此外,他还在2017年获得了图灵奖。

深入浅出计算机组成原理学习笔记:CISC和RISC-为什么手机芯片都是ARM?(第29讲)...

 

在微指令架构的CPU里面,编译器编译出来的机器码和汇编代码并没有发生什么变化。但在指令译码的阶段,指令译码器“翻译”出来的,不再是某一条CPU指令。
译码器会把一条机器码,“ 翻译”成好几条“微指令”。这里的一条条微指令,就不再是CISC风格的了,而是变成了固定长度的RISC风格的了。

5、指令译码器变成了设计模式里的一个“适配器”

这些RISC风格的微指令,会被放到一个微指令缓冲区里面,然后再从缓冲区里面,分发给到后面的超标量,并且是乱序执行的流水线架构里面。
不过这个流水线架构里面接受的,就不是复杂的指令,而是精简的指令了。在这个架构里,我们的指令译码器相当于变成了设计模式里的一个
“适配器”(Adaptor)。这个适配器,填平了CISC和RISC之间的指令差异。

6、CISC的指令译码成RISC指令的指令译码器存在的问题

不过,凡事有好处就有坏处。这样一个能够把CISC的指令译码成RISC指令的指令译码器,比原来的指令译码器要复杂。这也就意味着更复杂的电路和更长的译码时间:
本来以为可以通过RISC提升的性能,结果又有一部分浪费在了指令译码上。针对这个问题,我们有没有更好的办法呢/p>

7、为什么大家任务认为RISC优于CISC

我在前面说过,之所以大家认为RISC优于CISC,来自于一个数字统计,那就是在实际的程序运行过程中,有80%运行的代码用着20%的常用指令。这意味着,
CPU里执行的代码有很强的局部性。而对于有着很强局部性的问题,常见的一个解决方案就是使用缓存。所以,Intel就在CPU里面加了一层L0 Cache。
这个Cache保存的就是指令译码器把CISC的指令“翻译”成RISC的微指令的结果。于是,在大部分情况下,CPU都可以从Cache里面拿到译码结果,而不需要让译码器
去进行实际的译码操作。这样不仅优化了性能,因为译码器的晶体管开关动作变少了,还减少了功耗。

因为“微指令”架构的存在,从Pentium Pro开始,Intel处理器已经不是一个纯粹的CISC处理器了。它同样融合了大量RISC类型的处理器设计。不过,由于Intel本身在CPU层面做的大量优化,
比如乱序执行、分支预测等相关工作,x86的CPU始终在功耗上还是要远远超过RISC架构的ARM,所以最终在智能手机崛起替代PC的时代,落在了ARM后面。

四、ARM和RISC-V:CPU的现在与未来

2017年,ARM公司的CEO Simon Segards宣布,ARM累积销售的芯片数量超过了1000亿。作为一个从12个人起步,在80年代想要获取Intel的80286架构授权来制造CPU的公司,ARM是如何在移动端把自己的芯片塑造成了最终的霸主呢/p>

1、ARM的芯片是基于RISC架构

ARM这个名字现在的含义,是“Advanced RISC Machines”。你从名字就能够看出来,ARM的芯片是基于RISC架构的。不过,ARM能够在移动端战胜Intel,
并不是因为RISC架构。

到了21世纪的今天,CISC和RISC架构的分界已经没有那么明显了。Intel和AMD的CPU也都是采用译码成RISC风格的微指令来运行。ARM的芯片,
而一条指令同样需要多个时钟周期,有乱序执行和多发射。我甚至看到过这样的评价,“ARM和RISC的关系,只有在名字上”。

2、为什么ARM能够在移动端战胜Intel

第一点是功耗优先的设计

一个4核的Intel i7的CPU,设计的时候功率就是130W。而一块ARM A8的单个核心的CPU,设计功率只有2W。两者之间差出了100倍。
在移动设备上,功耗是一个远比性能更重要的指标,毕竟我们不能随时在身上带个发电机。ARM的CPU,主频更低,晶体管更少,高速缓存更小,
乱序执行的能力更弱。所有这些,都是为了功耗所做的妥协。

第二点则是低价

ARM并没有自己垄断CPU的生产和制造,只是进行CPU设计,然后把对应的知识产权授权出去,让其他的厂商来生产ARM架构的CPU。
它甚至还允许这些厂商可以基于ARM的架构和指令集,设计属于自己的CPU。像苹果、三星、华为,它们都是拿到了基于ARM体系架构设计和制造CPU的授权。ARM自己
只是收取对应的专利授权费用。多个厂商之间的竞争,使得ARM的芯片在市场上价格很便宜。所以,尽管ARM的芯片的出货量远大于Intel,但是收入和利润却比不上Intel。

3、ARM并不是开源的

不过,ARM并不是开源的。所以,在ARM架构逐渐垄断移动端芯片市场的时候,“开源硬件”也慢慢发展起来了。

1、一方面,MIPS在2019年宣布开源

2、另一方面,从UC Berkeley发起的RISC-V项目也越来越受到大家的关注。而RISC概念的发明人,图灵奖的得主大卫·帕特森教授从伯克利退休之后,
成了RISC-V国际开源实验室的负责人,开始推动RISC-V这个“CPU届的Linux”的开发。可以想见,未来的开源CPU,也多半会像Linux一样,
逐渐成为一个业界的主流选择。如果想要“打造一个属于自己CPU”,不可不关注这个项目

五、总结延伸

这一讲,我从RISC和CISC架构之前的差异说起,讲到RISC的指令是固定长度的,CISC的指令是可变长度的。RISC的指令集里的指令数少,
而且单个指令只完成简单的功能,所以被称为“精简”。CISC里的指令数多,为了节约内存,直接在硬件层面能够完成复杂的功能,所以被称为“复杂”。
RISC的通过减少CPI来提升性能,而CISC通过减少需要的指令数来提升性能。

然后,我们进一步介绍了Intel的x86 CPU的“微指令”的设计思路。“微指令”使得我们在机器码层面保留了CISC风格的x86架构的指令集。
但是,通过指令译码器和L0缓存的组合,使得这些指令可以快速翻译成RISC风格的微指令,使得实际执行指令的流水线可以用RISC的架构来搭建。
使用“微指令”设计思路的CPU,不能再称之为CISC了,而更像一个RISC和CISC融合的产物。

过去十年里,Intel仍然把持着PC和服务器市场,但是更多的市场上的CPU芯片来自基于ARM架构的智能手机了。而在ARM似乎已经垄断了移动CPU市场的时候,
开源的RISC-V出现了,也给了计算机工程师们新的设计属于自己的CPU的机会。

转载于:https://www.cnblogs.com/luoahong/p/11390047.html

相关资源:GLONASS卫星位置计算与程序实现_葛奎_glonass_卫星位置__matlab…

来源:weixin_30235225

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月18日
下一篇 2019年7月18日

相关推荐