问题描述
是否可以将模拟运行一定的时间间隔,然后从Python配置脚本中读取所选统计信息的值?
解决方法
编辑:已在以下位置提交了补丁:https://gem5-review.googlesource.com/c/public/gem5/+/33176
从3ca404da175a66e0b958165ad75eb5f54cb5e772开始,这似乎不太可能,但很容易实现。
我们已经有一个循环遍历src/python/m5/stats/__init__.py
下Python中的所有统计信息,因此有一些python stat对象已完全公开和迭代,但是实际的stat值似乎并未公开给他们,只有stat名称:
def _dump_to_visitor(visitor,root=None):
# Legacy stats
if root is None:
for stat in stats_list:
stat.visit(visitor)
# New stats
def dump_group(group):
for stat in group.getStats():
stat.visit(visitor)
然后,visit方法将把值写到stat文件中,但是Python不会这样做。
但是,visit
已经是在src / python / pybind11 / stats.cc中定义的pybind11 Python C ++扩展名:
py::class_<Stats::Info,std::unique_ptr<Stats::Info,py::nodelete>>(
m,"Info")
.def("visit",&Stats::Info::visit)
;
所以您可能需要在此处公开值。
令人烦恼的是,从Stats::Info
派生的每种统计信息类型都有不同的数据表示形式,例如标量返回double
:
class ScalarInfo : public Info
{
public:
virtual Counter value() const = 0;
但引导std::vector
:
class VectorInfo : public Info
{
public:
virtual const VCounter &value() const = 0;
,由于返回类型不同,因此没有基础value()
方法,您可能需要在每个基类中公开一个方法。
待办事项我仍然看不到Python上的value()
方法,可能是因为它们仍然是基类的对象,需要进一步研究。
您可以使用 gem5-stat-summarizer 的变体。当您有多个 stats.txt 文件时,gem5-stat-summarizer 用于将选定的 gem5 统计信息提取到一个 csv 文件中