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

Ubuntu 22.04与OpenMPI识别12代Intel CPU全E/P核的方案咨询

问题描述

我在搭载12代Intel Core i7-12800HX CPU(8个P核+8个E核,共支持24线程,每个P核2线程、每个E核1线程)的笔记本上运行Ubuntu 22.04系统。Ubuntu能正确识别CPU型号,但仅识别到12个核心与24线程。使用OpenMPI运行并行任务时,若尝试使用超过12个核心会报错,同时发现部分进程运行速度远快于其他进程,推测是P核与E核的性能差异导致。

请问有何方法能让Ubuntu与OpenMPI识别所有核心,且区分P核与E核?

更新信息

mpirun --display-map -n 1 true 输出

Data for JOB [3978,1] offset 0 Total slots allocated 12
========================   JOB MAP   ========================
Data for node: xxxxxxxx Num slots: 12   Max slots: 0    Num procs: 1
Process OMPI jobid: [3978,1] App: 0 Process rank: 0 Bound: socket 0[core 0[hwt 0-1]]:[BB/../../../../../../../../../../..]
=============================================================

lscpu 输出

架构:x86_64
CPU运行模式:32位、64位
地址大小:物理39位,虚拟48位
字节序:小端序
CPU总数:24
在线CPU列表:0-23
厂商ID:GenuineIntel
型号名称:12th Gen Intel(R) Core(TM) i7-12800HX
CPU系列:6
型号:151
每核心线程数:2
每插槽核心数:12
插槽数:1
步进:2
BogoMIPS:4608.01
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni umip waitpkg gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm serialize flush_l1d arch_capabilities
虚拟化特性:
虚拟化:VT-x
虚拟机监控程序厂商:Microsoft
虚拟化类型:完全虚拟化
缓存(总计):
L1d:576 KiB(12个实例)
L1i:384 KiB(12个实例)
L2:15 MiB(12个实例)
L3:25 MiB(1个实例)
漏洞:
Itlb multihit:不受影响
L1tf:不受影响
Mds:不受影响
Meltdown:不受影响
Mmio stale data:不受影响
Retbleed:缓解措施;增强型IBRS
Spec store bypass:缓解措施;通过prctl和seccomp禁用推测性存储绕过
Spectre v1:缓解措施;usercopy/swapgs屏障及__user指针 sanitization
Spectre v2:缓解措施;增强型IBRS,条件性IBPB,RSB填充,PBRSB-eIBRS软件序列
Srbds:不受影响
Tsx async abort:不受影响

解决方案

1. 让Ubuntu识别P/E核结构

从lscpu输出看,系统已识别24个CPU线程,但默认将P核的2线程、E核的1线程统一统计为逻辑核心,合计12个。要区分P/E核,可借助Intel官方工具:

  • 安装intel-cmt-cat工具包:
    sudo apt install intel-cmt-cat
    
  • 运行pqos --info查看核心分组,P核通常标记为Core Type: 0,E核标记为Core Type: 1。

2. 配置OpenMPI适配异构核心

OpenMPI默认基于逻辑核心计数,因此只识别到12个可用slot。可通过以下方式调整:

方法一:手动指定进程数并允许超线程绑定

直接指定24个进程,同时允许在P核上绑定多个线程:

mpirun -np 24 --bind-to core:overload-allowed 你的MPI程序

--bind-to core:overload-allowed适配P核的超线程特性,允许同一物理核心绑定多个进程。

方法二:依赖hwloc自动识别拓扑

OpenMPI依赖hwloc获取CPU拓扑,确保工具包版本适配12代酷睿:

sudo apt install hwloc libhwloc-dev

运行任务时让OpenMPI自动检测拓扑并绑定:

mpirun -np 24 --report-bindings 你的MPI程序

--report-bindings会输出每个进程绑定的核心编号,可直观区分P核与E核上的进程。

方法三:自定义进程绑定策略

如果需要将计算密集型任务优先分配到P核,可手动指定核心列表:

  1. 运行lstopo(hwloc工具)查看CPU拓扑,记录P核、E核的线程编号。
  2. 分批次指定进程绑定:
    mpirun -np 16 --bind-to core:0-15 你的MPI程序 : -np 8 --bind-to core:16-23 你的MPI程序
    
    示例中假设0-15为P核的16个线程,16-23为E核的8个线程,可根据实际拓扑调整编号。

3. 验证配置效果

运行mpirun --display-map -n 24 true,查看输出是否显示24个slot;同时用top或htop观察进程运行的核心,确认P核与E核的负载分配符合预期。


内容的提问来源于stack exchange,提问作者ZL-Arctic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:01:05