当前位置: 首页 > news >正文

从CISC到RISC-V:揭开指令集的面纱

对于大多数同学来说,计算机或智能手机的运行似乎就像魔法一样神奇。你可能知道它们内部都是一些复杂的电子组件,比如CPU、内存等等,但这些组件是如何协同工作,让我们可以在电脑上打字,或者在手机上看视频呢?实际上,这一切都归功于一种名为“指令集”的神秘语言。今天,我们就一起揭开这种神秘语言的面纱,感受一下它的魅力所在。

指令集是计算机硬件和软件之间交互的桥梁,它定义了计算机硬件可以执行的操作,比如各种逻辑判断、数学运算。常见的指令集包括CISC、RISC、RISC-V等,它们其实是计算机CPU的各种设计思路。今天,我就来向大家详细解释一下这些概念。

CISC

首先,我们来聊聊CISC(复杂指令集计算机),也就是复杂指令集计算机。如果我们把计算机比作一个工厂,那么CISC就是那种拥有各种复杂机器设备的大工厂,每一台设备都能完成特定的复杂工作。x86系列的处理器一般都归属到CISC的范畴。

CISC指令集的设计初衷是为了最大限度地提高硬件的性能。为了提高性能,很多功能都是通过硬件电路来完成,也就是通过硬件实现各类指令。

CISC指令集的特点是指令长短不一:因为那时的内存很小,我们需要最大限度的保存更多的指令,所以指令的长度是可变的:常用指令短,不常用和复杂指令长一些。这就好比我们的大工厂里有各种大小不同的机器设备。

然而,随着技术的发展,CISC开始面临一些挑战和问题:

  • 效率问题:CISC的指令集复杂,有些指令可能很少被使用,但是考虑到向前兼容性,厂商还是需要花费资源去实现和维护这些指令,这不仅浪费了宝贵的硅片空间,也使得处理器的设计更加复杂,降低CPU的性能和效率。这就好比我们大工厂里各种大小不同的机器设备需要各类不同的人才去维护、去协调生产计划。
  • 热量问题:因为CISC的指令集复杂,处理器需要更多的硬件资源去执行这些指令,这会增加处理器的能耗;产生大量的热量,也需要更好的散热设备来保证处理器的稳定运行。
  • 编译器优化问题:因为CISC的指令集复杂,编译器需要花费更多的时间和资源去优化代码,以提高程序的运行效率。
  • 可扩展性问题:随着技术的发展,新的功能需求可能需要添加新的指令,但是对于已经很大的CISC指令集来说,添加新的指令会更加复杂。

因此,许多现代处理器开始转向RISC(Reduced Instruction Set Computer,精简指令集计算机)设计,以提高效率、降低能耗,并提供更好的可扩展性。

RISC

然后,我们来看看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-V。它是开源的RISC,可以说是CPU界的Linux。因为它是开源的,所以任何人都可以自由地使用和修改它,这也让它在全球范围内得到了广泛的应用,当然也可以用来解决我国芯片技术被卡脖子的问题,有望在未来成为主流的处理器架构。

RISC-V的技术特点主要包括以下几点:

  • 开放和自由:RISC-V是开源的,任何人都可以自由地使用和修改,这极大地降低了开发成本。
  • 简单和高效:RISC-V采用了RISC的设计理念,指令集简单、精简,易于实现,能有效提高处理器的性能和效率。
  • 可扩展性:RISC-V具有很好的可扩展性,开发者可以根据需要,自由地添加自定义指令,以满足特定的应用需求。

RISC-V正在全球范围内得到越来越广泛的应用。许多知名的科技公司,如Google、阿里巴巴、华为、中科院计算所等,都在积极推进RISC-V的发展。比如:

  • 阿里巴巴旗下的平头哥半导体已经推出了多款基于RISC-V架构的芯片,包括玄铁系列处理器,这些芯片在物联网、人工智能等领域有着广泛的应用。
  • 中科院计算所在2023年6月发布了第二代开源高性能RISC-V处理器“香山”,性能超过ARM Cortex-A76,采用中芯国际 14nm 工艺制造,目标频率是 2GHz,SPECCPU 分值达到 10 分 / GHz,支持双通道 DDR 内存以及 PCIe、USB、HDMI 等更多功能,为国内的芯片产业提供了新的选择和发展方向。

此外,许多开源硬件项目,如Arduino、Raspberry Pi等,也在考虑采用RISC-V。

龙芯

除了以上三大指令集,我们必须还得谈一下国产的龙芯,目前很多信创的项目也都在使用龙芯处理器。

龙芯是我国自主研发的通用处理器的品牌,最初也是由中科院计算所设计。早期的龙芯处理器使用的是MIPS指令集(一种精简指令集),但由于版权问题,后来的龙芯处理器使用的都是自主设计的指令集,称为龙芯指令集。

龙芯处理器不依赖于任何外部技术,保证了其安全性和自主性。其采用自主LoongISA指令系统,兼容MIPS指令,通过超标量技术实现高性能,可以同时执行多条指令,大大提升处理器的运行速度。

2010年,龙芯中科技术有限公司成立,开始市场化运作,旨在将龙芯处理器的研发成果产业化。就现状而言,龙芯处理器已经在多个领域得到应用,其出货量不断增加,但生态可能是其发展的制约因素。

尽管如此,龙芯处理器仍在不断优化和升级,提高性能和兼容性。龙芯对常见的开发平台和语言都提供了良好的支持。具体来说,龙芯支持Linux操作系统,可以在该平台上进行软件开发和调试。同时,龙芯还支持多种编程语言,如C、C++、Java、.NET、Go等,这些语言都可以在龙芯平台上进行编程和开发。此外,龙芯还提供了丰富的开发工具和库,如GCC编译器、GDB调试器等,以方便开发者进行软件开发和调试。


通过了解这些指令集的特点和历史,我们可以得到一些启示,这或许对我们的芯片发展有所借鉴意义。

  • 首先是生态,CISC并没有在RISC出现后消亡,反而仍旧繁荣。这是因为x86架构出货很多,受到各种系统和应用软件的支持,也就是说生态做得好。
  • 其次是创新,ARM抢占了移动端市场,这是因为手机的出现带来了对原有架构的挑战和新的机会。ARM的低功耗设计很好地支持了便携设备,而且它的架构和指令集授权策略得到了移动设备厂商的支持。

总的来说,各种指令集都有它们各自的优点和特性,它们的出现也都是为了更好地服务于人类的计算需求。了解这些指令集的原理和特性,对于我们理解计算机的运行机制也特别有意义。

相关文章:

  • 使用 PyQt 实现简单数据绑定和组件化
  • 文献阅读:Large Language Models as Optimizers
  • ZZULIOJ 1112: 进制转换(函数专题)
  • 【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)
  • 解决方案类常用网址
  • linux如何创建文件教程分享
  • Ubuntu 22.04 Cron使用
  • 数据结构之Radix和Trie
  • 强化学习应用(四):基于Q-learning的物流配送路径规划研究(提供Python代码)
  • 【JavaWeb后端开发-第五章(1)】Mybatis入门基础
  • 常用Java代码-Java中的Optional类和null安全编程
  • VL53L4CD TOF开发(1)----驱动TOF进行测距
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • React16源码: React中的expirationTime过期时间的计算源码实现
  • 机器人制作开源方案 | 乒乓球自动拾取机器人
  • Android开源项目规范总结
  • Electron入门介绍
  • gulp 教程
  • IOS评论框不贴底(ios12新bug)
  • JavaScript 基础知识 - 入门篇(一)
  • Redis在Web项目中的应用与实践
  • supervisor 永不挂掉的进程 安装以及使用
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于 Cirru Editor 存储格式
  • 技术:超级实用的电脑小技巧
  • 力扣(LeetCode)22
  • 王永庆:技术创新改变教育未来
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ionic异常记录
  • raise 与 raise ... from 的区别
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​flutter 代码混淆
  • #单片机(TB6600驱动42步进电机)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C++)八皇后问题
  • (NSDate) 时间 (time )比较
  • (阿里云万网)-域名注册购买实名流程
  • (分享)自己整理的一些简单awk实用语句
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十五)使用Nexus创建Maven私服
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转载)Linux网络编程入门
  • *上位机的定义
  • .form文件_SSM框架文件上传篇
  • .net mvc部分视图
  • .NET6 命令行启动及发布单个Exe文件
  • .NET开发不可不知、不可不用的辅助类(一)
  • .Net转前端开发-启航篇,如何定制博客园主题