Page 52 - 《软件学报》2025年第9期
P. 52
韩金池 等: Spike-FlexiCAS: 支持缓存架构灵活配置的 RISC-V 处理器模拟器 3963
4 实验评估
本文主要从正确性和性能两个方面评估 Spike-FlexiCAS. 正确性评估集中在本文新增的缓存模型一致性协议
的准确性, 这通过运行并行测试程序 Litmus [35] 以及与 gem5 比较运行同一测试集后的缓存性能数据来验证. 性能
评估则包括: (1) Spike-FlexiCAS 在不同配置下的性能测试; (2) 将 Spike-FlexiCAS 与其他处理器模拟器的性能进
行对比.
本文使用的实验平台为一台配备了 16 核 32 线程的 AMD Ryzen Threadripper 3955WX CPU 以及 128 GB 内
存的计算机, 使用的操作系统为 Ubuntu 22.04, 编译器的优化等级均设置为 O3. 所有模拟器无特殊说明的情况下
默认使用的缓存一致性协议均为 MESI, 一级数据缓存和指令缓存的大小为 8 路、32 KB, 二级缓存的大小为
16 路、1 MB, 三级缓存的大小为 16 路、2 MB, 使用的测试集均为 SPEC CPU2006 测试集, Spike-FlexiCAS 的运
行线程数为 1.
4.1 正确性验证
Litmus [35] 是用来验证计算机体系结构中内存一致性模型的工具, 它允许研究人员编写并行的测试程序, 通过
运行这些测试, 可以观察并验证硬件 (软件) 是否遵循预期的内存一致性模型. 本文通过在 Spike-FlexiCAS 上运行
Litmus 并使用程序的运行结果以及比较 Spike 内存模型的和 FlexiCAS 内存模型的一致性来验证修改后的缓存模
型的正确性. 本文指定 Litmus 的测试核数为双核, 测试的缓存配置为三级缓存 (一级和二级缓存的包含关系为排
他性, 二级和三级缓存的包含关系为包含性, 使用的一致性协议为 MESI), 最终测试得到的程序运行结果通过了正
确性的验证.
[2]
本文还比较了包含性二级缓存、缓存协议为 MESI 一致性协议配置下 Spike-FlexiCAS、 gem5 、Sniper [23]
和 ZSim [19] 运行 SPEC CPU2006 测试集得到的缓存性能数据的准确性. 其中使用到的具体配置为: Spike-FlexiCAS
使用的内核为支持运行用户态程序的 RISC-V-pk, 核数为 1; gem5 的 CPU 类型为 TimingSimpleCPU, 内存类型为
SimpleMemory, 核数为 1, 运行的模式为用户模式模拟 (syscall emulation simulation, SE); Sniper 的 CPU 类型为
nehalem, 内存类型为 constant, 核数为 1; ZSim 的 CPU 类型为 SimpleCore, 内存类型为 SimpleMemory, 核数为 1.
具体地, 本文测试了各模拟器运行 SPEC CPU2006 测试集各测试样例 10G 条指令后末级缓存的每千条指令缓存
缺失数 (misses per kilo instructions, MPKI), 得到的结果如图 6 所示. 由于 gem5 是学术界和工业界最广泛使用的模
拟器, 因此本文认为使用 gem5 模拟得到的结果最为准确. KL 散度可以描述信息的损失程度以及评估不同的分布
间存在的信息差异, 对于两个离散的概率分布 P 和 Q, 如果 χ 是所有可能的离散状态集合, P(x) 是事件 x 在概率分
布 P 中的概率, Q(x) 是事件 x 在概率分布 Q 分布的概率, 那么分布 P 和 Q 的 KL 散度可以通过以下公式计算:
∑ P(x)
DKL(P||Q) = P(x)log (1)
Q(x)
x∈χ
100
gem5 Spike-FlexiCAS Sniper ZSim
10
MKPI 1
0.1
462.libquantum
454.calculix
458.sjeng
482.sphinx3
410.bwaves
400.perlbench 401.bzip2 403.gcc 429.mcf 435.gromacs 444.namd 450.soplex 456.hmmer 459.GemsFDTD 464.h264ref 465.tonto 470.lbm 473.astar 481.wrf 483.xalancbmk mean
436.cactusADM
434.zeusmp
图 6 各模拟器运行 SPEC CPU2006 测试集 10G 条指令的 MPKI 大小对比
因此为了衡量其余 3 个模拟器的结果和 gem5 的差距, 本文计算了其他 3 个模拟器对比 gem5 的 MPKI 的
KL 散度. 得到的结果为 Spike-FlexiCAS 与 gem5 的 KL 散度为 0.003 5, Sniper 与 gem5 的 KL 散度为 0.027 6, ZSim
与 gem5 的 KL 散度则为 0.565 2. Spike-FlexiCAS 与 gem5 的 MPKI 的 KL 散度最小, 即两个模拟器在 MPKI 的结

