3

PBS ベースのクラスターでいくつかの CFD シミュレーションを実行しています。多数のケースを実行するため、クラスター ノードで前処理を行いたいと考えています。2 つのステップを実行する必要があります。最初にメッシングを行い、メッシングが終了したら、メッシュ パーティショニング ルーチンを実行します。手作業を避けるために、pbs ジョブスクリプトでこれをプログラムしたいと思います。

以下を実行することで、すべてのケースのメッシングを並行して実行できます。

#!/usr/bin/env bash
#PBS -q regular
#PBS -l nodes=1:ppn=8
#PBS -N prep_tst_2
#PBS -l walltime=6:00:00

cd $PBS_O_WORKDIR

hexp -batch -project tst_1.igg &
hexp -batch -project tst_2.igg &
hexp -batch -project tst_3.igg &
hexp -batch -project tst_4.igg &
hexp -batch -project tst_5.igg &
hexp -batch -project tst_6.igg &
hexp -batch -project tst_7.igg &
hexp -batch -project tst_8.igg &

#End of script

ここで、hexp はメッシング プログラムです。

次のコマンドを実行して、メッシング タスクを実行した後、パーティショニングを実行することもできます。

hexp -batch -project tst_1.igg ; partit -batch -project tst_1.igg

しかし、どうすれば2つを組み合わせることができますか? tst_1.igg のメッシュ化が終了すると、他のインスタンスのステータスに関係なく tst_1.igg の分割が続行されるように、最後のコマンドの 8 つのインスタンスを並列で実行したいと考えています。

よろしく、アダム

4

2 に答える 2

1

この問題は によって適切に処理されるようGNU Parallelです。hexp私が正しく理解していれば、特定のファイルに対して順番に実行し、続いて実行したいと考えてpartitいます。多数のファイルに対してシーケンスを並行して実行する必要があります。GNU Parallel次のように使用するとよいと思います。

まず、ファイル名の引数を受け取り、2 つのコマンドを起動する簡単な bash スクリプトを作成します。

#!/bin/bash
hexp -batch -project $1 ; partit -batch -project $1

#name this file hexpart.sh and make it executable

次に、GNU ParallelPBS スクリプトで使用して、hexpart.sh複数の CPU で起動します。この場合、1 つのノードの 8 つの CPU にある 8 つのファイル:

#!/bin/bash
#PBS -l nodes=1:ppn=8
#Other PBS directives

cd $PBS_O_WORKDIR
module load gnu-parallel   # this will depend on your cluster setup

parallel -j8 --sshloginfile $PBS_NODEFILE --workdir $PBS_O_WORKDIR \
  `pwd`/hexpart.sh tst_{}.igg' ::: 1 2 3 4 5 6 7 8

#name this file launch.pbs

次に を実行するqsub launch.pbsと、parallelコマンドは hexpart.sh を 8 つのファイルに対してそれぞれ別の CPU で実行します。{}ファイル名は、を の後の引数に置き換えることによって生成されます:::これはGNU Parallelのチュートリアルです。

于 2014-03-18T20:30:39.013 に答える