文章目录
LIKWID(Like I Knew What I’m Doing)是轻量级、开源、命令行的HPC性能工具套件,核心解决CPU拓扑查看、线程绑定(Pin)、硬件性能计数器、功耗监控四大问题,是超算/服务器优化的必备工具。
相关服务:德国服务器
一、核心定位与优势
- 开发:德国埃尔朗根-纽伦堡大学(RRZE)
- 架构:x86(Intel/AMD)、ARMv8、POWER9、NVIDIA GPU
- 轻量:无内核补丁、无依赖、单节点运行、开销<1%
- 核心价值:
- 拓扑可视化:看清CPU、NUMA、Cache、线程层级
- 精准绑核:避免线程迁移、NUMA冲突、超线程干扰
- 硬件计数器:测CPI、缓存命中率、带宽、FLOPS、功耗
- 无侵入:不修改代码、直接wrap应用
- HPC标准:全球超算中心(NERSC、BSC、HLRS)标配
二、安装(极简)
1. 源码安装(推荐,无root)
git clone https://github.com/RRZE-HPC/likwid.git
cd likwid
make # 自动检测架构
make install # 默认安装到 $HOME/likwid
2. 激活(每次登录)
export PATH=$HOME/likwid/sbin:$HOME/likwid/bin:$PATH
export LD_LIBRARY_PATH=$HOME/likwid/lib:$LD_LIBRARY_PATH
3. 验证
likwid-topology -v
三、核心工具(必掌握)
1. likwid-topology:拓扑查看(优化基础)
作用:打印CPU、NUMA、Cache、线程拓扑、频率

常用命令
# 完整拓扑(核心+Cache+NUMA)
likwid-topology -c
# ASCII图形化(最直观)
likwid-topology -g
# 仅CPU频率
likwid-topology -C
# 输出CSV
likwid-topology -o topology.csv
输出示例(关键信息)
--------------------------------------------------------------------
Socket 0:
+-------------------------------------------------------------------
| ( 0) ( 1) ( 2) ( 3) ( 4) ( 5) ( 6) ( 7) <- Cores
| 0:1 0:1 0:1 0:1 0:1 0:1 0:1 0:1 <- Threads
+-------------------------------------------------------------------
Cache Topology:
L1I: 32 KB, 8-way, 64 B, 8 instances
L1D: 32 KB, 8-way, 64 B, 8 instances
L2: 256 KB, 4-way, 64 B, 8 instances
L3: 16 MB, 16-way, 64 B, 1 instance (shared)
NUMA: 1 node
2. likwid-pin:线程绑定(优化核心)
作用:强制OpenMP/Pthreads线程固定到指定核心,解决NUMA/迁移/超线程瓶颈
线程域语法(-c)
S0:Socket 0C0:Core 0N:所有物理核心(关闭超线程)M:所有逻辑核心(含超线程)
常用命令
# 绑到Socket 0的核心0-7(物理核心)
likwid-pin -c S0:0-7 ./my_openmp_app
# 绑到NUMA节点0,跳过超线程(推荐HPC)
likwid-pin -c N:0-7 ./my_app
# 交替绑核(跨Socket,均衡负载)
likwid-pin -c S0:0,2,4,6 S1:1,3,5,7 ./my_app
# 绑MPI+OpenMP(hybrid)
mpiexec -n 4 likwid-pin -c S0:0-3 ./my_mpi_app
3. likwid-perfctr:硬件性能计数器(深度优化)
作用:测CPI、缓存命中率、内存带宽、FLOPS、分支预测、功耗
常用性能组
FLOPS_DP:双精度浮点MEM:内存带宽L2:L2缓存L3:L3缓存ENERGY:功耗
常用命令
# 查看所有性能组
likwid-perfctr -a
# 测内存带宽(整个程序)
likwid-perfctr -g MEM ./my_app
# 测双精度FLOPS + 缓存
likwid-perfctr -g FLOPS_DP,L2CACHE ./my_app
# 测指定代码区域(Marker API,需编译)
likwid-perfctr -g FLOPS_DP -m ./my_app
# 时间线模式(实时监控)
likwid-perfctr -g MEM -T 100ms ./my_app
4. likwid-powermeter:功耗监控
作用:读Intel RAPL/AMD Energy,测CPU/Uncore/GPU功耗
# 实时功耗
likwid-powermeter
# 程序全程功耗
likwid-powermeter ./my_app
5. likwid-mpirun:MPI/混合并行绑核
作用:自动为MPI+OpenMP进程绑核,简化超算作业
# 4 MPI进程 × 8 OpenMP线程,自动绑核
likwid-mpirun -np 4 -c N:0-7 ./my_hybrid_app
四、HPC优化工作流(实战)
步骤1:看拓扑(确定NUMA/Core)
likwid-topology -g
# 记录:Socket数、Core数、NUMA节点、超线程
步骤2:绑核(避免性能损失)
# 双Socket:MPI绑Socket,OpenMP绑物理核心
mpiexec -n 2 likwid-pin -c S0:0-15,S1:0-15 ./my_app
步骤3:测瓶颈(定位问题)
# 测内存带宽(判断是否内存受限)
likwid-perfctr -g MEM ./my_app
# 测CPI(判断是否指令/访存受限)
likwid-perfctr -g CYCLES,INSTRUCTIONS ./my_app
步骤4:优化验证
- 绑核后性能提升10–50%(常见)
- 缓存命中率>**95%**为优
- 内存带宽接近理论峰值
五、与其他工具对比
| 工具 | 优势 | 劣势 |
|---|---|---|
| LIKWID | 轻量、无侵入、拓扑+绑核+计数器一体、HPC友好 | 无GUI、仅单节点 |
| perf | Linux原生、CPU微架构强 | 拓扑/绑核弱、复杂 |
| HPCToolkit | 全栈采样、分布式、可视化 | 重、安装复杂 |
| VTune | 全功能、GUI、Intel深度 | 商业、重、开销大 |
六、一句话总结
LIKWID = 轻量版拓扑+绑核+性能计数器三合一工具
是HPC开发者快速定位NUMA/线程/缓存/功耗瓶颈的首选工具,无依赖、零侵入、见效快。





