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

相关推荐
学代码的真由酱1 天前
【自用】接口测试
接口测试·postman·测试·cookie·token鉴权
ClouGence3 天前
自动化测试 CueCast 新版本发布:录制更稳、回放更准、排障更清晰
前端·程序员·测试
钧界编程4 天前
EasyClick 入门指南(十七):文件操作完全指南
测试
技术落地手记5 天前
一个需求 ID 换一份完整测试用例,我让 AI 替测试同事省掉半天
单元测试·测试
暗冰ཏོ6 天前
软件测试完整学习指南:从入门到自动化、性能与安全测试实战
软件测试·功能测试·单元测试·集成测试·压力测试·测试·安全性测试
弹简特6 天前
【接口自动化】02-Pytest固件fixture核心机制与Allure企业级报告实战
自动化·pytest·测试
钧界编程7 天前
EasyClick 入门指南(九):异常处理与脚本健壮性 —— 从“不堪一击”到“金刚不坏”
测试
大刚测试开发实战7 天前
TestHub测试平台整体功能简介
django·llm·测试
ClouGence7 天前
不用写 Selenium,零代码的 UI 自动化测试工具!
selenium·测试