Difference between revisions of "Application benchmarking"

From HPC Wiki
Jump to navigation Jump to search
()
Line 14: Line 14:
 
== Timing ==
 
== Timing ==
  
 +
For benchmarking an accurate so called wallclock timer (end to end stop watch) is required. Every timer has a minimal time resolution that can be measured. Therefore if the code region to be measured is running shorter the measurement must be extended until it reaches a time duration that can be resolved by the timer used.
 +
 +
Recommended timing routines are
 +
 +
* '''clock_gettime()''', POSIX compliant timing function ([https://linux.die.net/man/3/clock_gettime man page]) which is recommended as a replacement to the widespread '''gettimeofday()'''
 +
* '''MPI_Wtime''' and '''OpenMP_Wtime'''
  
 
== Documentation ==
 
== Documentation ==

Revision as of 17:20, 16 January 2019

Overview

Application benchmarking is an elementary skill for any performance engineering effort. Because it is the base for any other acitivity it is crucial to measure result in an accurate, deterministic and reproducible way. The following components are required for meaningful application benchmarking:

  • Timing: How to accuratly measure time in software.
  • Documentation: Because there are many influences it is essential to document all possible performance relvant influences.
  • System configuration: Modern systems allow to adjust many performance relevant settings as clock speed, memory settings, cache organisation as well as OS settings.
  • Resource allocation and affinity control: What resources are used and how is worked mapped on resources.

Because so many things can go wrong while benchmarking it is imporatant to have a sceptical attitude against good results. Especially for very good results one has to check if the result is reasonable. Further results must be deterministic and reproducable, if required statistic distribution over multiple runs has to be documented.

In the following all examples use the Likwid Performance Tools for tool support.

Timing

For benchmarking an accurate so called wallclock timer (end to end stop watch) is required. Every timer has a minimal time resolution that can be measured. Therefore if the code region to be measured is running shorter the measurement must be extended until it reaches a time duration that can be resolved by the timer used.

Recommended timing routines are

  • clock_gettime(), POSIX compliant timing function (man page) which is recommended as a replacement to the widespread gettimeofday()
  • MPI_Wtime and OpenMP_Wtime

Documentation

System configuration

Affinity control