em5 SPECPU2006 测试说明
基本信息
版本:SPECCPU2006
base SPEC 使用 gcc 12 进行编译,优化选项为 O3,指令集是 RV64GCB。speccpu 详细编译参数:https://github.com/OpenXiangShan/CPU2006LiteWrapper/blob/main/Makefile.apps 。当前 gcc 为 12.2
peak 使用自研编译器编译,预计 2024 年 H2 提供。
SPECCPU 2006 base
使用说明
base 使用 O3 编译。通过开源项目CPU2006LiteWrapper维护编译参数。使用说明见 https://github.com/OpenXiangShan/CPU2006LiteWrapper/blob/main/README.md
测试结果
下图是 2023.12 测试结果。最新进展以公众号《香山开源处理器》的《香山双周报》或香山开源处理器知乎为准,以下结果为 base 得分,没有加编译器优化。
通过 checkpoint 测试 speccpu2006
本文说明了如何基于已有 checkpoint 获得给定 gem5 模型和配置的 speccpu2006 分数。
官方文档详细说明了从通过 NEMU 生成 checkpoint 到香山 gem5(以下简称 xs gem5)使用 checkpoint 测试 speccpu2006 性能的全过程。如果已经有了 checkpoint,希望使用 xs gem5 复现分数,部分文档可以跳过。本文目的是简述原理并说明如何操作。如果希望更深入了解原理建议参考官方文档和相关仓库。
香山性能评估方法见:https://bosc.yuque.com/uuichs/nca99q/evdgc7sihk7gyxap ,其中 25-45 分钟重点介绍了 simpoint。
整体流程概述
编译 xs gem5
配置编译环境,参见官方文档:https://github.com/OpenXiangShan/GEM5/blob/backport/README.md#setup-on-ubuntu-2204
编译 memory 模型:DRAMSim3,参考官方文档:https://github.com/OpenXiangShan/GEM5/blob/backport/ext/dramsim3/README
编译 gem5,参见官方文档:https://github.com/OpenXiangShan/GEM5/blob/backport/README.md#run-gem5 。其中 scons 的-jx,可以选择使用多少 cpu 编译。
确定 gem5 配置
https://github.com/OpenXiangShan/GEM5/blob/backport/util/warmup_scripts/simple_gem5.sh#L118 可以看到 gem5 的具体配置。xs gem5 与 RTL 对齐情况参见文档:https://bosc.yuque.com/uuichs/nca99q/zuggt7ekor5s5g0v 。备注:香山内部的 GEM5 作为 RTL 算法探索平台,性能比 RTL 高 0.5 分左右,同时,GEM5 采取滚动开发方式,大约 3-4 个月后内部 GEM5 版本会推送到 github。这样造成 github 上开源的 xs gem5 性能可能不会比同期 github xiangshan 性能高,甚至低一些。
选择 checkpoint
每个 checkpoint 可以单独运行,也可以并行运行。如果希望了解步骤或调试,可以单独执行。如果希望获得单个用例或所有用例的跑分,需要把同一个用例的所有 checkpoint 都完整执行,并放到统一的目录。为了便于理解,首先介绍下 checkpoint 的目录结构
checkpoint 的目录结构
"checkpoint-0-0-0.lst" 是 checkpoint 的描述文件,具体含义参见"GEM5/util/warmup_scripts/simple_gem5.sh",例如"hmmer_nph3_15858 hmmer_nph3/15858 0 0 20 20"分别表示 workload_name, checkpoint_path, skip insts(usually 0), functional_warmup insts(usually 0), detailed_warmup insts (usually 20), sample insts。workload 名称中,hmmer 表示 speccpu2006 的用例名称,hmmer_xxx 表示 specpu2006 该用例的多段测试。每段的含义和测试多少与具体测试用例相关。含义可以参见 specpu2006 的官方文档对测试用例的描述。"checkpoint_path"表示具体 checkpoint 片段的相对路径。简单说,这里的 checkpoint 通过 k-means cluster 算法选择有代表性的片段,并根据片段的权重反推出完整代码的性能分数,香山的 checkpoint 基于 UCSD Timothy Sherwood 等人的工作,“提出了一套 RISC-V 的基础设施来使得 checkpoint 可以跨平台使用(XS-GEM5 和香山 RTL 软仿)”。具体生成方法和相关论文参见:https://xiangshan-doc.readthedocs.io/zh-cn/latest/tools/simpoint/。
checkpoint 举例
以 specint2006 的 hmmer 为例说明如果选择 checkpoint。hmmer 包含 nph3 和 retro 两部分,共有如下 checkpoint。
假设把如上 checkpoint 保存到"/home/zhangjian/works/software/spec06_rv64gcb_20m_llvm_peak/checkpoint-0-0-0/checkpoint-0-0-0_hmmer.lst",同时还需要同步修改 cluster 文件,cluster 文件的修改需要与 lst 对应。例如 lst 中"hmmer_nph3_15858 hmmer_nph3/15858 0 0 20 20",对应 cluster 文件中的
完整的修改如下:
假设文件名为“/home/zhangjian/works/software/spec06_rv64gcb_20m_llvm_peak/checkpoint-0-0-0/cluster-0-0_hmmer.json”
准备 nemu
可以使用 release 提供的 nemu:https://github.com/OpenXiangShan/GEM5/releases/tag/2023Oct27也可以自己编译,方法可以参见:https://github.com/OpenXiangShan/GEM5?tab=readme-ov-file#difftest-with-nemu注意,目前版本的 GEM5 依赖于 NEMU_HOME 环境变量,如果没有指定该变量,运行时会报错。如果下载 release 中提供的 nemu-ref.so,在运行 GEM5 前,需要进行如下配置:
把 riscv64-nemu-interpreter-231008.so 下载到 NEMU/build,并重命名为 riscv64-nemu-interpreter.so然后设置环境变量:
修改 simple_gem5.sh 脚本
使用给定 checkpoint 运行 gem5 获得片段结果
执行 xs gem5 的 simple_gem5.sh 脚本
运行 gem5-score.sh 获得 speccpu2006 单项得分
脚本仓库:https://github.com/shinezyy/gem5_data_procclone 仓库:
安装依赖库:
按前面的目录修改配置
batch.py 生成的 csv 举例
最终结果举例
hmmer 得分是 20.24。
评论