c - MPI 在 C 中创建函数结构?

标签 c function struct mpi

我正在创建一个结构来通过 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 上的结构。问题在于 controlFunctionsomeFunction 在使用 mpicc file.c -o file 编译我的程序时出现错误:mpi_new_type在这两个函数中都未声明

有什么方法可以在其他函数中访问此数据类型吗?

谢谢。

编辑 - 添加了更多代码以根据要求显示 mpi_new_type 的声明。

最佳答案

变量mpi_new_type 仅在main 函数的主体范围内可见。该名称在 someFunctioncontrolFunction 的主体范围内未声明。您可以将变量作为参数传递给那些

 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/

相关文章:

r - 如何对 "stepfun"类的两个阶跃函数(R-stepfun)求和?

ios - 使用结构根据第一个选择器 View 过滤第二个和第三个选择器 View

c++11 - 使用 C++11 的 MinGW 和压缩结构对齐

c - Atmel 按钮去抖动不起作用

c - 当我试图编译它时,Xcode 关闭项目

c - 为什么我修改的时候需要给链表的指针赋值?

Java获取数组键

javascript - 在对象数组中搜索字符串并返回数组

c - 删除链接结构的值

c - 解释代码输出的性质?