ALIs

kommt noch

Tuning

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 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.