LIKWID 工具套件简介

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 = GCCARMv8ARMCLANG(实验性)
  • POWER 架构 :设置 COMPILER = GCCPOWERXLC(实验性)
  • 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 模式等)。


文档与社区支持


语言绑定(第三方支持)