我希望在某些工作中使用gem5,并且对其功能有一个非常笼统的问题。
我的问题是,使用gem5,我可以在SE或FS模式下获取有关单个线程的行为/系统资源使用情况的统计信息。例如,如果我的应用程序中有2个线程在运行,我是否可以看到线程1在CPU 1上使用X个周期,在CPU 2上使用Y个周期,等等,而线程2在CPU 3上使用Z个周期,等等。它还扩展到缓存使用率,内存使用率等?
我看到了以下问题:Accessing logical (software) thread ID in gem5,但是我认为仅使用硬件线程统计信息就可以满足我们的用例。
我看到src / cpu / thread_state.hh中的ThreadState类具有以下功能:
/** Number of instructions committed. */
Counter numInst;
/** Stat for number instructions committed. */
Stats::Scalar numInsts;
/** Number of ops (including micro ops) committed. */
Counter numOp;
/** Stat for number ops (including micro ops) committed. */
Stats::Scalar numOps;
/** Stat for number of memory references. */
Stats::Scalar numMemRefs;
这看起来像是我可以使用的东西。有人知道这些统计信息是否可以轻松地在stats文件中的每个线程中输出吗?
谢谢!
答案 0 :(得分:1)
我自己还没有做过,但是我会做出以下有根据的猜测:
se.py:SE有一个限制,即每个内核只能运行一个线程,因此我怀疑这将直接显示在每个内核的统计信息上
fs.py:线程的定义取决于操作系统,因此您需要某种来宾支持。
例如,在ARM Linux内核跟踪的上下文中,CONFIG_PID_IN_CONTEXTIDR
在日志上显示:Accessing logical (software) thread ID in gem5,但不确定获取统计信息有多么容易
因此se.py可能是更简单的方法。