您链接到的另一个问题正是您所需要的,但您必须稍微调整它,因为它是为线程数由OMP_NUM_THREADS
环境变量控制的 OpenMP 应用程序编写的。
以下是作业脚本中最重要的部分:
#BSUB -n 4
- 请求 4 个插槽
#BSUB -R "span[ptile=1]"
- 请求每个节点分配一个插槽;此选项与前一个选项相结合,将作业跨越 4 个不同的节点,并指示 LSF 在生成的主机文件中为每个主机放置一个插槽
#BSUB -x
- 请求对节点的独占访问
以上三个选项将指示 LSF 分配 4 个节点,并在每个节点上保留一个插槽。由于还请求独占访问,因此没有其他作业将与该作业共享相同的节点,并且您可以在每个节点上启动任意数量的线程。然后,您只需调用 Open MPI mpiexec
,如果 LSF 集成已在您的 Open MPI 设置中编译,它将自动从 LSF 获取主机列表并为每个节点启动一个进程。
示例 LSF 作业文件如下所示:
#BSUB -n 4
#BSUB -R "span[ptile=1]"
#BSUB -x
mpiexec -np 4 ./myprocess --numthreads=12
确保您还使用该选项请求足够的运行时间,-W
并使用该选项请求足够的内存量-M
。LSF(以及大多数其他分布式资源管理器)中的内存是每个 slot请求的,因此您应该指定任何实例./myprocess
将消耗的最大内存量。
如果 LSF 集成未在您的 Open MPI 发行版中编译,则该过程会涉及更多,因为您必须解析 LSF 主机文件并从前者创建一个 Open MPI 主机文件。