如何在gem5的SE模式下配置系统预热以评估预取器性能?
gem5 SE模式下系统预热的正确配置方法
近期在gem5中实现预取算法,希望在统计性能前对系统进行预热。最初尝试用-W WARMUP_INSTS参数设置1M指令预热,但结果和未预热的情况完全一致。查看se.py的帮助文档后发现,该参数必须配合--standard-switch使用,添加该参数后结果出现明显变化,当时使用的命令行如下:
build/${arch}/gem5.debug configs/example/se.py --cpu-type DerivO3CPU --cmd=${cmd} -o "${options}" --l1d_size=64kB --l1i_size=64kB --l2_size=512kB --caches --l2cache -n 1 --l1d-hwp-type=${PF} -I 4000000 -W 1000000 -s 100000
原本的理解是:系统先以TimingSimpleCPU运行前100k指令完成预热,再切换到指定的DerivO3CPU运行后续(400k-100k)指令用于性能评估,且预热逻辑仅在配合--standard-switch时生效。但仅使用--standard-switch的命令行也得到了不同结果,这让人产生困惑。
为此做了多组配置测试,得到的CPI结果如下:
# (1) 无--warmup-instruction && 无--standard-switch system.cpu.cpi 8.603255 # CPI: Cycles Per Instruction ((Cycle/Count)) # (2) 无--warmup-instruction && 有--standard-switch system.cpu.cpi 181.000000 # CPI: Cycles Per Instruction ((Cycle/Count)) system.switch_cpus_1.cpi 8.586554 # CPI: Cycles Per Instruction ((Cycle/Count)) # (3) 有warmup-instruction && 无--standard-switch system.cpu.cpi 8.603255 # CPI: Cycles Per Instruction ((Cycle/Count)) # (4) 有warmup-instruction && 有--standard-switch system.cpu.cpi 181.000000 # CPI: Cycles Per Instruction ((Cycle/Count)) system.switch_cpus_1.cpi 8.939483 # CPI: Cycles Per Instruction ((Cycle/Count))
核心逻辑与正确配置要点
--standard-switch的本质:它会触发gem5的CPU切换机制——先启动一个TimingSimpleCPU执行预热阶段,完成后切换到你指定的--cpu-type(这里是DerivO3CPU)执行性能统计阶段。没有这个参数的话,-W参数完全不会生效,全程只会运行你指定的CPU。- 参数配合规则:
- 必须同时使用
--standard-switch和-W WARMUP_INSTS:前者开启切换逻辑,后者明确预热的指令数。 -I设置总指令数(预热阶段指令数 + 统计阶段指令数),因此统计阶段的指令数为-I减去-W的值。-s参数要和-W的值保持一致,确保从预热结束的位置开始收集性能统计数据,避免将预热阶段的结果混入最终评估。
- 必须同时使用
- 结果解读:
- 测试组(1)(3)因为没加
--standard-switch,-W无效,全程用DerivO3CPU运行,所以CPI完全一致。 - 测试组(2)加了
--standard-switch但没设-W,gem5会用默认逻辑完成少量预热;其中system.cpu是预热阶段TimingSimpleCPU的CPI(该CPU单指令周期长,所以CPI极高,这部分数据无评估价值),system.switch_cpus_1才是切换后DerivO3CPU的性能数据,和组(1)接近。 - 测试组(4)是正确的预热配置:先运行1M指令完成预热,再切换到DerivO3CPU运行剩下的3M指令,
system.switch_cpus_1.cpi才是预热后的真实性能数据。
- 测试组(1)(3)因为没加
修正后的命令行示例
build/${arch}/gem5.debug configs/example/se.py \ --cpu-type DerivO3CPU \ --cmd=${cmd} \ -o "${options}" \ --l1d_size=64kB \ --l1i_size=64kB \ --l2_size=512kB \ --caches \ --l2cache \ -n 1 \ --l1d-hwp-type=${PF} \ -I 4000000 \ -W 1000000 \ -s 1000000 \ --standard-switch
内容的提问来源于stack exchange,提问作者zongwu wang
相关产品推荐
相关产品推荐

