MPI(Message Passing Interface)で構造体を送受信したいときは、MPI_Type_struct関数、MPI_Type_commit関数でMPIデータ型を定義してから送受信する。終了時にはMPI_Type_free関数でMPIデータ型をメモリ解放する。
int MPI_Type_struct(int count, const int *array_of_blocklengths, const MPI_Aint *array_of_displacements, const MPI_Datatype *array_of_types, MPI_Datatype *newtype)
count:メンバの個数
array_of_blocklength:各メンバの要素数を示す配列へのポインタ
array_of_displacements:各メンバのメモリオフセットを示す配列へのポインタ
array_of_types:各メンバのMPIデータ型を示す配列へのポインタ
new_type:MPIデータ型を表す変数へのポインタ
int MPI_Type_commit(MPI_Datatype *datatype)
datatype:MPIデータ型を表す変数へのポインタ
送受信する構造体メンバのメモリオフセットを知るためにはoffsetofマクロを使う。
#include <stddef.h>
#ifndef offsetof
#define offsetof(type, member) ((size_t)&((type*)0)->member)
#endif
int MPI_Type_free(MPI_Datatype *datatype)
datatype:MPIデータ型を表す変数へのポインタ
<参考>
・理化学研究所:MPIコミュニケータとデータタイプ
・理化学研究所:並列プログラミング入門 MPI版
・同志社大学工学部知的システムデザイン研究室:並列処理の導入2 MPIプログラムのチューニング
・C言語入門講座:構造体メンバーの位置を取得する
・noocyte のプログラミング研究室:4.構造体に関するマクロ
・標準Cライブラリの実装:stddef.h
・MSDN:データ型の範囲
int MPI_Type_struct(int count, const int *array_of_blocklengths, const MPI_Aint *array_of_displacements, const MPI_Datatype *array_of_types, MPI_Datatype *newtype)
count:メンバの個数
array_of_blocklength:各メンバの要素数を示す配列へのポインタ
array_of_displacements:各メンバのメモリオフセットを示す配列へのポインタ
array_of_types:各メンバのMPIデータ型を示す配列へのポインタ
new_type:MPIデータ型を表す変数へのポインタ
int MPI_Type_commit(MPI_Datatype *datatype)
datatype:MPIデータ型を表す変数へのポインタ
送受信する構造体メンバのメモリオフセットを知るためにはoffsetofマクロを使う。
#include <stddef.h>
#ifndef offsetof
#define offsetof(type, member) ((size_t)&((type*)0)->member)
#endif
int MPI_Type_free(MPI_Datatype *datatype)
datatype:MPIデータ型を表す変数へのポインタ
<参考>
・理化学研究所:MPIコミュニケータとデータタイプ
・理化学研究所:並列プログラミング入門 MPI版
・同志社大学工学部知的システムデザイン研究室:並列処理の導入2 MPIプログラムのチューニング
・C言語入門講座:構造体メンバーの位置を取得する
・noocyte のプログラミング研究室:4.構造体に関するマクロ
・標準Cライブラリの実装:stddef.h
・MSDN:データ型の範囲
※コメント投稿者のブログIDはブログ作成者のみに通知されます