==== 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. (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 ~ > The following tasks can be performed by LIKWID: === Node architecture information === $ likwid-topology $ likwid-powermeter 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 === $ likwid-pin $ likwid-mpirun === Query and alter system settings === $ likwid-features $ likwid-setFrequencies === 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 $ likwid-perfctr === 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 $ likwid-bench $ likwid-memsweeper === 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 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 ==== Additional information ==== * [LIKWID](https://github.com/RRZE-HPC/likwid/wiki)