Skip to content

Latest commit

 

History

History
222 lines (131 loc) · 11.9 KB

File metadata and controls

222 lines (131 loc) · 11.9 KB

PLCT开源进展·第10期·2020年10月01日

卷首语

感谢最近刚刚进入RISC-V国际基金会董事会的包云岗老师,将我们引荐给了基金会的CTO并进行了几次技术交流。现在,RISC-V基金会终于知道软件所PLCT实验室的存在了。

通过这几次会议,我才注意到所有的RISC-V基金会的技术会议实际上都是公开的。不仅有列表列出了所有的时间,甚至提供了一个 ICS 日历文件,让我们可以「一键导入」所有的RISC-V技术会议。所有的会议采用 Zoom Meeting,会议链接、密码也都是公开的,公开在一个 Google Sheet 里。看来,是我孤陋寡闻了。以前一直以为只有邮件列表的形式,以为开会也都是闭门的。

过去几天,参加了几次会议。有 Code Size Reduction 的特定主题会议,也有 Software Standing Committee (SSC)的会议。主要的感受有两个:

  1. 开会的时间上,对于中国地区而言算不上友好。 全球会议,北美、西欧、东亚(中国)三个地方是无法调和的,总有一方是要在睡眠时间爬起来的。 不过我想要参加的软件类的会议都是在晚上的11点,还不坏。特权指令、安全性的会议时间是凌晨2点或4点,就不一定能够爬的起来了。 开会时间上而言,主要是一开始的发起人和主导的几个成员协商决定。可以看到,东亚地区出了新竹会出一些同行参与之外,基本上是欧美两地的同行主导的。起步晚了,也没办法。

  2. 参加会议的成员中没有看到中国大陆同行的名字。 虽然这是我预料内的情况,但是还是会有些失落。不管是5G标准还是芯片指令集规范,都是需要积极参与标准的制定、在尽量靠近决策层源头的为止进行参与和贡献,才有被作为重要的伙伴被看待的可能。或许硬件类的会议是有大陆的同行参加的,仅仅是这几次软件类的会议中没有出现(赶上了国庆)。 当然,作为过去一两个星期才开始参加会议的PLCT而言并没有什么立场能够鞭策业内的小伙伴。接下来,我们打算积极的参与所有跟我们有关联的软件类的会议。 刚开始也并不太懂,不知道在什么时候插话合适。不过我相信,坚持半年,肯定会有不一样。希望到那个时候,PLCT能够为国内的小伙伴加入RISC-V基金会的技术会议铺好入门的台阶。

最后,虽然迟了一点,祝大家节日快乐,身体健康,工作有干劲。

本期亮点::无

本期没有什么特别的,一切都在按部就班的开发,debug,推送到上游。

RISC-V 开源工具链进展

RISC-V Vector Extension Support

RVV-LLVM,已经初步实现对RISC-V向量Intrinsic的支持,并在PLCT Github仓库开源。目前,可以成功编译OpenCV,并在 QEMU 模拟器上运行测试。

后续需要做的工作包括:

1)完善现有代码实现

2)增加16位浮点的支持(Zfh扩展)

3)代码生成阶段的优化工作(消除冗余的setvl指令)

4)向LLVM上游提交Patch

5)探索支持Scalable向量的自动向量化工作,从而可以充分利用RVV的特性,提高性能

欢迎使用,地址在老地方:

https://github.com/isrc-cas/rvv-llvm

同时我们也开放了使用的 benchmark(整理自 RISC-V V 扩展的官方文档)

https://github.com/isrc-cas/rvv-benchmark

Clang/LLVM for RISC-V

本次除RVV之外没有其他新增内容。

V8 for RISC-V 项目进展

按部就班的进行。目前已经可以在 Release 构建下跑通 SunSpider、Kraken、Octane 三个 JS 的 Benchmarks。

  1. 修复V8中浮点操作出现NaN的问题 riscv-collab/v8#251
  2. 增加一个python脚本,用于比较risc-v与mips64直接的指令数量 riscv-collab/v8#244
  3. 增强了临时寄存器管理后,修复了一个之前关于临时寄存器使用不当的问题 riscv-collab/v8#236
  4. 修复一个测试样例因为堆栈大小不合适造成的失败 riscv-collab/v8#235
  5. 继续为v8-riscv添加C扩展指令,c.jr, c.mv, c.jalr (riscv-collab/v8#241)
  6. 添加C扩展指令,c.addiw, c.addi16sp, c.li, c.lui, c.slli (riscv-collab/v8#242)
  7. 添加C扩展指令,c.fldsp, c.lwsp, c.ldsp, c.swsp c.sdsp c.fsdsp (riscv-collab/v8#252)

AOSP for RISC-V

  1. PLCT 实验室正在向 RISC-V 移植 AOSP 的内核

    • Android common kernel 的 android-5.4-stable 分支版本 + Android base config fragment(基于 android11-release 分支),采用 RISC-V 的 GNU 工具链(gcc version 10.1.0),可以编译通过并在 QEMU (v5.1.0) 上启动并挂载一个最小根文件系统。
    • Android common kernel 的 android-mainline 分支版本(内核版本 v5.9-rc4) + Android base config fragment(基于 master 分支),采用 RISC-V 的 GNU 工具链(gcc version 10.1.0)或者 LLVM/Clang(10.x),均可以编译通过并在 QEMU (v5.1.0) 上启动,但挂载最小根文件系统时会报 “Segmentation Fault” 错(如果换成对应的主线内核版本则无此问题)。具体原因排查中,估计和 Android 内核修改有关。另外实验中还发现 LLVM/Clang 编译的内核在 v5.8 之前的版本在 QEMU 上运行不稳定的现象,提了一个 issue 上报给社区,所以综合来看目前虽然从 Andorid 的角度来说 v5.4 是当前比较稳定的版本,但对于 RISC-V 移植来看,建议使用 v5.8 及以上的版本。
  2. PLCT 实验室开始研究如何将 AOSP 的 bionic 库移植到 RISC-V 上,目前主要工作是在修改移植编译框架。

  3. PLCT 实验室的汪辰在 “知乎” 上的 “RISC-V、Linux 和 AOSP” 的专栏持续更新,发布了两篇研究实验报告:

OpenJDK for RISC-V

  1. 对OpenJ9(无JIT)移植步骤大纲进行了梳理:https://zhuanlan.zhihu.com/p/260428045
  2. 在QEMU上对OpenJDK (Zero port已经可用并在Fedora的rpm源中了,可以作为基线)和 OpenJ9 V11 进行了DaCapo-9.12-bach-MR1基准测试,测试结果:https://zhuanlan.zhihu.com/p/260419048
  3. 在QEMU上进行SPECjvm2008基准测试的过程中发现了高版本JDK会引起startup.compiler.sunflow测试项目的假死,对此问题的分析:https://zhuanlan.zhihu.com/p/258483799
  4. 结合「深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)- 周志明 」阅读OpenJDK11的源码,总结笔记:

OpenBLAS for RISC-V using Vector Extension

本期没有新的进展。

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

本期没有新的进展。

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

1.PLCT实验室的史宁宁编写的《华为方舟编译器之美——基于开源代码的架构分析与实现》已由清华大学出版社出版,近日将上架各大电商平台。

2.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 特性支持

本期没有新的进展。

QEMU RVV v0.9+ 指令集支持

本期没有新的进展。

MLIR

PLCT实验室张洪滨向 MLIR repo 提交 patch:

Committed:

[mlir] expose affine map to C API

https://github.com/llvm/llvm-project/commit/b76f523be6ea606d9cf494e247546cec1cd7f209

This patch provides C API for MLIR affine map.
- Implement C API for AffineMap class.
- Add Utils.h to include/mlir/CAPI/, and move the definition of the CallbackOstream to Utils.h to make sure mlirAffineMapPrint work correct.
- Add TODO for exposing the C API related to AffineExpr and mutable affine map.

Differential Revision: https://reviews.llvm.org/D87617

Reviewing:

[mlir] Add Float Attribute, Integer Attribute and Bool Attribute subclasses to python bindings.

Differential Revision: https://reviews.llvm.org/D88531

CIRCT

本期没有新的进展。

OpenROAD

本期没有新的进展。

Chisel/FIRRTL

本期没有新的进展。

永恒天平 / Eternal Balance

本期没有新的进展。

https://github.com/isrc-cas/eternal-balance

如果你感兴趣,欢迎加入永恒天平项目,一起做些有意思的事情!

GSoC OpenCV项目进展

OpenCV,已经初步实现对RISC-V向量扩展指令的支持,并以 Draft Pull Request 的形式提交给OpenCV社区。

目前,通过 QEMU 模拟器测试构建好的OpenCV,还存在一些测试用例失败的情况。有一部分原因是由于现有的GCC工具链对RVV Intrinsic支持不完善导致的,另外也可能有些是我们移植OpenCV自己的错误。

后续需要做的工作包括:

1)分析和解决OpenCV测试失败的用例

2)寻找可以测试性能的支持RISC-V向量扩展指令的硬件平台,进行测试测试

3)探索如何从OpenCV整体框架上支持Scalable向量,从而可以充分利用RVV的特性,提高性能

其他工作

最近的新一学期的PLCT讨论班开始了。开放性线上会议,可以自由加入。目前是以《编译器设计》(Engineering A Compiler)为教材在进行讨论。欢迎感兴趣的小伙伴加入。时间是每周五的 15:00 - 16:00 一个小时。

加入方式:添加组织者吴伟的微信(fangzhang1024)加入微信讨论群。添加时请注明编译课程或PLCT讨论班,方便通过。

参考链接

[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/v8-riscv/v8
  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