Gem5模拟器,详解官网教程的statistics and output(三)

gem5是一个计算机模拟器,它可以用来模拟不同类型的计算机系统,以帮助计算机科学家和工程师更好地理解和优化计算机系统的性能。gem5提供了许多统计信息和输出功能,可以帮助用户更好地了解模拟的计算机系统的性能情况。

gem5的统计信息可以通过访问Stats.txt文件来获取。这个文件中包含了gem5模拟过程中产生的各种统计信息,例如计算机系统中每个部件的执行次数、每个指令的执行时间等。用户可以通过分析这些统计信息来评估模拟计算机系统的性能情况。

gem5的输出功能可以通过命令行参数来控制。例如,用户可以使用--debug-flags命令行参数来指定gem5在模拟过程中输出哪些调试信息。例如,使用--debug-flags=Exec、Cache或者--debug-flags=Exec+Cache+Memory等命令行参数,可以让gem5输出有关指令执行、缓存和内存的调试信息。这些调试信息可以帮助用户更好地理解模拟计算机系统的工作原理。


目录

一、运行gem5会生成哪些文件?有什么作用?

二、经常出现的tick是啥?

三、stats.txt中的输出都是啥意思?

四、怎么看SimObjects’ statistics?

(1)以CPU为例:

(2)以存储器为例

五、如何通过比较gem5的输出来判断哪种模型性能更好呢?


一、运行gem5会生成哪些文件?有什么作用?

运行gem5时,会根据配置文件和程序的不同,生成不同的文件。常见的文件包括:

  • config.ini:gem5的主配置文件,包含了各种参数和设置,用于定义模拟器如何运行。
  • config.json:JSON格式的配置文件,用于覆盖config.ini中的设置。
  • stats.txt:存储模拟器运行时的性能统计信息,用于分析和研究系统性能行为。
  • system.prv:存储模拟器运行时的指令和事件信息,可以用于进一步分析系统的行为。
  • system.pim:存储模拟器运行时的状态和内存信息,可以用于进一步分析系统的行为。
  • system.map:存储模拟器运行时的地址映射信息,可以用于进一步分析系统的行为。
  • system.ptx:存储模拟器运行时的指令流信息,可以用于进一步分析系统的行为。

 这些文件的作用各不相同

二、经常出现的tick是啥?

在gem5中,tick是指模拟器模拟的时间单位。它用于指定模拟器每次迭代执行的时间间隔。这个时间间隔是可以通过配置文件来设定的。例如,如果在config.ini中将tick设定为1ns,那么每次迭代模拟器就会执行1ns的时间。

tick在gem5中扮演着重要的角色,因为它可以用来控制模拟的精度和速度。如果将tick设定的更小,那么模拟器就会更加精确但同时也会更慢。反之,如果将tick设定的更大,那么模拟器就会更快,但同时也会更不精确。因此,在使用gem5时,需要合理地调整tick的值,以达到最佳的模拟精度和速度。

三、stats.txt中的输出都是啥意思?

---------- Begin Simulation Statistics ----------
simSeconds                                   0.000057                       # Number of seconds simulated (Second)
simTicks                                     57467000                       # Number of ticks simulated (Tick)
finalTick                                    57467000                       # Number of ticks from beginning of simulation (restored from checkpoints and never reset) (Tick)
simFreq                                  1000000000000                       # The number of ticks per simulated second ((Tick/Second))
hostSeconds                                      0.03                       # Real time elapsed on the host (Second)
hostTickRate                               2295882330                       # The number of ticks simulated per host second (ticks/s) ((Tick/Second))
hostMemory                                     665792                       # Number of bytes of host memory used (Byte)
simInsts                                         6225                       # Number of instructions simulated (Count)
simOps                                          11204                       # Number of ops (including micro ops) simulated (Count)
hostInstRate                                   247382                       # Simulator instruction rate (inst/s) ((Count/Second))
hostOpRate                                     445086                       # Simulator op (including micro ops) rate (op/s) ((Count/Second))
  • simSeconds 表示模拟的秒数。这个值表示模拟的时钟的累计时间。
  • simTicks 表示模拟的时钟滴答数,可以看作时钟周期。滴答(tick)是模拟中使用的最小时间单位。
  • finalTick 表示模拟从开始到结束的时钟滴答数,即总的时钟周期数。注意,这个值不会重置,即使模拟从检查点恢复。
  • simFreq 表示模拟时钟的频率。它表示每秒钟有多少滴答(时钟周期)。
  • hostSeconds 指在宿主机上,表示真实时间中的秒数。这个值表示主机上实际流逝的时间。
  • hostTickRate 指在宿主机上,表示每秒钟模拟的时钟周期数。它反映了模拟的速度。
  • hostMemory 表示模拟器在宿主机上使用了多少字节的内存。
  • simInsts:指模拟器模拟了多少条指令。指令(instruction)是计算机中执行的最小单位。这个数值越大,表明模拟器的性能越好。
  • simOps:指模拟器模拟了多少个操作(包括微操作)。这个数值越大,表明模拟器的性能越好。
  • hostInstRate:指模拟器的指令模拟速率,单位是指令/秒。这个数值越大,表明模拟器的性能越好。
  • hostOpRate:指模拟器的操作模拟速率(包括微操作),单位是操作/秒。这个数值越大,表明模拟器的性能越好。

四、怎么看SimObjects’ statistics?

(1)以CPU为例:

system.clk_domain.clock                          1000                       # Clock period in ticks (Tick)
system.clk_domain.voltage_domain.voltage            1                       # Voltage in Volts (Volt)
system.cpu.numCycles                            57467                       # Number of cpu cycles simulated (Cycle)
system.cpu.numWorkItemsStarted                      0                       # Number of work items this cpu started (Count)
system.cpu.numWorkItemsCompleted                    0                       # Number of work items this cpu completed (Count)
system.cpu.dcache.demandHits::cpu.data           1941                       # number of demand (read+write) hits (Count)
system.cpu.dcache.demandHits::total              1941                       # number of demand (read+write) hits (Count)
system.cpu.dcache.overallHits::cpu.data          1941                       # number of overall hits (Count)

上面这些输出是一组性能指标,每个指标都对应着一个数字。比如,system.clk_domain.clock 表示时钟周期,它对应的数字是 1000,这意味着时钟的频率是 1000 ticks/second。另一个例子是 system.cpu.dcache.demandHits::cpu.data,它表示 CPU 数据高速缓存的需求命中次数,它对应的数字是 1941,这意味着在模拟过程中,CPU 数据高速缓存有 1941 次需求命中。用户可以比较不同模型的吞吐量、延迟、命中率等参数来评估模型的好坏。

(2)以存储器为例

system.mem_ctrl.bytesReadWrQ                        0                       # Total number of bytes read from write queue (Byte)
system.mem_ctrl.bytesReadSys                    23168                       # Total read bytes from the system interface side (Byte)
system.mem_ctrl.bytesWrittenSys                     0                       # Total written bytes from the system interface side (Byte)
system.mem_ctrl.avgRdBWSys               403153113.96105593                       # Average system read bandwidth in Byte/s ((Byte/Second))
system.mem_ctrl.avgWrBWSys                 0.00000000                       # Average system write bandwidth in Byte/s ((Byte/Second))
system.mem_ctrl.totGap                       57336000                       # Total gap between requests (Tick)
system.mem_ctrl.avgGap                      158386.74                       # Average gap between requests ((Tick/Count))
system.mem_ctrl.requestorReadBytes::cpu.inst        14656                       # Per-requestor bytes read from memory (Byte)
system.mem_ctrl.requestorReadBytes::cpu.data         8512                       # Per-requestor bytes read from memory (Byte)
system.mem_ctrl.requestorReadRate::cpu.inst 255033323.472601681948                       # Per-requestor bytes read from memory rate ((Byte/Second))
system.mem_ctrl.requestorReadRate::cpu.data 148119790.488454252481                       # Per-requestor bytes read from memory rate ((Byte/Second))
system.mem_ctrl.requestorReadAccesses::cpu.inst          229                       # Per-requestor read serviced memory accesses (Count)
system.mem_ctrl.requestorReadAccesses::cpu.data          133                       # Per-requestor read serviced memory accesses (Count)
system.mem_ctrl.requestorReadTotalLat::cpu.inst      6234000                       # Per-requestor read total memory access latency (Tick)
system.mem_ctrl.requestorReadTotalLat::cpu.data      4141000                       # Per-requestor read total memory access latency (Tick)
system.mem_ctrl.requestorReadAvgLat::cpu.inst     27222.71                       # Per-requestor read average memory access latency ((Tick/Count))
system.mem_ctrl.requestorReadAvgLat::cpu.data     31135.34                       # Per-requestor read average memory access latency ((Tick/Count))
system.mem_ctrl.dram.bytesRead::cpu.inst        14656                       # Number of bytes read from this memory (Byte)

上面这些输出是一组性能指标,每个指标都对应着一个数字。举个例子,system.mem_ctrl.avgRdBWSys 表示系统接口侧读取的平均带宽,它对应的数字是 403153113.96105593,这意味着在模拟过程中,系统接口侧的读取带宽平均为 403153113.96105593 Bytes/second。另一个例子是 system.mem_ctrl.requestorReadAccesses::cpu.data,它表示 CPU 数据请求方的读取访问次数,它对应的数字是 133,这意味着 CPU 数据请求方在模拟过程中有 133 次读取访问。

五、如何通过比较gem5的输出来判断哪种模型性能更好呢?

gem5的输出可以通过分析统计信息和调试信息来评估模拟计算机系统的性能。用户可以通过比较不同模型的统计信息和调试信息来判断哪种模型的性能更好。

在分析统计信息时,用户可以比较不同模型的吞吐量、延迟、命中率等参数,以评估模型的性能。例如,用户可以通过比较不同模型的吞吐量来评估模型的处理能力;可以通过比较不同模型的延迟来评估模型的响应能力;可以通过比较不同模型的命中率来评估模型的存储能力。在分析调试信息时,用户可以比较不同模型的调度策略、内存管理策略等参数,以评估模型的性能。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值