Performance And Debugging Tools: Niagara

From SciNet Users Documentation
Revision as of 21:22, 21 April 2020 by Northrup (talk | contribs)
Jump to navigation Jump to search

Memory Profiling

Valgrind

Valgrind http://valgrind.org/ 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 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, http://valgrind.org/docs/manual/mc-manual.html#mc-manual.mpiwrap in a similar fashion, however a library needs to preloaded first.

LD_PRELOAD=${SCINET_VALGRIND_ROOT}/lib/valgrind/libmpiwrap-amd64-linux.so 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.

Debugging

gdb

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

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

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.