Performance And Debugging Tools: Niagara

From SciNet Users Documentation
Jump to navigation Jump to search

Memory Profiling


Valgrind is a suite of tools for debugging and profiling programs especially useful for finding memory problems, such as memory leaks and segfaults. To use it on the GPC you must first load the module valgrind.

 module load valgrind 

In serial valgrind can simply by run as follows, with no need to recompile your binary

valgrind --tool=memcheck ./a.out  

there are many useful flags such as --leak-check=yes and --show-reachable=yes that can be found by running valgrind --help on consulting the man pages.

For use with mpi on Niagara use the following modules

 module load NiaEnv/2018a  intel/2018.2 intelmpi/2018.2 valgrind/3.13.0 

Valgrind can also be used in parallel with MPI as well, in a similar fashion, however a library needs to preloaded first.

LD_PRELOAD=${SCINET_VALGRIND_ROOT}/lib/valgrind/ mpirun -np 2 valgrind --tool=memcheck ./a.out 

Besides being a extremely good at finding memory problems, valgrind comes with a tool called cachegrind which can find cache use problems in your code; its use is described in our Intro To Performance.



GDB is solid source-language level serial debugger. This SNUG TechTalk from Nov 2010 introduces debugging with gdb. gdb will debug code compiled with both intel and gcc compilers. Use module load gdb to ensure you are using the most recent version of gdb.

gdb -tui launches a text-based interface that functions a bit like a gui for debugging code, and can be handy.


ddt is ARM's graphical parallel debugger, in the ddt module. Highly recommended! Use module load ddt to load ddt into your environment. More information on the Parallel Debugging with DDT page.

Performance Profiling


gprof is a very useful tool for finding out where a program is spending its time; its use is described in our Intro To Performance.