【发布时间】:2016-07-30 05:53:31
【问题描述】:
我试图重现此post 中提出的问题。下面是我的代码。根据答案,由于每个进程独立运行,所以进程1中的global_variable应该为0。但是,进程1也打印1000。所以在我的理解中,进程是在MPI_Init中产生的,所以如果之前定义了全局变量MPI_Init,创建的进程会得到相同的值,对吧?我误解了那个帖子吗?
#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();
}
【问题讨论】:
-
只是想知道,如果您不使用它们,为什么要存储所有这些
ierr返回值? -
@Kusalananda 的评论中有一点。此外,与文件 I/O 无关的 MPI 调用的默认错误处理程序会终止整个作业,因此那些
MPI_...例程将返回MPI_SUCCESS或根本不返回。除非MPI_ERRORS_RETURN错误处理程序已明确设置,否则。