目录
1 简介
当用户得到的SEPC CPU2017版本小于1.1.9时,此工具对RISC-V的支持存在很多不足。在RISC-V架构的环境下,当得到SPEC CPU的安装镜像并挂载后,运行install.sh脚本,会出现toolset相关的报错,提示当前没有适配RISC-V架构的tools,需要我们自己重新编译。自己编译这些SPEC CPU2017内部的工具集时,以及启动测试时,都会遇到一些问题,在此作一个整理,希望能帮到有相关需求的人。
参考资料:
https://zhuanlan.zhihu.com/p/425497845
SPEC CPU 2017快速使用指南:
https://www.spec.org/cpu2017/Docs/quick-start.html
2 编译内部工具并安装时遇到的问题
替换掉工具集目录中一些项目源码中的config.guess和config.sub文件
要替换的文件的路径大致如下:
| ./specinvoke/config.guess./specsum/build-aux/config.guess./tar-1.28/build-aux/config.guess./make-4.2.1/config/config.guess./rxp-1.5.0/config.guess./expat-2.1.0/conftools/config.guess./xz-5.2.2/build-aux/config.guess |
|---|
需要替换成下面两个较新的文件:
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
2.1 编译SPEC CPU中的make工具
问题:出现”undefined reference to __alloca”以及”undefined reference to __stat”
解决方法:
在make-*/glob/glob.c文件中,顶部(包含头文件之后)加上:
| #include <alloca.h>#define __alloca alloca#define __stat stat |
|---|
2.2 编译某个tool
问题:出现“you should not run configure as root….”
解决方法:
| export FORCE_UNSAFE_CONFIGURE=1 |
|---|
问题:出现“can’t locate test_driver.pl…..”
解决方法:
在make-*顶层源码目录下执行:
| export PERL5LIB=$(pwd)/tests |
|---|
这样Perl在加载模块时就会先在tests/目录里找得到test_driver.pl。
2.3 编译perl
问题:build perl 在 gcc10 环境下会报错。
解决方法:
| 由于build perl在gcc10上面有bug,修改Configure和cflags.SH文件中case "$gccversion" in相关1* 改为 1.* |
|---|
2.4 build TimeDate
问题:构建TimeDate时,会报错:”error running TimeDate-2.30 test suite”
解决方法:
原因为在2020年之后,跑test就会出现此类错误,修改TimeDate-2.30/t/getdate.t
| require Time::Local;-my $offset = Time::Local::timegm(0,0,0,1,0,70);+my $offset = Time::Local::timegm(0,0,0,1,0,1970); |
|---|
编译成功:

编译完成内在工具集后,执行./install.sh脚本来安装SPEC CPU2017,安装成功显示如下:

3 SPEC CPU 2017跑测试时遇到的问题
问题一:
运行SPEC CPU2017的intrate测试集时,在502.gcc_r基准测试中遇到了一个非零退出码(exit code=137),导致runcpu没能完成。
原因分析:
在Linux系统中,退出码137表示:
| 128 + 9 = 137 |
|---|
即:进程被信号9(SIGKILL)杀死。
这通常是由于系统资源不足(尤其是内存不足)导致操作系统OOM Killer杀死了该进程。
运行命令:
| journalctl | grep -i 'out of memory' |
|---|
确实可以看到内核OOM Killer杀死了cpugcc_r_base.m进程。

解决方法:
方法一:减少并行副本数
即修改config/…cfg文件中的设置:
| copies = xxxx #改小 |
|---|
方法二:启用并扩大Swap空间
实际措施:
两方面下手:减少copies(=6)以及启用swap(8g)。
swap操作参考:
https://blog.youkuaiyun.com/frdevolcqzyxynjds/article/details/131464777
| sudo fallocate -l 8G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile |
|---|
将以下内容加入/etc/fstab以开机自动挂载:
| /swapfile none swap defaults 0 0 (这是qwen3给的内容) |
|---|
| echo "/swapfile swap swap defaults 0 0" >> /etc/fstab (这是参考给的) |
问题二:
在运行fprate测试集时,遇到错误:

解决方法:
取消config文件中“%define GCCge10 # EDIT: remove the '#' from column 1 if using GCC 10 or later”这一行的注释,让GCCge10变量有效。因为开发板环境中的gcc >= 10。
问题三:
在运行fprate测试集时,遇到错误:

解决方法:
503.bwaves_r,这是一个基于 Fortran 的流体动力学模拟程序,通常涉及大量数组运算和局部变量分配,非常容易受到栈大小限制的影响。

建议在运行 SPEC 测试前执行:
| ulimit -s unlimited |
|---|
464

被折叠的 条评论
为什么被折叠?



