如何从Python脚本访问gem5统计信息?

问题描述

是否可以将模拟运行一定的时间间隔,然后从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 文件中