Skip to content

Latest commit

 

History

History
536 lines (384 loc) · 30.5 KB

2022-04-01.md

File metadata and controls

536 lines (384 loc) · 30.5 KB

PLCT开源进展·第32期·2022年04月01日

卷首语

对于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 了。

本期亮点

  1. 我们非常高兴的宣布 LibreOffice for RISC-V 的 porting 工作已经有人接了。新加入 Tarsier Team 的钱耀津(Ryan)同学,在还没有搞清楚状况的状态下接下了重担。虽然整个3月份除了熟悉环境、尝试构建、并且去 LibreOffice 的BTS上开了个 issue/bug 宣称自己是要做 RISC-V porting 的钱耀津之外,什么外部可见的产出都还没有,但是,我们相信钱耀津同学一定是可以在今年搞定的!

  2. Tarsier Team 已经初具规模,组建了超过10个全职员工和30个实习生的小团队。进一步的,非常感谢中国科学院软件研究所王青老师团队提供的「群智众测平台」,让 Tarsier Team 可以快速的通过该平台为 openEuler RISC-V 项目组建起一支(马上就要达到)百人规模的功能测试团队。

V8 for RISC-V

  1. V8 Upstreaming
  2. Chromium
  3. Nodejs
    • Fix riscv64 build fail, cherry pick from v8 upstream42067
  4. V8 课程
  5. V8 RV32G Porting 从3月起,V8的RV32G移植以Linux Fundation实习项目的形式开始了,Mentor来自PLCT V8小队。该项目计划在未来半年时间内完成V8上RV32G架构的移植和upstream,开发过程的代码、资料都将开源

OpenJDK for RISC-V

项目进展

  1. OpenJDK for RV32G的解释器已经可以运行起来了,目前正在运行各个测试集,查漏补缺。各个测试集的支持进度如下:SPECjvm 100%(张定立), jtreg 74%(曹贵), DaCapo 78%(章翔),jcstress 99%(曹贵)。
  2. Fix local variable offset error in generate_normal_entry function(曹贵) openjdk-riscv/jdk11u#343
  3. Rv32g dev c2(史宁宁) openjdk-riscv/jdk11u#346
  4. Successful rv32g C2 build(张定立) openjdk-riscv/jdk11u#347
  5. Fix the patch_addr_in_movptr and get_target_of_movptr(史宁宁) openjdk-riscv/jdk11u#348
  6. Fix the error of java -version when use 'make'(史宁宁) openjdk-riscv/jdk11u#350
  7. Fix the slli instruction, and the offset when the sp register is moved.(曹贵、章翔) openjdk-riscv/jdk11u#351
  8. Fix configure integration(张定立) openjdk-riscv/jdk11u#352
  9. Modify the RISCV32 name system and improve the thread code(史宁宁) openjdk-riscv/jdk11u#353
  10. Imporve the COMPILER2 code in stubGenerator_riscv32.cpp(史宁宁) openjdk-riscv/jdk11u#354
  11. Delete code about 64-bit registers on riscv32.ad(章翔) openjdk-riscv/jdk11u#355
  12. Fix pass long args in jniTypes_riscv32.hpp(曹贵) openjdk-riscv/jdk11u#356
  13. Fix spillu/unspill/unspillu in C2(张定立) openjdk-riscv/jdk11u#357
  14. Fix is64 in riscv32.ad(章翔) openjdk-riscv/jdk11u#358
  15. Remove is64 in riscv32.ad(张定立) openjdk-riscv/jdk11u#359
  16. Fix the 'only bound registers can be killed'(史宁宁) openjdk-riscv/jdk11u#361
  17. Fix x11 registers not saving correctly when using synchronized(曹贵) openjdk-riscv/jdk11u#362

问题与文档:

  1. 【Java on RISC-V】OpenJDK C2移植 - ADL简介(张定立) https://zhuanlan.zhihu.com/p/489011490

Clang/LLVM for RISC-V 相关工作

GNU Toolchain for RISC-V 相关工作

开始参与香山处理器的微架构支持工作,主要包括南湖与雁西湖的微架构定义,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扩展(包括prefetchcache 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可先发送至dev-gnu-patches@riscv.org,通过内部审查提高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

AOSP for RISC-V

Arch Linux for RISC-V

Gentoo for RISC-V

Nixpkgs for RISC-V

Nixpkgs ecosystem

serve any nix store as binary cache, with streaming zstd compression

and it greatly reduces CI time!
https://github.com/NickCao/carinae

the world's most secured nix evaluator, with seccomp and landlock

no more leaked bot tokens
https://github.com/NickCao/canopus

Firefox on RV64GCV

之前的小伙伴跑路了。需要重新招人开始。欢迎加入。

Enable DynamoRIO running on RV64GC

还没开始。欢迎感兴趣的小伙伴报名来实习或全职。

OpenCV for RV64GCV

  • 我们进一步优化了 OpenCV 中 Universal Intrinsic 的 RVV 后端实现:PR #21351 (Megerd),该PR在现有的定长SIMD风格的硬件抽象层中更好地兼容了可变长RISC-V Vector 特性。

  • 我们同时在实现一版全新的 RVV Universal Intrinsic,该版本针对可变长度向量体系结构设计,将部分重构 OpenCV 硬件抽象层中现有的设计方案,从而尝试在根本上解决定长 SIMD 编程模型和可变长 Vector 编程模型之间兼容性差的问题。该工作目前还在比较初始的阶段,但目前已经有了一个示例性质的项目:https://github.com/hanliutong/rvv-ui。

Experimental/simd in LIBCXX

欢迎感兴趣的小伙伴报名来实习或全职。

LuaJIT RV64G porting

之前的小伙伴跑路了。需要重新招人开始。欢迎加入。

gem5

欢迎感兴趣的小伙伴报名来实习或全职。

Spike

QEMU

  • K扩展支持已向上游提交发起第9版PR(plct-k-upstream-v9
  • Zfinx扩展支持已被上游接收(plct-zfinx-upstream-v6)
  • 向上游发送部分RVV的修复的PR
    • Fix1 目前已被加入apply-to-riscv.next
    • Fix2 处于review当中
  • Core-V x-pulp自定义指令集支持目前已完成初步开发, core-v-mcu相关支持目前尚在开发当中(plct-corev-dev)

LibreOffice

新开 bug: https://bugs.documentfoundation.org/show_bug.cgi?id=148134

Other Support for RISC-V International

SAIL

  • CMO扩展暂无更新,依旧在review当中: riscv/sail-riscv#137
  • riscv-config合并支持暂无更新, config数据结构尚在讨论简化当中, 关于yaml解析库的调研也正在进行: riscv/sail-riscv#128

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

PLCT实验室的史宁宁依然每周在更新方舟编译器社区周报(OpenArkCompiler Weekly),目前已经更新到第106期。

方舟编译器周报每周日晚上通过Repo、知乎、Bilibili和邮件列表发布。

MLIR

Upstream RVV Dialect Proposal

完成 RISC-V Vector Dialect 集成测试

更新针对 LLVM IR intrinsics mask/tail policy 的 pattern

  • ConvertPolicyOperandOpToLLVMPattern 针对 “policy” 参数,在参数列表结尾添加控制参数
  • ConvertPassthruOperandOpToLLVMPattern 针对 “passthru” 参数,在参数列表开头添加控制参数

LFX - RVI Mentorship

Buddy Project

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.

Chisel / FIRRTL (CAAT小队)

@JACKLIAO0:

  1. 完成 Diplomacy 的 LazyModule 单元测试。

@SharzyL:

  1. ARA 代码分析
  2. RVV 访存可视化 benchmark

@wissygh:

  1. SRT 学习与硬件 prototype

@midnighter95:

  1. Debug Module 学习

@ZenithalH: chipsalliance/rocket-chip#2950

@LucasWye: CHACHA 算法实现与测试

@CircuitCoder: chipsalliance/chisel#2407 chipsalliance/chisel#2449

@dramforever:

  1. 同 @sequencer 完成对 GAA 的设计。
  2. https://github.com/dramforever/scirt 面向 MFC 的轻量级 Scala3 电路 DSL

@oceansen: Prototype Xilinx DDR Phy

@ndxsf: prototype CIRCT minimize IR

@yqszxx: 摸了

@seehowl: 摸了

@SingularityKChen: 摸了

coreboot for riscv

本期没有新的进展

openocd

本期没有新的进展

opensbi

  • pmp_set/pmp_get运行时错误移动到编译时,link
  • 修正代码让访问hart_count/stack_size的代码更灵活,link
  • 在未来128位机器上需要生成访问内存的函数,通过条件编译添加提醒,link
  • opensbi中有些结构体需要在汇编中访问,定义了一些偏移量供汇编使用,添加一些检测防止结构体修改遗忘偏移量的修改,link1 link2 link3
  • 添加environment configuration支持,link
  • 添加Smstateen支持,link

u-boot

本期没有新的进展

The Aya Therom Prover

  • 支持了 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 开发仓库

RISCV平台测试测评工作

本月测试了一组GCC11.1.0和LLVM15.0.0的CPU2017的数据。其中LLVM在编译CPU2017的Fortran程序时,有不少报错,基本都是Flang前端语义分析的错误,已经向upstream提交了两个issue,目前还没有fix。另外将之前SPEC测试用到的config做了整理,放在我个人的github上,有兴趣测试的朋友可以参考。 同时,更新了Hifive Unleashed开发板上的Coremark和Dhrystone数据。OpenBLAS库在Unmatched平台上的性能情况也正在测试中。详情如下:

    1. 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

    1. SPEC CPU2017部分Fortran程序使用Flang编译报错:

521,527,621,627,628,654

基本都是Flang前端语义分析的错误,向上游提交了2个issue,目前正在处理中:

llvm/llvm-project#54161

llvm/llvm-project#54163

    1. 整理汇总了之前SPEC CPU测试中用到的config文件:

https://github.com/mollybuild/RISCV-Measurement/tree/master/SPEC-CPU-Config

    1. 更新了Hifive Unleashed开发板上的Coremark和Dhrystone数据

    1. 在Unmatched上测试OpenBLAS的性能情况(正在进行)

openEuler for RISC-V

Fedora for RISC-V

Debian for RISC-V

Ubuntu for RISC-V

参考链接

PLCT开源仓库及分享