c++ - gem5:在 BaseCPU 中使用 xbar stat
问题描述
我在 xbar.cc/hh 文件中创建了一个公式类型的新统计信息。在那里我汇总了所有不同的 transDist 类型。我想使用这个新创建的统计数据来计算 BaseCPU 对象中的另一个统计数据。从 BaseCPU 访问它(即 allTransactions stat)的最佳方式是什么?有没有办法让它在全球范围内可访问?
解决方案
我最终在 xbar 和 CPU 对象之间建立了直接的通信线路。
我在 Xbar 对象中实现了一个函数,它返回我想要的统计信息,称为 getAllTrans()。从 CPU 对象中,我调用该函数并获取统计信息的值。使用下面的代码实现通信。
// Research (Memory Boundedness)
void
BaseCPU::getAllTrans() {
allTrans = 0;
Cache *dCache = dynamic_cast<Cache*>
(this->getPort("dcache_port", 0).getPeer().getOwner());
if (dCache) {
Cache *l2Cache = dynamic_cast<Cache*>
(dCache->getPort("mem_side", 0).getPeer().getOwner()->
getPort("mem_side_ports", 0).getPeer().getOwner());
if (l2Cache) {
CoherentXBar *membus = dynamic_cast<CoherentXBar*>
(l2Cache->getPort("mem_side", 0).getPeer().getOwner());
if (membus) {
allTrans = membus->getAllTrans();
}
}
else {
CoherentXBar *membus = dynamic_cast<CoherentXBar*>
(l2Cache->getPort("mem_side", 0).getPeer().getOwner());
if (membus) {
allTrans = membus->getAllTrans();
}
}
}
}
上面的代码假设 dcache 存在。
Cache *dCache = dynamic_cast<Cache*>
(this->getPort("dcache_port", 0).getPeer().getOwner());
上面的代码从 cpu 指向 dcache 对象。啤酒花是这样的:
CPU -> 到 dCache 的 CPU 端口 -> 该端口的对等点(即,到 CPU 的 dCache 端口)-> 该端口的所有者(即,dCache 本身)。
我建立在将 CPU 连接到 Xbar 的每个对象之上,直到到达 XBar。这不是最优雅的解决方案,但我还没有找到更好的解决方案来从一个 gem5 对象获取信息到另一个对象。
推荐阅读
- php - 尝试使用 Laravel 迁移时出错
- python-3.x - Python Best Syntactic way of Calculating the age based on datetime
- python - 使用assume_role_with_saml boto3
- google-apps-script - 演示期间可以通过时钟触发 Google 幻灯片应用脚本吗?
- r - 如何从向量(R)中删除任何同时出现的子列表元素
- minecraft - 使用屏幕的 Systemd 服务:“未找到屏幕会话”
- javascript - 创建数据 JS 的哈希
- python - 发送带有附件的电子邮件
- javascript - Reactjs 渲染和状态更改依赖项
- python-3.x - 如何让 mypy 抱怨将 Any 分配给 int