对于PLCT实验室而言,过去的三月是紧张的:分布在全国多个城市(尤其是上海和长春)的PLCT的小伙伴不同程度的受到了疫情波影响,我们会经常集体讨论风险规避和预案,如何在后疫情时间坚强和高质量的生活下去,相互鼓励。同时,过去的三月是繁忙的:多位新同学通过了严格的面试流程进入PLCT实验室实习;PLCT实验室开始为中科院计算所的香山开源RISC-V处理器提供编译器、模拟器等基础软件方面的定制和优化工作,并从项目开始就立足于帮助香山进入各类upstream;开始与 OpenHW Group 更为紧密的合作,并积极推动亚洲工作组的成立和路线图的制定;与 RISC-V 基金会合作,为全球更多的高校和企业提供资源支持;协助和指引 Tarsier Team 继续发展壮大,努力填坑,早日达成年初公开的PLCT路线图2022里的目标。
openEuler RISC-V 终于在3月的最后一天走上了每日构建和每日测试的正途。自2021年7月份开始一直磕磕绊绊到现在,终于爬上了第一级台阶,距离 openEuler Arm64 和 X86 架构的距离终于小一点了。这大半年的经历让我们又一次深刻的意识到:纸上得来终觉浅,绝知此事要躬行。RISC-V 操作系统项目的工作量是PLCT实验室擅长的编译器工作量的100倍以上,需要的技术背景和全局理解能力都很不一样(这也是为什么要专门成立/剥离 Tarsier Team 的原因)。以后,要更加 humble 了。
-
我们非常高兴的宣布 LibreOffice for RISC-V 的 porting 工作已经有人接了。新加入 Tarsier Team 的钱耀津(Ryan)同学,在还没有搞清楚状况的状态下接下了重担。虽然整个3月份除了熟悉环境、尝试构建、并且去 LibreOffice 的BTS上开了个 issue/bug 宣称自己是要做 RISC-V porting 的钱耀津之外,什么外部可见的产出都还没有,但是,我们相信钱耀津同学一定是可以在今年搞定的!
-
Tarsier Team 已经初具规模,组建了超过10个全职员工和30个实习生的小团队。进一步的,非常感谢中国科学院软件研究所王青老师团队提供的「群智众测平台」,让 Tarsier Team 可以快速的通过该平台为 openEuler RISC-V 项目组建起一支(马上就要达到)百人规模的功能测试团队。
- V8 Upstreaming
- 独立分配Vector register [riscv64][register-alloc] Implement vector register independently allocating
- 修复nodejs运行Webpack时出现崩溃 [riscv64] Fix segmentation fault of webpack-make from cockpit
- Port Wasm的若干refactor3492398issue from OpenSuse
- 在指令选择中去掉冗余的符号扩展[riscv64] Enhance instruction selection to remove unnecessary sign extension
- [riscv64] [deoptimizer] Remove non-fixed-size deopts
- [riscv64] Use shift register when shift amount is too large
- [riscv64] Use macros to control the compilation of RVV
- [riscv64] Remove dynamic map checks and custom deoptimization kinds
- [riscv64] Keep the type consistent in in_range
- [riscv64] Fix build error which is introduced by CL:3516747
- [riscv64] add a7 into wasm-linkage
- [riscv64] Port [safepoints] Various refactors
- Chromium
- 提交RISCV64 Build代码3423287
- Nodejs
- Fix riscv64 build fail, cherry pick from v8 upstream42067
- V8 课程
- V8 RV32G Porting 从3月起,V8的RV32G移植以Linux Fundation实习项目的形式开始了,Mentor来自PLCT V8小队。该项目计划在未来半年时间内完成V8上RV32G架构的移植和upstream,开发过程的代码、资料都将开源
- OpenJDK for RV32G的解释器已经可以运行起来了,目前正在运行各个测试集,查漏补缺。各个测试集的支持进度如下:SPECjvm 100%(张定立), jtreg 74%(曹贵), DaCapo 78%(章翔),jcstress 99%(曹贵)。
- Fix local variable offset error in generate_normal_entry function(曹贵) openjdk-riscv/jdk11u#343
- Rv32g dev c2(史宁宁) openjdk-riscv/jdk11u#346
- Successful rv32g C2 build(张定立) openjdk-riscv/jdk11u#347
- Fix the patch_addr_in_movptr and get_target_of_movptr(史宁宁) openjdk-riscv/jdk11u#348
- Fix the error of java -version when use 'make'(史宁宁) openjdk-riscv/jdk11u#350
- Fix the slli instruction, and the offset when the sp register is moved.(曹贵、章翔) openjdk-riscv/jdk11u#351
- Fix configure integration(张定立) openjdk-riscv/jdk11u#352
- Modify the RISCV32 name system and improve the thread code(史宁宁) openjdk-riscv/jdk11u#353
- Imporve the COMPILER2 code in stubGenerator_riscv32.cpp(史宁宁) openjdk-riscv/jdk11u#354
- Delete code about 64-bit registers on riscv32.ad(章翔) openjdk-riscv/jdk11u#355
- Fix pass long args in jniTypes_riscv32.hpp(曹贵) openjdk-riscv/jdk11u#356
- Fix spillu/unspill/unspillu in C2(张定立) openjdk-riscv/jdk11u#357
- Fix is64 in riscv32.ad(章翔) openjdk-riscv/jdk11u#358
- Remove is64 in riscv32.ad(张定立) openjdk-riscv/jdk11u#359
- Fix the 'only bound registers can be killed'(史宁宁) openjdk-riscv/jdk11u#361
- Fix x11 registers not saving correctly when using synchronized(曹贵) openjdk-riscv/jdk11u#362
- 【Java on RISC-V】OpenJDK C2移植 - ADL简介(张定立) https://zhuanlan.zhihu.com/p/489011490
-
LLVM upstream commits:
-
已经提交到主线的patch:
-
- 合作完整支持了K拓展: https://reviews.llvm.org/D112774
-
- 增加了 range check 和 align check: https://reviews.llvm.org/D117946
-
- 完整支持了Zihintpause拓展: https://reviews.llvm.org/D117789
-
- 历时一年多,支持了Zfinx的MC层: https://reviews.llvm.org/D93298
-
- 优化浮点拓展指令选择PAT结构: https://reviews.llvm.org/D121066
-
- 做了一些对于setTargetDAGCombine的聚合工作:https://reviews.llvm.org/D122557
-
-
新的,在review中的patch:
-
- 支持了zihintntl拓展指指令:https://reviews.llvm.org/D121670
-
- 尝试解决gather/scatter崩溃的问题: https://reviews.llvm.org/D121677
-
- 尝试fcmp 指令再zfinx下添加支持:https://reviews.llvm.org/D121774
-
- 添加add lazy jit 支持:https://reviews.llvm.org/D122543
-
- 尝试添加B扩展的clz指令支持:https://reviews.llvm.org/D121915
-
开始参与香山处理器的微架构支持工作,主要包括南湖与雁西湖的微架构定义,fusion,cost处理:(微架构添加说明) (“南湖”微架构)
更新后K扩展intrinsic的部分patch已经合并进入upstream: (zk process) (order handle)
Codesize reduction的ZC扩展更新到0.70.3版本目前已支持ZCA,ZCF,ZCB,ZCMB,ZCMP扩展,正在实现ZCMT中:zc-gcc zc-binutils
ZC开发过程中遇到的问题: (zcf与zca的关系) (是否保留c.sext.w)
ZTSO扩展支持: ZTSO扩展目前已进入forzen状态,我们已经向上游提交了patch,收到大量反馈,目前仍在更新中 (ZTSO arch supports) (ZTSO elf header)
CMO gcc支持:Binutils上游已经支持了CMO扩展(包括prefetch与cache manage,我们提交了gcc部分的patch,目前仍在review中
ZMMUL扩展支持:rebase了ZMMUL的实现到gcc10,gcc11,upstream
P扩展的spec最近又开始活跃起来了,预计4月份解决与其他扩展的冲突后会进行forzen,我们正在准备P扩展工具链支持的rebase工作中
四月我们会继续积极参与RISC-V GNU工具链的支持,并开始进行一些libgcc和ld有关的工作,RISC-V社区正在筹备内部的pre-review机制,后续与RISC-V GNU工具链相关的patch可先发送至[email protected],通过内部审查提高patch的review效率
RISC-V GNU Toolchain双周会slides链接: 3.10, 3.24
Codesize reduction进展:https://docs.google.com/presentation/d/1SHhPzeXMQWr3x67SMp2Vj6hABPczHaEVdssLxgjTCzc/edit#slide=id.g1198b3c0859_0_107
如何向GNU upstream贡献代码: https://github.com/plctlab/riscv-gcc/wiki/%E5%A6%82%E4%BD%95%E5%90%91GNU-upstream%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81
-
Sync aosp-riscv to RVI upstream:
-
Sync aosp-riscv from RVI upstream:
-
aosp-riscv development and bugfix:
bionic part:
build part:
- New TARGET_PRODUCT sdk_phone_riscv64 with 64bit Support Only
- changed device/generic/goldfish to aosp-riscv
- pass build with m --skip-ninja for sdk_phone_riscv64-eng
tests part:
- fixed doc link issue
- fixed issue when run bionic host test
- sudo is not required for make_rootfs.sh
- added prebuilt gdb
- use gdb built for 18.04
- PR for Feature "setup golang develop/debug env for soong"
toolchain part:
-
Technical articles related:
- Arch Linux RISC-V 移植进度 Arch Linux RISC-V
- [core] 242 / 256 (94.53%)
- [extra] 2580 / 2987 (86.37%)
- [community] 6997 / 9119 (76.72%)
- Arch Linux RISC-V 软件包 patch 仓库 archriscv-packages 。 本月合计 104 PR 。104 PR for archriscv
- upstream :
- Issues
- Bugs report
- 新增文档 3 篇:
- a total of 370 keywording commits: https://rvk3b.plctlab.org/riscv/stats/2022_03.txt
- sci-mathematics/z3: fix link atomic, gentoo/gentoo#24519, Z3Prover/z3#5897
- dev-qt/qtcore: use link option -pthread instead of -lpthread, gentoo/gentoo#24711
- dev-libs/rocksdb: gentoo/gentoo#24557
- media-libs/libjxl: https://github.com/gentoo/gentoo/commit/5cdf389fd2bdffd38450020639614522c63c2b82
- media-video/mplayer: gentoo/gentoo#24506
- dev-util/{distro-info,abi-dumper,astlye}, net-misc/mikutter, x11-terms/mlterm: gentoo/gentoo#24666
- etc.
- kernel
- sys-kernel/sifive-sources-5.17.0: https://github.com/gentoo/riscv/commit/b21f1b03ab7d8b13ac92fc1a1486372d4f8a10be
- riscv overlay
- dev-qt/qtwebengine: add riscv support, https://github.com/gentoo/riscv/commit/45541db3ba10d2245663953add1fe08402e621df
- tools
- zarro-boogs-tools: Facade for Gentoo keywording tools that allows them to be used without Bugzilla, https://github.com/Leo3418/zarro-boogs-tools
- RISC-V chroot environment scripts on Gentoo Linux for qemu-user: https://github.com/bekcpear/riscv-chroot-env
- cc-wrapper-test NixOS/nixpkgs#163117
- makeDesktopItem NixOS/nixpkgs#163307
- noto-fonts-emoji NixOS/nixpkgs#163677
- bind NixOS/nixpkgs#163854
- polkit NixOS/nixpkgs#163956
- nodejs NixOS/nixpkgs#165074
and it greatly reduces CI time!
https://github.com/NickCao/carinae
no more leaked bot tokens
https://github.com/NickCao/canopus
之前的小伙伴跑路了。需要重新招人开始。欢迎加入。
还没开始。欢迎感兴趣的小伙伴报名来实习或全职。
-
我们进一步优化了 OpenCV 中 Universal Intrinsic 的 RVV 后端实现:PR #21351 (Megerd),该PR在现有的定长SIMD风格的硬件抽象层中更好地兼容了可变长RISC-V Vector 特性。
-
我们同时在实现一版全新的 RVV Universal Intrinsic,该版本针对可变长度向量体系结构设计,将部分重构 OpenCV 硬件抽象层中现有的设计方案,从而尝试在根本上解决定长 SIMD 编程模型和可变长 Vector 编程模型之间兼容性差的问题。该工作目前还在比较初始的阶段,但目前已经有了一个示例性质的项目:https://github.com/hanliutong/rvv-ui。
欢迎感兴趣的小伙伴报名来实习或全职。
之前的小伙伴跑路了。需要重新招人开始。欢迎加入。
欢迎感兴趣的小伙伴报名来实习或全职。
- Zfinx扩展暂无更新:riscv-software-src/riscv-isa-sim#831
- K扩展支持已向上游提交发起第9版PR(plct-k-upstream-v9)
- Zfinx扩展支持已被上游接收(plct-zfinx-upstream-v6)
- 向上游发送部分RVV的修复的PR
- Core-V x-pulp自定义指令集支持目前已完成初步开发, core-v-mcu相关支持目前尚在开发当中(plct-corev-dev)
新开 bug: https://bugs.documentfoundation.org/show_bug.cgi?id=148134
- CMO扩展暂无更新,依旧在review当中: riscv/sail-riscv#137
- riscv-config合并支持暂无更新, config数据结构尚在讨论简化当中, 关于yaml解析库的调研也正在进行: riscv/sail-riscv#128
PLCT实验室的史宁宁依然每周在更新方舟编译器社区周报(OpenArkCompiler Weekly),目前已经更新到第106期。
方舟编译器周报每周日晚上通过Repo、知乎、Bilibili和邮件列表发布。
完成 RISC-V Vector Dialect 集成测试
- 添加三种集成测试用例
- test-riscvv-arithmetic
- test-riscvv-memory
- test-riscvv-stripmining)
- MLIR + RVV 集成测试环境搭建文档 (https://gist.github.com/zhanghb97/ad44407e169de298911b8a4235e68497)
- 正在整理 update patch & post ,更新后将会提交到:
更新针对 LLVM IR intrinsics mask/tail policy 的 pattern
ConvertPolicyOperandOpToLLVMPattern
针对 “policy” 参数,在参数列表结尾添加控制参数ConvertPassthruOperandOpToLLVMPattern
针对 “passthru” 参数,在参数列表开头添加控制参数
- RISC-V Mentorship: MLIR Convolution Vectorization - https://mentorship.lfx.linuxfoundation.org/project/f994928b-8998-4cd3-b66e-c576aa99c9d5
- Joe Wu 和 Ahmat 完成最终项目评估,未来将会继续贡献。
buddy-mlir
New features:
- Add C++ interfaces for digital image processing functions.
- Update
dip.corr_2d
interface.
WIPs:
- Add support for dip.rotate_2d
- Add pointwise-conv to gemm and conv2d_nhwc to GEMM by im2col pass
- Add PoolingNhwcSum vectorization optimizatoin.
- Add container runtime support.
- Add home page for the buddy compiler.
buddy-benchmark
New features:
- Improve MemRef container for reading images.
- Add initial digital audio processing benchmark.
WIPs:
- Add audio data structure support in
MemRef
container. - Experiment with mlir return format and pointwise conv.
- Add benchmark for the sum pooling vectorization pass.
- Add more cases to digital audio processing benchmark.
@JACKLIAO0:
- 完成 Diplomacy 的 LazyModule 单元测试。
@SharzyL:
- ARA 代码分析
- RVV 访存可视化 benchmark
@wissygh:
- SRT 学习与硬件 prototype
@midnighter95:
- Debug Module 学习
@ZenithalH: chipsalliance/rocket-chip#2950
@LucasWye: CHACHA 算法实现与测试
@CircuitCoder: chipsalliance/chisel#2407 chipsalliance/chisel#2449
@dramforever:
- 同 @sequencer 完成对 GAA 的设计。
- https://github.com/dramforever/scirt 面向 MFC 的轻量级 Scala3 电路 DSL
@oceansen: Prototype Xilinx DDR Phy
@ndxsf: prototype CIRCT minimize IR
@yqszxx: 摸了
@seehowl: 摸了
@SingularityKChen: 摸了
本期没有新的进展
本期没有新的进展
- pmp_set/pmp_get运行时错误移动到编译时,link
- 修正代码让访问hart_count/stack_size的代码更灵活,link
- 在未来128位机器上需要生成访问内存的函数,通过条件编译添加提醒,link
- opensbi中有些结构体需要在汇编中访问,定义了一些偏移量供汇编使用,添加一些检测防止结构体修改遗忘偏移量的修改,link1 link2 link3
- 添加environment configuration支持,link
- 添加Smstateen支持,link
本期没有新的进展
- 支持了 constructor 和 field 的自动互递归 PR-326
- 重构了 Level 的相关结构 PR-327, PR-348
- 支持了对 meta 做 lift 和 unlift PR-354
- 类型检查器中对 pattern 和 pi 的改进 PR-350, PR-344, PR-353
- Sample 不再作为单独的 declaration 存在,相反,它们现在是 declaration 的 modifier PR-351
- 更新了部分测试,修复了 REPL, LSP 和其他一些不足一提的 bug
- 改善了 struct 相关的错误信息
- 升级了构建工具的版本
- tactic 系统、惰性的 Term Visitor 正在完善中
完整版本请查看:Aya 开发仓库
本月测试了一组GCC11.1.0和LLVM15.0.0的CPU2017的数据。其中LLVM在编译CPU2017的Fortran程序时,有不少报错,基本都是Flang前端语义分析的错误,已经向upstream提交了两个issue,目前还没有fix。另外将之前SPEC测试用到的config做了整理,放在我个人的github上,有兴趣测试的朋友可以参考。 同时,更新了Hifive Unleashed开发板上的Coremark和Dhrystone数据。OpenBLAS库在Unmatched平台上的性能情况也正在测试中。详情如下:
-
- GCC11.1.0和LLVM15.0.0在Unmatched上的CPU2017数据
编译优化使用O3,小分贴在了这里:
https://github.com/mollybuild/RISCV-Measurement/blob/master/SPEC-CPU-Data-Update/GCC11.1.0.md
https://github.com/mollybuild/RISCV-Measurement/blob/master/SPEC-CPU-Data-Update/Clang15.0.0.md
-
- SPEC CPU2017部分Fortran程序使用Flang编译报错:
521,527,621,627,628,654
基本都是Flang前端语义分析的错误,向上游提交了2个issue,目前正在处理中:
-
- 整理汇总了之前SPEC CPU测试中用到的config文件:
https://github.com/mollybuild/RISCV-Measurement/tree/master/SPEC-CPU-Config
-
- 更新了Hifive Unleashed开发板上的Coremark和Dhrystone数据
-
- 在Unmatched上测试OpenBLAS的性能情况(正在进行)
- 从2月份开始转入 TARSIER 双周报: https://github.com/isrc-cas/tarsier-oerv/blob/main/biweekly/2022-03-10.md
- 从2月份开始转入 TARSIER 双周报: https://github.com/isrc-cas/tarsier-oerv/blob/main/biweekly/2022-03-10.md
- 从2月份开始转入 TARSIER 双周报: https://github.com/isrc-cas/tarsier-oerv/blob/main/biweekly/2022-03-10.md
- 从2月份开始转入 TARSIER 双周报: https://github.com/isrc-cas/tarsier-oerv/blob/main/biweekly/2022-03-10.md
- PLCT2022年开源路线图 https://github.com/plctlab/PLCT-Weekly/blob/master/PLCT-Roadmap-2022.md
- PLCT实验室的开放职位(社招) https://github.com/plctlab/PLCT-Weekly/blob/master/Jobs.md
- PLCT实验室的开放职位(实习生) https://github.com/plctlab/weloveinterns/blob/master/open-internships.md
- PLCT Weekly https://github.com/isrc-cas/PLCT-Weekly
- PLCT 公开报告 https://github.com/isrc-cas/PLCT-Open-Reports
- PLCT工具箱 https://github.com/isrc-cas/PLCT-toolbox
- C910 LLVM 支持 https://github.com/isrc-cas/c910-llvm
- RISC-V Vector Extension Support(rvv-llvm) https://github.com/isrc-cas/rvv-llvm
- rvv-benchmark https://github.com/isrc-cas/rvv-benchmark
- OpenCV for RISC-V https://github.com/isrc-cas/opencv-riscv (目前直接提交给上游了)
- V8 for RISC-V https://github.com/v8-riscv/v8
- 永恒天平 https://github.com/isrc-cas/eternal-balance/
- 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
- pacific(方舟编译器玩具运行时) https://github.com/isrc-cas/pacific
- zfinx工具链仓库地址:https://github.com/pz9115/riscv-gcc
- gcc: https://github.com/pz9115/riscv-gcc/tree/riscv-gcc-10.2.0-zfinx
- binutils: https://github.com/pz9115/riscv-binutils-gdb/tree/riscv-binutils-2.35-zfinx