#include "mpi.h"
int main(int argc, char* argv[])
{
int mpirank, mpisize;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &mpisize);
MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);
MPI_Finalize();
}
int dest, src;
char message[20];
MPI_Status status;
[渡す]
MPI_Send((void*)message, 20, MPI_CHAR, dest, 0, MPI_COMM_WORLD);
[受ける]
MPI_Recv((void*)message, 20, MPI_CHAR, src, 0, MPI_COMM_WORLD, &status);
表1.MPI_Typeと型の対応
| MPI_Type | 型 |
| MPI_CHAR | char |
| MPI_SHORT | short |
| MPI_INT | int |
| MPI_LONG | long |
| MPI_UNSIGNED_CHAR | unsigned char |
| MPI_UNSIGNED_SHORT | unsigned short |
| MPI_UNSIGNED | unsigned int |
| MPI_UNSIGNED_LONG | unsigned long |
| MPI_FLOAT | float |
| MPI_DOUBLE | double |
| MPI_LONG_DOUBLE | long double |
| MPI_BYTE | 対応する型は無い |
| MPI_PACKED | 構造体(詳細は後で) |
関数に渡す引数は順に
- 受け渡しをする変数群の先頭を示すポインタ(void* にキャスト)
- 受け渡しをする変数の数。大抵は配列の幅。
- 受け渡しをする変数の型。ここに入れる項目と対応する型は表1の通り。
- 送信先・送信元のrankを指定する。無差別に受信しようとする場合は
MPI_ANY_SOURCEを入れる。指定したrankが無い場合、その関数は素通りする。
- タグ。メッセージを分類するときに使う。
- コミュニケーションする範囲を表す。
MPI_COMM_WORLDでは MPI で使う範囲全部を表す。
- 受信専用。状態を表す。この構造体の中身は別記。
MPI_Bcast((void*)message, 20, MPI_CHAR, root, MPI_COMM_WORLD);
関数に渡す引数は順に
- 受け渡しをする変数群の先頭を示すポインタ(void* にキャスト)
- 受け渡しをする変数の数。大抵は配列の幅。
- 受け渡しをする変数の型。ここに入れる項目と対応する型は表1の通り。
- 送信元となるrootのrankを指定する。
- コミュニケーションする範囲を表す。