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.
Installed version
- 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
TAU usage and displaying tools
- 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.
- Compiler-Based Instrumentation: TAU can also be used to compile your application using wrapper scripts for
mpicc
,mpicxx
, andmpif90
. Tau instruments the binary code without changing the source. Using thetau_exec
command before the TAU-compiled executable generates profile and trace data. Data is collected on bothMPI
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
- Load the needed tau
$ module load perf/tau/icc
- Compile
$ mpicc hello.c -o hello
- Dynamic instrumentation
$ mpirun -np $NSLOTS tau_exec ./hello
- Run TAU's recompiling tool
$ tau_treemerge.pl
- After this it will have generated some output files, merge them with the next command
$ tau2slog2 tau.trc tau.edf -o tau.slog2
- Now just open the new merged file with the default displaying tool
$ jumpshot tau.slog2
- For profiling just call
pprof
andparaprof
programs to view profilers results
Compiler-Based Instrumentation
For each compiler type there is TAU wrapper, for example:
tau_cxx.sh
forC++
compilertau_f90.sh
for Fortarn 90 compilertau_cc.sh
fot C compiler
Tau warapper uses $TAU_MAKEFILE
to compile programs.
- Compile programs
tau_cc.sh hello.c -o hello
- Run program as usual
mpirun -np $NSLOTS ./hello
- 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