ALIs
kommt nochTuning
Tuning is the last and a fundamental process in software development. However, improving the performance and efficiency of parallel and serial programs is not an easy task. Specific and powerful tools are available to help you to analyze and to deal with performance bottle necks. The user is encorauge to read about, to select and to apply the proper tools and mechanisms that are best suited for her own needs.
Table of contents
- Optimizing Compilers
- Loading the tools
- Information
- Timing & Profiling.
- Using Hardware Perfomance Counters
- MPI and OpenMP Profiling and Tracing
- Memory Leaks
Optimizing Compilers
Loading the tools
- Information about avail tools and version: module avail
- Loading the appropriate tools :module load tool or tool/version
Information
HWLoc
The hardware locality toolset provides command line tools as well as a programming interface for identifying and controlling resources and resource mappings for threaded execution.
likwid-topology
Modern computers get more and more complicated. They consist of multiple cores and each core can support multiple hardware threads. Because cores share caches and main memory access it is important to pin threads to dedicated cores. To decide this it is important to know a machines topology. likwid-topology extracts this information from the cpuid instruction.
Timing & Profiling.
Timing commands and Timing functions
Timers can be used to measure the total run time of an application. Different implementations are available on the UNIX and Linux systems. Some subroutines are also available to be called within your code to measure specific sections.
gprof
gprof calculates the amount of time spent in each routine. The effect of called routines is incorporated in the profile of each caller. The profile data is taken from the call graph profile file which is produced by compiling/linking the executable with -pg.
Profile Guided Optimization
Main purpose of profile guided optimization is to re-order instructions in an optimal way. The instrumented executable is run one or more times with different typical data sets. The dynamic profiling information is merged, and the combined information is used to generate a profile-optimized excecutable.
Using Hardware Perfomance Counters
Intel Amplifier XE
The Intel Amplifier XE (formerly VTune) analyzer collects, analyzes, and displays hardware performance data from the system-wide view down to a specific function, module, or instruction.
LIKWID
Likwid (Like I knew what I am doing) provides easy to use command line tools for Linux to support programmers in developing high performance multi threaded programs.
IBM High Performance Computing Toolkit (hpccount)
Report summary hardware performance counters and resource usage statistcs.
PAPI
PAPI (Performance Application Programming Interface) aims to provide the tool designer and application engineer with a consistent interface and methodology for use of the performance counter hardware found in most major microprocessors. PAPI enables software engineers to see, in near real time, the relation between software performance and processor events.
PerSystreport
Perfomance properties are collected by the PerSyst Monitoring system at LRZ. Using HTML format, and also with the capability of generating a detailed report, it presents a user friendly interface.
MPI and OpenMP Profiling and Tracing
Vampir NG
Vampir is the State-Of-The-Art Tool for tracing parallel programs based on MPI, OpenMP or CUDA, and serial programs. It is designed to provide accurate trace information of MPI and user function calls. The user interface and parallel processing of tracing data makes Vampir NG the most powerful tool for tracing. It includes the capability for performance-counter analysis based on PAPI.
Scalasca
Scalasca is an open-source project developed by the Jülich Supercomputing Centre which focuses on analyzing OpenMP, MPI and hybrid OpenMP/MPI parallel applications. Scalasca can be used to help identify bottlenecks by providing a number of important features: profiling and tracing of highly parallel programs; automated trace analysis that localizes and quantifies communication and synchronization inefficiencies; flexibility and integration with PAPI hardware counters for performance analysis.
Intel Tracing Tools
The Intel Tracing Tools support the development and tuning of programs parallelized using MPI. By using these tools you are able to investigate the communication structure of your parallel program, and hence to isolate incorrect and/or inefficient MPI programming. The Trace Collector is a set of MPI tracing libraries, and the Trace Analyzer provides a GUI for analysis of the tracing data.
IPM
IPM is a portable profiling infrastructure for parallel C and Fortran programs. It provides a low-overhead profile of the performance aspects and resource utilization. Communication, computation, and IO are its primary focus. Hardware counter are based on PAPI.
mpiP
It is a lightweight and scalable MPI profiling library exclusively for MPI applications. It collects statistical information with minimal overhead. The trace data is small in ASCII and human-readable format.
Threading Tools
The Threading Tools allow you to perform correctness and performance checking on multi-threaded applications (POSIX/Linux Threads or OpenMP). Thread Checker identifies and locates threading issues like concurrency problems (race conditions). Thread Profiler provides performance analysis for threaded applications.
Marmot
Marmot is a MPI correct checker. It automatically checks the correct usage of MPI functions and their arguments. It can identify deadlocks, wrong ordering of messages, wrong MPI types, etc.
Guideview
GuideView is a tool that displays the performance details of an OpenMP program's parallel execution.
Memory Leaks
MemoryScape
This tool provides a subset of Totalview functionality to detect memory leaks.
Valgrind
For finding memory leaks, measuring memory consumption as well as identifying performance bottlenecks.