因为RISC-V指令集的快速变化,openEuler当前只提供RV64GC版的系统, 但是这会造成支持更新指令集的芯片无法发挥全部性能。
结果该问题有多种方案,其中一种为Multilib,即除了提供RV64GC基本 系统之外,也为一些基础库提供使用其他扩展指令集编译的版本。
以libc为例,glibc包为默认RV64GC版的库,将其libc.so.6安装到 /usr/lib64 下。
另外提供 glibc-rva23, 使用RVA Profile 23指令集标准进行编译, 其libc.so.6安装至/usr/lib64/rva23。
通过修改动态链接器,使其可以自动检测当前CPU的指令集状况(如 读取cpuinfo),来自动使用更优化的库。
出了libc外,我们亦可以为其他对性能影响较大的基础库提供优化版本。
该功能依赖较新的GCC和GLIBC,将该目标设定为 openEuler 26.03 的目标。 当前openEuler 24.03 中的GCC版本为12,GLIBC版本为2.38.
我们需要随时监控GCC/GLIBC在该方面的进展。
分析同样的二进制程序在不同的RISC-V CPU上表现出来的性能差异, 以帮助编译器为特定微架构输出更优化的代码。 同时可以帮助微架构设计者为更常用的指令序列进行特定优化。
一个例子: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115500
分析重要的基础库、应用程序、编程语言运行时等,统计出常用的指令序列。 为这些指令序列编写性能测试代码,在不同的CPU上运行,比较性能差异, 分析原因。
在不同的CPU上运行同样的二进制程序,分析哪些函数有较大的性能差异, 进一步分析,找出产生性能差异的指令序列。
- 指导编译器,乃至为GCC/LLVM提交相关优化补丁。
- 集合成册,指导微架构设计
TBD
- 熟悉至少一种脚本语言(Python,Perl,Ruby,Shell等等)
- 初步了解编译器、C库之间的关系;初步了解动态链接、静态链接的概念
- 初步了解ELF文件格式
参考书目:《程序员的自我修养--链接、装载与库》 《Computer Systems: A Programmer's Perspective/深入理解计算机系统(CSAPP)》 《The GNU C Library Reference Manual》