解决 UnixBench 在 x86-64-v1 CPU 上 Whetstone 报错 (Illegal Instruction) 的问题

最近在一台较老架构的服务器上运行 UnixBench 6.0.0 做性能测试时,遇到了一个典型问题:
Dhrystone 正常运行,但 Whetstone 直接报错退出。

经过排查,最终确认是 CPU 指令集与编译参数不匹配 导致的。


一、问题现象

运行 UnixBench 时,日志显示:

sql 复制代码
Double-Precision Whetstone -- 1 copy

# ERROR: command returned status 33792

进一步计算:

ini 复制代码
33792 / 256 = 132

在 Linux 中:

ini 复制代码
Exit Code 132 = SIGILL
Illegal Instruction

这意味着:

程序执行了 CPU 不支持的指令。


二、确认 CPU 指令集

通过 /proc/cpuinfo 查看 CPU flags:

bash 复制代码
cat /proc/cpuinfo | grep flags

结果:

markdown 复制代码
flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
        clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl cpuid
        extd_apicid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm
        cmp_legacy 3dnowprefetch vmmcall

可以看到 CPU 只支持:

指令集 支持情况
SSE4
AVX
AVX2

这说明 CPU 实际属于:

复制代码
x86-64-v1

三、问题根本原因

查看 UnixBench 的 Makefile 发现:

ini 复制代码
OPTON += -march=native -mtune=native

-march=native 会根据 编译机器 CPU 自动启用高级指令集

如果编译机器支持:

  • SSE4
  • AVX
  • AVX2

编译出的程序就会包含这些指令。

但当前服务器只支持:

复制代码
SSE2 / SSE3

因此在运行 whetstone-double 时就会出现:

复制代码
Illegal Instruction

四、解决方案

需要修改 Makefile 的编译优化参数

打开 Makefile:

复制代码
vi Makefile

找到:

ini 复制代码
OPTON += -march=native -mtune=native

修改为:

ini 复制代码
OPTON += -march=x86-64 -mtune=generic

这样只会使用:

  • SSE2
  • 通用 x86_64 指令

兼容 x86-64-v1 CPU


五、重新编译 UnixBench

清理旧编译文件:

go 复制代码
make clean

重新编译:

go 复制代码
make

如果编译成功,会看到类似输出:

ini 复制代码
cc -o pgms/arithoh -Wall -pedantic -O3 -ffast-math -march=x86-64 -mtune=generic...

六、运行 Benchmark

执行:

复制代码
./Run

即可正常运行全部 benchmark

相关推荐
ClouGence3 天前
告别低效脚本!8款更省事的 Selenium 替代工具推荐
selenium·测试
LXMXHJ3 天前
springboot项目测试
java·spring boot·后端·测试
花椒技术4 天前
不是跑通一次 Demo:花椒 QA 怎样把真机 UI 自动化做成回归流程
ios·单元测试·测试
狂师4 天前
UI自动化测试提效必备Skill!一套CI流水线编排 Skill 可以直接抄了...
人工智能·agent·测试
匠测AI说5 天前
Cypress 自动化全解:浏览器内运行架构、命令队列、高频 API 与项目选型指南
测试
程序员贺加贝5 天前
AI 时代 SaaS ERP 自动化测试路线:先补接口级黄金流程
测试·saas
狂师5 天前
AI 测试丨一句指令生成测试报告,带失败截图、操作录屏、Trace、日志,这套 Skill 思路可以直接抄...
人工智能·开源·测试
ClouGence7 天前
Playwright 已经很好用了,为什么我还在找更简单的自动化测试工具?
测试·敏捷开发