在过去的半个月中,PLCT在社区贡献和合作上有了小小的进步。 邢明杰老师带领的 RISC-V V 向量扩展LLVM实现的项目,开始跟 LLVM 社区合作,并与 SiFive 的负责 RVV 的工具链团队进行了后续讨论。明确了后续在LLVM社区中相互配合、避免重复工作。 RISC-V 基金会组织的 RISC-V Global Forum 2020 的演讲投稿,PLCT实验室共投出4篇稿件。RVGF2020的投稿7月21日出结果,9月3日论坛举办。这次是线上举办,而且举办时间考虑到了东八区,适合我们观看。 国内CRVA举办的年中讨论会,PLCT实验室共投稿3篇,将在7月18日举办的线上讨论会上进行报告。 V8项目目前终于在RISC-V上跑通了 Hello World,并公开了当前版本的源代码。虽然目前还没有达到可以贡献给V8上游的代码质量,依然是一件值得庆贺的事情,胜利在望了。 目前在V8、QEMU、Spike等开源领域的工作,后续也将逐步提交贡献给upstream。被 upstream 接纳是一个漫长的自我改变和提高的过程,我们做好了充分的思想准备 ;-)
PLCT实验室从创建开始就有着 all upstream 的指导原则。从创建到真正开始跟各个关键领域的上游开始合作,经过了差不多一年的时间。除去必须的承接商业交付外包以养活团队的时间之外,大部分精力都投放在了「为了融入社区需要先努力攒出一点成果」的路径上。但是最近,我们发现,其实并不需要憋这么久。像是LLVM这样的社区,非常欢迎从一开始就直接参与到社区,直接在上游进行开发。或许国内还有不少的团队和个人抱着跟我们过去一样的想法,希望在看到本期的内容之后,能够更加放松一点,更加早一些的进入开源社区,去融入,去学习,去贡献。
PLCT V8 团队正在开发能够在 RISC-V 上运行的 V8 版本。V8 是现代软件生态中非常重要的基础组件,是目前市场占有率最高的浏览器 Chrome/Chromium 所内嵌的 JavaScript 引擎。7月14日下午,PLCT实验室已经完成了在真实硬件上运行V8并能够成功的执行完成简单的 helloworld 程序,达到了项目的第一个里程碑,并在 GitHub 进行了开源,成为当时世界上第一个和唯一一个开源的 RISC-V 版本的 V8 引擎。
不过「世界唯一」只保持了不到36个小时,大象就进入了房间 ;-)
就在PLCT宣布第一里程碑完成、并公开了源代码的一天之后,清华伯克利中心RIOS实验室联合FutureWei科技公司也发布了他们独立制作的 V8 for RISC-V 项目,并开始着手建立开发社区,成为第二个公开宣称支持 RISC-V 的 V8 项目。FutureWei 开发的 V8 版本采用了内置模拟器的开发路线,完成度相比PLCT的现有进展也完成度更高。PLCT实验室非常欢迎 FutureWei 的慷慨与开放性,并已经与 FutureWei (以及 RIOS Lab)达成了组建联合社区的共同目标,后续将三家单位联合进行 V8 的开发与贡献。
目前,Roadmap 初稿已经在 GitHub 的 wiki 上,Slack 讨论群组已经建立,非常欢迎加入 V8 For RISC-V 项目,一起做些有意思的事情!如果你是在校学生的话,可以以实习生身份加入,我们还可以发一点补贴。如果已经工作了,可以以志愿者身份贡献力量。
顺带,OSDT社区找到了PLCT和FutureWei两个V8团队,计划于7月19日本周日上午11点举办线上讨论会。欢迎参加。
- 汇编方面,添加了所有v0.9版本新增rvv指令的测试用例。
- Intrinsics方面,添加了官方例子中用到的rvv intrinsics。目前官方的C++例子rvv_saxpy. c和rvv_sgemm. c都已经可以成功编译通过且在Spike模拟器上正确运行。
欢迎使用,地址在老地方:
https://github.com/isrc-cas/rvv-llvm
同时我们也开放了使用的 benchmark(整理自 RISC-V V 扩展的官方文档)
https://github.com/isrc-cas/rvv-benchmark
本次除RVV之外没有其他新增内容。
由于做这个项目的陈影同学近期要准备玄铁C910的LLVM实现的PPT,去参加CRVA组织的年中RISC-V技术讨论会,在7月18日之前估计会放慢进度。
一些关于2019 RISCV 峰会上涉及 codesize benchmark的文章更新在知乎上:
https://zhuanlan.zhihu.com/p/151324969
https://zhuanlan.zhihu.com/p/157348038
https://zhuanlan.zhihu.com/p/158098744
如果你感兴趣,欢迎加入永恒天平项目,一起做些有意思的事情!
https://github.com/isrc-cas/eternal-balance
参见「本期亮点」。
目前的仿真SoC已经可以跑通Helloworld程序。目前开发的重点在完善芯来科技的 ECLIC 中断控制器的 QEMU 仿真。ECLIC 每个中断源拥有的寄存器定义了中断级别、优先级、触发模式、使能位、向量和非向量模式等内容,在中断触发时,遍历中断队列,存在多个等待中(pending)中断时,依据优先级、中断级别等属性决定是否发生中断嵌套或咬尾。中断咬尾需要对中断上下文的保存进行修改,因此需要对 QEMU 中断机制的仿真进一步了解。ECLIC 的仿真开发仍在进行中,预计本月末尾前能够跑通过芯来科技SDK中 ECLIC 相关示例。
- PLCT实验室建立了arkcompiler-materials库用来保存方舟编译器相关材料,后续会持续更新。
https://github.com/isrc-cas/arkcompiler-materials
- PLCT实验室的史宁宁依然每周在更新方舟编译器社区周报(OpenArkCompiler Weekly),目前已经更新到第十九期。
方舟编译器周报每周日晚上通过Repo、知乎、Bilibili和邮件列表发布。
Repo: https://github.com/isrc-cas/arkcompiler-materials
知乎:https://zhuanlan.zhihu.com/openarkcompiler
Bilibili:https://www.bilibili.com/read/readlist/rl199373
邮件列表及其订阅方式:https://gitee.com/harmonyos/OpenArkCompiler/issues/I1EWAX
Spike上的snapshot功能已初步支持,可以对spike程序的运行状态进行保存和恢复。
代码地址:https://github.com/isrc-cas/plct-spike
使用方法也很简单,如果需要建立snapshot,只需要使用-d参数运行spike或在程序运行过程中通过ctrl+C进入到交互模式,然后输入snapshot+文件名,就可以创建当前状态的快照到文件中,如果需要加载snapshot的话,运行spike时需要额外添加一个--snapshot=的参数来指定使用的快照文件。
相关介绍参见:https://zhuanlan.zhihu.com/p/159401560
QEMU RVV v0.9支持已在完成大部分指令支持,不幸与sifive提交的rvv 0.9支持撞车。
patch邮件参见:https://lists.nongnu.org/archive/html/qemu-riscv/2020-07/msg00184.html
该patch系列相对更加完善,后续将根据该原始patch合并生成一版RVV-0.9支持,基于该版本协助进行RVV相关测试。
前期关于MLIR Python Bindings的实践,已发布至社区:
https://llvm.discourse.group/t/mlir-python-bindings-test-problem/1361
目前经过讨论,社区决定先开发MLIR C API,其他语言的API将会基于C接口实现:
https://llvm.discourse.group/t/rfc-rebooting-c-apis-for-core-ir/1380
https://llvm.discourse.group/t/rfc-starting-in-tree-development-of-python-bindings/1378
基于C API的Python Bindings将会在C接口完成之后进行绑定,在此之前,下面的GitHub仓库将继续保持跟随Upstream的步伐进行Python Bindings的探索:
GitHub仓库:https://github.com/zhanghb97/mlir-python-bindings
关于MLIR的知乎文章:
从Phabricator拉取MLIR草稿代码 - https://zhuanlan.zhihu.com/p/157554976
[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
- rvv-benchmark https://github.com/isrc-cas/rvv-benchmark
- 工具箱 https://github.com/isrc-cas/PLCT-toolbox