next up previous
Next: Preprocessor-Based Memory Instrumentation Up: Instrumentation Previous: Program Database Toolkit

Timers and Phases

Static timers store the name of a program entity and its performance data and are constructed only once. When we aggregate the cost of each routine invocation, we use static timers (e.g. the time spent in 100 invocations of MPI_Send is 100 seconds. TAU also supports dynamic timers that are constructed each time with a unique name. Dynamic timers are useful for capturing the cost of execution of program entities that have different cost for each invocation. By embedding an iteration count in a routine name, we can invoke a dynamic timer and provide a unique instance specific name to it (e.g. the time spent in the second invocation of routine foo was 12 seconds). Sometimes, it is useful to characterize the program performance based on higher user-level abstractions such as application phases. TAU supports both static and dynamic phases. Phases record the time spent in a given region as well as the time spent in all program entities called directly and indirectly in a given phase. Phases may be nested but may not overlap. Static phases, like static timers aggregate performance data for all invocations (e.g. the total time spent in MPI_Send when it was called by all instances of the IO phase was 10 seconds). Dynamic phases can associate an instance specific name with the phase performance data (e.g., the time spent in MPI_Send when it was called by the fourth iterate phase was 4 seconds).


next up previous
Next: Preprocessor-Based Memory Instrumentation Up: Instrumentation Previous: Program Database Toolkit
Scott Biersdorff 2006-05-05