Как получить доступ к статистике gem5 из скрипта Python?

#gem5

#gem5

Вопрос:

Возможно ли запустить симуляцию в течение определенного количества тактов, а затем прочитать значение выбранной статистики из скрипта конфигурации Python?

Ответ №1:

Редактировать: исправление было отправлено по адресу:https://gem5-review.googlesource.com/c/public/gem5/ /33176

По состоянию на 3ca404da175a66e0b958165ad75eb5f54cb5e772 это кажется невозможным, но, вероятно, это легко реализовать.

У нас уже есть цикл, который просматривает всю статистику в Python под src/python/m5/stats/__init__.py , поэтому есть статические объекты python, полностью открытые и повторяемые, но фактическое значение статистики отображается без них, только имя статистики:

 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 выводит значение для записи в файл статистики, но Python этого не делает.

Однако visit уже есть расширение python C для pybind11, определенное в src / python /pybind11/stats.cc:

     py::class_<Stats::Info, std::unique_ptr<Stats::Info, py::nodelete>>(
        m, "Info")
        .def("visit", amp;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 amp;value() const = 0;
  

и поэтому нет базового value() метода из-за разных типов возвращаемых данных, вам просто нужно предоставить по одному для каждого базового класса.

TODO, который я все еще не мог увидеть value() метод на Python, вероятно, потому, что они все еще были объектами базового класса, требует дополнительного изучения.

Ответ №2:

Вы можете использовать вариант gem5-stat-summarizer. gem5-stat-summarizer используется для извлечения выбранной статистики gem5 в CSV-файл, когда у вас есть несколько stats.txt файлы