秋天是舒适和收获的季节。对于许多城市的伙伴而言,炎热的夏天终于过去,拉闸限电的恐惧也得以解除。PLCT实验室和TARSIER团队在过去的一个月,是忙碌且喜悦的:PLCT的创始人吴伟当选为新一届的LLVM基金会理事,任期2年;从2020年开始移植的 AOSP RISC-V 项目开始被 Google Android 团队逐步接收;PLCT新的调试器的课程开始筹备并将于10月开始连载;Spidermonkey 的 RISC-V JIT porting 正在顺利进行;LuaJIT 的 RISC-V porting 也开始有了起色,有可能在8周之后完成;RISC-V集群的搭建还处于筹备状态,看起来十月份要加油了。
在10月份,我们开始准备两个新的工作:2023年的 PLCT Roadmap 要开始准备,aka 许愿池2023计划要开始启动了。另一项工作是TARSIER团队开始认真的考虑维护一个RV32GC的Linux发行版。
祝福大家长假快乐,并期待在这个长假中各位都能有很好的收获。
在2022年8月份的LLVM基金会理事会(Board of Directors, BoD)换届选举中,来自PLCT实验室的吴伟成功当选为新一届理事。这(应该)是LLVM基金会自2014年组建以来第一次有中国或东亚地区的成员进入理事会。
LLVM基金会自2014年组建以来,共设置9个理事席位,其中有包含创始人 Chris Lattner 在内的6名常任理事和3名非常任理事。非常任理事每两年改选一次。吴伟先生的任期将从2022年10月开始至2024年10月结束。请注意,LLVM基金会并不直接干预LLVM社区的技术演进方向,主要在社区运营、基础设施、法务等方面进行协调决策。
AOSP官方社区接收了第一个 RISC-V 移植相关的代码补丁。这标志着RISC-V架构开始进入 Android 上游(upstream)生态支持。这一成果的取得并非轻松。RISC-V 社区移植AOSP的(公开)努力从2020年开始,历经了 Android 10 和Android 12 两个版本的 out-of-tree 的移植维护,多家成员单位投入了大量的资源和精力。
PLCT实验室是第一个公开进行AOSP移植工作的团队。从2020年8月份开始,2020年11月完成了初步的移植工作。阿里巴巴平头哥最早完成AOSP整体移植,并在2021年1月21日宣布进行开源。之后,AOSP的移植项目开始转由 RISC-V 国际基金会进行管理和协调。中科院软件所逐步将自己的移植汇总到了RISC-V国际基金会托管下的移植工程里。而RISC-V国际基金会开始积极、长期地与 Google Android 团队进行沟通,商讨AOSP项目官方支持RISC-V的时机和必要的技术前提。
目前还有很多工作需要完成,如果你对 AOSP for RISC-V 项目感兴趣,欢迎找汪辰老师聊一聊。汪辰老师是最早(公开)发起 AOSP for RISC-V 项目的开发者。他的邮箱是 [email protected]
最后,再次感谢所有参与 AOSP for RISC-V 开源项目的开发者和团队!
调试器(例如gdb/lldb)在软件开发过程中被广泛使用,但是有能力和机会从事调试器开发的技术专家非常稀有。PLCT实验室致力于RISC-V相关的移植优化工作,在对GNU工具链、Clang/LLVM工具链进行功能扩展和知识梳理时,注意到国内外关于调试器原理及实现相关的教学课程处于近似空白状态。因此,决定开设系列讨论课程并将内容免费公开。欢迎广大技术爱好者参与学习和讨论,期待大家的共同进步。
PLCT实验室一直致力于国内编译器、虚拟机等重要基础软件的教学工作及人才培养。在过去三年已经逐步积累完成了编译器、模拟器、虚拟机、RISC-V操作系统等系列课程的制作和推广。本次调试器课程的推出,将使得PLCT实验室的公开教学体系更加完善。
- 修复没有正确插入 vsetvli指令的问题 3917324: [riscv] Fix not calling vsetvli to set vtype correctly after branch | https://chromium-review.googlesource.com/c/v8/v8/+/3917324
- 修复在rv32平台当移位量小于-32时结果不正确 3912629: [riscv] Fix shift error when the shift amount is less than or equal to -32 | https://chromium-review.googlesource.com/c/v8/v8/+/3912629
- 修复rv64平台遇到uint32 compare时,source location不准确的问题 3903733: [riscv] Don't cover when node is Trap and uint32 compare | https://chromium-review.googlesource.com/c/v8/v8/+/3903733
- 3905856: [riscv] Port 3904233: Remove unused RelocInfo::Mode
- 3867138: [riscv] Port [wasm] Keep call_indirect index on the stack | https://chromium-review.googlesource.com/c/v8/v8/+/3867138
- 3885380: [riscv] Port [log][compiler] Enable first-execution logging | https://chromium-review.googlesource.com/c/v8/v8/+/3885380
- 3886478: [riscv] Port [wasm][liftoff] Fix and cleanup tracing of return value | https://chromium-review.googlesource.com/c/v8/v8/+/3886478
代码提交:
- Remove the lShiftL_regI_immGE32 openjdk-riscv/jdk11u#498
- Fix the lShiftL_reg_reg openjdk-riscv/jdk11u#499
- Rewrite the lShiftL_reg_reg and fix the lShiftL_reg_imm openjdk-riscv/jdk11u#500
- Remove the comment of subI_reg_imm openjdk-riscv/jdk11u#501
- Remove smulI and coments of mulI openjdk-riscv/jdk11u#502
- Fix the mulHiL_rReg openjdk-riscv/jdk11u#503
- Fix the signExtractL openjdk-riscv/jdk11u#504
- Fix the urShiftP_reg_imm openjdk-riscv/jdk11u#506
- Fix the urShiftL_reg_reg/imm openjdk-riscv/jdk11u#507
- Fix the rShiftL_reg_reg/imm openjdk-riscv/jdk11u#508
- Fix the regL_not_reg openjdk-riscv/jdk11u#509
- Fix the andL_reg_reg/imm openjdk-riscv/jdk11u#510
- Clean the code of orL&&xorL openjdk-riscv/jdk11u#511
- Refactor the grevw system openjdk-riscv/jdk11u#512
- Fix the bytes_reverse_int/long openjdk-riscv/jdk11u#513
- Fix the convUI2L_reg_reg openjdk-riscv/jdk11u#514
- Fix the format of convP2I in riscv32.ad openjdk-riscv/jdk11u#515
- Fix the MoveD2L_stack_reg openjdk-riscv/jdk11u#516
- Fix the MoveL2D_reg_stack openjdk-riscv/jdk11u#517
- Fix the MoveD2L/MoveL2D_reg_reg openjdk-riscv/jdk11u#518
- Fix the cmpL3_reg_reg openjdk-riscv/jdk11u#519
- Fix the reg params of string_compareXXX openjdk-riscv/jdk11u#520
- Fix the get_and_addLXXX openjdk-riscv/jdk11u#523
- Fix the get_and_addLXXXAcq openjdk-riscv/jdk11u#524
- Fix the ALU_COST of get_and_addLXXX_ALU_COST openjdk-riscv/jdk11u#525
- Fix the loadConL openjdk-riscv/jdk11u#526
- Fix the addL_reg_imm openjdk-riscv/jdk11u#527
- Fix the subL_reg_imm openjdk-riscv/jdk11u#528
- Fix the L2F/F2L openjdk-riscv/jdk11u#529
- Fix the D2L/L2D using the call_vm openjdk-riscv/jdk11u#530
- Remove the get_and_setL/addL openjdk-riscv/jdk11u#532
- Remove the get_and_addLAcq instructs openjdk-riscv/jdk11u#533
- add long cmp framework in the MacroAssembler openjdk-riscv/jdk11u#534
- Add the insns of long compare funs in C2 openjdk-riscv/jdk11u#535
- Add ulong compare funcs openjdk-riscv/jdk11u#536
- Add is_far param for some long compare funcs openjdk-riscv/jdk11u#537
- Use the long_cmp_branch to instead of the cmp_branch openjdk-riscv/jdk11u#538
- Remove the error comment openjdk-riscv/jdk11u#539
文章:
- OpenJDK RISC-V架构的宏汇编器和汇编器的实现 https://zhuanlan.zhihu.com/p/567690611
- Merged jdk-mainline PRs:
- openjdk/jdk#10368 (8294083: RISC-V: Minimal build failed with --disable-precompiled-headers)
- openjdk/jdk#10382 (8294183: AArch64: Wrong macro check in SharedRuntime::generate_deopt_blob)
- openjdk/jdk#10439 (8294430: RISC-V: Small refactoring for movptr_with_offset)
- openjdk/jdk#10137 (8293290: RISC-V: Explicitly pass a third temp register to MacroAssembler::store_heap_oop)
- openjdk/jdk#10194 (8293474: RISC-V: Unify the way of moving function pointer)
- openjdk/jdk#10210 (8293524: RISC-V: Use macro-assembler functions as appropriate)
- openjdk/jdk#10261 (8293769: RISC-V: Add a second temporary register for BarrierSetAssembler::load_at)
- Reviewed jdk-mainline PRs:
- openjdk/jdk#10311 (8293781: RISC-V: Clarify types of calls)
- openjdk/jdk#10344 (8294012: RISC-V: get/put_native_u8 missing the case when address&7 is 6)
- openjdk/jdk#10369 (8294086: RISC-V: Cleanup InstructionMark usages in the backend)
- openjdk/jdk#10370 (8294087: RISC-V: Refactor instruction alignment assertions)
- openjdk/jdk#10375 (8294100: RISC-V: Move rt_call and xxx_move from SharedRuntime to MacroAssembler)
- openjdk/jdk#10384 (8294187: RISC-V: Unify all relocations for the backend into MacroAssembler::relocate())
- openjdk/jdk#10391 (8294198: Implement isFinite intrinsic for RISC-V)
- openjdk/jdk#10462 (8294492: RISC-V: Use li instead of patchable movptr at non-patchable callsites)
- openjdk/jdk#10161 (8293351: Add second tmp register to aarch64 BarrierSetAssembler::load_at)
- openjdk/jdk#10227 (8293566: RISC-V: Clean up push and pop registers)
- openjdk/jdk#10253 (8293695: Implement isInfinite intrinsic for RISC-V)
- openjdk/jdk#10260 (8293770: RISC-V: Reuse runtime call trampolines)
- Sponsored jdk-mainline PRs:
- openjdk/jdk#10095 (8293100: RISC-V: Need to save and restore callee-saved FloatRegisters in StubGenerator::generate_call_stub)
- Reviewed/Discussed RISC-V Foreign-API & RVC:
- Reviewed Foreign-API RISC-V Port:
- feilongjiang/jdk#3 (porting work)
- feilongjiang/jdk#6 (code refactoring)
- Discussed new RISCV-RVC proposal: https://mail.openjdk.org/pipermail/riscv-port-dev/2022-September/000615.html
- Loom RISCV Port:
- New branch at: https://github.com/RealFYang/jdk/tree/JDK-8286301
- Template Interpreter & C1 JIT compiler: can run skynet test
- TODO: Enable C2 JIT compiler
- 代码提交
- 8293770: RISC-V: Reuse runtime call trampolines
- RISC-V: Rename some assembler mnemonic and intrinsic functions for RVV 1.0
- RISC-V: Add vneg.v pseudoinstruction and NegVI/NegVL C2 node for Vector API
- RISC-V: Add gather/merge instructions for Vector API
- RISC-V: Add unordered/ordered indexed store instructions for Vector API
- RISC-V: Add LoadVectorGather node for Vector API
- RISC-V: Add StoreVectorScatter node for Vector API
- RISC-V: Add VectorBlend node for Vector API
- RISC-V: Add some macroAssembler function for vector mask-register logical instructions
- RISC-V: Add VectorLoadConst node for Vector API
- Enable vector and/or/xor node for RISC-V
- RISC-V: Add VectorLoadMask node for Vector API
- RISC-V: Add Widening/Narrowing Floating-Point/Integer Type-Convert Instructions
- RISC-V: Add VectorLoadShuffle node for Vector API
- Add --with-binutils-src support for cross-compile
- Remove useless code related to hsdis-demo.c in Makefile
- Vector-API support
- RISC-V: Support vector AndReductionV operation
- RISC-V: Support vector OrReductionV operation
- RISC-V: Support vector XorReductionV operation
- RISC-V: Add VectorCastB2X/VectorCastI2X/VectorCastL2X/VectorCastS2X vector node for riscv
- RISC-V: Add VectorCastD2X/VectorCastF2X vector node for riscv
- Vector-API doc, test, discussion
- https://gitee.com/zifeihan/vector-api
- https://mail.openjdk.org/pipermail/riscv-port-dev/2022-September/000631.html
1、Fix some type errors and add files such as jvm.cfg for debug
- axiangyushanhaijing/powerpoint#66
- axiangyushanhaijing/powerpoint#67
- axiangyushanhaijing/powerpoint#68
- axiangyushanhaijing/powerpoint#72
- axiangyushanhaijing/powerpoint#80
- axiangyushanhaijing/powerpoint#81
- axiangyushanhaijing/powerpoint#87
- axiangyushanhaijing/powerpoint#82
- axiangyushanhaijing/powerpoint#103
2、Fix undefined symbol and make slowdebug
- axiangyushanhaijing/powerpoint#85
- axiangyushanhaijing/powerpoint#86
- axiangyushanhaijing/powerpoint#93
- axiangyushanhaijing/powerpoint#95
- axiangyushanhaijing/powerpoint#96
- axiangyushanhaijing/powerpoint#97
- axiangyushanhaijing/powerpoint#98
3、The discussion of aarch64 on JDK8
-
已经提交到主线的patch:
- 为lldb模拟器添加完整的RVM和RVA拓展, https://reviews.llvm.org/D133670
- 为lldb模拟器添加完整的RVI拓展, https://reviews.llvm.org/D132789
- lldb,修复一个运行时可能会触发的内存错误, https://reviews.llvm.org/rG07d0ef306b74fbcede432ad3480d2f299c051a98
- 标量优化,保留 and X, 0xfff,而不被优化为0xff00, https://reviews.llvm.org/D134155
- 标量优化, Odd - X ==/!= X -> false/true, https://reviews.llvm.org/D132989
- llvm-dwarfdump添加R_RISCV_SET8 https://reviews.llvm.org/D134164
- llvm-dwarfdump添加R_RISCV_SET16,R_RISCV_SET32 支持https://reviews.llvm.org/D134408
- [DSE] Eliminate noop store even through has clobbering between LoadI and StoreI https://reviews.llvm.org/D132657
- [MemorySSA] Reset location size if IsGuaranteedLoopInvariant after phi tranlation https://reviews.llvm.org/D134161
- [MemorySSA] Add test that all incoming values of phi node could be translated https://reviews.llvm.org/D134160
- [MemorySSA][NFC] Use const whenever possible https://reviews.llvm.org/D134162
- [DSE][NFC] Update noop-stores.ll using update_test_checks.py https://reviews.llvm.org/D134630
-
新的patch 在review中:
- zc相关的mc全部在review中了,此处列举出本月新的增部分:
- zcmt的mc支持,https://reviews.llvm.org/D133863
- zcmt的lld支持,https://reviews.llvm.org/D134600
- zcf的mc支持,https://reviews.llvm.org/D134176
- zcd的mc支持,https://reviews.llvm.org/D134177
- zcmp的codegen,https://reviews.llvm.org/D134599
- [C2x] reject type definitions in offsetof https://reviews.llvm.org/D133574
- [DSE] Rewrite function memoryIsNotModified using MemorySSA https://reviews.llvm.org/D133827
- [RISCV] Add a LocalStackSlotAllocation test https://reviews.llvm.org/D134884
- [Sema] disable -Wvla for function array parameters https://reviews.llvm.org/D132952
- zc相关的mc全部在review中了,此处列举出本月新的增部分:
-
参与修复的issues:
- riscv的支持已经在review中,但是大佬还没空帮忙仔细看
- 针对than大佬提供的测试用例https://go.googlesource.com/tools/+/d815cba58228ee3879cfe21cc099ac35ac8b1682/cmd/signature-fuzzer/
- 修复复数类型内存分配, https://go-review.googlesource.com/c/gollvm/+/431815
- 修复runtime.Reflect中空结构体内存分配, https://go-review.googlesource.com/c/gofrontend/+/431735(已合并)
- 修复含空成员的结构体的比较运算, https://go-review.googlesource.com/c/gofrontend/+/431736
- 报告多返回值函数崩溃问题, https://github.com/golang/go/issues/55141和https://github.com/golang/go/issues/55242
- Fix --no-eh-frame-hdr option
- Fix global-pointer value
- Improve linker-script-defsym tests
- Add zero-page relaxation
- Enable tls-gd-noplt tests for RV32 and RV64
- Enable tls tests for RV32 and RV64
- Fix missing parameter in linker script tests
- Check rvc support when relaxing R_RISCV_CALL_PLT
- Check relocation range
- gcc相关工作
- 向gcc上游提交了-m[no]-csr-check选项的支持,目前正在review中: https://gcc.gnu.org/pipermail/gcc-patches/2022-September/601525.html
- Zmmul扩展的gcc部分已通过review合并入上游: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=77e8e405a770bc40b304cfa55081575cf88f2b31
- Zc* 扩展的gcc部分已通过review合并入OpehHW仓库中: openhwgroup/corev-gcc#10
- 更新了Zc* 扩展与RVC的关系,提交了修复alignment不正确的问题:
- binutils相关工作
- 更新了Smepmp扩展的寄存器支持,向上游提交了patch: https://sourceware.org/pipermail/binutils/2022-September/123184.html
- 尝试添加了pei-riscv64支持,提交了patch至bugzilla: https://sourceware.org/bugzilla/show_bug.cgi?id=29009
- Zc* 扩展的binutils部分已通过review合并入OpenHW仓库中: openhwgroup/corev-binutils-gdb#43
- 计划更新Zc* 扩展至最新的spec-RC版本: openhwgroup/corev-binutils-gdb#46
- RVI社区相关工作
- 协助更新了riscv-gnu-toolchain仓库submodules,将gcc与binutils更新至12.2与2.39,同步测试更新了allowlist中的内容: riscv-collab/riscv-gnu-toolchain#1128
- RISC-V GNU东亚时区双周会slides链接: https://docs.google.com/presentation/d/18jAR7mzy93VUyjTtf8vzfzwULkXMjFJu4hRU813jXAk/edit?usp=sharing
- GNU Cauldron会议信息
- 会议youtube频道:https://www.youtube.com/channel/UCCJUY8xtvLa05oODFj6FHcQ
- RVV GCC实现介绍(by钟居哲): GNU Tools Cauldron - S9 - day 2 58:20 ~ 1:59:10
- ZC* 扩展介绍 (by Nandni) & RISC-V BOF (by Kito): GNU Tools Cauldron - S5 - day 1:58:40 ~ 2:49:10
-
RVI 上游 PR 贡献:
- added riscv64 for tapas & banchan: riscv-android-src/platform-build#7
- add riscv64 for vndk snapshot build script: riscv-android-src/platform-development#2
-
技术类文章分享:
- Andorid Build System 研究心得: https://zhuanlan.zhihu.com/p/561492724
- 为 AOSP 添加一个应用: https://zhuanlan.zhihu.com/p/562629048
- Android Init Language: https://zhuanlan.zhihu.com/p/564715676
- Android Early Init Boot Sequence: https://zhuanlan.zhihu.com/p/565027512
- VNDK 基本概念: https://zhuanlan.zhihu.com/p/567512089
- Arch Linux RISC-V 移植进度 Arch Linux RISC-V
- [core] 251 / 259 (96.91%)
- [extra] 2677 / 3034 (88.23%)
- [community] 8484 / 9545 (88.88%)
- Arch Linux RISC-V 软件包 patch 仓库 archriscv-packages 。 本月合计 120 PR 。120 PR for archriscv
- Upstream:
- gsoap
- charm
- edac-utils
- link-grammar
- python-redbaron
- glibc
- Cardinal: riscv64 support
- gnuradio: missing makedepends
- fq: test: Skip go test with -race by default
- sn0int: Support compiling for RISC-V 64-bit
- directx-shader-compiler: initial porting to riscv
- bigfft: Add stubs for RISC-V arithmetic routines
- doctest: Fix compile errors when comparing pointers
- pg_query_go: Add native spinlock support on RISC-V
- LLVM: [LLVM][docs] Update CMake.rst to follow the upgrade to C++ 17
- pacman-contrib: updpkgsums: fix when PKGBUILD contains *sums+=
- libgovirt: Suppress error 'cast increases required alignment of target type'
- Issues:
- Other:
- A total of 138 keywording commits (include non-PLCT team members): https://whale.plctlab.org/riscv/stats/2022_09.txt
- app-backup/backup-manager: Keyword 0.7.14-r1 riscv
- dev-perl/Starlet: Keyword 0.310.0-r1 riscv
- www-apps/bugzilla: Keyword 5.0.6-r1 riscv
- Support statistics page online (update every hour): https://whale.plctlab.org/riscv/support-statistics/
- A new wiki to guide on setting up RISC-V virtual machine using Qemu/Libvirt:
- GHC 9.0.2: RISC-V support
- Libvirt: add basic RISC-V support
- LuaJIT: DynASM works
- media-sound/helm: add sse2 and atomic build flags
- PR: mtytel/helm#307
- sys-process/psinfo: fix 'unsigned char' issue
- k3s: fix cross compilation NixOS/nixpkgs#192167
- casync: fix cross compilation by passing the correct sphinx NixOS/nixpkgs#192169
- doctl: fix cross compilation NixOS/nixpkgs#192170
- hugo: fix cross compilation NixOS/nixpkgs#192173
- abi-dumper: fix cross compilation NixOS/nixpkgs#192708
- wayvnc: fix cross compilation NixOS/nixpkgs#192709
- usbguard: fix cross compilation NixOS/nixpkgs#192710
- umoci: fix cross compilation NixOS/nixpkgs#192711
- qemu: Fix sphinx and sphinx-rtd-theme deps for cross NixOS/nixpkgs#191683
- Run nixosTests on darwin and cross NixOS/nixpkgs#193336
9096个通过 715个失败 26个超时 通过率92.4%
- f465697b3235a Fix condition signed (#31)
- c228b0324ab2a fix tramploine emit (#30)
- db01d9cf3b474 Implement macro assembler (#29)
- 581addf2cf15d Enbale codegen (#28)
- a84789fc7f509 Enbale codegen (#26)
- dab9cfa2ef081 Enable simulator (#25)
- 90d208478e705 enable spew (#24)
- edf51d6187c79 Create runtime successfully (#23)
- b955dad4a3141 Implement partlt func (#21)
- 676253d9b149c delete obj (#22)
- 56c1347a9e5b2 fix build (#20)
- 4e2c8da9432a3 add cross build (#18)
- 9145e82ce2f6c fix build (#16)
- 3312c423c71d3 Implement some func (#40)
- e55c9aa55a3b1 fix block (#39)
- 76d629b36f056 fix float reg alloc (#38)
- 295c061e92a98 fix-osi (#37)
- 272b49b480c08 fix asmjs (#36)
- 3826c654a3e6f fix WriteLoad64Instructions (#35)
- 9c0c93b5e5421 fix ror/rol (#34)
- ef8c23b7402e7 [wasm] add ptr patch call (#33)
- cd4090eac5d48 Fix unbox (#32)
当前 DynamoRIO 进度处在初期支持阶段,目前已经能在 RV64GC 上进行编译(无功能)。
对 DynamoRIO 的支持可以分五个大阶段进行:
- 添加 RISC-V 平台独立的函数(框架)/定义等,以满足「可在 RISC-V 上成功编译」的目标 (基本完成)
- 为 RISC-V 设置 CI 以进行自动化编译和测试 (正在进行)
- 完善 RISC-V 相关函数/定义,对于一个简单程序,使得 DynamoRIO 在自带示例工具下工作 (正在进行)
- 完善 RISC-V 相关单元测试/功能测试,设置 CI 以执行自动化测试,为后续维护提供方便
- 继续提升对 RISC-V 的支持以适用更复杂的程序,以及长期的维护工作
更详细的进度及 todo 列表,请查阅 https://gist.github.com/bekcpear/7c9e710ee5b674888fcf5e5d8445dc16
Google Summer of Code (GSoC) 2022 已经完结,在今年的 GSoC 中,我们 1.扩展了现有 Universal Intrinsic 的设计,使其支持可变长向量体系结构;2.在新的 Universal Intrinsic 框架下实现了新的 RISC-V Vector(RVV) 后端,相较于原有的 RVV 后端,新的后端支持了可变长的寄存器宽度,并解决了生成冗余 Load/Store 指令的问题; 3. 使用新的 Universal Intrinsic 改写了部分 SIMD 循环,从而获得 RVV 平台上的性能数据.
以图像处理中常用的中值滤波为例,使用 PLCT 实验室的 gem5 模拟器观测指令的执行条数和执行周期数,在指令执行条数和周期数方面均获得了60%以上的性能提升:
scalar | vector | Reduction | |
---|---|---|---|
Number of instructions committed | 2.82E+08 | 9.81E+07 | 65.23% |
Number of ticks simulated | 1.70E+11 | 6.20E+10 | 63.56% |
相关Patch:
- PR #22179: New universal intrinsic backend for RVV.
- PR #22278: Fix compile errors.
- PR #22292: Fix compilation errors and warnings when using MSVC on Windows.
- PR #22353: Add more universal intrinsic implementations for RVV.
- PR #22429: Add remaining universal intrinsic implementations for RVV.
- PR #22463: Redesign the SIMD macro.
- PR #22520: Modify the SIMD loop in color_hsv.
- PR #22558: Fix v_signmask for RISC-V Vector.
关于该项目的更多信息:
- 使用Clang vector builtins优化reduce相关接口
- 修复了simd.cast模块下的所有接口
- 修复了simd_mask内置类型初始化,统一了mask的内部表示形式并修正相关测试
- 修复了scalar ABI下的operators相关接口
V 扩展支持工作
- 新增 Stride Store 系列指令
- 新增 Index Load/Store 系列指令
- 新增 v*.m 系列指令
-
Zc*版本更新及优化:https://github.com/plctlab/plct-spike/tree/plct-zce-upstream
-
- Zc* riscv-opcodes更新:riscv/riscv-opcodes#107
-
RVV相关优化: https://github.com/riscv-software-src/riscv-isa-sim/pull/1081(已合并)
-
Sscofpmf支持合并至上游: riscv-software-src/riscv-isa-sim#1036 (已合并)
-
Zc*版本更新及优化:https://github.com/plctlab/plct-qemu/tree/plct-zce-upstream
-
RVV 反汇编支持更新:https://lists.gnu.org/archive/html/qemu-riscv/2022-09/msg00211.html
-
部分发往上游的patch被合并
-
CMO扩展支持更新
PLCT实验室的史宁宁依然每周在更新方舟编译器社区周报(OpenArkCompiler Weekly),目前已经更新到第132期。
方舟编译器周报每周日晚上通过Repo、知乎、Bilibili和邮件列表发布。
-
跟踪 Google IREE 伙伴的 Mask Representing RFC - https://discourse.llvm.org/t/rfc-vector-masking-representation-in-mlir/64964
-
跟踪 Google IREE 伙伴的 Mask Representing Patch - https://reviews.llvm.org/D134939
-
后续向 Mask Representing 工作添加 Vector Length 支持,RVV-Specific Dialect 负责 RVV 特定指令的支持。
Buddy Compiler OSPP 2022 开发阶段完成,进入 Review 阶段:
-
[OSPP] Add MatMul and Conv2d optimization pass. - buddy-compiler/buddy-mlir#78
-
[OSPP] Frontend Generatior. - buddy-compiler/buddy-mlir#75
-
[OSPP] Added IIR Lowering pass(DAP dialect), with C++ wrapper along with end to end example. - buddy-compiler/buddy-mlir#71
-
[OSPP] Morphological Transformations. - buddy-compiler/buddy-mlir#70
-
[OSPP] Add a new test flamework for libcxx-simd. - plctlab/llvm-project#46
Buddy Compiler Website
buddy-mlir
https://github.com/buddy-compiler/buddy-mlir
New features:
- Add VP intrinsic memory examples for fixed and scalable vector type.
- Add VP intrinsic fma examples for scalable vector type.
本期没有新的进展
- riscv断点设置添加match napot和match range支持,并在不支持时回退;并把trigger类型的检测前移到trigger的枚举中,减少查找空闲trigger对tselect和tdata1的读写。#725
- Andes平台的更新,移除一些专有设备代码使用fdt设备驱动,移除cache相关的初始化在uboot-spl中已实现,通过fdt获取平台名称和核心数目。link
- 修正sbi_strnlen的一个bug。link
- fdt_pmu_\setup添加错误处理。link
- 添加文档,用于检测防止payload太大被fdt覆盖。link
- 给riscv添加semihosting支持用于早期通过调试器打印错误信息,借鉴了arm实现,通过ebreak指令进入调试异常和主机通信。link
- 文档修正一些拼写错误。link
- SBI Debug Trigger Extension 扩展的讨论。link
本期没有新的进展
- v0.22 Upgrade upstream LSP to 0.0.5 and simplify code PR-549 opened by imkiva
- v0.22 Refactor
AyaLanguageClient
for IJ plugin PR-548 opened by imkiva - v0.22 Flip
isLeft
toisOne
PR-547 opened by ice1000 - v0.20 Partial elements PR-446 opened by ice1000
- v0.21 Release PR-546 opened by ice1000
- v0.21 Support explicitly raising errors in reporter PR-544 opened by ice1000
- v0.21 Improve inlay-hint info PR-542 opened by ice1000
- Use javacs language server PR-540 opened by ice1000
- v0.20 Generalized path PR-447 opened by imkiva
- v0.21 Use cubical path in library PR-505 opened by ice1000
- Workaround JDK-8292756 PR-538 opened by imkiva
- v0.21 ci: really fix for Java 19 PR-535 opened by imkiva
- Fix nightly build for Java 19 PR-534 opened by imkiva
- v0.21 Use Java 19 PR-533 opened by ice1000
- v0.19 Jdk 18 PR-413 opened by ice1000
- v0.21 Allow empty system PR-531 opened by ice1000
- v0.21 Rename
DefEq
toUnifier
PR-529 opened by ice1000 - v0.21 Distiller fix PR-526 opened by wsx-ucb
- KALA: upgrade to 0.50.0 PR-527 opened by Glavo
- v0.21 Changelog & plct report generator PR-524 opened by ice1000
- v0.21 Distinguish unary from binary PR-488 opened by imkiva
- v0.21 Say goodbye to
arcoe
and rwc PR-523 opened by ice1000 - v0.21 Cherry pick 2 from
coe-subst
branch PR-516 opened by ice1000 - v0.21 Cherry-pick from
coe-subst
branch PR-513 opened by ice1000 - v0.21 Cleanup PR-512 opened by ice1000
- v0.21 Fix two bugs PR-511 opened by ice1000
- v0.21 Introduce
Set
universe WIP PR-498 opened by tsao-chi - v0.21 Add
transp
primitive term PR-503 opened by ice1000 - v0.16 Blah blah blah PR-333 opened by ice1000
- v0.19 Follow-up of #400: REPL, Serialization, Distiller, Test of literals PR-404 opened by imkiva
- v0.19 Java integer backed literals PR-400 opened by imkiva
- v0.20 Remove planned generalized pattern synonym PR-444 opened by ice1000
- v0.21 Workaround a lsp4j bug PR-500 opened by imkiva
- v0.21 Minor changes PR-501 opened by ice1000
- v0.21 Clean up PR-490 opened by imkiva
- v0.21 Replace cofibration syntax with interval expressions PR-497 opened by dark-flames
- v0.21 Inline with context PR-496 opened by ice1000
- v0.21 Refactor: Separate delta and beta reduction. PR-493 opened by wsx-ucb
- v0.21 Making
I
, andPartial
a primitive PR-489 opened by lunalunaa - v0.21 Some changes PR-491 opened by ice1000
- v0.21 Update bors message, upgrade guest PR-485 opened by ice1000
- v0.21 IntelliJ theme PR-487 opened by ice1000
- v0.21 Do not run commit-check on main PR-486 opened by imkiva guments on recursion PR-484 opened by imkiva
- v0.21 Consider size-change in termination checker PR-482 opened by imkiva
- v0.21 Be strict when comparing constructors for termination PR-481 opened by imkiva
- v0.20 RELEASE: 0.20 and bump version to 0.21-SNAPSHOT PR-479 opened by ice1000
- v0.20 Increase test coverage, remove unused classes PR-478 opened by ice1000
- v0.20 TYCK: add inheritUniv() api PR-474 opened by tsao-chi
- v0.20 PRETTY: fix partially applied binop PR-476 opened by tsao-chi
- v0.20 REFACTOR: extract resolveOpDecl() PR-475 opened by tsao-chi
- v0.20
AnyVar
and refactoring PR-473 opened by ice1000
- Update grammar PR-19 opened by ice1000
- Initial proof search in search everywhere PR-18 opened by imkiva
- Upgrade dependencies PR-17 opened by imkiva
1.linux kernel CI相关,包括:
- 学习gitlab CI的相关内容,在本地搭建和注册gitlab runner, 编写.gitlab-ci.yml, 设置schedule, 可以成功定时执行相关任务,已经将这些操作步骤和内容整理成文档 https://zhuanlan.zhihu.com/p/562224062
- 学习Jenkins的相关内容,在本地用docker部署和配置Jenkins, 并新建gitlab和本地任务,可以成功执行。Jenkins部署和配置文档https://zhuanlan.zhihu.com/p/563617044
- 按照https://github.com/kernelci/lava-docker用docker-compose起了一个用于测试qemu kernel的LAVA, 目前正在学习如何使用这个LAVA
2.rvlab基础设施搭建
- 给1台unmatched安装debian新镜像
- 在rvlab内网的中的一台x86电脑上部署了rvlab硬件管理平台,目前可以实现的功能是远程开机/关机/重启
- 对一台因文件系统损坏而无法正常启动的unmatched进行修复,让其可以正常启动并登录
3.其他
- 为协助席静老师完成获取gitee上指定时间内指定提交人的PR信息的自动化脚本,编写用python模拟用户名密码登录并获取cookie的部分的代码 https://gitee.com/jean9823/automatic-tool/blob/master/getGiteeCookie.py
- 从2022年2月份开始转入 TARSIER 双周报: https://github.com/isrc-cas/tarsier-oerv/
- 已经改为双周报形式,直接在 debian-riscv 邮件列表中发布。
- 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公开报告的Slides(部分) https://github.com/isrc-cas/PLCT-Open-Reports