解决 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

相关推荐
独断万古他化2 天前
AI 赋能自动化测试实战:从用例生成到 CI/CD 全流程落地
人工智能·ci/cd·测试
甜甜圈圈子2 天前
基于Dify与DeepSeek:零门槛训练自己的专属AI大模型
测试
独断万古他化2 天前
基于 Selenium + POM 模式的聊天室系统 UI 自动化测试框架搭建与实践
selenium·测试工具·ui·自动化·测试·pom
念越3 天前
蓝桥杯单元测试模拟1期模拟题答案及代码解析
蓝桥杯·单元测试·测试
G皮T3 天前
【OpenClaw】思路转变:从 “传统UI测试” 到 “AI驱动的UI测试”
自动化测试·人工智能·ai·agent·测试·ui测试·openclaw
先做个垃圾出来………4 天前
A/B测试
测试
二宝1524 天前
互联网大厂Java求职面试实战案例:谢飞机的三轮技术挑战
java·数据库·spring boot·安全·微服务·测试·面试案例
jaycyj5 天前
商城项目的环境部署和数据查询
测试
独断万古他化6 天前
抽奖系统性能负载测试:基于 JMeter 的梯度加压与本地缓存优化全流程
java·redis·jmeter·缓存·压力测试·测试·负载测试
洛_尘7 天前
MiniMQ(单元测试报告)
java·测试