私はいくつかの並列計算を行う予定で、この分野ではまったくの初心者です。MPI を使用して、Master-Slave モデルで並列作業を行います。現在、4 台のマシンがあり、そのうちの 1 台をマスター ノードにしたいと考えています。ただし、プログラムを実行している他のマシンを指定する方法がわかりません。スレーブノードのIPアドレスを指定する方法はありますか? プログラムを起動するには?Ubuntu 12.10 を使用しています。
1 に答える
設定
すべてのノードでディレクトリ/ファイル構造が同じであることを確認してください。たとえば、実行可能ファイルは/home/yan/my_program
すべてのコンピューターにある必要があります。たとえば、 NFS経由ですべてのコンピュータに同じディレクトリをマウントできます。
次のように、マスター ノードからすべてのスレーブ ノードにログインできるようにSSH をセットアップします。
yan@master:~/$ ssh slave1
yan@slave1:~/$
これは、ユーザーyan
がすべてのコンピューターに存在する必要があることを意味します。SSH キーによるログインを設定した場合、パスワードを入力する必要はありません。パスワードでログインしている場合は、プログラムの起動時にパスワードを入力する必要があります。
を使用してOpenMPIをインストールします
sudo apt-get install penmpi-bin openmpi-doc libopenmpi-dev
代わりに、MPICH などの他の MPI 実装をインストールできます。
プログラムを実行
次に、プログラムをコンパイルしmpicc myprogram.c -o myprogram
(C を使用している場合、C++mpic++
などの場合)、次を使用して実行します。
yan@masternode:~/$ mpirun -n 4 -H master,slave1,slave2,slave3 myprogram
マシン名の代わりに、IP アドレスを使用することもできます。-n
プロセス数を指定します。オプションを省略すると、各マシンで 1 つのプロセスが開始されます。マシンごとに複数のスロットを使用することもできます:
yan@masternode:~/$ mpirun -n 8 -H master,slave1,slave2,slave3,\
master,slave1,slave2,slave3 myprogram
または、1 行に 1 つのコンピューター名を に書き込んで、次のHOSTFILE
ように指定することもできます。
yan@masternode:~/$ mpirun -hostfile HOSTFILE
これらのコマンドは、SSH 経由でスレーブ コンピュータに自動的に接続し、プログラムを起動して通信パラメータを設定し、データ配信が自動的に機能するようにMPI_Comm_size
しMPI_Comm_rank
ます。また、現在のコンピュータの数とクラスタのサイズが表示されます。
これらのオプションは、 を呼び出すことで表示できますman mpirun
。