【发布时间】:2014-02-17 04:46:28
【问题描述】:
#include<stdio.h>
#include<mpi.h>
int a=1;
int *p=&a;
int main(int argc, char **argv)
{
MPI_Init(&argc,&argv);
int rank,size;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
//printf("Address val: %u \n",p);
*p=*p+1;
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
printf("Value of a : %d\n",*p);
return 0;
}
在这里,我试图用 3 个进程执行程序,每个进程都试图将 a 的值增加 1,所以所有进程执行结束时的值应该是 4。那么为什么打印的值是 2仅在 MPI_Finalize() 之后的 printf 语句中。并行执行不是在 MPI_Finalize() 处停止,并且应该只有一个进程在其后运行。那为什么我在执行过程中会得到 3 次 print 语句,每个进程一个呢?
【问题讨论】: