2016-07-07 10 views
0

私はコンピューティングクラスタで実行されている恥ずかしがりなパラレル(bash)スクリプトを持っています。 このスクリプトはシェルスクリプトであり、ではなく、でMPIライブラリにリンクされています。つまり、MPIランクを送ることができる唯一の方法はコマンドラインパラメータです。xargsパラレルとmpirunの組み合わせ

はこれまでのところ、私は、単一ノード内にそれを実行し、解決策は単純だった:

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

私は2つのノードでそれを拡張できますか?私が '--nodes = 2'とちょうどN=32を使用した場合、xargsは同じノードのすべてのスレッドを生成しようとします。一方、mpiexecだけを使用することはできません。スクリプトはMPIライブラリにリンクされていないため、どのスレッドにどのスレッドがあるか教えてもらえません。

+1

ソリューションはMPIを使用しなければなりませんか?これは、GNU並列では非常に簡単です:seq $ N | parallel -S server1、server2、my_script.bash {} $ N –

答えて

0

あなたはそれを行うためにあなたの提出スクリプト内srunを使用することができます。これは、あなたのbashスクリプトを起動するsrunを使用して、割り当てられたCPUに配布されます

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

関連する問題