本系列文章以CC-BY-SA-NC 协议开源,如果有做 RV Toolchain 的小伙伴希望分享自己的成果,欢迎提交PR。仓库是
https://github.com/isrc-cas/PLCT-Weekly
在本期数据报中,我们将对RISCV指令集上GCC和LLVM-Clang编译器(以下简称Clang)的codesize对比,以及RISCV指令集和ARM指令集在GCC编译器上的codesize对比,使用更加严谨的优化编译选项进行再次报告,并将结合ARM官方公开的 ARM Compiler 优化数据来分析RISCV的潜在优化空间。本期报告还将解读来自 Berkeley CS 系的技术报告《Reduce Static Code Size and Improve RISC-V Compression》。
由于有表格和图片,请直接下载PDF查看:
https://github.com/isrc-cas/eternal-balance/blob/master/20191208-EB-RISCV.pdf
部分总结:
RISCV64下,以 GCC -Os 为基准,GCC -O2, Clang -O2,Clang -Os, Clang -Oz的相对codesize比例。平均情况下,GCC -O2的codesize是 GCC -Os codesize 的126.11%,Clang -O2的codesize是 GCC -Os codesize的132.16%,Clang -Os的codesize是 GCC -Os codesize 的117.74%,Clang -Oz的codesize是 GCC -Os codesize 的104.11%。数字与分析结论与RISCV32一致。
相对官方GCC8, AC6工具链能够带来代码段和RO数据段的约8%~9%的优化幅度,在RW数据段和bss段上有约44%左右的缩减。在PLCT的评测中,我们只对代码段和只读数据段的codesize指标进行了报告,PLCT的评测数据显示,目前在Clang中,RISCV32/RISCV64 在-Oz下的codesize均比GCC公版的-Os选项高4%。如果我们以ARM商业编译器目前所获得的优化幅度来作为最优预期,那么粗略估计RISCV32/RISCV64在Clang上还会有12%~13%的优化程度。
继续忙论文,暂停更新至12月15日 deadline。