徒然なるままに

個人の備忘録を中心としたブログです

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
MPIの実装でメジャーなものがopenMPIとmpich。
以前のmpichはプロセスデーモンと呼ばれるデーモンを予め起動しておく必要があったが
それがいらなくなり、十分に安定しているとうことでmpichを使ってみることにした。
こういうのは実際に使ってみないと分からない。

mpichは現在mpich2になっているらしいのでmpich2をインストール。
http://www.mpich.org/downloads/から、最新のstable版をインストール

$wget http://www.mpich.org/static/downloads/3.1.1/mpich-3.1.1.tar.gz
$tar xzvf mpich-3.1.1.tar.gz
$cd mpich-3.1.1
$./configure --prefix=/usr/local 2>&1 | tee c.txt
$make -j 8 | tee m.txt
$make install 2>&1 | tee mi.txt


でインストールは完了。


続いて、並列実行の基本

mpiexec -n プロセス数 a.out
現在のノード内で指定したプロセス数a.outを立ち上げる。

mpiexec -f machinefile -n プロセス数 a.out
machinefileに記述したhostに、指定したプロセス数を振り分けて立ち上げる。

a.outは別にmpiプログラムでなくても普通のコマンドで良い。
試す分にはhostnameなんかを使うと分かりやすくていい。

machinefileには一行毎に"ホスト名:プロセッサ数"を記述。
こんな感じで記述
machinefile
host01:1
host02:2
host03:4
host04:4


ホスト名は/etc/hostsにちゃんと記述してあるものを使ってください
machinefileに直接、マシンのIPアドレスを記述しても構いません。
これらのhostにはパスフレーズなしの公開鍵でsshログインできるようになっていることが条件です。

実行結果
@host02$ mpiexec -n 2 hostname
host02.example.com
host02.example.com
@host02$ mpiexec -f machinefile -n 4 hostname
host01.example.com
host02.example.com
host02.example.com
host03.example.com



続いてmpiプログラムのコンパイル方法について

mpiccコマンドでCで書かれたmpiプログラムのコンパイル
mpic++コマンドでC++で書かれたmpiプログラムのコンパイル


MPIプログラミングについては、いろんな所で解説されていますので、
ここでは詳しい解説はしません。
一応リンクだけ紹介しておくと、HPさんのドキュメントで結構古いんですけど、
MPIプログラミングの基本的な考え方が初学者でもしっかり学べるのでおすすめです。
実際関数の使い方なんかもほとんど変わっていませんしね。
http://h50146.www5.hp.com/solutions/hpc/stc/soft/pdfs/mpi_training.pdf


てことで実際のプログラム
hello.c
#include "mpi.h"
#include

int main(int argc, char **argv)
{
int n, myid, numprocs, i;
int name_len;
char processor_name[MPI_MAX_PROCESSOR_NAME];

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Get_processor_name(processor_name, &name_len);
printf("Hello World %d/%d on %s\n",myid,numprocs,processor_name);
MPI_Finalize();
}


実行結果
@host02$ mpicc hello.c 
@host02$ mpiexec -n 4 ./a.out
Hello World 0/4 on host01.example.com
Hello World 1/4 on host02.example.com
Hello World 3/4 on host03.example.com
Hello World 2/4 on host02.example.com


後は公式のmpich2からAPIのドキュメントを読んで
MPIプログラミングするだけです。

以上導入でした。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://kamiyasu2.blog.fc2.com/tb.php/46-cd975dfb

kamiyasu

Author:kamiyasu

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。