业内现在非常流行两句话,叫做「软件吞噬世界。开源吞噬软件。」
我们笃信并见证了开源软件在人类生活中占据越来越重要和基础作用的过程。从伟大的自由软件先驱RMS发起GNU项目的年代开始,开源软件就随着软件吞噬世界的进程而不断地替代闭源的基础性设施。现代软件体系中,GNU工具链家族、GLIBC、Clang/LLVM家族等起到了基石的作用。但是,繁荣之下,隐忧潜伏。不论是GCC还是GLIBC,代码规模和蕴藏的知识细节都非常巨大,目前能够真正掌握的人非常的稀少,多数在欧美的Google、SUSE、RedHat、IBM等老牌企业;而这些大佬正在老去。在我们不可缺少的基础开源软件中,存在大量的 undocumented knowledge 需要被挖掘和传承。
开源软件吞噬世界。而能够驾驭的人越来越少,未知的黑洞正在吞噬开源。
同时,我们看到,OpenROAD、FIRRTL 等开源领域的后起之秀,有可能在不久将来,在各自的领域,达到跟 LLVM 类似的重要程度。最后,我们在支持RISC-V的软件生态中,注意到靠近客户的软件总是得到足够的人力来支持,而类似 Valgrind 等开发人员使用的开源开发工具,目前仍然有大量的积压工作等待完成。
我们感受到了黑洞的存在,并感到深深的不安。从6月1日起,PLCT实验室新设立 Code Analyst (代码分析员)岗位。此类岗位专门面向上述三类开源领域的基础组件,目标是将 undocumented details 文档化,确保PLCT具备维护、定制、魔改的能力。我们在此向全国的学生和从业者、爱好者发出呼吁,加入我们的代码分析员团队,成为开源知识图书馆的一员。新开放岗位长期有效,欢迎对开源有兴趣的同学投递简历。[9]
来一起做点有意思有难度的事情吧!
RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。该项目2010年始于加州大学伯克利分校,但许多贡献者是该大学以外的志愿者和行业工作者。RISC-V指令集的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。
RISC-V架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用场景。用户能够灵活选择不同的模块组合,来实现自己定制化设备的需要。
RISC-V包含RV32I,RV64I,RV32E,RV128I等基础模块以及M(ultiple),A(tomic),F(loat),D(ouble),C(ompress),V(ector)等标准扩展模块。其中RVV指的是RISC-V的"V"扩展,即向量扩展模块。向量扩展在基础模块上新增了32个向量寄存器,若干控制与状态寄存器(CSR),与上百条向量指令,使得开发人员可以使用向量操作来优化和加速程序。
实验室的实习生陈影同学在知乎连载介绍目前最新的v0.9版本的RISC-V向量扩展规范的详细内容,参见 RISC-V "V"(向量)扩展规范v0.9+文档(1)
PLCT实验室在2019年4月的LLVM Developers Meeting上通过Robin Kruppe的报告Adventures with RISC-V Vectors and LLVM了解到LLVM缺少对RISC-V向量扩展的支持,于是决定参与到这项工作中来。我们使用了Robin Kruppe实现的初始版本作为起点,从RISC-V向量扩展的v0.7.1版本开始为LLVM提供了完整的汇编支持。目前,PLCT实验室已经在LLVM上实现了对v0.8版本的完整的汇编与反汇编支持。
目前我们正在从两个方向上完善LLVM上的RISC-V向量扩展支持,一是根据前段时间刚刚发布的v0.9版本更新汇编与反汇编的实现,二是根据EPI,SiPearl和SiFive联合发布的RISC-V "V"(向量)扩展的Intrinsics的RFC来实现LLVM上的向量扩展intrinsics的支持。
实验室的在读研究生张尹同学在知乎发布文章介绍了RISC-V "V"(向量)扩展的Intrinsics的RFC,参见 RISC-V "V"(向量)扩展Intrinsics
后续PLCT还会继续完善LLVM上对RISC-V向量扩展的自动向量化的支持。
我们的RVV仓库开源在GitHub:https://github.com/isrc-cas/rvv-llvm
欢迎新同学加入PLCT实验室一起做些有意思的事情!
(放在了本期亮点中)
RISC-V的Clang/LLVM支持,不仅需要LLVM支持RISC-V的后端,同时也需要Clang支持。PLCT实验室的史宁宁近期对Clang对RISC-V支持代码进行了分析,主要内容如下:
1、Clang的RISCV支持1 https://zhuanlan.zhihu.com/p/138508813
2、Clang的RISCV支持2 https://zhuanlan.zhihu.com/p/141053908
其中,涉及到了Clang的相关代码分析,主要如下:
1、Clang Driver库的ToolChain https://zhuanlan.zhihu.com/p/139186211
2、Clang Driver库的Tool https://zhuanlan.zhihu.com/p/139999346
3、Clang Driver库的job https://zhuanlan.zhihu.com/p/140872015
另外,Clang/LLVM相关库和工具的RISC-V支持,也是RISC-V支持的重要内容。PLCT实验室的史宁宁近期对LLVM libc++的RISC-V支持进行了调研,具体内容:https://zhuanlan.zhihu.com/p/142469791。
继续死磕 V8 TurboFan JIT 的 RISCV64 后端移植。
初步完成:
- 指令选择和寄存器分配阶段体系结构相关的IR操作码设计和相关代码实现;
- 指令选择单元测试;
- TurboFan后端RISCV64汇编器。
正在逐个进行 mksnapshot
阶段BUILTINS的代码生成和宏汇编实现。
持续输出原创性V8技术分析报告
- V8移植简介
- V8指令选择过程中的优化
- Dive-into-Torque
下载地址:https://github.com/isrc-cas/PLCT-Open-Reports
技术报告视频地址 https://space.bilibili.com/296494084
PLCT 正在为国内RISC-V厂商芯来科技的 RV-Star 开发板实现QEMU模拟功能的支持。RV-Star开发板是一款基于GD32VF103 MCU的RISC-V评估开发板,执行 RV32IMAC 指令集。与国外Sifive公司的riscv开发板的QEMU模拟类似,我们正在增加qemu对芯来 RV-Star 开发板的模拟,包括各类外设的支持。未来将会把我们的代码推送到plct的仓库,然后向QEMU上游递交一个patch。
PLCT实验室的史宁宁依然每周在更新方舟编译器社区周报(OpenArkCompiler Weekly),目前已经更新到第十三期。
方舟编译器周报每周日晚上通过知乎、Bilibili和邮件列表发布。
知乎:https://zhuanlan.zhihu.com/openarkcompiler
Bilibili:https://www.bilibili.com/read/readlist/rl199373
邮件列表及其订阅方式:https://gitee.com/harmonyos/OpenArkCompiler/issues/I1EWAX
[1] PLCT许愿池2020计划 https://github.com/isrc-cas/PLCT-Weekly/blob/master/RISCV-DevTools-Wishlist-2020.md
[2] PLCT2020年开源路线图 https://github.com/isrc-cas/PLCT-Weekly/blob/master/RISCV-Roadmap-2020.md
[3] PLCT南京小队隶属于软件所南京分院智能软件研究中心。
[4] 面向国内 RISC-V 芯片厂商的 QEMU 支持计划 https://github.com/isrc-cas/PLCT-Weekly/blob/master/PLCT-QEMU-Support-Project-for-Domestic-RV-Vendors.md
[5] PLCT OpenDay 2019 https://github.com/isrc-cas/PLCT-Weekly/blob/master/PLCT-OpenDay-2019.md
[6] RISC-V Vector Extension Intrinsic RFC 开始活跃更新,我们号召国内厂商抱团参与 https://mp.weixin.qq.com/s/qAQmXwhCccVGms90lJzz2g
[7] PLCT实验室的开放职位 https://github.com/isrc-cas/PLCT-Weekly/blob/master/open-positions.md
[8] [PLCT] 面向国内 RISC-V 芯片厂商的 QEMU 支持计划 https://mp.weixin.qq.com/s/e5dDHOUY6oz3KBhqCRn5nw
[9] https://github.com/isrc-cas/PLCT-Weekly/blob/master/interns.md
- PLCT Weekly https://github.com/isrc-cas/PLCT-Weekly
- C910 LLVM 支持 https://github.com/isrc-cas/c910-llvm
- RISC-V Vector Extension Support(rvv-llvm) https://github.com/isrc-cas/rvv-llvm
- V8 for RISC-V https://github.com/isrc-cas/v8-riscv
- 永恒天平 https://github.com/isrc-cas/eternal-balance/
- PLCT 公开报告 https://github.com/isrc-cas/PLCT-Open-Reports
- QuickJS for RISC-V https://github.com/isrc-cas/quickjs-riscv
- PLCT-QEMU https://github.com/isrc-cas/plct-qemu
- Flounder https://github.com/isrc-cas/flounder
- OpenCV for RISC-V https://github.com/isrc-cas/opencv-riscv
- pacific(方舟编译器玩具运行时) https://github.com/isrc-cas/pacific