从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的低功耗设计很好地支持了便携设备,而且它的架构和指令集授权策略得到了移动设备厂商的支持。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.环境部署

1.虚拟机安装redhat8系统 这个其实很简单,但是有一点小细节需要注意。 因为我的电脑是 16核心的,所以选择内核16,可以最大发挥虚拟机的性能 磁盘选择SATA,便于后期学习 将一些没用的设备移除 选择安装redhat 8 时间选择上海 选择…

无法解析的外部符号ShellExecuteExW

问题情况 在QT使用:ShellExecuteEx时遇上这么一个错误:遇上这么一个错误: error: LNK2019: 无法解析的外部符号 __imp_ShellExecuteExW *ReportService.obj👎 error: LNK2019: 无法解析的外部符号 __imp_ShellExecuteExW&#x…

RocketMQ源码阅读-Producer消息发送

RocketMQ源码阅读-Producer消息发送 1. 从单元测试入手2. 启动过程3. 同步消息发送过程4. 异步消息发送过程5. 小结 Producer是消息的生产者。 Producer和Consummer对Rocket来说都是Client,Server是Broker。 客户端在源码中是一个单独的Model,目录为rock…

ASP.NET Core 的 Web Api 实现限流 中间件

Microsoft.AspNetCore.RateLimiting 中间件提供速率限制(限流)中间件。 它是.NET 7 以上版本才支持的中间件,刚看了一下,确实挺好用,下面给大家简单介绍一下: RateLimiterOptionsExtensions 类提供下列用…

收支明细曲线图:一图掌握你的财务变化趋势!

想要快速了解你的收支明细和变化趋势吗?不需要复杂的财务表格,一个曲线图就能让你一目了然!现在,就让我们带你走进「图形化分析收支变化趋势」的世界,让你轻松掌握自己的财务状况。 首先,第一步&#xff0…

超结MOS在舞台灯电源上的应用-REASUNOS瑞森半导体

一、前言 舞台灯电源是一种为舞台灯具提供电力转换和控制的设备,它可以根据不同的灯具类型和需求,提供恒流或恒压、可调光或不可调光、模拟或数字或网络等输出模式。 舞台灯电源的主要特点是具有高效、稳定、安全、智能等功能,它可以适应不…

一台电脑如何通过另一台联网电脑访问网络

电脑A没有连接网络,电脑B已经连接wifi。 电脑A如何通过访问电脑B从而连接网络? 1. 将这2台电脑用网线直连 2. 电脑B打开【网络和Internet设置】 3. 右键点击WLAN,选择属性,进入共享tab页面,勾选【允许其他网络用户通过…

Kafka集群与可靠性

Kafka集群与可靠性 1.Kafka集群搭建实战 使用两台Linux服务器:一台192.168.182.137 一台192.168.182.138 安装kafka首先,我们需要配置java环境变量(这里就略过了) mkdir /opt/kafka #上传压缩包kafka_2.13-3.3.1.tgz并解压 ta…

Rust-Panic

什么是panic 在Rust中,有一类错误叫作panic。示例如下: 编译,没有错误,执行这段程序,输出为: 这种情况就引发了一个panic。在这段代码中,我们调用了Option::unwrap()方法,正是这个方…

SparkSQL初体验

SparkSQL初体验 命令式的 API RDD 版本的 WordCount val conf new SparkConf().setAppName("ip_ana").setMaster("local[6]") val sc new SparkContext(conf)sc.textFile("hdfs://master:9000/dataset/wordcount.txt").flatMap(_.split("…

设计一个抽奖系统

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

在uniapp Vue3版本中如何解决web/H5网页浏览器跨域的问题

问题复现 uniapp项目在浏览器运行,有可能调用某些接口会出现跨域问题,报错如下图所示: 什么是跨域? 存在跨域问题的原因是因为浏览器的同源策略,也就是说前端无法直接发起跨域请求。同源策略是一个基础的安全策略&a…

前端下载文件流,设置返回值类型responseType:‘blob‘无效的问题

前言: 本是一个非常简单的请求,即是下载文件。通常的做法如下: 1.前端通过Vue Axios向后端请求,同时在请求中设置响应体为Blob格式。 2.后端相应前端的请求,同时返回Blob格式的文件给到前端(如果没有步骤…

shell脚本 $0-$n $* $@ $# $? $$

各命令详解 1.$0-$n :表示脚本或函数的参数。$0 是脚本的名称,$1 到 $n 是位置参数,每个对应一个传递给脚本或函数的参数。 2.$* :表示所有传递给脚本或函数的参数。它将所有位置参数作为单个字符串显示。 3.$ :表示所…

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤)

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤) 目录 时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现GRNN广义回归神经网络时间序列…

大语言模型面试问题【持续更新中】

自己在看面经中遇到的一些面试题,结合自己和理解进行了一下整理。 transformer中求和与归一化中“求和”是什么意思? 求和的意思就是残差层求和,原本的等式为y H(x)转化为y x H(x),这样做的目的是防止网络层数的加深而造成的梯…

Angular系列教程之观察者模式和RxJS

文章目录 引言RxJS简介RxJS中的设计模式观察者模式迭代器模式 示例代码RxJS 在 Angular 中的应用总结 引言 在Angular开发中,我们经常需要处理异步操作,例如从后端获取数据或与用户的交互。为了更好地管理这些异步操作,Angular中引入了RxJS&…

el-table嵌套两层el-dropdown-menu导致样式错乱

问题&#xff1a; 解决方式&#xff1a; <el-table-column label"操作" fixed"right" width"132" align"center"><template slot-scope"scope"><div v-if"scope.row._index ! 合计"><el-d…

【PWN · GOT表劫持 | 整数溢出】[HGAME 2023 week1]choose_the_seat

整数溢出&#xff0c;加之保护开的不全&#xff0c;可以反复越界修改got表&#xff0c;劫持puts函数实现利用 一、题目概述 限制&#xff1a;v0不可以大于9 理想中数组所在bss端地址&#xff1a; 注意到与got表项距离很近 危险函数只能执行一遍&#xff0c;然后回exit(0) 二…

Next.js 开发指​南(GitHub 115k star​)

Next.js 是一个构建于 Node.js 之上的开源 Web 开发框架&#xff0c;它扩展了最新的 React 特性&#xff0c;集成了基于 Rust 的 JavaScript 工具&#xff0c;可以帮助你快速创建全栈 Web 应用 &#xff08;full-stack Web applications&#xff09; 。 对于有一定 React 基础…