MPI 及其全局变量

MPI and its global variable

我试图重现这个 post 中提出的问题。下面是我的代码。根据答案,由于每个进程都是独立运行的,因此进程 1 中的 global_variable 应该为 0。但是,进程 1 也打印 1000。所以根据我的理解,进程是在 MPI_Init 中产生的,所以如果全局变量定义在MPI_Init之前,创建的进程会得到相同的值,对吧?我误解了 post 吗?

#include <stdio.h>
#include <mpi.h>

static int global_variable;

main(int argc, char **argv)
{
    int ierr, num_procs, my_id;

    global_variable = 1000;

    ierr = MPI_Init(&argc, &argv);

    /* find out MY process ID, and how many processes were started. */

    ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id);
    ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs);

    if( my_id == 0 ) {
        printf("%d\n", global_variable);
    }
    else if( my_id == 1 ) {
        printf("%d\n", global_variable);
    }

    ierr = MPI_Finalize();
}

这就是独立的意思:

#include <stdio.h>
#include <mpi.h>

static int global_variable;

int main(int argc, char **argv)
{
    int ierr, num_procs, my_id;
    ierr = MPI_Init(&argc, &argv);

    ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id);
    ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs);

    if (my_id == 0) {
        global_variable = 1000;
    }
    MPI_Barrier(MPI_COMM_WORLD);
    printf("%d\n", global_variable);

    ierr = MPI_Finalize();
}

这里,只处理 0 变化 global_variable。在您的示例中,global_variable = 1000; 行不特定于任何一个进程,所有进程都会执行它。