ESATSim with Misspeculative Execution and Power Modeling




What is ESATSim?

ESATSim is an expansion of Mark Wolff's SATSim. It is an easy to use and easy to configure superscalar architecture simulator that can be used to gather performance statistics for a processor model of interest. The flow of instructions through the processor can be viewed via the GUI making it an excellent teaching tool.

What about power modeling?

Power modeling is a method of studying energy consumption within a processor. This is done in ESATSim by inserting counters in the simulator to record the number of times that a component is used during a trace's execution. The values of these counters can be used later in a spreadsheet to calculate the energy that each component consumed. This energy is the total consumed while the component is active and the energy consumed while it's not actively working on an instruction, this is referred to as leakage. The energy consumed due to leakage is based on how long the unit is on.

ESATSim contains usage counters for the following items:

	fetches
	decodes
	issues
	broadcasts
	cycles
	commits
	reservation stations for:	integer
					floating point
					branch
					memory
	
	executions for:			integer
					floating point
					branch
					memory
	renaming entries
	reorder entries
	processor cleanings (or squashes)
	register accesses
	memory accesses
	instruction cache misses
	data cache misses
	

What does misspeculative execution have to do with power modeling?

Misspeculative execution is the result of a branch predictor mispredicting the path of execution when it comes to a branch instruction. The actual target of the branch isn't resolved until the instruction gets executed in the branch functional unit. In the meantime, other instructions from the mispredicted path flow into processor which results in more energy being consumed.

How can the data be used once it has been collected?

Once the data has been collected some mathmatical manipulation is required to get the total energy consumed by a component. Here is a helpful formula for determining a component's energy consumption.

and Settings

Energy consumed = ( a+ b* r* d) * g
where:
                     a = # of uses
                     b = # of cycles
                     r = # of components
                     d = leakage coefficient
                     g = weight or the amount of energy consumed when the
                            component is active
Which is really the area contained within these 2 rectangles:



The idea is to use weighting appropriately to qualitatively reflect how energy is being consumed in the processor. For example in the following image, the effect that changing the misprediction rate has on energy consumption was being studied.



Notice that as the misprediction rate increases, and the IPC decreases, there is a steep increase in energy consumption. Determining the reason for the increase in energy consumption may prove to be a bit more difficult. Looking at the data for the energy consumed by each component may help in deteriming if just one or a few components are largely responsible for the increase. Another idea is to vary the leakage coefficient and see what effect this has on the energy consumption. Or perhaps there is a bottleneck in the architecture that is causing instructions to wait around before they can be executed. Any of these are potential causes, and are worth further study.

Walkthrough Example
Architecture Options Setup Screen
Initialization File

Download ESATSim and trace files here



File translated from TEX by TTH, version 3.44.
On 23 Oct 2003, 22:58.