终于有人把各个指令集之间的关系和发展讲清楚了

2024-03-06 07:08

本文主要是介绍终于有人把各个指令集之间的关系和发展讲清楚了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RISC-V

RISC-V(读作“RISC-FIVE”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。

RISC-V 的特点有:

1.完全开源

对指令集使用,RISC-V基金会不收取高额的授权费。开源采用宽松的BSD协议,企业完全自有免费使用,同时也容许企业添加自有指令集拓展而不必开放共享以实现差异化发展。

2.架构简单

RISC-V架构秉承简单的设计哲学。体现为:

在处理器领域,主流的架构为x86与ARM架构。x86与ARM架构的发展的过程也伴随了现代处理器架构技术的不断发展成熟,但作为商用的架构,为了能够保持架构的向后兼容性,其不得不保留许多过时的定义,导致其指令数目多,指令冗余严重,文档数量庞大,所以要在这些架构上开发新的操作系统或者直接开发应用门槛很高。而RISC-V架构则能完全抛弃包袱,借助计算机体系结构经过多年的发展已经成为比较成熟的技术的优势,从轻上路。RISC-V基础指令集则只有40多条,加上其他的模块化扩展指令总共几十条指令。 RISC-V的规范文档仅有145页,而“特权架构文档”的篇幅也仅为91页。

3.易于移植*nix

现代操作系统都做了特权级指令和用户级指令的分离,特权指令只能操作系统调用,而用户级指令才能在用户模式调用,保障操作系统的稳定。RISC-V提供了特权级指令和用户级指令,同时提供了详细的RISC-V特权级指令规范和RISC-V用户级指令规范的详细信息,使开发者能非常方便的移植linux和unix系统到RISC-V平台。

4.模块化设计

RISC-V架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用场景。用户能够灵活选择不同的模块组合,来实现自己定制化设备的需要,比如针对于小面积低功耗嵌入式场景,用户可以选择RV32IC组合的指令集,仅使用Machine Mode(计算机模式);而高性能应用操作系统场景则可以选择譬如RV32IMFDC的指令集,使用Machine Mode(计算机模式)与User Mode(用户模式)两种模式。

5.完整的工具链

对于设计CPU来说,工具链是软件开发人员和cpu交互的窗口,没有工具链,对软件开发人员开发软件要求很高,甚至软件开发者无法让cpu工作起来。在cpu设计中,工具链的开发是一个需要巨大工作的。如果用RISC-V来设计芯片,芯片设计公司不再担心工具链问题,只需专注于芯片设计,RISC-V社区已经提供了完整的工具链,并且RISC-V基金会持续维护该工具链。当前RISC-V的支持已经合并到主要的工具中,比如编译工具链gcc, 仿真工具qemu等。

6.开源实现

加入RISC-V阵营更多是因为商业因素

目前,伯克利研究团队已经完成了基于RISC-V指令集的顺序执行的64位处理器核心(代号为Rocket),并前后基于45nm与28nm工艺进行了12次流片。Rocket芯片主频1GHz,与ARM Cortex-A5相比,实测性能较之高10%,面积效率高49%,单位频率动态功耗仅为Cortex-A5的43%。在嵌入式领域,Rocket已经可以和ARM争市场了。目前全球上百家科技公司加入RISC-V阵营,更多的还是因为商业原因。虽然在很多报道中,都将ARM的成功归咎于开放,但实际上,ARM只是在商业模式上开放,在技术上是卡的很死的。

迄今为止,获得ARM32授权的公司一只手都能数的过来,ARM64授权虽然多一些,但授权费却异常昂贵,法国创业公司Greenwave表示,他们如果使用ARM架构,要花掉1500万美元的授权费。而且授权到期后,是否继续授权和授权费用都要重新谈判。

虽然对高通、苹果、华为这些大公司而言,上亿元人民币的授权费不算什么,但对创业公司来说,这是不可承受之重。

为了深入挖掘RISC-V,我们应该研究一些不同类型的指令集架构。

目前的指令集架构有哪些类型?

最常见的是通过它们的复杂性来描述和分类:

精简指令集(RISC)和复杂指令系统计算机(CISC)

这仅实现了经常使用的指令,不常见的操作则会以子程序实现。通过使用子程序,可以权衡性能,但它仅适用于最不常见的操作。

RISC使用加载或存储架构,这意味着它将指令划分为访问存储器的指令和执行算术逻辑单元(ALU)操作的指令。

RISC的英文全称是Reduced Instruction Set Computer,中文是精简指令集。特点是所有指令的格式都是一致的,所有指令的指令周期也是相同的,并且采用流水线技术。在中高档服务器中采用RISC指令的CPU主要有Compaq(康柏,即新惠普)公司的Alpha、HP公司的PA-RISC、IBM公司的PowerPC、MIPS公司的MIPS和SUN公司的Sparc。

在计算机指令系统的优化发展过程中,出现过两个截然不同的优化方向:CISC技术和RISC技术。CISC是指复杂指令系统计算机(Complex Instruction Set Computer);RISC是指精简指令系统计算机(Reduced Instruction Set Computer)。这里的计算机指令系统指的是计算机的最低层的计算机指令,也就是CPU能够直接识别的指令。随着计算机系统的复杂,要求计算机指令系统的构造能使计算机的整体性能更快更稳定。最初,人们采用的优化方法是通过设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的指令系统实现,以此来提高计算机的执行速度,这种计算机系统就被称为复杂指令系统计算机,即Complex Instruction Set Computer,简称CISC。另一种优化方法是在20世纪80年代才发展起来的,其基本思想是尽量简化计算机指令功能,只保留那些功能简单、能在一个节拍内执行完成的指令,而把较复杂的功能用一段子程序来实现,这种计算机系统就被称为精简指令系统计算机.即Reduced Instruction Set Computer,简称RISC。RISC技术的精华就是通过简化计算机指令功能,使指令的平均执行周期减少,从而提高计算机的工作主频,同时大量使用通用寄存器来提高子程序执行的速度。

RISC和CISC是设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同,因此,在很多方面差异很大,它们主要有:

1.指令系统:RISC设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效。对不常用的功能,常通过组合指令来完成。因此,在RISC计算机上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而CISC计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。

2.存储器操作:RISC对存储器操作有限制,使控制简单化;而CISC计算机的存储器操作指令多,操作直接。

3.程序:CISC汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计;而RISC汇编语言程序编程相对简单,科学计算及复杂操作的程序设计相对容易,效率较高。

4.中断:RISC计算机在一条指令执行的适当地方可以响应中断,但是相比CISC指令执行的时间短,所以中断响应及时;而CISC计算机是在一条指令执行结束后响应中断。

5.CPU:RISC CPU包含有较少的单元电路,因而面积小、功耗低;而CISCCPU包含有丰富的电路单元,因而功能强、面积大、功耗大。

6.设计周期:RISC微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术;CISC微处理器结构复杂,设计周期长。

7.用户使用:RISC微处理器结构简单,指令规整,性能容易把握,易学易用;CISC微处理器结构复杂,功能强大,实现特殊功能容易。

8.应用范围:由于CISC指令系统的确定与特定的应用领域有关,故CISC计算机更适合于专用机;而RISC计算机则更适合于通用机。

超长指令字(VLIW)和显式并行指令计算(EPIC)

VLIW是一种非常长的指令组合,它把许多条指令连在一起,增加了运算的速度。 超长指令字(VLIW)是指令级并行,超线程(Hyper-Threading)是线程级并行,而多内核则是芯片级并行。这三种方式都是提高并行计算性能的有效途径。其中,VLIW(超长指令字)体系结构是美国Multiflow和Cydrome公司于20世纪80年代设计的体系结构,EPIC体系结构就是从VLIW中衍生出来的。中国菜刀

上述方法通过要求硬件执行所有这些逻辑来使硬件复杂化。相比之下,VLIW将这种复杂性留给了程序。作为权衡,编译器变得更加复杂,同时硬件被简化并且仍然在计算上表现良好。

VLIW最常见于嵌入式媒体处理器和图形处理单元(GPU)中。但是,Nvidia和AMD已经转向RISC架构,以提高非图形工作负载的性能。

为了开拓64位处理器的高端应用市场,1994年6月Intel和HP公司签署合作协议,共同开发以服务器和T作站为主要应用目标的全新64位架构高性能微处理器。1997年11月,Intel和HP公司发布基于EPIC(Explicitly Parallel Instruction Computing,显式并行指令计算)的Itanium系统结构。

超标量和VLIW是开发指令级并行的两种极端结构,前者完全依赖流水线硬件动态识别出可并行的指令,并将它们分发给相应的功能单元执行,后者则将指令级并行的开发工作全部交给编译器完成,在编译时静态确定每条指令的流出时刻和执行延迟,仅依赖简单的流水线硬件确保在指令实际执行延迟与编译器假定的延迟不一致时(如访问Cache不命中就会增加访存操作的延迟),程序的执行结果依然正确。在这两种结构中,单一的指令级并行开发机制使得它们都存在着严重的固有缺陷:超标量结构硬件复杂度太高,学术界和工业界一致认为,同时流出并执行8条指令将达到这种结构的极限;VLIW则面临着严重的代码兼容问题,而且目前VLIW编译器的智能程度远远无法满足人们的要求。显式并行指令计算(Explicitly Parallel Instruction Computing,EPIC)技术正是为了解决这两种结构的本质缺陷而提出的,它是在VLIW的基础上融合了超标量结构的一些优点而设计得到的,以期用有限的硬件开销为代价开发出更多的指令级并行。天空彩

最小指令集(MISC)

MISC比RISC更小,它包括非常少量的基本操作和相应的操作码。如果它们是基于堆栈而不是基于寄存器,则这些被归类为MISC,但是也可以由指令的数量(少于32条但大于1条)来定义。

单一指令集(OISC)

这描述了一个只使用一条指令的抽象计算机,它消除了对计算机语言操作码的需求。例如,“mov”是图灵完成,这意味着它能够成为一个OISC,以及其他使用减法的指令。据我所知,OISC还没有商业化。

在很多媒体的报道中,定义一套指令集被描述为黑科技,但事实上,实现一款高性能的CPU和围绕指令集构建软件生态才是真正具有挑战性的工作,定义一套指令集的难度并不大,伯克利的研究团队4名成员仅用了3个月就完成了RISC-V的指令集开发。由于伯克利研究团队缺人缺钱,于是决定将RISC-V开源,成为CPU中的Linux,在获得各方支援后,又相继开发了一些产品。

这篇关于终于有人把各个指令集之间的关系和发展讲清楚了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779229

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

O(n)时间内对[0..n^-1]之间的n个数排序

题目 如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序 思路 把整数转换为n进制再排序,每个数有两位,每位的取值范围是[0..n-1],再进行基数排序 代码 #include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A,

终于解决了excel操作及cspreadsheet.h问题

困扰多日的excel操作问题终于解决:利用cspreadsheet.h!在vs2005下,不能直接应用cspreadsheet.h,所以必须解决些问题先。 首先, 出现暴多错误。解决UNICODE问题,全部添加L。 [1] +++++++++++++++++++ 其次, 出现问题: error   C2664:   &apos;SQLGetInstalledDriversW &apos;

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><

数据流与Bitmap之间相互转换

把获得的数据流转换成一副图片(Bitmap) 其原理就是把获得倒的数据流序列化到内存中,然后经过加工,在把数据从内存中反序列化出来就行了。 难点就是在如何实现加工。因为Bitmap有一个专有的格式,我们常称这个格式为数据头。加工的过程就是要把这个数据头与我们之前获得的数据流合并起来。(也就是要把这个头加入到我们之前获得的数据流的前面)      那么这个头是