Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
en:services:application_services:high_performance_computing:performance_engineering_and_analysis:likwid [2022/10/27 14:18] jogajaen:services:application_services:high_performance_computing:performance_engineering_and_analysis:likwid [2022/10/27 15:23] (current) jogaja
Line 1: Line 1:
 +==== LIKWID ====
  
 +=== LIKWID - "Like I Knew What I'm Doing" ===
 +LIKWID is developed by FAU for Performance Optimization, Modeling, and Architecture Analysis
 + * Bringing the thinking back to the performance engineer.
 + * Open-source
 + * Command-line and Software Lib interface. No GUI
 + * x86 Architecture (Intel & AMD) with initial support for Nvidia GPUs 
 +
 +=== Quick Start in SCC ===
 +LIKIWID Toolset is available in SCC as a module, thus before using LIKWID a user need to load their preferred LIKWID version module to set the environment correctly.
 +
 +<code>
 +(base) gwdu101:25 17:17:18 ~ > module show likwid
 +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 +  /opt/sw/modules/21.12/cascadelake/Core/likwid/5.2.0.lua:
 +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 +...
 +
 +(base) gwdu101:25 17:17:24 ~ > 
 +(base) gwdu101:25 17:18:33 ~ > module load likwid
 +(base) gwdu101:25 17:18:43 ~ >
 +</code>
 +
 +The following tasks can be performed by LIKWID:
 +=== Node architecture information ===
 +<code>
 +$ likwid-topology
 +$ likwid-powermeter
 +</code>
 +Examples of node-architecture for SCC's amp016:
 +
 +{{:en:services:application_services:high_performance_computing:likwid-topology-cache_g.png?400|}}
 +{{:en:services:application_services:high_performance_computing:likwid-topology-cache_g2.png?400|}}
 +
 +=== Affinity control and data placement ===
 +<code>
 +$ likwid-pin
 +$ likwid-mpirun
 +</code>
 +
 +=== Query and alter system settings ===
 +<code>
 +$ likwid-features
 +$ likwid-setFrequencies
 +</code>
 +
 +=== Application performance profiling (perf-counter) ===
 + * Using the available hardware counters to measure events that characterises the interaction between software and hardware
 + * Uses a light-weight marker API for code instrumentation
 +<code>
 +$ likwid-perfctr
 +</code>
 +
 +=== Micro-benchmarking - Application and framework to enable: ===
 +  * Quantify sustainable performance limits
 +  * Separate influences considering isolated instruction code snippets
 +  * Reverse-egineer processor features
 +  * Discover hardware bugs
 +<code>
 +$ likwid-bench
 +$ likwid-memsweeper
 +</code>
 +
 +=== likwid-topology ===
 +  * Thread topology: How processor IDs map on physical compute resources
 +  * Cache topology: How processors share the cache hierarchy
 +  * Cache properties: Detailed information about all cache levels
 +  * NUMA topology: NUMA domains and memory sizes
 +  * GPU topology: GPU information
 +
 +=== likwid-pin ===
 +  * Explicitly supports pthread and the OpenMP implementations of Intel and GNU gcc
 +  * Only used with "pthread_create" API call which are dynamically linked with the static placement of threads.
 +
 +=== likwid-perfctr ===
 +  * a lightweight command-line application to configure and read out hardware performance data
 +  * Can be used as a wrapper (no modification in the application) or by adding "Marker_API" functions inside the code
 +  * There are preconfigured performance groups with useful event sets and derived metrics
 +  * Since ***likwid-perfctr*** measures all events on the specified CPUs, it is necessary for processes and threads to dedicated resources.
 +  * This can be done by pinning the application manually or using the built-in functionality
 +
 +=== Performance Groups ===
 +
 +  * An outstanding feature of LIKWID
 +  * Organizes and combines micro-architecture events and counters with e.g. run-time and clock speed
 +  * Provides a set of derived metrics for efficient analysis
 +  * They are read on the fly without compilation by command-line selection
 +  * Are found in the path "${INSTALL_PREFIX}/share/likwid"
 +
 +Examples of using "likwid-perfctr" on SCC's amp016 node
 +  * Use option "-a" to see available performance groups:
 +
 +{{:en:services:application_services:high_performance_computing:likwid-perfctr-perfgroup.png?400|}}
 +
 +  * Use "likwid-perfctr -g CLOCK" to measure the clock speed.
 +
 +{{:en:services:application_services:high_performance_computing:likwid-perfctr-g-clock.png?400|}}
 +
 +  * Use "likwid-perfctr -g FLOPS_DP" to measure the Arithmetic Intensity in double precision. 
 +
 +{{:en:services:application_services:high_performance_computing:likwid-perfctr-g-flop_dp.png?400|}}
 +
 +  * Use "likwid-perfctr -g MEM" to measure the bandwidth of primary memory.
 +
 +{{:en:services:application_services:high_performance_computing:likwid-perfctr-g-mem.png?400|}}
 +
 +=== Marker API ===
 +  * Enables measurements of user-defined code regions.
 +  * The Marker API offers 6 functions (for C/C++) to measure named regions
 +  * Activated by "-DLIKWID_PERFORM" to compiler calls
 +    <code>
 +    LIKWID_MARKER_INIT //global initialization
 +    LIKWID_MARKER_THREADINIT //individual thread initialization
 +    LIKWID_MARKER_START('compute') //Start a code region named 'compute'
 +    LIKWID_MARKER_STOP('compute') //Stop the code region named 'compute'
 +    LIWKID_MARKER_SWITCH //Switches perfromance group or event set in a round-robin fashion
 +    LIKWID_MARKER_CLOSE //global finalization
 +    </code>
 +    
 +==== Additional information ====
 +  * [LIKWID](https://github.com/RRZE-HPC/likwid/wiki)
 +