本项目依赖于abstract-machine或navy-apps,需要提前设置AM_HOME或NAVY_HOME,具体方式请参考相应的仓库。
首先设置环境变量BENCH_HOME为当前目录:
export BENCH_HOME=`pwd`同一组程序支持四种规模的输入:test,train,ref和huge。
| 名称 | 计分 | 建议使用场景 |
|---|---|---|
| test | X | 正确性测试 |
| train | O | 在RTL仿真环境中研究微结构行为 |
| ref | O | 在模拟器或FPGA环境中评估处理器性能 |
| huge | O | 衡量高性能处理器(如真机)的性能 |
默认运行test数据规模,可通过mainargs选择其它的数据规模。
然后在相应程序的目录下编译并执行, 例如:
cd bench/000.hello
make ARCH=riscv32-nemu run # 需要提前设置AM_HOME
make TARGET=x86_64-linux-gnu run mainargs=huge # 需要提前设置NAVY_HOME每个benchmark都记录以REF_CPU为基础测得的运行时间微秒数。每个benchmark的评分是相对于REF_CPU的运行速度,与基准处理器一样快的得分为REF_SCORE=1000000。
本项目提供了一个并行评测脚本scripts/run.sh,当程序运行时间不受宿主机负载影响时(如RTL仿真),可考虑通过该脚本并行评测所有程序,如:
bash run.sh ARCH=riscv32e-npc mainargs=train当程序运行时间受宿主机负载影响时(如模拟器或真机),可在使用单线程运行该脚本,如:
nproc=1 bash run.sh ARCH=native mainargs=huge脚本最后还会统计所有benchmark得分的算术平均和几何平均。
可以通过设置benchlist变量来指定需要运行哪些benchmark。具体可参考scripts/benchlist/all.sh。
| 类型 | benchmark | 介绍 | 说明 |
|---|---|---|---|
| 测试 | 000.hello | Hello程序 | 测试用 |
| 小型 | 100.blockchain | 区块链 | 计算sha256 |
| 101.igemm | 矩阵乘法 | 仅含整数操作 | |
| 102 queen | N皇后问题 | 用位运算实现 | |
| 103.dinic | 求解二分图最大流 | ||
| 104.malloc | 动态内存分配 | ||
| 105.bf | brainf*ck语言解释器 | ||
| 106.qsort | 快速排序 | ||
| 107.stream | 内存带宽测量 | ||
| 108.ntt | 数论变换求多项式乘法 | ||
| 中型 | 200.genann | 神经网络 | 仅含整数操作 |
| 201.jpeg | JPEG解码 | ||
| 202.llama2 | 大语言模型 | 仅含整数操作 | |
| 203.rsa | RSA加解密 | ||
| 204.hypergraph | 超图划分 | ||
| 大型 | 300.bzip3 | 数据压缩 | |
| 301.gsim | RTL仿真 | ||
| 302.lua | 脚本解释器 | ||
| 303.cproc | C语言编译器 | ||
| 304.mp3 | MP3解码器 | 仅含整数操作 | |
| 305.h264 | H264解码器 | 仅含整数操作 |