gem5:如何在BaseCPU中访问xbar新增的Formula类型统计量
从BaseCPU访问XBar新增allTransactions统计量的方案
最优访问方案
推荐采用gem5原生的SimObject层级引用方案,耦合度最低,也符合框架规范:
- 第一步先确认
xbar.hh中你定义的allTransactions统计量是类的public成员,避免访问权限问题。 - 如果你要访问的是系统内存交叉开关的统计量,可直接通过BaseCPU持有的系统指针层级访问:
先获取系统实例System* sys = system();,再通过sys->memXBar->allTransactions即可直接读取该统计值。 - 如果你要访问的是其他非默认路径的交叉开关统计量,可在BaseCPU的参数定义中新增一个对应XBar类型的指针成员,在Python模拟配置脚本中将目标XBar实例绑定到该参数,C++侧就可以直接通过成员指针访问统计量,适配任意拓扑结构的模拟场景。
全局可访问的实现方法
如果确实需要全局访问该统计量,可采用以下两种实现方式,注意多XBar实例场景下不推荐使用全局方案,容易出现统计值冲突:
- 方案1:全局持有XBar实例指针
在xbar.hh中添加外部声明extern BaseXBar* globalStatXBar;,在目标XBar的init()方法中添加globalStatXBar = this;的赋值逻辑,之后任意位置includexbar.hh后就可以通过globalStatXBar->allTransactions访问统计量,访问前建议加空指针判断避免初始化时序问题。 - 方案2:直接将统计量声明为全局
在xbar.hh中添加外部声明extern Stats::Formula allTransactions;,在xbar.cc中定义该全局变量,在XBar的regStats()方法中把你写的聚合逻辑赋值给这个全局统计量即可,注意仅可给一个XBar实例注册该统计量,否则会出现值覆盖。
提示:非必要场景优先选择层级引用方案,不会破坏框架原有对象管理逻辑,也不会引入多实例冲突问题。
内容的提问来源于stack exchange,提问作者vic
相关产品推荐
相关产品推荐

