对于大多数同学来说,计算机或智能手机的运行似乎就像魔法一样神奇。你可能知道它们内部都是一些复杂的电子组件,比如CPU、内存等等,但这些组件是如何协同工作,让我们可以在电脑上打字,或者在手机上看视频呢?实际上,这一切都归功于一种名为“指令集”的神秘语言。今天,我们就一起揭开这种神秘语言的面纱,感受一下它的魅力所在。
指令集是计算机硬件和软件之间交互的桥梁,它定义了计算机硬件可以执行的操作,比如各种逻辑判断、数学运算。常见的指令集包括CISC、RISC、RISC-V等,它们其实是计算机CPU的各种设计思路。今天,我就来向大家详细解释一下这些概念。
首先,我们来聊聊CISC(复杂指令集计算机),也就是复杂指令集计算机。如果我们把计算机比作一个工厂,那么CISC就是那种拥有各种复杂机器设备的大工厂,每一台设备都能完成特定的复杂工作。x86系列的处理器一般都归属到CISC的范畴。
CISC指令集的设计初衷是为了最大限度地提高硬件的性能。为了提高性能,很多功能都是通过硬件电路来完成,也就是通过硬件实现各类指令。
CISC指令集的特点是指令长短不一:因为那时的内存很小,我们需要最大限度的保存更多的指令,所以指令的长度是可变的:常用指令短,不常用和复杂指令长一些。这就好比我们的大工厂里有各种大小不同的机器设备。
然而,随着技术的发展,CISC开始面临一些挑战和问题:
因此,许多现代处理器开始转向RISC(Reduced Instruction Set Computer,精简指令集计算机)设计,以提高效率、降低能耗,并提供更好的可扩展性。
然后,我们来看看RISC,也就是精简指令集计算机。在20世纪70年代末,RISC开始出现。
这是因为人们发现CPU大部分时间都在使用少数的简单指令。同时因为内存大了,软件层面可以更复杂些,硬件可以更简单些,从而可以从吞吐量上提升CPU性能。
RISC的指令简单、定长,通过编译器实现简单指令的组合,完成复杂功能。这就像是把大工厂变成了流水线生产,每个工人只做一件简单的事情,但是大家协作起来,整体的效率却很高。
现在移动端流行的 ARM(Advanced RISC Machines)就是RISC的一种,不过它也融合了部分长指令、乱序执行、多发射等技术,所以它并不是单纯的RISC。就像我们的流水线上,虽然大部分工人都在做简单的工作,但是也有一些工人在做复杂的工作,以保证整个生产线的高效运转。
目前除了ARM公司生产的芯片,苹果的M1芯片、华为的麒麟芯片、小米的澎湃芯片、飞腾桌面处理器等,使用的也都是ARM指令集,不过对于国产芯片来说,ARM最新版本V9的指令集架构授权可能是个问题。
随着时间的推移,Intel和AMD两大巨头在x86中也借鉴了RISC的优化思路,他们考虑到向前兼容性,推出了微指令架构。这种架构下,编译出的指令还是原来的指令,但是在指令译码后变为了RISC风格的定长短指令。为了降低指令译码器的译码时间,CPU将翻译出的微指令存放到L0缓存中。
最后,我们来说说RISC-V。它是开源的RISC,可以说是CPU界的Linux。因为它是开源的,所以任何人都可以自由地使用和修改它,这也让它在全球范围内得到了广泛的应用,当然也可以用来解决我国芯片技术被卡脖子的问题,有望在未来成为主流的处理器架构。
RISC-V的技术特点主要包括以下几点:
RISC-V正在全球范围内得到越来越广泛的应用。许多知名的科技公司,如Google、阿里巴巴、华为、中科院计算所等,都在积极推进RISC-V的发展。比如:
此外,许多开源硬件项目,如Arduino、Raspberry Pi等,也在考虑采用RISC-V。
除了以上三大指令集,我们必须还得谈一下国产的龙芯,目前很多信创的项目也都在使用龙芯处理器。
龙芯是我国自主研发的通用处理器的品牌,最初也是由中科院计算所设计。早期的龙芯处理器使用的是MIPS指令集(一种精简指令集),但由于版权问题,后来的龙芯处理器使用的都是自主设计的指令集,称为龙芯指令集。
龙芯处理器不依赖于任何外部技术,保证了其安全性和自主性。其采用自主LoongISA指令系统,兼容MIPS指令,通过超标量技术实现高性能,可以同时执行多条指令,大大提升处理器的运行速度。
2010年,龙芯中科技术有限公司成立,开始市场化运作,旨在将龙芯处理器的研发成果产业化。就现状而言,龙芯处理器已经在多个领域得到应用,其出货量不断增加,但生态可能是其发展的制约因素。
尽管如此,龙芯处理器仍在不断优化和升级,提高性能和兼容性。龙芯对常见的开发平台和语言都提供了良好的支持。具体来说,龙芯支持Linux操作系统,可以在该平台上进行软件开发和调试。同时,龙芯还支持多种编程语言,如C、C++、Java、.NET、Go等,这些语言都可以在龙芯平台上进行编程和开发。此外,龙芯还提供了丰富的开发工具和库,如GCC编译器、GDB调试器等,以方便开发者进行软件开发和调试。
通过了解这些指令集的特点和历史,我们可以得到一些启示,这或许对我们的芯片发展有所借鉴意义。
总的来说,各种指令集都有它们各自的优点和特性,它们的出现也都是为了更好地服务于人类的计算需求。了解这些指令集的原理和特性,对于我们理解计算机的运行机制也特别有意义。