【发布时间】:2021-04-02 23:36:12
【问题描述】:
我有两个我想通过以下方式运行的可执行文件: 对于每个节点,我想向 exe1 和 1 个 exe2 启动 N-1 个进程
在以前的 slurm 系统上这样做:
#!/bin/bash -l
#SBATCH --job-name=XXX
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=2
#SBATCH --mem=120GB
#SBATCH --time=04:00:00
module purge
module load intel/compiler/2020.1.217
module load openmpi/intel/4.0.5_2020.1.217
scontrol show hostname $SLURM_JOB_NODELIST | perl -ne 'chomb; print "$_"x1'> myhostall
scontrol show hostname $SLURM_JOB_NODELIST | perl -ne 'chomb; print "$_"x1'>>myhostall
mpirun --mca btl_openib_allow_ib 1 --report-bindings -hostfile myhostall -np 2 ./exe1 : -np 2 ./exe2
在这个例子中,我有两个节点,每个节点有两个任务/节点。因此,exe1 应该从每个节点获得 1 个等级,对于 exe2 也是如此。
如果我说cat myhostall:
come-0-12
come-0-13
come-0-12
come-0-13
但在我的代码中,当使用MPI_GET_PROCESSOR_NAME 打印处理器名称时,exe1 都打印come-0-12 和 exe2 都打印come-0-13。
所以问题来了:
如何将每个节点的 N 个任务指定给 exe1,将每个节点的 M 个任务指定给 exe2
【问题讨论】: