You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单节点运行Intel HPL基准测试:参数配置一致性及OMP线程疑问

解决Intel HPL单节点配置的MPI/OMP参数困惑

首先得帮你厘清两个核心误解:你可能混淆了纯MPI并行和MPI+OpenMP混合并行的参数逻辑,另外大概率是对Intel文档里的MPI_PER_NODE定义理解错了。

先澄清MPI参数的矛盾点

Intel文档里的MPI_PER_NODE绝对不是指「插槽数」——如果是单节点运行,mpirun -perhost的值必须等于总MPI进程数(也就是-np的值),不然你只有一个节点,没法把56个进程分配成「每个节点2个」。

那文档里的描述为什么会提到插槽数?其实是针对混合并行场景的:当你用每个插槽跑一个MPI进程时,MPI_PER_NODE就等于插槽数(2),这时候总MPI进程数MPI_PROC_NUM也是2,而不是56。这时候PxQ是MPI进程数 × OpenMP线程数,刚好等于总核数56。

两种可行的配置方案(针对你的2颗Xeon 8276/56核节点)

方案1:纯MPI并行(每个核一个MPI进程)

适合不想折腾混合并行的场景,每个物理核跑独立的MPI进程:

  • MPI_PROC_NUM = 56 → 对应mpirun -np 56
  • MPI_PER_NODE = 56 → 对应mpirun -perhost 56(单节点下必须和-np一致)
  • OMP_NUM_THREADS = 1 → 完全关闭OpenMP
  • HPL的PxQ = 56 → 选P和Q的乘积为56的组合(比如P=8、Q=7,尽量让两者数值接近,或者匹配CPU的缓存/总线架构)
  • 运行命令示例:
    export OMP_NUM_THREADS=1
    mpirun -np 56 -perhost 56 -bind-to core ./xhpl
    

方案2:MPI+OpenMP混合并行(更适配Xeon NUMA架构)

Xeon Platinum 8276每个插槽是28核,对应一个NUMA节点,这种模式下性能通常更好:

  • MPI_PROC_NUM = 2 → 对应mpirun -np 2(每个插槽跑一个MPI进程)
  • MPI_PER_NODE = 2 → 对应mpirun -perhost 2(单节点下2个进程)
  • OMP_NUM_THREADS = 28 → 每个MPI进程绑定28个线程(刚好是单插槽的所有核)
  • 额外设置线程绑定参数(必须加,不然性能会崩):
    export OMP_PROC_BIND=close
    export OMP_PLACES=cores
    
  • HPL的PxQ = 2×28 = 56 → 可以选P=2、Q=28,或者P=4、Q=14,尽量让P匹配MPI进程数
  • 运行命令示例:
    export OMP_NUM_THREADS=28
    export OMP_PROC_BIND=close
    export OMP_PLACES=cores
    mpirun -np 2 -perhost 2 -bind-to numa ./xhpl
    

关键提醒

  • 如果你坚持用纯MPI模式,MPI_PER_NODE必须设为56,和-np一致,不然mpirun会报错说节点数量不够。
  • 混合并行的核心是利用NUMA架构,避免跨插槽的内存访问延迟,所以一定要加OMP_PROC_BIND和OMP_PLACES参数,MPI进程也要绑定到NUMA节点(-bind-to numa)。

内容的提问来源于stack exchange,提问作者lost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:57:50