错误代码
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();}
相关链接