Instructions for using LIKWID Tools
LIKWID Tools ("Like I Knew What I'm Doing") is command line performance tool, easy to use and supports variety of processor architectures such as x86 (Intel/AMD), ARM and POWER[8-9], as well NVIDIA GPUs. Read more
License
LIKWID is free and open-source software, GPL General Public License v3.0
Installation
LIKWID is available on HPC Vega, through module.
module load likwid/<version>
LIKWID commands
For additional information about LIKWID commands, check the help section.
likwid-<command> -h
Using LIKWID Tools
likwid-topology
Tool to display processors threads and cache topology.
likwid-topology
E.g. Login node
--------------------------------------------------------------------------------
CPU name: AMD EPYC 7452 32-Core Processor
CPU type: AMD K17 (Zen2) architecture
CPU stepping: 0
********************************************************************************
Hardware Thread Topology
********************************************************************************
Sockets: 2
Cores per socket: 32
Threads per core: 1
--------------------------------------------------------------------------------
To display more information regarding cache add switch -c
.
Read more about likwid-topology.
likwid-pin
LIKWID tool for for pinning on threads or thread groups (e.g. node N, socket S#, cache group C#, memory domain M# or cpuset) inside system topology, without changing the code or application. For OpenMP applications, we setup environment variable OMP_NUM_THREADS
(e.g. SBATCH), therefor likwid-pin will setup threads as you specify it.
Available thread domains can be checked with switch -p
(e.g. S0 and S1 are two sockets).
likwid-pin -p
Example with pinning threads if user doesn't specify number of threads likwid-pin will use -c N:0-maximumNuberOfProcessors
.
$ likwid-pin -c 0,3-5,6 ./application
$ likwid-pin -c S0:0-1,64-65 ./application
Read more about likwid-pin.
likwid-mpirun
Enables pinning of MPI and MPI/Hybrid applications.
MPI example without any pinning:
likwid-mpirun -np 4 ./application
Additional switch -omp
should be used for OpenMP:
likwid-mpirun -np 4 -omp 2 ./application
For pinning add switch -nperdomain
or ˙-pin˙ (e.g. node, socket, cache or NUMA domains):
likwid-mpirun -np 16 -nperdomain M:0 ./application
likwid-mpirun -np 16 -pin S0:0-1,64-65 ./application
likwid-mpirun -np 16 -pin S0:0-1,64-65_S1:32-33,98 ./mpibench
Debug mode:
likwid-mpirun -debug -np 16 ./application
Read more about likwid-mpirun.
likwid-perfscope
Tool for live plotting of performance, additional module should be loaded e.g. module load gnuplot
.
List predefined plots (e.g. FLOPS_DP/SP, MEM, L2, L3, NUMA, TEMP ...):
likwid-perfscope -a
E.g.
likwid-perfscope -C S0:0 -g L2_BAND -t 300ms ./output
Read more about likwid-perfctr.
likwid-perfctr
Tool to measure hardware performance (eg. FLOPS_DP/SP, MEM, L2, L3, NUMA, CACHE,..). Threading must be enabled, while compiling your application (OpenMP).
List prepared groups:
likwid-perfctr -a
E.g.
likwid-perfctr -C S0:0-3 -g BRANCH -t 300ms ./output
Read more about likwid-perfctr.
likwid-bench
Benchmarking framework.
List availiable benchmarks.
likwid-bench -a
List thread domains:
likwid-bench -p
Chose type of benchmark (-p
), specify domain and input for benchmark (e.g.
likwid-bench -t copy -w S0:100kB:1
Read more about likwid-bench.
Documentation
- Documentation: https://hpc.fau.de/research/tools/likwid/
- Github: https://github.com/RRZE-HPC/likwid)
- Wiki: https://github.com/RRZE-HPC/likwid/wiki