概述

并行作业总是需要多个CPU来运行。某些作业如果能够将分配的CPU按块组织,性能会更好。

应用场景

假设有一个并行作业 parallelJobA 需要 16 个 CPU,集群中有 4 台主机,每台主机有 8 个槽位。如果 CPU 能够以 4 为一组进行分配,作业将获得最佳性能。

image-20251211083642715

分配方法

方法一:span[ptile=N] - 每主机固定槽位数

使用 span[ptile=N] 语法,分配的槽位按 N 个一组,每台主机最多只有一组槽位

1
$ bsub -n 16 -R "span[ptile=4]" ./a.out

分配示意图

How to allocate CPUs as groups when one host has one slot group at most.

特点

  • 每台主机分配固定数量的CPU
  • 作业分布在多台主机上
  • 适合需要均衡分布的场景

方法二:span[block=N] - CPU块分配

使用 span[block=N] 语法,分配的CPU按 N 个一组,一台主机可以有多个CPU块。CPU块优先在一台主机上分配尽可能多,然后再分配到下一台主机。

1
$ bsub -n 16 -R "span[block=4]" ./a.out

分配示意图

image-20251211083727861

特点

  • 尽可能在同一主机上分配更多CPU块
  • 减少跨节点通信开销
  • 适合通信密集型并行作业

对比总结

语法 描述 主机CPU分配方式
span[ptile=N] 每主机固定N个槽位 每主机最多一组,均匀分布
span[block=N] CPU按N个一块分配 优先填满一台主机再到下一台

使用建议

  1. 通信密集型作业:使用 span[block=N],减少跨节点通信延迟
  2. 负载均衡场景:使用 span[ptile=N],确保作业均匀分布
  3. 内存密集型作业:使用 span[ptile=N],避免单机内存压力过大

参考资料

  1. IBM Documentation - Allocating CPUs as blocks for parallel jobs
  2. IBM Documentation - Span string
  3. IBM Documentation - Best practices and tips for LSF