我已经开始使用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;
}
答案 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")
这是: