<commit_before>## 给开源架构兑点儿白开

近来开源架构这话题着实挺火，尤其是RISC-V，感觉哪儿都有它。开源架构早就不是什么新鲜事儿了，丫RISC-V又是打哪儿冒出来的？

说起开源指令集，Power和SPARC经常被人们提起，但Power和SPARC从服务器和工作站发展而来，指令集相对庞大。去看看Power的指令手册[1]，900来条指令，用了18页才写完，需要非常有实力、财力和积累的厂商。这不明摆着就是打这“开源”的旗号等着你花钱去买“技术转移”么？SPARC也不是省油的灯[2]，指令也好几百条，但可别忘了还有操作系统和软件呐，硬件做完了，软件工具链啥的出了问题，Oracle愿意真心帮你解决？这俩老爷爷被国内无知的媒体吵了一轮又一轮，说实话，走都走不动了。

那RISC-V有啥区别呢？模块儿化不得不提，最简单的RV32I只有40条指令，想功能多点就用其他指令模块，像拼积木一样，用啥拿啥，要啥有啥，没啥造啥。有点能力的大学生几个月就能做一个[3]，难度下降了，再配合现成的工具链啥的，很多有能力厂商都根据自己的需求自己做一个。

说完这个，很多人就开始担心碎片化这个问题。过去ARM为了防止碎片化，严格禁止用户修改指令集，这的确成就了ARM。但是RISC-V解决的思路并不是严格限制，像大禹治水一样，不是到处垒坝，靠的是疏导。这个体现在以下两个方面：首先，前面提到的模块化指令集，让厂商在实现的时候能够根据自己的需求选择标准指令集组合，厂商完全没有必要为不兼容付出额外的成本。其次，指令集里预留好了大量的定制指令空间，指令长度从16比特到1024比特理论上都支持，这些空间就是专门给定制处理器的厂商实现自己的指令集的。这样一来，基本的软件都能兼容，遇到定制指令集，厂家提供预先设计好的函数库就能在很好地保证效率的同时不失兼容性。可以说过去ARM/Intel啥都不让你做，如今有了RISC-V，妹妹你放心大胆的往前走。

这时候你又说了，RISC-V架构简单，面积小功耗低，MIPS不也一样么？其实啊，在CPU设计里，指令集看似是最简单的，但其实想把简单的事情做好才是最难的。一方面，RISC-V生的晚，得算10后，这就能让它吸取很多前辈失败的经验教训，比如寄存机窗口啊、超长指令字啥的，很多坑都前人都踩过一遍了。还有，别看指令集就是那些个寄存器数量、分支跳转啊、Load/Store之类的，可要想设计一个又高效，代码密度又高的指令集可不是那么容易。但目前为止，RISC-V这个“学院派”们做出来的指令集，表现还是很不错的。就以很重要的指令密度这个指标来讲做的和x86\_64和ARMv8不相上下[4]。指令集能够保持高水准，后面厂商的技术能力就不会受到限制，要知道，自身能力才是关键。

关于RISC-V的设计水平到底怎样，<NAME>应该最有话语权，他曾是早期的SPARC架构师，后创过一公司，叫全美达。当年把Linus和鲍尔默拉一块儿用RISC架构搞了个X86 CPU，一度让Intel差点跌落神坛。这哥们儿前几年评估了RISC-V，越玩儿越觉得这东西不简单，最后的评测的结果是，和ARM/MIPS/SPARC相比，毫不逊色[5]。之后他就果断创业开搞高性能RISC-V处理器了。

说完技术，就得聊聊钱的事儿了。尽管这些个年Arm为了走量的确降低了门槛，但其实费用也不低，Cortex-M0和Cortex-M3尽管可以用几万美元就拿到授权，可是反过来却要收高昂的版税，而且还要按照芯片成品价抽，用M0和M3的芯片多为低成本芯片，这版税直接影响利润啊。过去，这钱你不交也没办法，因为你要是用一些个小众的CPU，生态是个大问题，ARM背后的整个生态是个重要的背书。但RISC-V看着很快就要改变这个局面，各大第三方厂商都开始纷纷支持RISC-V，从商业指令仿真器到高级调试跟踪工具应有尽有。

尽管苹果、高通、三星这些厂商很早就买了架构授权，但是你会发现至少高通和三星很早就加入RISC-V基金会，这些有自研CPU能力的大厂不出5年，我相信就能够随着生态系统的全面完善而开始推出自己的RISC-V处理器。

很多人觉得就算架构免费，但是基于这个架构的CPU实现总是要收钱的吧。这话一点儿没错，CPU IP厂商针对不同的领域开发CPU然后卖给有意向的客户，然后收取相应费用。但这是不是说就和Arm这些厂商没有区别呢？其实不完全是，以SiFive为例，目前的授权费用是30-50万美元，能得到一个类似M4-M7的核心，但是和ARM的不同的是，只要License Fee，不收版税。但其实，SiFive CPU Core的基础Rocket是完全开源的，尽管和商业版本有少量区别，但是对于有一定技术能力的公司，基于这个核心定制出自己的核完全没有问题。一个可喜的状况是，目前市面上已经有大量开源的CPU可供选择，而且大部分都以非常宽松和商业友好的许可证发布。

开源架构每隔几年就出一新东西，然后总能带动起一批国内厂商开发自主创新处理器，但是这次有点不一样，不一样在哪儿呢？就是这次推动国内浪潮一批国内企业很多都是民营私营企业，公司的参与程度也一点儿也不比科研院所差，比如很早就加入基金会里的乐鑫、中天微等，而不像过去都是国家和地方政府资助的几个独苗，做的也都是桌面和高规格的处理器。这个事实的背后必然是深刻的产业和市场化的商业行为。

不论是Intel还是Arm，他们的成功绝不是仅仅因为技术。Intel不只是有傲视群雄的Fab和研发团队，没有Wintel联盟这些商业决策它一样可能完蛋。Arm做了几十年的低功耗处理器，可没有创造性的IP核授权商业模式，也一样会被打败。如果说未来会出现下一个在这个领域成功的巨头，那么它绝不是照搬Intel和ARM的商业模式，一定是因为它商业模式和技术进步上都取得了显著的优势才能成功。记住，你并不需要“取代”x86或者ARM，一旦你找到了二次元的入口，那么在这个新的次元里，根本就没有x86和ARM这两个对象。

指令集架构并不昂贵，昂贵的是打通上下的生态系统。OpenRISC可以说是个不算差的指令集，但是在生态系统上，因为没有持续的投入，所以10多年来都没有进入各大工具链的主线。RISC-V看似和
OpenRISC很像，但从2014年发布这短短的4年里，已经相继被Linux/gcc/glibc/binutils/gdb/qemu等并入官方主线。RISC-V能够用仅仅几年做到OpenRISC十几年没做到的，是因为RISC-V基金会和会员们共同的推动。可以说这些厂商组成的联合团队能够媲美曾经的IBM和Sun的全职团队，否则生态环境不会这么快成熟起来。

有了生态系统的飞速进展，众多厂商都能够从中得到好处。活跃的社区和众多开源核心，又极大的降低了厂商们的开发门槛。然后厂商的积极参与又能够继续推动生态系统的发展，最终形成正反馈。

有人说从一个指令集出现到得到成熟广泛的应用，要十几年。如果说是实现一个IBM Power或者SPARC或者x86这样的指令集的CPU的话，我觉得你说的没错，没点儿积累的确起不来。但是RISC-V因为模块化，因为足够简单，因为开源，因为很早就能提供完整的生态，就真的用短短几年做出了一些成果。以SiFive为例，去年发布的FE310只是个MCU级别的芯片，今年初就已经推出了4+1核可以运行Linux的SoC。还有在NVidia内部使用的RISC-V CPU估计也很快就要进入到下一代显卡中作为控制核心。

换个角度说，过去在PC主导的时代，我们真心得担心碎片化带来的诸多不利影响。如今，在IoT即将迎来爆发的时代，我们需要的是多种多样的定制化处理器和芯片，来完成数据采集、低功耗、无线通信等诸多不同的工作任务。需求越差异化，开源工具越流行，上层软件越平台无关，指令集碎片化所带来的影响就越小。这个趋势是很明显的，时代不同了。

以上几点拙见！

- [1] [Power ISA v3.0B March 29, 2017](https://ibm.ent.box.com/s/1hzcwkwf8rbju5h9iyf44wm94amnlcrv)
- [2] [Oracle SPARC Architecture 2015](http://www.oracle.com/technetwork/server-storage/sun-sparc-enterprise/documentation/sparc-architecture-2015-2868130.pdf)
- [3] 大学生设计RISC-V CPU两则: [kamikaze](https://github.com/rgwan/kamikaze), [iFMRT RISC-V](https://github.com/iFMRT/Graduation-Project-2012/tree/base)
- [4] [Design of the RISC-V Instruction Set Architecture](https://people.eecs.berkeley.edu/~krste/papers/EECS-2016-1.pdf)
- [5] [Another RISC-V Religious Conversion](https://www.eejournal.com/article/another-risc-v-religious-conversion/)

作者：郭雄飞<commit_msg>update v3.<commit_after>## 给开源架构兑点儿白开

近来开源架构这话题着实挺火，尤其是RISC-V，感觉哪儿都有它。开源架构早就不是什么新鲜事儿了，丫RISC-V又是打哪儿冒出来的？

### 同是“开源”，有啥不同？

说起开源指令集，Power和SPARC经常被人们提起，但Power和SPARC从服务器和工作站发展而来，指令集相对庞大。去看看Power的指令手册[1]，900来条指令，用了18页才写完，需要非常有实力、财力和积累的厂商才有机会实现。这不明摆着就是打这“开源”的旗号等着你花钱去买“技术转移”么？SPARC[2]虽没有Power那么复杂，但是体量也不小。而且这么多年似乎只有Sun/Oracle和少数几个厂商在玩，在去IOE的大背景和Linux等其他开源系统和数据库的强势发展下，领地似乎越来越小。上一代SPARCv8标准的开源核心LEON的确在军工航天领域被广泛使用，但在消费类领域却很少被使用，这值得深思。

开源架构每隔几年就出一新东西，然后总能带动起一批国内厂商开发自主创新处理器，但是这次有点不一样，不一样在哪儿呢？就是这次国内的RISC-V参与者们很多都是民营私营企业，公司的参与程度也一点儿也不比科研院所差，比如很早就加入基金会里的乐鑫、中天微等，而不像过去都是国家和地方政府资助的几个独苗。这个事实的背后必然是深刻的产业和市场化的商业行为。

那RISC-V到底有啥不同呢？**模块儿化**不得不提，最简单的RV32I只有40条指令，想功能多点就用其他指令模块，像拼积木一样，用啥拿啥，要啥有啥，没啥造啥。有点能力的大学生几个月就能做一个[3]，难度下降了，再配合现成的工具链啥的，很多有能力厂商都根据自己的需求自己做一个。当然这样并不意味着RISC-V不能做大型处理器，配合其他指令集模块，RISC-V可以支持浮点、向量运算、加密等诸多功能。这就是RISC-V最独到的地方：**能伸能缩**。

有人说从一个指令集出现到得到成熟广泛的应用，要十几年。如果说是实现一个IBM Power或者SPARC或者x86这样的指令集的CPU的话，我觉得你说的没错，没点儿积累的确起不来。但是RISC-V因为模块化，因为足够简单，因为开源软件的成熟，因为很早就能提供完整的生态，就真的用短短几年做出了一些成果。以SiFive为例，去年发布的FE310只是个MCU级别的芯片，今年初就已经推出了4+1核可以运行Linux的SoC。

### 碎片化还那么重要么？

很多人就担心碎片化这个问题，在看到了过去ARM和MIPS在碎片化上的得与失，认为RISC-V的碎片化问题会更加严重。的确，过去ARM为了防止碎片化，严格禁止用户修改指令集，这的确一定程度上成就了ARM。但是RISC-V解决的思路并不是严格限制，像大禹治水一样，不是到处垒坝，靠的是疏导。这个体现在以下两个方面：首先，前面提到的模块化指令集，让厂商在实现的时候能够根据自己的需求选择标准指令集组合，厂商完全没有必要为不兼容付出额外的成本。其次，**指令集里预留好了大量的定制指令空间**，指令长度从16比特到1024比特理论上都支持，这些空间就是专门给定制处理器的厂商实现自己的指令集的。这样一来，基本的软件都能兼容，遇到定制指令集，厂家提供预先设计好的函数库就能在很好地保证效率的同时不失兼容性。可以说过去ARM/Intel啥都不让你做，如今有了RISC-V，妹妹你放心大胆的往前走。

换个角度说，过去在PC时代，我们真心得担心碎片化带来的诸多不利影响。如今，**在IoT即将迎来爆发的时代，我们需要的是多种多样的定制化处理器和芯片，来完成数据采集、低功耗、无线通信等诸多不同的工作任务。需求越差异化，开源工具越流行，上层软件越平台无关，指令集碎片化所带来的影响就越小。**乐鑫并没有使用ARM指令集标准的CPU，就能做出今天的成绩足以证明碎片化带来的影响早已经不是主要矛盾。这个趋势是很明显的，时代不同了。

### 指令集设计真不是你想的那么简单

这时候你又说了，RISC-V架构简单，面积小功耗低，MIPS不也一样么？其实啊，在CPU设计里，**指令集看似是最简单的，但其实想把简单的事情做好才是最难的**。一方面，RISC-V生的晚，得算10后，这就能让它吸取很多前辈失败的经验教训，比如寄存机窗口啊、超长指令字啥的，很多坑都前人都踩过一遍了。还有，别看指令集就是那些个寄存器数量、分支跳转啊、Load/Store之类的，可要想设计一个又高效，代码密度又高的指令集可不是那么容易。但目前为止，RISC-V这个“学院派”们做出来的指令集，表现还是很不错的。就以很重要的指令密度这个指标来讲做的和x86\_64和ARMv8不相上下[4]。指令集能够保持高水准，后面厂商的技术能力就不会受到限制，要知道，自身能力才是关键。

关于RISC-V的设计水平到底怎样，<NAME>应该最有话语权，他曾是早期的SPARC架构师，后创过一公司，叫全美达。当年把Linus和鲍尔默拉一块儿用RISC架构搞了个X86 CPU，一度让Intel差点跌落神坛。这哥们儿前几年评估了RISC-V，越玩儿越觉得这东西不简单，最后的评测的结果是，和ARM/MIPS/SPARC相比，毫不逊色[5]。之后他就果断创业开搞高性能RISC-V处理器了。

### 钱的事儿不能不提

说完技术，就得聊聊钱的事儿了。尽管这些个年Arm为了走量的确降低了门槛，但其实费用也不低，Cortex-M0和Cortex-M3尽管可以用几万美元就拿到授权，可是反过来却要收高昂的版税，而且还要按照芯片成品价抽，用M0和M3的芯片多为低成本芯片，这版税直接影响利润啊。过去，这钱你不交也没办法，因为你要是用一些个小众的CPU，生态是个大问题，ARM背后的整个生态是个重要的背书。但RISC-V看着很快就要改变这个局面，各大第三方厂商都开始纷纷支持RISC-V，从商业指令仿真器到高级调试跟踪工具应有尽有。苹果、高通、三星这些厂商很早就买了ARM架构授权，但是你会发现高通和三星很早就加入RISC-V基金会，这些有自研CPU能力的大厂不出5年，我相信就能够随着生态系统的全面完善而开始推出自己的RISC-V处理器。

很多人觉得就算架构免费，但是基于这个架构的CPU实现总是要收钱的吧。这话一点儿没错，CPU IP厂商针对不同的领域开发CPU然后卖给有意向的客户，然后收取相应费用。但这是不是说就和Arm这些厂商没有区别呢？其实不完全是，以SiFive为例，目前的授权费用是30-50万美元，能得到一个类似M4-M7的核心，但是和ARM的不同的是，只要License Fee，不收版税。但其实，SiFive CPU Core的基础Rocket是完全开源的，尽管和商业版本有少量区别，但是对于有一定技术能力的公司，基于这个核心定制出自己的核完全没有问题。

一个可喜的状况是，目前市面上已经有大量开源的CPU可供选择，而且大部分都以非常宽松和商业友好的许可证发布[6]。

### 二次元的入口在哪？

不论是Intel还是Arm，他们的成功绝不是仅仅因为技术。Intel不只是有傲视群雄的Fab和研发团队，没有Wintel联盟这些商业决策它一样可能完蛋。Arm做了几十年的低功耗处理器，可没有创造性的IP核授权商业模式，也一样会被打败。如果说未来会出现下一个在这个领域成功的巨头，那么它绝不是照搬Intel和ARM的商业模式，一定是因为它商业模式和技术进步上都取得了显著的优势才能成功。

记住，你并不需要“取代”Intel或者ARM，一旦你找到了二次元的入口，那么在这个新的次元里，根本就没有x86和ARM这两个对象。

### 过去没有的"选择"

多年来的经验和事实以及研究结果告诉我们，指令集架构和性能的关系并不大，Intel那么多年前的x86指令集今年依然能够做到业界领先就充分证明了这一点。指令集，是软件和硬件的接口，在兼容性层面来说是重要的一环；但是从性能来讲，越是复杂和高性能的处理器，指令集优劣所带来的影响就越小。如果能够认识到这一点，我们就能够明白RISC-V并没有也不需要比x86或者ARM有太多技术上的创新，只要给广大厂商提供了一种**选择**就够了。什么选择呢，**一个集大成者的指令集，能够充分的吸取过去30-40年的技术进步，并且开放、没有壁垒、成本趋于0的指令集**。RISC是上世纪80年的提出的，相关研究已经无比成熟。站在如今这个摩尔定律几近终结的点上，我们需要花费更多的精力在DSA架构和敏捷硬件开发上，RISC-V在其中扮演的是助攻的角色。

去翻翻托马斯·弗里德曼的《世界是平的》这本书吧，“相信开放，别以为壁垒有多少帮助”，ARM、x86、RISC-V仍然会长期共存，但高墙会被抹平。

### 迅速成熟的生态系统

指令集架构并不昂贵，昂贵的是打通上下的生态系统。OpenRISC面试以来，因为生态系统上没有高质量的持续的投入，所以10多年来都没有进入各大工具链的主线。RISC-V看似和OpenRISC很像，但从2014年发布这短短的4年里，已经相继被Linux/gcc/glibc/binutils/gdb/qemu等并入官方主线。RISC-V能够用仅仅几年做到OpenRISC十几年没做到的，没有基金会里各个大厂商齐心协力和脚踏实地的推动是不可能做到的。可以说这些大小厂商组成的联合团队各自发挥所长，完成了过去IBM和Sun在生态系统上做到的所有工作，否则生态环境不会这么快成熟起来。

有了生态系统的飞速进展，众多厂商都能够从中得到好处；活跃的社区和众多开源核心，又极大的降低了厂商们的开发门槛；厂商的积极参与又能够继续推动生态系统的发展，最终形成正反馈。**面对一个门槛相对较低的“活着”的指令集，配合迅速成熟中的生态环境，对于很多国内企业来说只要你有需求就有理由参与其中。**

### RISC-V的正确打开方式

在大众当中一个非常普遍的误区和思维定势是，设计或者生产CPU/MCU芯片应该是一个公司的主营业务，或者说一家用RISC-V的公司一定得是卖CPU/MCU的。可以说，市场上的确需要设计生产用于PC的、手机的以及嵌入式领域应用的MCU，而这也的确是RISC-V的打开方式之一。但是，这只RISC-V是冰山一角，我们能看到很多企业，在自身的领域里，通过在自己的产品或者解决方案中嵌入一个RISC-V CPU来降低成本、提高灵活性，最终提高自身的竞争力。比如NVidia替换了内部使用的Cadence的定制处理器，换成了自己研发的RISC-V CPU，很快就要进入到下一代显卡中作为控制核心；CEVA为自己的DSP通信解决方案设计了一个用于低功耗的控制处理器；Rambus前不久刚发布的解决方案里用一颗RISC-V CPU实现一个孤立的系统以保护系统安全。

**前面的几个例子阐明了RISC-V的另一种重要的打开方式，那就是帮助各个领域的企业来降低成本、提高灵活性，从而提高企业自身的竞争力，这才是商业的本质。所以，如果说“问正确的问题”是成功的先决条件的话。那么请问问你自己：”作为一家企业，你自身的优势是什么？RISC-V是否有机会能够帮助你提高竞争力呢？”**


以上几点拙见！

- [1] [Power ISA v3.0B March 29, 2017](https://ibm.ent.box.com/s/1hzcwkwf8rbju5h9iyf44wm94amnlcrv)
- [2] [Oracle SPARC Architecture 2015](http://www.oracle.com/technetwork/server-storage/sun-sparc-enterprise/documentation/sparc-architecture-2015-2868130.pdf)
- [3] 大学生设计RISC-V CPU两则: [kamikaze](https://github.com/rgwan/kamikaze), [iFMRT RISC-V](https://github.com/iFMRT/Graduation-Project-2012/tree/base)
- [4] [Design of the RISC-V Instruction Set Architecture](https://people.eecs.berkeley.edu/~krste/papers/EECS-2016-1.pdf)
- [5] [Another RISC-V Religious Conversion](https://www.eejournal.com/article/another-risc-v-religious-conversion/)
- [6] [已知的RISC-V处理器列表](https://cnrv.io/resource)

作者：郭雄飞

----

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/cn/"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/3.0/cn/80x15.png" /></a><br />本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/cn/">知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议</a>进行许可。商业转载请联系作者。
{'fraction_non_alphanumeric': 0.11023540391994192, 'fraction_numerical': 0.024266307165819765, 'mean_word_length': 18.482828282828283, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 12, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4611453', 'n_tokens_mistral': 8532, 'n_tokens_neox': 9908, 'n_words': 144}