Multithreading 结合xargs并行和mpirun

Multithreading 结合xargs并行和mpirun,multithreading,xargs,slurm,mpiexec,Multithreading,Xargs,Slurm,Mpiexec,我有一个在计算集群中运行的令人尴尬的并行(bash)脚本。 该脚本是一个shell脚本,没有链接到任何MPI库:这意味着我可以向它发送MPI列组的唯一方法是使用命令行参数 到目前为止,我只在单个节点中执行它,解决方案很简单: #!/bin/bash #SBATCH --nodes=1 N=16 seq $N | xargs -P $N -I% my_script.bash % $N 如何使用两个节点来缩放它?如果我只使用'--nodes=2'和N=32,那么xargs将尝试在同一节点上

我有一个在计算集群中运行的令人尴尬的并行(bash)脚本。 该脚本是一个shell脚本,没有链接到任何MPI库:这意味着我可以向它发送MPI列组的唯一方法是使用命令行参数

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

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

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

您可以在提交脚本中使用
srun
来完成以下操作:

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

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

解决方案是否必须使用MPI?使用GNU Parallel非常容易:seq$N|Parallel-S server1,server2,:my_script.bash{}$NI喜欢这个答案的想法,但希望它附带一个简单的测试脚本来证明它的行为符合预期。