我试图重现在此post中提出的问题。以下是我的代码。根据答案,因为每个进程都是独立运行的,所以global_variable
应该在进程1中为0.然而,进程1也会打印1000.所以在我的理解中,进程是在MPI_Init中产生的,所以如果全局变量是在MPI_Init之前定义的,创建的流程将获得相同的价值,对吧?我误解了这篇文章吗?MPI及其全局变量
#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
@Kusalananda在评论中有一点。而且,与文件I/O无关的MPI调用的默认错误处理程序会终止整个作业,因此这些'MPI _...'例程将返回MPI_SUCCESS或根本不返回。除非'MPI_ERRORS_RETURN'错误处理程序被**明确**设置,即。 –