* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Authors: Andrew Bardsley
+ * Matthias Jung
+ * Abdul Mutaal Ahmad
*/
/**
* Register with: Stats::registerHandlers(statsReset, statsDump)
*/
+#include "base/output.hh"
#include "base/statistics.hh"
+#include "base/stats/text.hh"
#include "stats.hh"
namespace CxxConfig
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()
{
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();
+ }
+
+ }
}
}
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Authors: Matthias Jung
+ * Abdul Mutaal Ahmad
*/
/**
#include "sim/system.hh"
#include "stats.hh"
+// Defining global string variable decalred in stats.hh
+std::string filename;
+
void usage(const std::string &prog_name)
{
std::cerr << "Usage: " << prog_name << (
SimControl sim_control("gem5", argc, argv);
Target *memory;
+ filename = "m5out/stats-tlm.txt";
+
tlm::tlm_initiator_socket <> *mem_port =
dynamic_cast<tlm::tlm_initiator_socket<> *>(
sc_core::sc_find_object("gem5.memory")
SC_REPORT_INFO("sc_main", "End of Simulation");
+ CxxConfig::statsDump();
+
return EXIT_SUCCESS;
}