为何RISC-V裸机程序执行速度因所用libc不同差异巨大?
RISC-V裸机环境下不同libc的性能差异问题
在RISC-V裸机环境中,我使用-march=rv32imac -mabi=ilp32编译程序:
- 链接自己用Crosstool-NG编译的newlib时,Conway生命游戏的执行稳定耗时超10分钟;
- 链接Platformio提供的Nucleisys版libc时,仅需约2分30秒。
操作步骤
移动自制libc目录:
mv ~/x-tools/riscv32-unknown-elf/riscv32-unknown-elf/lib/rv32imac/ ~/x-tools/riscv32-unknown-elf/riscv32-unknown-elf/lib/original_rv32imac此时重新编译报错:
error : /home/th/x-tools/riscv32-unknown-elf/lib/gcc/riscv32-unknown-elf/9.4.0/../../../../riscv32-unknown-elf/lib/libc.a(lib_a-atexit.o): can't link double-float modules with soft-float modules ...部署Nucleisys的libc:
cp -a ~/.platformio/packages/toolchain-gd32v/riscv-nuclei-elf/lib/rv32imac ~/x-tools/riscv32-unknown-elf/riscv32-unknown-elf/lib/未修改Makefile,仅重新编译后即可看到执行速度差异。
已排查项
两款libc均为软浮点ABI,我已完成以下排查:
- 列出了自制newlib的编译配置参数;
- 对比发现快速版ELF包含init_array段,慢速版无此段;
- 确认SP寄存器初始化逻辑一致;
- 替换memcpy为本地实现后,速度差异仍存在。
请问问题出在哪里?
内容的提问来源于stack exchange,提问作者bitmap kid
相关产品推荐
相关产品推荐

