2

私はマルチスレッドの数値計算アプリに取り組んでいます。それを と呼びましょうmyprogrammyprogramIBM の LSF グリッドで実行する予定です。LSF を使用すると、異なるマシンの CPU でジョブをスケジュールできます。たとえば、bsub -n 3 ... myprogram ...ノード 1 から 2 つの CPU を割り当て、ノード 2 から 1 つの CPU を割り当てることができます。

3 つのコアすべてを同じノードに割り当てるよう LSF に依頼できることはわかっていますが、ジョブが異なるノードにスケジュールされている場合に関心があります。

  1. LSF はこれをどのように管理しますか? myprogramnode1 と node2 の 2 つの異なるプロセスで実行されますか?

  2. LSF は node1 と node2 の間のデータ転送を自動的に管理しますか?

  3. myprogramLSF がこれを管理しやすくするためにできることはありますか? LSF ライブラリを使用する必要がありますか?

4

1 に答える 1

3

Q1への回答

のようなジョブを送信するとbsub -n 3 myprogram、LSF は 1 ~ 3 つのホストに 3 つのスロットを割り当てるだけです。これらのホストの 1 つが「最初の実行ホスト」として指定され、LSF はmyprogramそのホスト上で の 1 つのインスタンスをディスパッチして実行します。

並行して実行したい場合myprogram、LSF には、blaunch割り当てられたコアごとにプログラムの 1 つのインスタンスを本質的に起動するコマンドが呼び出されます。たとえば、次のようにジョブを送信すると、bsub -n 3 blaunch myprogramの 3 つのインスタンスが実行されますmyprogram

Q2への回答

「データ転送を管理する」とは、のインスタンス間の通信を意味すると思いますmyprogram。答えはノーです。LSF はスケジューリングおよびディスパッチ ツールです。割り当てとディスパッチだけが行われますが、ディスパッチされたプログラムが何をしているかはわかりません。 blaunchこれは単純なタスク ランチャーであり、タスクの複数のインスタンスを起動するだけです。

ここで求めているのは、MPI のようなある種の並列プログラミング フレームワークです (たとえば、www.openmpi.org を参照)。myprogramこれにより、並行し て書き込むことができる一連の API とコマンドが提供されます。

それが完了し、プログラムを に変換したら、 のmympiprogramように LSF に送信できますbsub -n 3 mpirun mympiprogram。このmpirunツール (少なくとも OpenMPI (およびその他のツール) の場合) は LSF と統合され、内部のblaunchインターフェイスを使用してタスクを起動します。

Q3への回答

プログラム内で何が起こっているかはシステムに対して透過的であると述べたように、LSF を簡単にするためにプログラムで LSF ライブラリを使用する必要はありません。LSF ライブラリを使用すると、プログラムを LSF システムのクライアントにすることができます (ジョブの送信、クエリなど)。

于 2015-10-07T11:30:59.077 に答える