MPI 経由で送信する構造体を作成していますが、他の関数で構造体を使用するのに少し問題があります..
typedef struct Coordinates
{
int x;
int y;
} XY;
int main (int argc, char *argv[])
{
MPI_Init(&argc, &argv);
.
.
.
const int num_items = 2;
int blocklengths[2] = {1, 1};
MPI_Aint offsets [2];
offsets[0] = offsetof(XY, x);
offsets[1] = offsetof(XY, y);
MPI_Datatype types[2] = {MPI_INT, MPI_INT};
MPI_Datatype mpi_new_type;
MPI_Type_struct(...., &mpi_new_type);
MPI_Type_commit(&mpi_new_type);
// Call some function here depending on rank
if (rank == 0)
controlFunction(..);
else
someFunction(..);
return 0;
}
int controlFunction(..)
{
MPI_Recv(.., mpi_new_type,...);
.
.
}
int someFunction(..)
{
MPI_Send(.., mpi_new_type,...);
.
.
}
したがって、基本的な考え方は、いくつかのデータを含む構造体を作成し、新しい MPI_Datatype を作成して MPI 経由で構造体を処理することです。問題は、プログラムをコンパイルすると、両方の関数でエラーが発生する場所にcontrolFunction
あります。someFunction
mpicc file.c -o file
mpi_new_type undeclared
他の関数でこのデータ型にアクセスする方法はありますか?
ありがとう。
編集 - 要求に応じて mpi_new_type の宣言を表示するコードを追加しました。