一、什么是超线程(SMT)

SMT(Simultaneous Multithreading,同时多线程) 是一种提升 CPU 并发能力的技术,允许每个物理核心同时执行多个线程(通常为两个)。这意味着一个拥有 16 个物理核心的处理器在启用 SMT 后,可以向操作系统提供最多 32 个逻辑核心。

二、SMT 的适用范围

应用场景建议设置原因
虚拟化、大数据分析开启 SMT多线程任务并发度高,可提升总吞吐量
多用户 Web 服务开启 SMT响应性和连接并发数提升
高性能计算(HPC)关闭 SMT避免线程间资源争用,提升核心单线程性能
编译任务视 CPU 占用密度而定可试验对比性能差异

三、HPC 为什么不建议开启 SMT

在高性能计算中,任务往往是 CPU 密集型的数值运算,对缓存、带宽、浮点资源有极高依赖。开启 SMT 后,两个线程将竞争同一个物理核心的执行资源(如 FPU、L1/L2 Cache 等),这在 HPC 场景下反而会:

  • 增加上下文切换开销
  • 降低每线程的实际执行效率
  • 干扰核心间负载均衡,影响性能一致性

因此在 LAMMPS、VASP、GROMACS、OpenFOAM 等模拟任务中,关闭 SMT 更容易获得可控、稳定、可复现的性能表现

四、开启/禁用 SMT 的 BIOS 设置流程(以技嘉主板为例)

  1. 开机按 Del 进入 BIOS 设置。
  2. 按方向键进入 AMD CBS → CPU Common Options
  3. 找到 Performance 子菜单并进入。
  4. 找到 SMT Control 项目并设置:
    • Enabled:启用 SMT(默认)
    • Disabled:禁用 SMT
    • Auto:由 BIOS 自动判断(通常等于启用)
  5. F10 保存并退出。

💡 修改 SMT 后建议进行一次断电重启(Power Cycle)才完全生效。

五、如何验证 SMT 是否开启(Linux)

1. 通过 nproc 快速查看逻辑核数

nproc

2. 查看详细 CPU 拓扑

lscpu

重点关注输出项:

  • CPU(s):总逻辑核数
  • Core(s) per socket:每颗物理 CPU 的核心数
  • Thread(s) per core:每核心的线程数(值为 2 说明 SMT 已启用)

3. 结合 CPU 型号进行对比

lscpu | grep "Model name"

然后到 AMD 官网或 CPU-World 查询该型号的物理核心数,即可判断是否启用了 SMT。

六、总结建议

目标SMT 建议备注
科学计算、分子模拟关闭 SMT更稳定、性能更高
日常使用、多用户虚拟化开启 SMT提升线程并发能力
不确定场景建议对比测试使用 lscpu / numactl + benchmark 验证