summaryrefslogtreecommitdiff
path: root/util/systemc
diff options
context:
space:
mode:
Diffstat (limited to 'util/systemc')
-rw-r--r--util/systemc/main.cc7
-rw-r--r--util/systemc/stats.cc86
-rw-r--r--util/systemc/stats.hh4
3 files changed, 76 insertions, 21 deletions
diff --git a/util/systemc/main.cc b/util/systemc/main.cc
index 75a77853b..19482d069 100644
--- a/util/systemc/main.cc
+++ b/util/systemc/main.cc
@@ -74,6 +74,9 @@
#include "sc_module.hh"
#include "stats.hh"
+// Defining global string variable decalred in stats.hh
+std::string filename;
+
void
usage(const std::string &prog_name)
{
@@ -383,7 +386,11 @@ sc_main(int argc, char **argv)
{
SimControl sim_control("gem5", argc, argv);
+ filename = "m5out/stats-systemc.txt";
+
sc_core::sc_start();
+ CxxConfig::statsDump();
+
return EXIT_SUCCESS;
}
diff --git a/util/systemc/stats.cc b/util/systemc/stats.cc
index ef5d9b5d3..54d149474 100644
--- a/util/systemc/stats.cc
+++ b/util/systemc/stats.cc
@@ -35,6 +35,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Authors: Andrew Bardsley
+ * Matthias Jung
+ * Abdul Mutaal Ahmad
*/
/**
@@ -45,7 +47,9 @@
* Register with: Stats::registerHandlers(statsReset, statsDump)
*/
+#include "base/output.hh"
#include "base/statistics.hh"
+#include "base/stats/text.hh"
#include "stats.hh"
namespace CxxConfig
@@ -56,45 +60,76 @@ void statsPrepare()
std::list<Stats::Info *> stats = Stats::statsList();
/* gather_stats -> prepare */
- for (auto i = stats.begin(); i != stats.end(); ++i)
- (*i)->prepare();
+ for (auto i = stats.begin(); i != stats.end(); ++i){
+ Stats::Info *stat = *i;
+ Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat);
+ if (vector){
+ (dynamic_cast<Stats::VectorInfo *>(*i))->prepare();
+ }
+ else {
+ (*i)->prepare();
+ }
+
+ }
}
void statsDump()
{
- std::cerr << "Stats dump\n";
+ bool desc = true;
+ Stats::Output *output = Stats::initText(filename, desc);
Stats::processDumpQueue();
std::list<Stats::Info *> stats = Stats::statsList();
+ statsEnable();
statsPrepare();
+ output->begin();
/* gather_stats -> convert_value */
for (auto i = stats.begin(); i != stats.end(); ++i) {
Stats::Info *stat = *i;
- Stats::ScalarInfo *scalar = dynamic_cast<Stats::ScalarInfo *>(stat);
+ const Stats::ScalarInfo *scalar = dynamic_cast<Stats::ScalarInfo
+ *>(stat);
Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat);
-
- if (scalar) {
- std::cerr << "SCALAR " << stat->name << ' '
- << scalar->value() << '\n';
- } else if (vector) {
- Stats::VResult results = vector->value();
-
- unsigned int index = 0;
- for (auto e = results.begin(); e != results.end(); ++e) {
- std::cerr << "VECTOR " << stat->name << '[' << index
- << "] " << (*e) << '\n';
- index++;
+ const Stats::Vector2dInfo *vector2d = dynamic_cast<Stats::Vector2dInfo
+ *>(vector);
+ const Stats::DistInfo *dist = dynamic_cast<Stats::DistInfo *>(stat);
+ const Stats::VectorDistInfo *vectordist =
+ dynamic_cast<Stats::VectorDistInfo *>(stat);
+ const Stats::SparseHistInfo *sparse =
+ dynamic_cast<Stats::SparseHistInfo *>(stat);
+ const Stats::InfoProxy <Stats::Vector2d,Stats::Vector2dInfo> *info =
+ dynamic_cast<Stats::InfoProxy
+ <Stats::Vector2d,Stats::Vector2dInfo>*>(stat);
+
+ if (vector) {
+ const Stats::FormulaInfo *formula = dynamic_cast<Stats::FormulaInfo
+ *>(vector);
+ if (formula){
+ output->visit(*formula);
+ } else {
+ const Stats::VectorInfo *vector1 = vector;
+ output->visit(*vector1);
}
- std::cerr << "VTOTAL " << stat->name << ' '
- << vector->total() << '\n';
+ } else if (vector2d) {
+ output->visit(*vector2d);
+ } else if (info){
+ output->visit(*info);
+ } else if (vectordist){
+ output->visit(*vectordist);
+ } else if (dist) {
+ output->visit(*dist);
+ } else if (sparse) {
+ output->visit(*sparse);
+ } else if (scalar) {
+ output->visit(*scalar);
} else {
- std::cerr << "?????? " << stat->name << '\n';
+ warn("Stat not dumped: %s\n", stat->name);
}
}
+ output->end();
}
void statsReset()
@@ -108,8 +143,17 @@ void statsEnable()
{
std::list<Stats::Info *> stats = Stats::statsList();
- for (auto i = stats.begin(); i != stats.end(); ++i)
- (*i)->enable();
+ for (auto i = stats.begin(); i != stats.end(); ++i){
+ Stats::Info *stat = *i;
+ Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat);
+ if (vector){
+ (dynamic_cast<Stats::VectorInfo *>(*i))->enable();
+ }
+ else {
+ (*i)->enable();
+ }
+
+ }
}
}
diff --git a/util/systemc/stats.hh b/util/systemc/stats.hh
index 360cb6293..9dac960ee 100644
--- a/util/systemc/stats.hh
+++ b/util/systemc/stats.hh
@@ -35,6 +35,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Authors: Andrew Bardsley
+ * Matthias Jung
+ * Abdul Mutaal Ahmad
*/
/**
@@ -48,6 +50,8 @@
#ifndef __UTIL_CXX_CONFIG_STATS_H__
#define __UTIL_CXX_CONFIG_STATS_H__
+extern std::string filename;
+
namespace CxxConfig
{