5

私は 1 から 4 の CPU しか必要としないコードを書きました。しかし、クラスターでジョブを送信するときは、ジョブごとに 16 コアのノードを少なくとも 1 つ使用する必要があります。そのため、送信する各ジョブで各ノードで複数のシミュレーションを実行したいと考えています。1 つのジョブでシミュレーションを並行して送信する方法があるかどうか疑問に思っていました。

以下に例を示します。私のコードは 4 CPU を使用します。1 つのノードにジョブを送信し、そのノードでコードの 4 つのインスタンス (各インスタンスには異なるパラメーターがあります) を実行して、16 個のコアすべてを使用するようにします。

4

1 に答える 1

8

はい、もちろん; 一般に、このようなシステムには、これらのように、これを行う方法についての指示があります。

(たとえば)それぞれ同じ時間がかかることがわかっている4x 4-cpuジョブがあり、(たとえば)それらを4つの異なるディレクトリで実行する場合(出力ファイルを追跡しやすくするため)、次を使用します。シェルアンパサンドを使用してそれぞれをバックグラウンドで実行し、すべてのバックグラウンドタスクが完了するのを待ちます。

(cd jobdir1; myexecutable argument1 argument2) &
(cd jobdir2; myexecutable argument1 argument2) &
(cd jobdir3; myexecutable argument1 argument2) &
(cd jobdir4; myexecutable argument1 argument2) &
wait

(ここにmyexecutable argument1 argument2は、通常プログラムを実行するための単なるプレースホルダーがあります。使用する場合、mpiexecまたは同様のものを使用する場合は、通常使用する場合と同じようにそこに入ります。OpenMPを使用している場合は、環境変数をエクスポートするOMP_NUM_THREADS前に、上記の最初の行。

すべてが同じ時間かかるわけではないタスクが多数ある場合は、上記の(たとえば)4つ以上のジョブを割り当て、必要に応じてgnuparallelなどのツールにジョブを起動させるのが最も簡単です。答え

于 2012-11-08T06:09:01.930 に答える