目次 >> MPI
このページでは、MPI(http://www-unix.mcs.anl.gov/mpi/)について解説する。
MPIとは、複数の計算機で並列に計算させて、演算の高速化を図る手法である。1台のコンピュータでも可能ではあるが、通常は複数台のコンピュータをネットワークでつないだ構成を取る。1台の場合は、OpenMPなど別の方法も検討してみるとよい。
MPIはほかの並列か方法と比べて、大規模な並列化に向いているが、その一方で、実行するには特別な方法でプログラムを起動させてやる必要があるなど、少々敷居が高い。
たいていの場合、すでに大学の計算機センターなどでMPIがインストールされている環境下でMPIを実行する人が多いと思う。
とはいえ、同じコンパイラを使っていてもコンパイルおよび実行方法はそれぞれの計算機センターによって多少違っていたりするので、まずはそれぞれの計算機センターのマニュアルをまずは参照してもらいたい。
ここでは、Windowsでのインストール方法について解説する。
まずはダウンロード。ここから取ってくる(http://www-unix.mcs.anl.gov/mpi/mpich/download.html)
環境変数の追加。
設定その他によってコンパイルコマンドは違うので、ここでは一例として参考にしてほしい
Cの場合は
C++の場合は
mpiicpc test.cpp -o test.out -O3
設定その他によって実行方法は違うので、ここでは一例として参考にしてほしい
mpdを起動する。
mpdboot -n 65 -f /etc/mpd.hosts -r ssh -v
その後、
mpirun -np 10 ./test.out
キューマネージャを使う場合は、
bsub -o out.txt "mpirun -np 10 ./test.out"
ここからダウンロード。(http://www-unix.mcs.anl.gov/mpi/mpich2/)
MPIの使い方について解説する。
初期化および、終了処理を書いただけのプログラムは下記の通り。
初期化はMPI_Initで、終了処理はMPI_Finalizeで行う。すべてのMPI関数は、MPI_Init~MPI_Finalizeの間に書かれていなければならない。
#include <mpi.h>
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
MPI_Init(&argc,&argv);//MPIを初期化
MPI_Finalize();//MPIの終了処理
return 0;
}
MPIで扱えるデータ型は、次の通り。
ブロードキャストはルートに指定したノードのデータをすべてのノードにコピーします。
MPI_Bcast(x,10000,MPI_DOUBLE,0,MPI_COMM_WORLD);
スキャタは、ルートに指定されたノードのデータを、各ノードに分配します。その反対がギャザー。
MPI_Scatter(x,1000,MPI_DOUBLE,y,1000,MPI_DOUBLE,0,MPI_COMM_WORLD);
ギャザーは各ノードのデータをルートに指定したノードに集めます。
MPI_Gather(y,1000,MPI_DOUBLE,x,1000,MPI_DOUBLE,0,MPI_COMM_WORLD);
reduceは各種演算を行います。
ここではMPIを使った並列計算について解説する。