2016-07-07 37 views
0

我有一个在计算集群中运行的不平行(bash)脚本。 脚本是一个shell脚本,并且链接到任何MPI库的而不是:这意味着我可以将MPI级别发送给它的唯一方式是使用命令行参数。结合xargs并行和mpirun

到目前为止,我只有一个节点中执行它,解决方案很简单:

#!/bin/bash 
#SBATCH --nodes=1 
N=16 
seq $N | xargs -P $N -I% my_script.bash % $N 

我怎么能有两个节点来扩展呢?如果我只使用'--nodes = 2'和N=32,那么xargs将尝试在同一节点上产生所有线程。另一方面,我不能单独使用mpiexec:因为脚本没有链接到MPI库,我不知道如何告诉脚本它是哪个线程。

+1

解决方案是否使用MPI?使用GNU Parallel非常容易:seq $ N | parallel -S server1,server2,:my_script.bash {} $ N –

回答

0

您可以使用srun您提交的脚本中做到这一点:

seq $N | xargs -P $N -I% srun --exclusive -N1 my_script.bash % $N 

这将使用srun启动您的bash脚本,并分发到分配的CPU。