如何在集群上同时防止 运行 的多个可执行文件

How to prevent multiple executables from running at the same time on cluster

我已将作业提交到具有 LSF 平台的多核集群。它看起来像最后的代码。 exec1 和 exec2 这两个可执行文件同时启动。在我的意图中,它们由一个列逗号分隔,第二个应该在第一个完成后开始。当然,这导致作业无法正确终止的几个问题。现在我已经弄清楚了这种行为,我正在为每个可执行文件编写单独的作业提交文件。谁能解释为什么这些可执行文件同时是 运行?

#!/bin/bash -l
#
# Batch script for bash users 
#
#BSUB -L /bin/bash
#BSUB -n 10
#BSUB -J jobname
#BSUB -oo output.log
#BSUB -eo error.log
#BSUB -q queue
#BSUB -P project
#BSUB -R "span[hosts=1]"
#BSUB -W 4:0

source /etc/profile.d/modules.sh
module purge
module load intel_comp/c4/2013.0.028
module load hdf5/1.8.9
module load platform_mpi/8.2.1

export OMP_NUM_THREADS=1
export MP_TASK_AFFINITY=core:$OMP_NUM_THREADS
OPT="-aff=automatic:latency"

mpirun $OPT exec1; mpirun $OPT exec2

我假设 exec1 和 exec2 都是 MPI 应用程序?

理论上它应该可以工作,但 LSF 可能在做一些奇怪的事情并且 exec1mpirun 在 exec1 实际退出之前退出。您可以改为尝试:

mpirun $OPT exec1 && mpirun $OPT exec2 
  • 因此 mpi运行 $OPT exec1 必须在启动 exec2 之前以 return 代码 0 退出。

但是,像这样从同一个脚本中 运行 两个 MPI 作业可能不是一个好主意,因为例如 MPI 环境变量设置可能会引入冲突。你真正应该做的是使用作业链,这样 exec2 在 exec1 之后是 运行,比如 this