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;
行不特定于任何一个进程,所有进程都会执行它。
我试图重现这个 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;
行不特定于任何一个进程,所有进程都会执行它。