RISC-V指令集的诞生,"V"也表示变化(variation)和向量(vectors)
RISC-V登场,Intel和ARM会怕吗?

在2015年12月的Nature网站上,由U.C. Berkeley等几个大学的研究人员主导的一个开发团队发表了一篇文章。文章中研究人员用标准的CMOS工艺制造了同时集成了RISC-V指令集的CPU和片上光通信器件的微芯片。这或许标志着不久的未来微电子芯片的接口速率将会大幅的提高,不再受到原先电接口IO的速率限制。不过本篇文章要关注的,则是在这颗实验性的芯片上集成的另外一个主角,"RISC-V"(发音risk-five)。
1、CPU指令集(ISA)
软件和硬件之间沟通的桥梁
指令集(ISA)通俗地讲可以理解为一台机器(计算机中的CPU)可以执行的“指令”集合,通过这些“指令”能够实现诸如加减乘除这样的运算,以及接收外部输入(比如键盘)和控制外部输出(如显示器)这样的功能。
指令集也可以理解为软件和硬件之间沟通的桥梁,不同的厂家可能会用不同的方法来实现相同的指令集,从而让遵循相同指令集的软件可以无需修改即可运行。比如我们熟知的Intel和AMD都实现了x86指令集,这基本上统治了PC的市场。而出现较晚的ARM指令集则基本占领了移动端处理器的大部分市场。

2、RISC指令集的发展历史
1980年Berkeley主导了RISC
了解了什么是指令集接下来还是让我们来聊聊RISC的发展历史。早期的微处理器大部分为复杂指令集(CISC)架构,即设计尽可能复杂的指令来完成任务 ,原因之一是当时的编译技术并不发达。而随着编译器技术以及其他技术的发展,研究人员渐渐发现多数的复杂指令只在很少的时候被用到,而且复杂的指令限制了处理器速度的进一步提高。精简指令集(RISC)技术应运而生,IBM 801可能是第一个用精简指令集的理念来设计的系统,并发展成为了今天的Power架构。1980年左右Berkeley的Dave Patterson主导了Berkeley RISC项目并设计了其第一代的处理器RISC I,这就是RISC这个名称的由来。Sun Microsystem(现在的Oracle)的SPARC处理器架构也有很多Berkeley RISC影子在里面。差不多同时,斯坦福的教授John Hennessy(现在已经是斯坦福校长)和他的团队也从课程设计出发设计了MIPS处理器的早期雏形,并最终孵化为MIPS Technologies. Inc公司,后来被 Imagination Technologies收购。我们能在很多家用路由器里见到他的影子。而ARM,迄今为止发展的最好的RISC指令集,已经无处不在。
时间到了2010年,当Berkeley的Krste Asanovic教授想要为接下来的一系列项目选择一个微处理器指令集时,他找不到一个合适的。Intel的X86是CISC指令集,过于复杂和庞大,而且存在专利问题。而ARM除了专利问题外,若想自行设计基于ARM指令集的处理器,需要非常昂贵的License。OpenRISC作为一个开源的指令集架构,其许可证为GPL,这意味着所有的指令集改动都必须开源。而且,OpenRISC发展缓慢,设计过于老旧,64位架构也不成熟。
Krste Asanovic教授
3、RISC-V指令集的诞生
"V"也表示变化(variation)和向量(vectors)
这一切都与Berkeley追求“开放“的精神格格不入,要知道从Unix/BSD操作系统到现今在大数据领域流行的Spark框架,他们都是用一个非常宽松的名为BSD License的许可证的发布的。这个License简言之就是我发布的代码你想怎么用怎么用,不用交钱,改了也不用开源,只要最终致谢作者即可。苹果的OSX是基于BSD Unix的,而微软 Windows中也包含修改过的BSD Unix代码。
所以Krste教授决定带领团队重新开发一个完全开放的、标准的、能够支持各种应用的新指令集,他也得到了RISC的发明者之一,Dave Patterson教授的大力支持。从2010年夏天开始,大约花了四年的时间,这个团队设计和开发了一套完整的新的指令集,同时也包含了移植好的编译器、工具链、仿真器,并经过数次流片验证。为了能够加快开发的效率,以便能够快速的评估和修改设计以及提高可复用性,Chisel作为一种新的硬件构建语言也被开发了出来。简言之,你可以用scala这种函数式编程语言去设计硬件,并最终能够生成传统的Verilog HDL用于ASIC/FPGA,或者生成C++用于仿真。
这个新的指令集叫做RISC-V,"V"包含两层意思,一是这是Berkeley从RISC I开始设计的第五代指令集架构,二是它代表了变化(variation)和向量(vectors)。

4、RISC-V指令集的发展
获Google、HP、Oracle、WD支持
RISC-V包含一个非常小的基础指令集和一系列可选的扩展指令集。最基础的指令集只包含40条指令,通过扩展还支持64位和128位的运算以及变长指令,其他以完成的扩展包括了乘除运算、原子操作、浮点运算等,正在开发中的指令集还包括压缩指令、位运算、事务存储、矢量计算等。 指令集的开发也遵循开源软件的开发方式,即由核心开发人员和开源社区共同完成。
通过这一系列的指令集扩展,你几乎可以构建适用于任何一个领域的微处理器,比如云计算、存储、并行计算、虚拟化/容器、MCU、应用处理器、DSP处理器等等。从2015年开始,每半年一次Workshop上已经能够看到很多有意义的项目。Berkeley自己开发了多款开源的处理器,可以覆盖从高性能计算到嵌入式等应用领域,并孵化出了初创公司SiFive并获得了风投。lowRISC是一个非营利性组织,主导者是风靡世界的开源硬件树莓派(Raspberry Pi)的创始人之一,lowRISC正在基于RISC-V开发一款真正的开源处理器芯片,希望以其来代替目前树莓派上的由博通开发的非开源处理器。Gary Research在FPGA中放入了400个定制的RISC-V处理器并用片上网络(NOC)连接在一起用来实现并行计算,未来有可能会被用到微软的云计算平台中,例如给Bing这样的搜索引擎加速。
2016年初的Workshop上,RISC-V基金会成立,成员中包括了Google、惠普、Oracle、西部数据等硅谷巨头,未来这些大公司非常有可能会将RISC-V运用到他们自己的云计算设施或者智能手机芯片 中,以摆脱对X86的依赖或是减少昂贵的ARM指令集授权费用。

5、RISC-V指令集的优势
开放源代码是不可以逆转的趋势
可以说,RISC-V指令集是一个“活”的、现代的、没有专利问题和没有历史包袱的全新指令集,并且以BSD许可证发布。任何公司都可以在自己的产品中免费使用,而修改也无需再开源。和成就了ARM的授权模式相比,RISC-V不仅能让公司收益,也能够让大学和研究机构更好地研究新的处理器技术和架构。要知道,一个ARM指令集架构的许可证可能要上千万美元。
RISC-V能够发展至今笔者认为并非偶然。首先,指令集的开发需要非常专业的团队和数年的时间,这对于商业公司来说是很困难的,而一流大学的一流团队恰恰能满足这样的条件。其次,编译器和FPGA等相关的技术在近十年来的蓬勃发展显著地降低了新指令集开发和验证的难度。再次,指令集通过几十年的发展,不论是工业界还是学术界都已经研究的非常透彻,很多设计上的技术选择已经有了现成的答案。最后,OpenRISC作为一个较为成功的开源指令集项目也有很多可以学习的经验,使得专业团队+技术社区这样的开发模式能够运作的更好。
从过去的十几年我们能够看到的改变是,开放源代码作为一个不可以逆转的趋势,创造了新的商业模式,提高了效率也降低了成本。我们能够看到,很多个成功的商业产品都能够找到与之相匹敌的开源替代,而几乎所有的技术变革中我们都能够看到开放源代码的影子。从云计算、大数据到近几年很火的容器技术,开源已经无处不在。再看看硬件领域,像树莓派和Arduino这样在“板级层面”的开源硬件已经显著降低了开发者的门槛并让越来越多的人参与其中。而在集成电路行业,摩尔定律的终结和人们需求的更加多元化也会使FPGA和ASIC在很多领域 在成本曲线上出现交叉点,而这也将极大的推动开源硬件在芯片领域的蓬勃发展。
6、RISC-V指令集的未来
物联网、移动计算、人工智能
当面对一个新的指令集时,一个最常见的顾虑是现有的优质软件在新指令集的平台上的移植问题。Wintel联盟在过去十多年来正是靠着“向后兼容”而成功。每一代的Intel X86处理器都兼容过去所有的指令,而每一代的新Windows操作系统都基本上兼容过去版本的软件。但现在,用户并不需要过于担心可移植问题。首先,开源软件在这十几年的飞速发展,已经能够让我们在很多领域无需过多担心软件移植的问题。比如在服务器领域,大部分软件完全开源,而应用多用脚本语言写成,可移植性非常好。其次,很多人或许并不知道,ARM也并不是一个完全向后兼容的指令集,为了能让ARM CPU运行在不同行业的应用中 ,向后兼容带来的包袱远大于其优势,这对RISC-V来说也是一样。最后,总的发展的趋势是,不论是物联网、移动计算、网络服务还是人工智能,我们都需要成本更低、灵活性更高和可定制性更强的处理器。而“向后兼容”的重要性会越来越小,并将最终成为过去。
最近全球半导体联盟(GSA)在一篇报告中大胆的提出这样的问题:“RISC-V会是开源领域的下一个Linux吗?”,“半导体行业是开放源代码最后一块没有攻克的阵地吗?”。相比十几年前开源软件发展的初期阶段,如今开源硬件的发展和当时是如此相像。笔者相信,随着RISC-V的成熟和更多的大公司加入,它非常有希望去挑战Intel x86和ARM对市场的统治,从云计算到物联网,成为当今这个互联网世界的最基本的和不可或缺的“轮子”之一。
关于作者:
郭雄飞,目前在景略半导体任嵌入式系统设计经理。开源软件和开源硬件爱好者。
景略半导体:
景略半导体由多位硅谷资深海归于2008年创立,是一家提供从半导体芯片到完整行业应用解决方案的通信公司,致力于提供高速有线/无线通信产品和解决方案并为客户创造最大价值。
景略在摩尔精英招牛人:
数字前端IC工程师
嵌入式软件工程师
技术支持工程师(FAE)
摩尔精英:全球半导体招聘平台
https://zhuanlan.zhihu.com/p/20813811
RISC-V指令集的诞生,"V"也表示变化(variation)和向量(vectors)的更多相关文章
- C++:vector中的v.at(0)和v[0]的区别
设v是一个vector的对象, 如果v是非空的,则v.at(0)和v[0]是没有区别的,都是取数组中第一个值: 如果v是空的,则v.at(0)会抛出异常(exception std::out_of_r ...
- 证明 U and V={0}时 dim(U+V)=dim(U)+dim(V)
U And V={0} 证明 dim(U+V)=dim(U)+dim(V)设{u1,u2,...,uk} 是U的基,{v1,v2...,vr}是V的基,dim(U)=k ,dim(V)=r dim(U ...
- CF F - Tree with Maximum Cost (树形DP)给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大。输出最大的值。
题目意思: 给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大.输出最大的值. ...
- smaller programs should improve performance RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构 区别示例
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In this section, we l ...
- python代码{v: k for k, v in myArray.items()}是什么意思?
最近在扒vnpy的源码总能看到{v: k for k, v in ORDERTYPE_VT2HUOBI.items()}这样的源码,就是不知道什么意思 然后万能的google找到了Quora的一个类似 ...
- Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)
首先 我们先看到的这个方法入参是:Function<? super Object , V> mapper ,这是jdk1.8为了统一简化书写格式引进的函数式接口 . 简单 解释一下我对Fu ...
- n维向量空间W中有子空间U,V,如果dim(U)=r dim(V)=n-r U交V !={0},那么U,V的任意2组基向量的组合必定线性相关
如题取U交V中的向量p (p!=0), 那么p可以由 U中的某一组基线性组合成(系数不全是零),同时,-p也可以由V中的某一组基线性组合成(系数不全为零) 考察p+(-p)=0 可知道,U中的这组基跟 ...
- JS随机生成100个DIV每10个换行(换色,生成V字和倒V)
附图 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- Ajax请求参数到一个URL包含下划线或者v(_、v)
Ajax请求参数到一个URL包含下划线或者v 初学者的我,在F12时,看到这个地址就会很奇怪,不理解什么东西 经过查找了解到浏览器默认开启缓存,该参数不是其他请求所必须的,把它去掉不影响数据的获取 h ...
随机推荐
- Svn中的tag标签的用法和意义
使用场景: 假如你的项目的某个版本已经完成测试开发.测试并已经上线,接下来街道新的需求,新项目开发需要修改多个文件的代码,当需求已经开发一段时间的时候,突然接到用户和测试人员的反馈,项目中某个重大的b ...
- UVa 1600 Patrol Robot【BFS】
题意:给出一个n*m的矩阵,1代表墙,0代表空地,不能连续k次穿过墙,求从起点到达终点的最短路的长度 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰到墙,当前的k减去1,碰到0, ...
- 一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程
今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助. 1.Scrapy爬虫框架 Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且 ...
- while循环合理运用-判断成绩脚本
在平时的工作生活中,难免不了去写一些交互性质的脚本,然而呢往往有些用户偏偏会输入不合规范的输入,为了避免就此退出脚本重新执行,这时候就可以用while去写一个死循环去针对用户的输出啊.哈哈~他输不对, ...
- js或css指定元素点击时内容不可被选中
一.css3中可以使用"user-select"属性: body{ -webkit-user-select:none;/*谷歌 /Chrome*/ -moz-user-select ...
- iOS日期转换之UTC/GMT时间格式
GMT只需要将代码中的UTC替换为GMT即可 //将本地日期字符串转为UTC日期字符串 //本地日期格式:2013-08-03 12:53:51 //可自行指定输入输出格式 -(NSString *) ...
- Oracle运行set autotrace on报错SP2-0618、SP2-0611
SQL> set autotrace on SP2-0618: 无法找到会话标识符.启用检查 PLUSTRACE 角色 SP2-0611: 启用 STATISTICS 报告时出错 原因: PLU ...
- Hadoop集群管理--保证集群平稳地执行
本篇介绍为了保证Hadoop集群平稳地执行.须要深入掌握的知识.以及一些管理监控的手段,日常维护的工作. HDFS 永久性数据结构 对于管理员来说.深入了解namenode,辅助namecode和da ...
- 关于App程序猿泡沫
前言 做开发快七年了,对于程序猿,外行人总有着数不完的讽刺和误解,可是我都懒得去解释.代码搬运工人也好,民工也罢,随他们去说吧.可是网上近期流传的程序猿泡沫,尤其是APP程序猿泡沫的文章导致非常多我们 ...
- HDU4565 So Easy! 矩阵高速幂外加数学
easy 个屁啊,一点都不easy,题目就是要求公式的值,但是要求公式在最后的取模前的值向上取整.再取模,无脑的先试了高速幂 double fmod来做,结果发现是有问题的.这题要做肯定得凑整数,凑 ...