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 システムのクライアントにすることができます (ジョブの送信、クエリなど)。