TAU

TAU is an MPI program analyzer. It generates all necessary information during the program execution, so that it can be read after it and displayed by a specialized program.

  • 2.25 compiled with GCC and Open MPI
  • 2.25 compiled with ICC and Open MPI

use module avail tau to view installed versions.

example :

$ module avail perf/tau
  1. Dynamic Instrumentation: No change to your application's source or binary code is necessary. Using the tau_exec command before your executable generates both profile and trace data.
  2. Compiler-Based Instrumentation: TAU can also be used to compile your application using wrapper scripts for mpicc, mpicxx, and mpif90. Tau instruments the binary code without changing the source. Using the tau_exec command before the TAU-compiled executable generates profile and trace data. Data is collected on both MPI calls and your application's function calls.

Dynamic Instrumentation

Usefull env variables:

  • TAU_TRACE=1 (defaul 0) to view traces
  • TAU_PROFILE=1 (default)
  • TAU_COMM_MATRIX=1 default 0) to view 3D communication matrix

  1. Load the needed tau
    $ module load perf/tau/icc
  2. Compile
    $ mpicc hello.c -o hello
  3. Dynamic instrumentation
    $ mpirun -np $NSLOTS tau_exec ./hello
  4. Run TAU's recompiling tool
    $ tau_treemerge.pl
  5. After this it will have generated some output files, merge them with the next command
    $ tau2slog2 tau.trc tau.edf -o tau.slog2
  6. Now just open the new merged file with the default displaying tool
    $ jumpshot tau.slog2
  7. For profiling just call pprof and paraprof programs to view profilers results

Compiler-Based Instrumentation

For each compiler type there is TAU wrapper, for example:

  • tau_cxx.sh for C++ compiler
  • tau_f90.sh for Fortarn 90 compiler
  • tau_cc.sh fot C compiler

Tau warapper uses $TAU_MAKEFILE to compile programs.

  1. Compile programs
    tau_cc.sh hello.c -o hello
  2. Run program as usual
    mpirun -np $NSLOTS ./hello
  3. Follow steps 4, 5, 6 like for dynamic instrumentation

You can also view profilers information with: pprof or paraprof

Example

Let's profile/trace program (simple Jacobi iteration)

Tracing

$ module load perf/tau/icc
 
$ mpicc jacobi.c -o jacobi
 
$ mpirun -np 4 tau_exec ./jacobi
 
$ tau_treemerge.pl
 
$ tau2slog2 tau.trc tau.edf -o tau.slog2
 
$ jumpshot tau.slog2


Profiling
We need to pack all the profiles.* files in a unique one:

$ paraprof --pack tau.ppk

Now, we can visualize the tau.ppk file by using Paraprof

$ paraprof

click to enlarge