LIKWID 工具套件简介
LIKWID(Lightweight Performance Tools)是一套面向性能导向型程序员设计的命令行工具与库,适用于 Linux 系统下的多种处理器架构,包括:
- CPU 架构:Intel、AMD、ARMv8、POWER9
- GPU 支持:NVIDIA 与 AMD(需额外配置)
注:ARMv7 与 POWER8/9 架构虽已纳入支持范围,但因缺乏测试设备,尚未经过充分验证。
官方资源:
主要组件功能一览
| 工具名称 | 功能说明 |
|---|---|
likwid-topology |
显示线程、缓存和 NUMA 拓扑结构 |
likwid-perfctr |
配置并读取 CPU/GPU 的硬件性能计数器 |
likwid-powermeter |
获取 RAPL 能耗数据及 Turbo 模式信息 |
likwid-pin |
将多线程程序(如 pthread、OpenMP)绑定到指定 CPU 核心 |
likwid-bench |
提供微基准测试平台,用于评估 CPU 架构性能 |
likwid-features |
查看或控制 CPU 特性(如硬件预取器,仅限 x86) |
likwid-genTopoCfg |
将系统拓扑信息导出为配置文件 |
likwid-mpirun |
启动 MPI 或混合 MPI/OpenMP 应用(兼容 Intel MPI、OpenMPI、MPICH、SLURM) |
likwid-perfscope |
可视化 likwid-perfctr 的时间线数据(基于 gnuplot) |
likwid-memsweeper |
清理 NUMA 域内存,并驱逐 LLC 缓存行 |
likwid-setFrequencies |
控制 CPU 与 Uncore 频率(仅限 x86) |
likwid-sysFeatures |
实验性系统级设置工具(频率、功耗限制、预取器等) |
支持的处理器架构
Intel
- Pentium M / Core2 / Nehalem / Westmere / SandyBridge / IvyBridge
- Haswell / Broadwell / Skylake / Kabylake / Coffeelake
- Xeon Phi(KNC, KNL, KNM)
- Silvermont / Airmont / Goldmont
- Skylake SP / Cascade Lake SP / Ice Lake / Sapphire Rapids / Emerald Rapids
- Tiger Lake(实验性支持)
AMD
- K8 / K10 / Interlagos / Kabini
- Zen / Zen2 / Zen3 / Zen4
ARM
- ARMv7 / ARMv8
- Marvell ThunderX2
- Fujitsu A64FX
- AWS Graviton2(Neoverse N1)
- Neoverse V1 / HiSilicon TSV110
- Apple M1(仅限 Linux 环境)
IBM POWER(实验性)
- POWER8 / POWER9
GPU
- NVIDIA GPUs(需启用
NVIDIA_INTERFACE) - AMD GPUs(需启用
ROCM_INTERFACE)
下载、构建与安装
获取源码
bash
VERSION=stable
wget http://ftp.fau.de/pub/likwid/likwid-$VERSION.tar.gz
tar -xaf likwid-$VERSION.tar.gz
cd likwid-*
配置与编译
编辑 config.mk 文件,根据目标平台调整以下选项:
- ARM 架构 :设置
COMPILER = GCCARMv8或ARMCLANG(实验性) - POWER 架构 :设置
COMPILER = GCCPOWER或XLC(实验性) - NVIDIA GPU :设置
NVIDIA_INTERFACE = true - AMD GPU (ROCm) :设置
ROCM_INTERFACE = true
编译并安装:
bash
make
sudo make install # 需 root 权限以安装守护进程并设置权限
更多构建细节请参考 Wiki 构建指南 或源码中的
INSTALL文件。
使用示例
1. 查看系统拓扑 (likwid-topology)
bash
likwid-topology
输出包括 CPU 型号、核心/线程布局、各级缓存分组及 NUMA 内存分布。
2. 性能计数器监控 (likwid-perfctr)
bash
likwid-perfctr -C 0 -g L2 hostname
监控线程 0 上 L2 缓存相关事件,并计算带宽、CPI 等指标。
3. 线程绑定 (likwid-pin)
bash
likwid-pin -c 0,1,2 ./a.out
将程序的三个线程分别绑定到 CPU 0、1、2。
4. 微基准测试 (likwid-bench)
bash
likwid-bench -t triad_avx -W N:2GB:3
运行 AVX 优化的 Triad 测试,分配约 2GB 数据,使用 3 个线程。
5. MPI 应用启动 (likwid-mpirun)
bash
likwid-mpirun -mpi slurm -np 4 -t 2 ./a.out
在 SLURM 环境下启动 4 个 MPI 进程,每个进程使用 2 个 OpenMP 线程,并自动绑定核心。
6. 能耗监控 (likwid-powermeter)
bash
likwid-powermeter
实时显示 PKG、PP0、PP1、DRAM 等域的能耗与功率。
7. CPU 特性控制 (likwid-features)
bash
likwid-features -c 0 -l
列出线程 0 上启用的 CPU 特性(如各类预取器、Turbo 模式等)。
文档与社区支持
- 本地文档 :运行
make docs生成 Doxygen HTML 文档;安装后可通过man查看各工具手册页。 - 在线 Wiki:https://github.com/RRZE-HPC/likwid/wiki
- 问题反馈 :
- 用户讨论:Google Groups - likwid-users
- Bug 报告:GitHub Issues
- 实时交流 :
- 通用频道:Matrix #likwid
- 开发者频道:Matrix #likwid-dev
语言绑定(第三方支持)
- Java :likwid-java-api
- Python :
pip install pylikwid或 pylikwid GitHub - Julia :
] add LIKWID或 LIKWID.jl
(由 Paderborn 并行计算中心与 MIT JuliaLab 维护)