从2019年11月18日开始,PLCT实验室以「开源工具链项目进展」的周报形式记录PLCT在开源领域的进展,如今已经流水账式的记录了22期。期间我们发起了PLCT许愿池2020计划[1]并规划了2020年开源路线图[2]。席卷全国乃至全球的COVID-19对于PLCT的工作也造成了一定的影响,导致我们在过去的几个月中在开源领域的贡献速度低于计划。
今天,我们欣慰地宣布,从5月份开始,PLCT实验室不仅完全恢复了满勤,新的小伙伴也陆续开始入职;PLCT在南京新建立的小队[3]开始稳定的输出。在按期完成2020开源路线图[2]的基础上,我们还新发起了「面向国内 RISC-V 芯片厂商的 QEMU 支持计划」[4]以支持国内RISC-V初创企业。同时,「开源工具链项目进展」(aka PLCT Weekly)也进行了升级,将在过去的每周例行开源仓库更新介绍的技术上进行更丰富的项目进展和内容介绍,同时更多的介绍PLCT以及软件研究所的有意思的工作;同时从周刊变更为半月刊,每个月一号和十六日进行更新发布。
相比于软件所的其他部门,隶属于ISRC的PLCT实验室是一个相当baby的团队。初生牛犊,树立了很大的使命定位:「PLCT实验室致力于成为编译技术领域的开源领导者,推进开源工具链及运行时系统等软件基础设施的技术革新,具备主导开发和维护重要基础设施的技术及管理能力。与此同时,努力成为编译领域培养尖端人才的黄埔军校,推动先进编译技术在国内的普及和发展。」毫无疑问地,这并不容易,有相当漫长的路要去走,有相当漫长的寂寞要去忍耐。
我们准备好了。
出发。
GSoC 是由 Google 发起和赞助的年度开源盛会,通过为开源社区提供招募实习生的资金支持来吸引对开源有兴趣的学生加入。 参与GSoC活动的开源社区会由社区活跃开发者担任学生的 mentor,对于融入开源社区是非常难得的机会。 PLCT实验室鼓励所有在读研究生申请跟PLCT关注的一系列基础开源设施,包括 GNU GCC、Clang/LLVM、QEMU、Firefox 等。 今年我们有两位同学申请成功。恭喜张尹同学和张洪滨同学!
MLIR是一种具有可重用、可扩展的特性的编译框架,可面向各个硬件平台进行编译,致力于减少构建领域专用编译器的开销,并且可以与现有的编译框架互联互通。
我是PLCT实验室的在读博士生张洪滨。我的 GSoC 2020 的项目是 MLIR Python Bindings,为MLIR的基础库文件提供Python的绑定。整个项目致力于让Python的程序员能够使用MLIR的各种基础架构,也让各种使用Python编写的项目能够得益于此,从而将MLIR和Python的优势相结合。
以后记录进展的文章会放在我的技术博客:
https://www.zhihu.com/people/zhang-hong-bin-99/posts
我申请GSoC的 Proposal 可以从以下链接找到:
MLIR Python Bindings Proposal https://docs.google.com/document/d/1Mk2L1zQ0JzNDsCElqmcw2fR06TddaBOVc8E5-9yQWlU/edit?usp=sharing
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在 Linux、Windows、Android 和 MacOS 操作系统上。它轻量级而且高效 —— 由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
我是PLCT实验室的在读研究生张尹,我的 GSoC2020 项目是 Optimize OpenCV for RISC-V,为OpenCV实现RISC-V后端的向量优化。项目具体目标是为OpenCV的 Wide Universal Intrinsics 添加RISC-V的版本,使用RISC-V的向量扩展来优化OpenCV在RISC-V芯片或模拟器上的运行效率。
我以后记录进展的技术博客:
https://www.zhihu.com/people/joy2myself
我申请GSoC的 Proposal 可以从以下链接找到:
目前PLCT在 RISC-V 开源工具链的工作集中在 Clang/LLVM 这边。GCC 需要多名资深级别参与,目前人力还在准备中,尚未开始在 GCC 社区有输出。
PLCT从 RISC-V V 扩展的 v0.7.1 版本草案开始跟进,从 v0.7.1 一路跟到 v0.8,以及目前最新的 v0.9 版本。所有的代码已经同步推送到了PLCT在GitHub上的仓库(文末仓库3)。我们很高兴的看到已经有几家国内的初创公司开始尝试使用PLCT维护的 rvv-llvm 实现,并向我们提供了若干bug反馈以及修改意见。虽然目前国内的互动还比较零散,还不足以说成是形成了一个社区,但是我们会继续努力下去的(认真脸)。
在国内从事开源项目和社区建设,我们最为直观又深刻的感受是国内的公司也好,技术人员也好,相比英语世界的开源技术社区,普遍的偏低调和腼腆。线下技术交流的时候,一般都会把会议室挤得满满当当,但是提问和交流的时候就很少有人愿意出来说几句话。这在开源社区中是很吃亏的。往往是积极参与代码贡献并且积极参与社区讨论的人和公司更多的掌握社区发展的话语权,决定着一个社区未来的技术路线。
现在我们又面临着很多这样的机会,难得的机会:RISC-V生态及社区,目前都还处在快速发展的阶段,有太多的标准需要提出草案并制定,有太多的可以参与其中的机会。最近一次的参与机会正是 V 扩展的标准更新以及 intrinsics 的草案的讨论。目前还处在非常草案的草案状态,由 EPI、 SiPearl、 和 SiFive 几家发起[2]。目前还没有看到国内的科研机构及公司参与其中。PLCT实验室希望能够联合国内做RISC-V的软硬件厂商参与 RVV Intrinsic 的相关标准制定及实现[6]。欢迎国内关注RVV这块儿的厂商或科研机构联系我们,抱团参与相关的草案建议和参考实现工作。
最后,最新的消息,V扩展的 v0.9 版本即将(或已经)成为接近正式标准发布的稳定草案版本。PLCT目前已经创建了对应的仓库分支,开始对标实现。
补充:张尹同学今天写了一篇RVV相关的文章,有兴趣可以阅读一下:
《RISC-V "V"(向量)扩展Intrinsics》
https://zhuanlan.zhihu.com/p/141363004
PLCT在2020年的目标之一是支持和改进 Clang/LLVM,达到与 GCC 在各个指标上接近或超过的水平。
目前,由于人力的限制,计划从六月份开始重新起步。在2020年初的时候我们通过永恒天平项目进行过一系列测评,建立了初试的基线。疫情期间暂停了相关的工作。后续将会加快一些进度。
欢迎对于 RISC-V、LLVM、编译器开发有兴趣的在校研究生或本科生联系我们,加入PLCT实习,一起为 RISC-V 生态添砖加瓦。招聘信息(JD)请参考[7]。
V8引擎是PLCT在2020年的主要贡献目标之一。V8作为 Google Chromium 项目使用的 JavaScript 引擎,同时也随着 node.js 的崛起而成为开源生态领域中非常重要的基础软件。目前V8的RISC-V支持列在了RISC-V基金会的 wishlist 里(另外几个是 node.js、OpenJDK、Go 等),而Google主导的V8社区并没有支持RISC-V后端的计划。
等到V8社区自己支持RISC-V后端固然是一个躺赢的选择,但是对于PLCT而言,为V8添加RISC-V后端是一个既能够确保自己有能力维护V8代码体系、又能够为国内的RISC-V生态起到关键性基础作用的项目。即使Google后续抢先PLCT发布了RISC-V后端并进入了upstream,独立的实现本身也是极具价值的。
好的。以上是热血宣言,接下来是灰头土脸的现状(老脸一红)。现状是我们从年初开始磕V8的源代码,本以为我们团队成员在过去V8和Spidermonkey上的经验可以复用,结果发现已经发生了认不出来的变化。现在的V8内部架构的学习曲线更加陡峭。从三月份开始我们终于开始有patch开始尝试。目前处在已经可以让d8交叉编译到 qemuriscv64 linux 但是依然无法跑起来 hello world 的状态。预计上半年结束之前,可以抛出来 hello world,释出一个可以尝试的版本到PLCT的GitHub上。
「总算是摸到点门道,看到了希望。」一句话总结的话,这就是目前V8项目组的进展了 XD
QEMU方面的支持计划起初并不在PLCT的开源路线图2020里。我们在对国内RISC-V厂商的支持和交流中,意识到了国内做QEMU方面的开源开发者的缺乏。于是我们开始将QEMU支持(SoC模拟添加定制等)纳入到开源基础软件支持计划[8]。该计划将作为PLCT支持 RISC-V 开源软件生态的一部分长期存在。我们欢迎国内有需要的 RISC-V 芯片初创公司与我们联系,携手加快和促进国内RISC-V生态。
目前有一家国内RISC-V初创企业和一家本土操作系统企业与我们建立了联系,相关的支持工作正在进行中。预计很快就会有一些成果可以拿出来。我们欢迎更多的本土企业与我们联系,把国内的RISC-V生态继续做得大一些,丰富一些,完善一些。
自方舟编译器开源以来,PLCT实验室一直关注方舟编译器社区的发展,参加了所有方舟编译器的线上、线下活动,并联合组办线下活动。
同时,PLCT实验室为方舟编译器社区贡献了代码、教程和分析视频。近期,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
- 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