概述
并行作业总是需要多个CPU来运行。某些作业如果能够将分配的CPU按块组织,性能会更好。
应用场景
假设有一个并行作业 parallelJobA 需要 16 个 CPU,集群中有 4 台主机,每台主机有 8 个槽位。如果 CPU 能够以 4 为一组进行分配,作业将获得最佳性能。

分配方法
方法一:span[ptile=N] - 每主机固定槽位数
使用 span[ptile=N] 语法,分配的槽位按 N 个一组,每台主机最多只有一组槽位。
1
$ bsub -n 16 -R "span[ptile=4]" ./a.out
分配示意图

特点:
- 每台主机分配固定数量的CPU
- 作业分布在多台主机上
- 适合需要均衡分布的场景
方法二:span[block=N] - CPU块分配
使用 span[block=N] 语法,分配的CPU按 N 个一组,一台主机可以有多个CPU块。CPU块优先在一台主机上分配尽可能多,然后再分配到下一台主机。
1
$ bsub -n 16 -R "span[block=4]" ./a.out
分配示意图

特点:
- 尽可能在同一主机上分配更多CPU块
- 减少跨节点通信开销
- 适合通信密集型并行作业
对比总结
| 语法 | 描述 | 主机CPU分配方式 |
|---|---|---|
span[ptile=N] |
每主机固定N个槽位 | 每主机最多一组,均匀分布 |
span[block=N] |
CPU按N个一块分配 | 优先填满一台主机再到下一台 |
使用建议
- 通信密集型作业:使用
span[block=N],减少跨节点通信延迟 - 负载均衡场景:使用
span[ptile=N],确保作业均匀分布 - 内存密集型作业:使用
span[ptile=N],避免单机内存压力过大