如何使用gem5在源代码中仅分析感兴趣的区域?

时间:2019-06-08 11:58:17

标签: gem5

我已经开始使用gem5从高速缓存命中未命中或dram访问的角度了解发生了什么。

我发现存在m5_checkpoint,m5_reset _...

因此,要打印出感兴趣区域的“统计信息”,如何在下面的示例中使用这些API?

int main(void) {
   init() // I don't care what happens here

   run() // This function is what I want to analyze

   return 0;
}

1 个答案:

答案 0 :(得分:2)

密切相关的问题:How to count the number of CPU clock cycles between the start and end of a benchmark in gem5?

通过阅读m5工具的源代码,您可以发现它仅归因于使用魔术(通常未分配)指令,或对魔术(通常未映射)内存地址进行内存访问。

因此,例如,对于这些说明,您只需将这些说明插入.inst并内联汇编即可,通常按以下顺序进行:

  • resetsats在感兴趣区域之前
  • dumpstats之后

最干净的方法是实际上包含m5 CLI工具使用的gem5源代码中的m5ops.h header,但是我发现有时自己进行手工编码会更容易。

例如对于aarch64,它们看起来像:

/* resetstats */
__asm__ __volatile__ ("mov x0, #0; mov x1, #0; .inst 0XFF000110 | (0x40 << 16);" : : : "x0", "x1")
/* dumpstats */
__asm__ __volatile__ ("mov x0, #0; mov x1, #0; .inst 0xFF000110 | (0x41 << 16);" : : : "x0", "x1")

这是: