# musl-riscv **Repository Path**: zhangf-0210/musl-riscv ## Basic Information - **Project Name**: musl-riscv - **Description**: 添加了riscv架构的memset、memcpy、memmove、strlen汇编实现 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-06-06 - **Last Updated**: 2024-10-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # musl-riscv #### 介绍 1. 在musl中添加了riscv架构的memset、memcpy、memmove、strlen函数的RVV汇编实现, 详见musl-1.2.4/src/string/riscv64目录 2. 添加了测试集,详见bench目录,该测试集来源于以下链接: [1] https://github.com/ARM-software/optimized-routines/blob/master/string/bench/ #### 软件架构 软件架构说明: musl-1.2.4: musl源码 bench: 测试集源码 bench-test.sh: 编译安装musl以及生成测试集二进制文件 #### 使用说明 本项目添加了RVV实现的4个函数,因此,测试需要对比RVV实现与musl c语言实现函数的性能. 1. 编译musl以及测试集前需要提前设置好交叉工具链的环境变量,如下: `export PATH=/编译器路径/bin:$PATH` 设置好后,可执行`riscv64-unknown-linux-musl-gcc -v`看是否成功 2. 执行脚本bench-test.sh, 该脚本中包含了编译、安装musl,编译生成测试集可执行文件. 3. 脚本执行结束后,可在exe目录下查看测试集文件 其中,`*_musl`结尾的使用musl原生实现,`*_rvv`结尾的则是链接脚本生成的包含RVV实现的libc.a 4. 由于目前支持RVV扩展的硬件较少,这里需要使用gem5来运行测试集 在gem5目录下分别执行测试集程序,如测试memset性能: `./build/RISCV/gem5.opt ./configs/example/se.py -c /路径/memset_musl` `./build/RISCV/gem5.opt ./configs/example/se.py -c /路径/memset_rvv` 5. 最后记录gem5上跑完的结果,以memset为例,其结果如下所示: Random memset (bytes/ns): memset_call 32K:0.45 64K:0.35 128K:0.30 256K:0.28 512K:0.27 1024K:0.25 avg 0.30 Medium memset (bytes/ns): memset_call 8B:0.18 16B:0.48 32B:0.91 64B:1.63 128B:2.71 256B:4.40 512B:5.67 Large memset (bytes/ns): memset_call 1K:6.62 2K:7.02 4K:7.46 8K:7.70 16K:7.82 32K:7.63 64K:1.40 其中Random memset为测试内容,32K、64K等为数据量,0.45、0.35等为运行结果,单位为bytes/ns. #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request