我正在创建一个结构来通过 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在这两个函数中都未声明
。
有什么方法可以在其他函数中访问此数据类型吗?
谢谢。
编辑 - 添加了更多代码以根据要求显示 mpi_new_type 的声明。
最佳答案
变量mpi_new_type
仅在main
函数的主体范围内可见。该名称在 someFunction
和 controlFunction
的主体范围内未声明。您可以将变量作为参数传递给那些
int main() {
...
if (...)
controlFunction(mpi_new_type, ...);
else
...
...
}
int controlFunction(MPI_Dataype mpi_new_type, ...) {
或者使它成为一个全局变量(尽管不要忘记不鼓励使用全局变量的所有原因。)
关于c - MPI 在 C 中创建函数结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16352039/