Next: Preprocessor-Based Memory Instrumentation
Up: Instrumentation
Previous: Program Database Toolkit
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: Preprocessor-Based Memory Instrumentation
Up: Instrumentation
Previous: Program Database Toolkit
Scott Biersdorff
2006-05-05