Statistic File Capability

The Statistic Capability allow to generate various statistics tied to the simulation such as the cache miss rate, number of instruction executed and so on.

The Statistic File Capability allows to save some of the statistics computed during the simulation to an output file, and to reload those statistics for future simulations.

Such a capability enable different uses:

  • It allows to validate different runs of the simulator comparing the statistics for those different runs.
  • It also allow to pass some statistics from an higher level simulation to a lower level one, to either:
    • compare the accuracy on some specific metrics of the level of abstraction
    • to estimate the running time of the lower level simulator (knowing the total number of instructions)

Interface

The Statistic File Interface is very simple, just providing a method to either create a new statistic file or reload an existing one, then some methods to add new statistics and to save the statistic repository to a file.

The interface for the Statistic File Capability is defined by the StatisticFile class presented below:

class StatisticFile
{public:
  StatisticFile ()                        // Creates a new empty Statistic File
  StatisticFile (const string &name)      // Creates a Statistic File by reading an input file
  void add (const string &name, T value)  // Add a new statistic of type T to the repository
  const T operator[ ] (const string&)     // Access a statistic from the repository
  void save (const string &name)          // Save the statistic repository to an output file.
}

The next section describes how to use the statistic file capability within your own simulators.

How To use the Statistic File Capability in your simulator

To illustrate the use of the Statistic File Capability we’ll add:

  • the ability to a Powerpc instruction set simulator to dump the number of executed insturctions at the end of the run
  • the ability to a cycle level simulator to relaod such a satistic file to be able to build some sort of progress bar during the simulation.

Modification to the ISS simulator

Adding the following code at the end of your ISS will allow it to dump statistics:

 StatisticFile f;
 double speed = cpu->GetInstructionCounter() / spent_time;
 f.add("instruction_count",cpu->GetInstructionCounter());
 f.add("emulation_time",spent_time);
 f.add("speed",speed);
 f.save("dump-statistics");

The statistics consisting of:

  • the number of instruction executed
  • the total emulation time
  • the average emulation speed

The first one will allow us to compute the estimated ETA in the cycle-level simulator, the last two ones could be used to compute the cycle-level over ISS slowdown.

Modification to the cycle-level simulator

Then the cycle level simulator needs to be modified to reload the ISS statistic before the main simulation loop, adding the following source code:

  StatisticFile statfile("dump-statistics");
  predicted_total_instructions = statfile["instruction_count"];

Last, we can add our “progress indicator” to the main simulation loop, even if it is not the most efficent way to do so, as it will slow the simulator a lot:

  cerr << commited_instructions << "/" << predicted_total_instructions << endl;

A more efficient way would be to do this in a separated thread refreshing the indicator every few seconds or so.

Reference Manual

 
services/statisticfile/start.txt · Last modified: 2008/02/20 16:23 by girbal     Back to top
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki