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 的结
   47   48   49   50   51   52   53   54   55   56   57