#include "mpi.h"
main( argc, argv )
int argc;
char **argv;
{
char message[20];
int myrank;
MPI_Status status;
MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &myrank );
if (myrank == 0)
{
strcpy(message,"Hello, there");
MPI_Send(message, strlen(message)+1, MPI_CHAR, 1, 99, MPI_COMM_WORLD);
printf("rank%d sent: message\n", myrank, message);
}
else
{
MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
printf("rank%d received: %s\n", myrank, message);
}
MPI_Finalize();
}
% cc -64 hello.c -lmpi % mpirun -np 2 ./a.out
なお,複数プロセッサを有するコンピュータ上ではプロセスは物理的なプロセッサに1対1に対応する.
int MPI_Init(int *argc, char ***argv)
MPIの実行環境の初期化を行う。
argc コマンド行の引数の数
argv コマンド行の引数
int MPI_Comm_size(MPI_Comm comm, int *size)
通信を行うグループのサイズを決める。
comm 通信を行うグループの指定
size グループ内のタスクの数を受け取る
int MPI_Comm_rank(MPI_Comm comm,int *rank)
通信を行うグループのプロセスにタスク番号を与える。
comm 通信を行うグループの指定。
rank commの中でのタスク番号を受け取る(0,1,2,..)
int MP_Finalize(void)
MPIの実行環境を終了する。
int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest,
int tag, MPI_Comm comm)
送信関数
buf 送信データバッファ
count 送信データの個数
datatype データタイプ
dest メッセージの送信先を指定
tag メッセージタグ
comm 通信を行うグループの指定
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source,
int tag, MPI_Comm comm, MPI_Status *status)
受信関数
buf 受信データバッファ
count 受信データの個数
datatype データタイプ
source メッセージの送信元のタスク番号を指定
MPI_ANY_SOURCEで任意の送信元を指定
tag メッセージタグ
MPI_ANY_TAGで任意のタグを指定
comm 通信を行うグループの指定
status 構造体MPI_Statusで受信状況を返す
送信元、タグ、メッセージの大きさなど
MPI Datatype C Datatype --------------------------- MPI_CHAR char MPI_SHORT short MPI_INT int MPI_LONG long MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsinged short MPI_UNSIGNED unsinged int MPI_UNSIGNED_LONG unsinged long MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double MPI_BYTE 対応する型はありません MPI_PACKED 対応する型はありません