简介
Likwid是一套简单易用的命令行应用程序和库,专为注重性能的程序员设计。它适用于运行Linux操作系统的Intel、AMD、ARMv8和POWER9处理器。此外还支持Nvidia和AMD GPU。虽然也支持ARMv7和POWER8/9,但目前我们没有测试机器来对它们进行适当测试。
它包括以下组件:
- likwid-topology:打印线程、缓存和NUMA拓扑
- likwid-perfctr:在Intel、AMD、ARM和POWER处理器以及Nvidia GPU上配置和读取硬件性能计数器
- likwid-powermeter:读取RAPL能耗信息并获取Turbo模式步骤信息
- likwid-pin:将您的多线程应用程序(pthread、Intel和gcc OpenMP)固定到指定处理器
- 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域内存并从最后一级缓存中逐出缓存行
- likwid-setFrequencies:控制CPU和Uncore频率的工具(仅限x86)
- likwid-sysFeatures:控制系统设置如频率、功耗上限和预取器的工具(实验性)
更多信息请查看Wiki或通过Matrix聊天LIKWID General联系我们。
支持的架构
Intel
- Intel Atom
- Intel Pentium M
- Intel Core2
- Intel Nehalem
- Intel NehalemEX
- Intel Westmere
- Intel WestmereEX
- Intel Xeon Phi (KNC)
- Intel Silvermont & Airmont
- Intel Goldmont
- Intel SandyBridge
- Intel SandyBridge EP/EN
- Intel IvyBridge
- Intel IvyBridge EP/EN/EX
- Intel Xeon Phi (KNL, KNM)
- Intel Haswell
- Intel Haswell EP/EN/EX
- Intel Broadwell
- Intel Broadwell D
- Intel Broadwell EP
- Intel Skylake
- Intel Kabylake
- Intel Coffeelake
- Intel Skylake SP
- Intel Cascadelake SP
- Intel Icelake
- Intel Icelake SP
- Intel Tigerlake (实验性)
- Intel SapphireRapids
AMD
- AMD K8
- AMD K10
- AMD Interlagos
- AMD Kabini
- AMD Zen
- AMD Zen2
- AMD Zen3
- AMD Zen4
ARM
- ARMv7
- ARMv8
- 对Marvell Thunder X2的特殊支持
- Fujitsu A64FX
- ARM Neoverse N1 (AWS Graviton 2)
- ARM Neoverse V1
- HiSilicon TSV110
- Apple M1 (仅支持Linux)
POWER (实验性)
- IBM POWER8
- IBM POWER9
Nvidia GPU
AMD GPU
下载、构建和安装
您可以在以下地址获取LIKWID的发布版本: http://ftp.fau.de/pub/likwid/
有关构建和安装的提示,请参阅INSTALL文件或查看wiki中的构建说明页面 https://github.com/RRZE-HPC/likwid/wiki/Build
快速安装方法:
VERSION=stable
wget http://ftp.fau.de/pub/likwid/likwid-$VERSION.tar.gz
tar -xaf likwid-$VERSION.tar.gz
cd likwid-*
vi config.mk # 配置构建,例如更改安装前缀和架构标志
make
sudo make install # 需要sudo权限以正确权限安装访问守护程序
对于ARM构建,需要将config.mk
中的COMPILER
标志更改为GCCARMv8
或ARMCLANG
(实验性)。
对于POWER构建,需要将config.mk
中的COMPILER
标志更改为GCCPOWER
或XLC
(实验性)。
要支持Nvidia GPU,请在config.mk
中将NVIDIA_INTERFACE
设置为true
,并根据需要调整构建时变量。
要支持AMD GPU,请在config.mk
中将ROCM_INTERFACE
设置为true
,并根据需要调整构建时变量。
使用示例
likwid-topology
-------------------------------------------------------------------------------- CPU 名称: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz CPU 类型: Intel Skylake 处理器 CPU 步进: 3 ******************************************************************************** 硬件线程拓扑 ******************************************************************************** 插槽数: 1 每个插槽的核心数: 4 每个核心的线程数: 2 -------------------------------------------------------------------------------- 硬件线程 线程 核心 裸片 插槽 可用性 0 0 0 0 0 * 1 0 1 0 0 * 2 0 2 0 0 * 3 0 3 0 0 * 4 1 0 0 0 * 5 1 1 0 0 * 6 1 2 0 0 * 7 1 3 0 0 * -------------------------------------------------------------------------------- 插槽 0: ( 0 4 1 5 2 6 3 7 ) -------------------------------------------------------------------------------- ******************************************************************************** 缓存拓扑 ******************************************************************************** 级别: 1 大小: 32 kB 缓存组: ( 0 4 ) ( 1 5 ) ( 2 6 ) ( 3 7 ) -------------------------------------------------------------------------------- 级别: 2 大小: 256 kB 缓存组: ( 0 4 ) ( 1 5 ) ( 2 6 ) ( 3 7 ) -------------------------------------------------------------------------------- 级别: 3 大小: 8 MB 缓存组: ( 0 4 1 5 2 6 3 7 ) -------------------------------------------------------------------------------- ******************************************************************************** NUMA 拓扑 ******************************************************************************** NUMA 域数: 1 -------------------------------------------------------------------------------- 域: 0 处理器: ( 0 4 1 5 2 6 3 7 ) 距离: 10 可用内存: 318.203 MB 总内存: 7626.23 MB --------------------------------------------------------------------------------
likwid-perfctr
$ likwid-perfctr -C 0 -g L2 hostname -------------------------------------------------------------------------------- CPU 名称: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz CPU 类型: Intel Skylake 处理器 CPU 时钟: 4.01 GHz -------------------------------------------------------------------------------- mytesthost -------------------------------------------------------------------------------- 组 1:L2 +-----------------------+---------+------------+ | 事件 | 计数器 | 硬件线程 0 | +-----------------------+---------+------------+ | INSTR_RETIRED_ANY | FIXC0 | 321342 | | CPU_CLK_UNHALTED_CORE | FIXC1 | 450498 | | CPU_CLK_UNHALTED_REF | FIXC2 | 1118900 | | L1D_REPLACEMENT | PMC0 | 6670 | | L1D_M_EVICT | PMC1 | 1840 | | ICACHE_64B_IFTAG_MISS | PMC2 | 9293 | +-----------------------+---------+------------++--------------------------------+------------+ | 指标 | 硬件线程 0 | +--------------------------------+------------+ | 运行时间 (RDTSC) [秒] | 0.0022 | | 非停顿运行时间 [秒] | 0.0001 | | 时钟 [MHz] | 1613.6392 | | 每指令周期数 (CPI) | 1.4019 | | L2D 加载带宽 [MBytes/秒] | 197.8326 | | L2D 加载数据量 [GBytes] | 0.0004 | | L2D 驱逐带宽 [MBytes/秒] | 54.5745 | | L2D 驱逐数据量 [GBytes] | 0.0001 | | L2 带宽 [MBytes/秒] | 528.0381 | | L2 数据量 [GBytes] | 0.0011 | +--------------------------------+------------+
likwid-pin
$ likwid-pin -c 0,1,2 ./a.out [pthread 包装器] [pthread 包装器] 主线程 -> 0 [pthread 包装器] 固定掩码:0->1 1->2 [pthread 包装器] 跳过掩码:0x0 线程ID 140566548539136 -> 硬件线程 1 - 成功 线程ID 140566540146432 -> 硬件线程 2 - 成功 请求的线程数 = 3 线程 0 在处理器 0 上运行 .... 线程 1 在处理器 1 上运行 .... 线程 2 在处理器 2 上运行 .... [...]
likwid-bench
$ likwid-bench -t triad_avx -W N:2GB:3 警告:将向量长度调整为循环步长16和线程数3的倍数,从62500000个元素(500000000字节)调整为62499984个元素(499999872字节) 分配:进程在硬件线程0(域N)上运行 - 向量长度62499984/499999872 偏移量0 对齐512 分配:进程在硬件线程0(域N)上运行 - 向量长度62499984/499999872 偏移量0 对齐512 分配:进程在硬件线程0(域N)上运行 - 向量长度62499984/499999872 偏移量0 对齐512 分配:进程在硬件线程0(域N)上运行 - 向量长度62499984/499999872 偏移量0 对齐512 初始化:域中的每个线程初始化自己的流块 -------------------------------------------------------------------------------- LIKWID微基准测试 测试:triad_avx -------------------------------------------------------------------------------- 使用1个工作组 使用3个线程 -------------------------------------------------------------------------------- 在没有Marker API的情况下运行。在命令行中使用-m激活Marker API。 -------------------------------------------------------------------------------- 组:0 线程1 全局线程1在硬件线程4上运行 - 向量长度20833328 偏移量20833328 组:0 线程0 全局线程0在硬件线程0上运行 - 向量长度20833328 偏移量0 组:0 线程2 全局线程2在硬件线程1上运行 - 向量长度20833328 偏移量41666656 -------------------------------------------------------------------------------- 周期: 22977763263 CPU时钟: 4007946861 周期时钟: 4007946861 时间: 5.733051e+00 秒 迭代次数: 96 每线程迭代次数: 32 内部循环执行次数: 1302083 大小(字节): 1999999488 每线程大小: 666666496 浮点运算次数: 3999998976 MFlops/s: 697.71 数据量(字节): 63999983616 MByte/s: 11163.34 每次更新的周期数: 11.488885 每缓存行的周期数: 91.911077 每次更新的加载次数: 3 每次更新的存储次数: 1 每元素加载字节数: 24 每元素存储字节数: 8 加载/存储比率: 3.00 指令数: 2374999408 微操作数: 3749999040 --------------------------------------------------------------------------------
likwid-mpirun
$ likwid-mpirun -mpi slurm -np 4 -t 2 ./a.out MPI已启动 等级为0的进程在节点f0846.nhr.fau.de的核心0上运行 等级为2的进程在节点f0859.nhr.fau.de的核心0上运行 等级为3的进程在节点f0859.nhr.fau.de的核心36上运行 等级为1的进程在节点f0846.nhr.fau.de的核心36上运行 进入OpenMP并行区域 启动OpenMP线程 等级0线程0在节点f0846.nhr.fau.de的核心0上运行 等级0线程1在节点f0846.nhr.fau.de的核心1上运行 等级1线程0在节点f0846.nhr.fau.de的核心36上运行 等级1线程1在节点f0846.nhr.fau.de的核心37上运行 等级2线程0在节点f0859.nhr.fau.de的核心0上运行 等级2线程1在节点f0859.nhr.fau.de的核心1上运行 等级3线程0在节点f0859.nhr.fau.de的核心36上运行 等级3线程1在节点f0859.nhr.fau.de的核心37上运行
likwid-powermeter
$ likwid-powermeter -------------------------------------------------------------------------------- CPU名称: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz CPU类型: Intel Skylake处理器 CPU时钟: 4.01 GHz -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 运行时间:2.00019秒 在CPU 0上测量插座0 PKG域: 能耗:7.47705焦耳 功耗:3.73817瓦特 PP0域: 能耗:5.42047焦耳 功耗:2.70998瓦特 PP1域: 能耗:0.0872803焦耳 功耗:0.043636瓦特 DRAM域: 能耗:1.02612焦耳 功耗:0.513013瓦特 PLATFORM域: 能耗:0焦耳 功耗:0瓦特 --------------------------------------------------------------------------------
likwid-features
$ likwid-features -c 0 -l 特性 硬件线程0 硬件预取器 开启 缓存行预取器 开启 DCU预取器 开启 IP预取器 开启 快速字符串 开启 热控制 开启 性能监控 开启 FERR多路复用 关闭 分支跟踪存储 开启 XTPR消息 关闭 PEBS 开启 变速步进 开启 监控 开启 变速步进锁定 关闭 CPUID最大值 关闭 XD位 开启 动态加速 关闭 睿频模式 开启 TM2 关闭
文档
有关工具使用的详细文档,请查看使用doxygen构建的html文档。执行
make docs
或在安装后查看man页面。
GitHub页面上还有一个wiki: https://github.com/rrze-likwid/likwid/wiki
如果您有问题或建议,请在likwid邮件列表上告诉我: http://groups.google.com/group/likwid-users
或者如果是bug,请在以下位置添加问题: https://github.com/rrze-likwid/likwid/issues 你也可以通过Matrix与我们聊天:
- 一般聊天:https://matrix.to/#/#likwid:matrix.org?via=matrix.org
- 开发聊天:https://matrix.to/#/#likwid-dev:matrix.org?via=matrix.org
附加内容
- 如果你想在Java中使用Marker API,可以在这里找到Java模块: https://github.com/jacek-lewandowski/likwid-java-api
- 对于Python,你可以在这里找到LIKWID API的接口:
https://github.com/RRZE-HPC/pylikwid 或使用
pip install pylikwid
- LIKWID的Julia接口由帕德博恩并行计算中心(PC²)和MIT JuliaLab提供:
https://github.com/JuliaPerf/LIKWID.jl 或使用
] add LIKWID
调查
我们在用户邮件列表中发起了一项调查,以了解谁在使用LIKWID以及如何使用。 此外,我们也想知道你是否觉得LIKWID缺少某些功能,或者在使用LIKWID时有什么让你感到不便的地方。 调查链接: https://groups.google.com/forum/#!topic/likwid-users/F7TDho3k7ps
资金支持
LIKWID的开发得到了德国联邦教育与研究部(BMBF)在FEPA项目下的资助,资助号为01IH13009。自2017年起,开发工作继续得到BMBF在SeASiTe项目下的资助,资助号为01IH16012A。2022年,EE-HPC项目在GreenHPC资助计划下获得BMBF的资助。