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
PRACE Best Practice Guides
- Best Practice Guide – SuperMUC/SandyBridge PDF HTML
- Best Practice Guide – SuperMUC or Linux-Cluster/Haswell 2017 PDF HTML
- Best Practice Guide – Linux Cluster/Knights Landing PDF HTML
Loading the tools
- Information about avail tools and version:
- Loading the appropriate tools:
module load toolor
- 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.
- 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
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 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 (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 (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.
- PerSyst Report
- Perfomance propertires are collected by the PerSyst Monitoring system at LRZ. Using the web API or/and the console command line tool, user friendlly Interfaces are presented.
MPI, OpenMP, Vectorization, SIMD
- 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.
- 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.
- Intel Inspector
- Inspector allows you to perform correctness checking on multi-threaded applications (running in shared memory).
- Intel Amplifier
- Intel Amplifier XE (formerly VTune) allows you to perform performance analysis on multi-threaded applications (running in shared memory). The analyzer also collects, analyzes, and displays hardware performance data from the system-wide view down to a specific function, module, or instruction.
- Intel Advisor
- Advisor allows you to identify optimization potential in your code (both multi-threadig and SIMD vectorization)
- 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.
- 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.
- 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.
- 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 is a tool that displays the performance details of an OpenMP program's parallel execution.