2016-07-07 40 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。