openKylin社区继与深度数智联合发布默认搭载openKylin 1.0操作系统的全球首款RISC-V笔记本电脑DC-ROMA后,近日,联合苏州睿芯公司,openKylin平台正式部署上线对RV64G架构支持,后续RV64G非压缩指令集爱好者可以通过社区平台开发编译并部署自己的代码。
RISC-V是一个自由的指令集,硬件厂商可以基于国际基金会认可的标准,自主扩展,目前市场上很多厂商是基于RV64GC来生产产品,但是也有厂商基于RV64G来生产产品,为配合国内厂商的市场需求,openKylin社区率先推出对RV64G架构支持。
一、RV64G架构简介
相比较于目前在嵌入式小型设备上应用更广泛的RV64GC(即大家比较熟悉的riscv64), RV64G更加聚焦于通用计算场景功能,服务器或者桌面系统。其中:
- “RV”代表RISC-V;
- “64”代表所支持的指令是64位的(实际上,交叉编译器在生成代码时可能会采用32位指令减小生成的目标代码长度),地址长度和寄存器长度都为64位;
- “G”代表通用(General)计算平台。实际上,“G”等效于“IMAFD”,其中“I”代表整数(Integer)计算指令、整数load、整数store以及控制流(如分支跳转)指令,这些指令在任何RISC-V的实现中都是必须的;“M”代表乘法(Multiply),即平台支持乘法和除法运算;“A”代表原子(Atomic)扩展,支持对寄存器进行的原子读、修改和原子写操作,这些操作在多核设计中非常有用;“F”代表单精度浮点(Float)运算支持,“D”代表双精度浮点(Double)运算支持。
RV64G和RV64GC之间的主要区别在于是否包含压缩指令集(C指令集)。RV64GC在RV64G的基础上增加了C指令集,这些指令用于缩小指令长度,降低代码占用空间,RV64G则不包含这些压缩指令,因此RV64G的应用程序可以在RV64GC的硬件上运行,反之则不行。
比较而言,RV64GC比RV64G具有更高的代码密度,程序具有更小的footprint,可以更有效地利用内存空间,这些特点让RV64GC指令在嵌入式应用中更有优势;另一方面,RV64G的硬件实现可能比RV64GC更简单,可采用简化指令译码逻辑,更容易预测指令预取模式,减少内存访问次数、提高指令执行速度,降低功耗,设计人员可以更好的对高性能计算进行优化。
二、开发过程
1.基础工具链改造编译验证。
第一阶段,对基础编译工具进行适配,包括gcc,glibc,binutils源码包的修改编译,技术攻关,以适配RV64G新架构。运行新编译的gcc版本,检查相关输出参数,确认为-- -with-arch=rv64imafd表示修改成功。
2.stage0/ bootstroop阶段相关包的编译。
基于第一阶段完成的基础编译工具链,开始bootstroo阶段相关包的编译工作。包括apt,dpkg,llvm,python3,perl,cmake,make,openmpi,netplan.io,openssl,meson等软件包的编译工作。
3.初期上层应用包编译工作。
完成前两步中的软件包编译工作后,需要进一步扩展软件包的数量。在本地编译环境下通过脚本逐层编译更多上层应用包。同时验证使用RV64GC相关依赖包与现有RV64G包混合编译没有问题。
4.Choort平台编译环境调试制作。
使用目前已重新编译的RV64G架构新软件包,来构建OKBS平台的chroot基础环境,调试过程碰到架构符号相关的较多问题,需要多次重构测试,过程中不断尝试修改chroot的系统文件。直到可以正常编译出rv64g.deb格式的二进制文件。制作完成的chroot地址为:
http://api.build.openkylin.top/devel/openkylin/yangtze/rv64g
5.平台架构新增部署,与编译机搭建。
为了与现有RV64GC架构做区分,在OKBS系统上增加RV64G架构相关配置数据。利用之前基于新架构编译完成的软件包,新增创建source.list源,作为编译环境的依赖源。
6.初期编译环境调试。
上线初期,解决新架构chroot与OKBS系统融合,编译依赖源RV64G架构修改等问题。
三、RV64G架构支持优势
1.支持RV64G架构的代码同源编译,即代码一次提交。可在OKBS平台同源编译出AMD64、I386、ARM64、RV64GC、RV64G五个架构的二进制包,无需再单独维护一套RV64G软件源及代码仓库,提升RV64G架构代码开发维护效率。
2.支持RV64G架构软件仓库的同源发布,有效提升RV64G架构软件仓库的管理和维护升级效率。
3.镜像制作与版本发布统一规范化。在镜像制作与版本发布管理上可与其他架构以同流程处理,统一RV64G架构版本构建规范。
4.解决与RV64GC架构名称冲突的问题,至此可以兼容RISCV-V规范的两种指令集架构的编译工作。
5.编译机可同时支持RV64GC和RV64G两种架构,有效提升编译机资源利用率。
后续苏州睿芯公司将继续携手openKylin社区,成立RV64G SIG组,加大资源投入,解决软件包编译过程中遇到的问题,并完成该架构镜像制作、硬件适配、软件源管理和生态需求软件自主构建等,进一步集成基于RV64G架构的桌面与服务器整机系统。欢迎感兴趣的小伙伴加入我们,携手共创!