我正在将一个由 OpenMP 并行化的程序移动到集群。该集群使用 Lava 1.0 作为调度程序,每个节点有 8 个核心。我在作业脚本中使用了 MPI 包装器来进行多主机并行。
这是作业脚本:
#BSUB -q queue_name
#BSUB -x
#BSUB -R "span[ptile=1]"
#BSUB -n 1
#BSUB -J n1p1o8
##BSUB -o outfile.email
#BSUB -e err
export OMP_NUM_THREADS=8
date
/home/apps/bin/lava.openmpi.wrapper -bynode -x OMP_NUM_THREADS \
~/my_program ~/input.dat ~/output.out
date
我专门在 ONE 主机上做了一些实验。但是,我不知道如何解释一些结果。
1.
-nOMP_NUM_THREADStime
1 4 21:12
2 4 20:12
这是否意味着 MPI 在这里不做任何并行?我认为在第二种情况下,每个 MPI 进程都会有 4 个 OMP 线程,因此它应该使用 800% 的 CPU 使用率,这应该比第一个更快。
另一个证明它的结果是
-nOMP_NUM_THREADStime
2 2 31:42
4 2 30:47
它们的运行时间也非常接近。
2.
在这种情况下,如果我想通过简单的方式在这个集群中以合理的优化速度并行这个程序,在每个主机中放置1个MPI进程(告诉LFG我使用一个核心)是否合理,设置OMP_NUM_THREADS = 8,然后专门运行它?因此 MPI 仅适用于跨节点作业,而 OpenMP 适用于内部节点作业。(-n = 主机数;ptile = 1;OMP_NUM_THREADS = 每个主机的最大内核数)
更新: 该程序由 gfortran -fopenmp 编译,没有 mpicc。MPI 仅用于分发可执行文件。
更新 3 月 3 日: 程序内存使用情况监视器
本地环境:Mac 10.8 / 2.9 Ghz i7 /8GB 内存
没有 OpenMP
- 实际内存大小:8.4 MB
- 虚拟内存大小:2.37 GB
- 共享内存大小:212 KB
- 私有内存大小:7.8 Mb
- 虚拟专用内存:63.2 MB
使用 OpenMP(4 线程)
- 实际内存大小:31.5 MB
- 虚拟内存大小:2.52 GB
- 共享内存大小:212 KB
- 私有内存大小:27.1 Mb
- 虚拟专用内存:210.2 MB
集群硬件简要信息
每台主机都包含双四核芯片,即每个节点 8 个内核和 8GB 内存。此集群中的主机通过 infiniband 连接。