感谢最近刚刚进入RISC-V国际基金会董事会的包云岗老师,将我们引荐给了基金会的CTO并进行了几次技术交流。现在,RISC-V基金会终于知道软件所PLCT实验室的存在了。
通过这几次会议,我才注意到所有的RISC-V基金会的技术会议实际上都是公开的。不仅有列表列出了所有的时间,甚至提供了一个 ICS 日历文件,让我们可以「一键导入」所有的RISC-V技术会议。所有的会议采用 Zoom Meeting,会议链接、密码也都是公开的,公开在一个 Google Sheet 里。看来,是我孤陋寡闻了。以前一直以为只有邮件列表的形式,以为开会也都是闭门的。
过去几天,参加了几次会议。有 Code Size Reduction 的特定主题会议,也有 Software Standing Committee (SSC)的会议。主要的感受有两个:
-
开会的时间上,对于中国地区而言算不上友好。 全球会议,北美、西欧、东亚(中国)三个地方是无法调和的,总有一方是要在睡眠时间爬起来的。 不过我想要参加的软件类的会议都是在晚上的11点,还不坏。特权指令、安全性的会议时间是凌晨2点或4点,就不一定能够爬的起来了。 开会时间上而言,主要是一开始的发起人和主导的几个成员协商决定。可以看到,东亚地区出了新竹会出一些同行参与之外,基本上是欧美两地的同行主导的。起步晚了,也没办法。
-
参加会议的成员中没有看到中国大陆同行的名字。 虽然这是我预料内的情况,但是还是会有些失落。不管是5G标准还是芯片指令集规范,都是需要积极参与标准的制定、在尽量靠近决策层源头的为止进行参与和贡献,才有被作为重要的伙伴被看待的可能。或许硬件类的会议是有大陆的同行参加的,仅仅是这几次软件类的会议中没有出现(赶上了国庆)。 当然,作为过去一两个星期才开始参加会议的PLCT而言并没有什么立场能够鞭策业内的小伙伴。接下来,我们打算积极的参与所有跟我们有关联的软件类的会议。 刚开始也并不太懂,不知道在什么时候插话合适。不过我相信,坚持半年,肯定会有不一样。希望到那个时候,PLCT能够为国内的小伙伴加入RISC-V基金会的技术会议铺好入门的台阶。
最后,虽然迟了一点,祝大家节日快乐,身体健康,工作有干劲。
本期没有什么特别的,一切都在按部就班的开发,debug,推送到上游。
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
本次除RVV之外没有其他新增内容。
按部就班的进行。目前已经可以在 Release 构建下跑通 SunSpider、Kraken、Octane 三个 JS 的 Benchmarks。
- 修复V8中浮点操作出现NaN的问题 riscv-collab/v8#251
- 增加一个python脚本,用于比较risc-v与mips64直接的指令数量 riscv-collab/v8#244
- 增强了临时寄存器管理后,修复了一个之前关于临时寄存器使用不当的问题 riscv-collab/v8#236
- 修复一个测试样例因为堆栈大小不合适造成的失败 riscv-collab/v8#235
- 继续为v8-riscv添加C扩展指令,c.jr, c.mv, c.jalr (riscv-collab/v8#241)
- 添加C扩展指令,c.addiw, c.addi16sp, c.li, c.lui, c.slli (riscv-collab/v8#242)
- 添加C扩展指令,c.fldsp, c.lwsp, c.ldsp, c.swsp c.sdsp c.fsdsp (riscv-collab/v8#252)
-
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 及以上的版本。
- Android common kernel 的
-
PLCT 实验室开始研究如何将 AOSP 的 bionic 库移植到 RISC-V 上,目前主要工作是在修改移植编译框架。
-
PLCT 实验室的汪辰在 “知乎” 上的 “RISC-V、Linux 和 AOSP” 的专栏持续更新,发布了两篇研究实验报告:
- 在 QEMU 上运行 RISC-V 64 位版本的 Linux: https://zhuanlan.zhihu.com/p/258394849
- 编译一个 RISC-V 的 Android 内核:https://zhuanlan.zhihu.com/p/260356339
- 对OpenJ9(无JIT)移植步骤大纲进行了梳理:https://zhuanlan.zhihu.com/p/260428045
- 在QEMU上对OpenJDK (Zero port已经可用并在Fedora的rpm源中了,可以作为基线)和 OpenJ9 V11 进行了DaCapo-9.12-bach-MR1基准测试,测试结果:https://zhuanlan.zhihu.com/p/260419048
- 在QEMU上进行SPECjvm2008基准测试的过程中发现了高版本JDK会引起startup.compiler.sunflow测试项目的假死,对此问题的分析:https://zhuanlan.zhihu.com/p/258483799
- 结合「深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)- 周志明 」阅读OpenJDK11的源码,总结笔记:
- Java内存区域与内存溢出异常:https://zhuanlan.zhihu.com/p/258371919
- GC收集器与内存分配策略:https://zhuanlan.zhihu.com/p/259191066
- 前端编译与优化:https://zhuanlan.zhihu.com/p/260108108
本期没有新的进展。
本期没有新的进展。
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
本期没有新的进展。
本期没有新的进展。
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
本期没有新的进展。
本期没有新的进展。
本期没有新的进展。
本期没有新的进展。
https://github.com/isrc-cas/eternal-balance
如果你感兴趣,欢迎加入永恒天平项目,一起做些有意思的事情!
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 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/v8-riscv/v8
- 永恒天平 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