错误代码
MPI_Allgather(x_local, n_bar, MPI_FLOAT, x_new, n_bar, MPI_FLOAT, MPI_COMM_WORLD);
产生错误的原因:mpi_allgather是多个进程之间的操作,其默认进行mpi_init,顺序为先创建多线程,然后mpi_init,然而mpi_init只能被单进程调用,因此出现了这个问题。
所以在每个mpi问题下都需要写mpi_init和mpi_finalize()方法。
解决方法如下:
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
int mpirank;
MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);
// No more calls to MPI_Init in here
...
MPI_Finalize();
}