Skip to content

Latest commit

 

History

History
159 lines (90 loc) · 9.89 KB

2020-07-16.md

File metadata and controls

159 lines (90 loc) · 9.89 KB

PLCT开源进展·第05期·2020年07月16日

卷首语

在过去的半个月中,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这样的社区,非常欢迎从一开始就直接参与到社区,直接在上游进行开发。或许国内还有不少的团队和个人抱着跟我们过去一样的想法,希望在看到本期的内容之后,能够更加放松一点,更加早一些的进入开源社区,去融入,去学习,去贡献。

本期亮点:V8 for RISC-V

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点举办线上讨论会。欢迎参加。

RISC-V 开源工具链进展

RISC-V Vector Extension Support

  1. 汇编方面,添加了所有v0.9版本新增rvv指令的测试用例。
  2. 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

Clang/LLVM for RISC-V

本次除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

V8 for RISC-V 项目进展

参见「本期亮点」。

面向国内RISC-V厂商的QEMU支持计划

目前的仿真SoC已经可以跑通Helloworld程序。目前开发的重点在完善芯来科技的 ECLIC 中断控制器的 QEMU 仿真。ECLIC 每个中断源拥有的寄存器定义了中断级别、优先级、触发模式、使能位、向量和非向量模式等内容,在中断触发时,遍历中断队列,存在多个等待中(pending)中断时,依据优先级、中断级别等属性决定是否发生中断嵌套或咬尾。中断咬尾需要对中断上下文的保存进行修改,因此需要对 QEMU 中断机制的仿真进一步了解。ECLIC 的仿真开发仍在进行中,预计本月末尾前能够跑通过芯来科技SDK中 ECLIC 相关示例。

在方舟开源编译器社区的工作

  1. PLCT实验室建立了arkcompiler-materials库用来保存方舟编译器相关材料,后续会持续更新。

https://github.com/isrc-cas/arkcompiler-materials

  1. 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上的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+ 指令集支持

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

前期关于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开源仓库及分享

  1. PLCT Weekly https://github.com/isrc-cas/PLCT-Weekly
  2. C910 LLVM 支持 https://github.com/isrc-cas/c910-llvm
  3. RISC-V Vector Extension Support(rvv-llvm) https://github.com/isrc-cas/rvv-llvm
  4. V8 for RISC-V https://github.com/isrc-cas/v8-riscv
  5. 永恒天平 https://github.com/isrc-cas/eternal-balance/
  6. PLCT 公开报告 https://github.com/isrc-cas/PLCT-Open-Reports
  7. QuickJS for RISC-V https://github.com/isrc-cas/quickjs-riscv
  8. PLCT-QEMU https://github.com/isrc-cas/plct-qemu
  9. Flounder https://github.com/isrc-cas/flounder
  10. OpenCV for RISC-V https://github.com/isrc-cas/opencv-riscv
  11. pacific(方舟编译器玩具运行时) https://github.com/isrc-cas/pacific
  12. rvv-benchmark https://github.com/isrc-cas/rvv-benchmark
  13. 工具箱 https://github.com/isrc-cas/PLCT-toolbox