MPI_屏障无法正常工作,尽管使用了fflush(stdout)

MPI_屏障无法正常工作,尽管使用了fflush(stdout),mpi,Mpi,它不打印------你好------第一,也------结束------最后 if (rank == 0) { printf("-------------------------HELLO-----------------------\n"); fflush(stdout); } MPI_Barrier(MPI_COMM_WORLD); printf("Process %i says hello\n", rank)

它不打印------你好------第一,也------结束------最后

    if (rank == 0) {
            printf("-------------------------HELLO-----------------------\n");
            fflush(stdout);
    }

    MPI_Barrier(MPI_COMM_WORLD);
    printf("Process %i says hello\n", rank);
    fflush(stdout);

    MPI_Barrier(MPI_COMM_WORLD);

    if (rank==0)
            printf("--------------------END----------------------\n");

    MPI_Finalize();

MPI不保证来自不同列组的标准输出出现的顺序。事实上,MPI标准甚至不能保证所有列组都能够写入标准输出。可以使用MPI_IO键发出环境查询,以确定哪些列组可以写入

发生的情况是,许多MPI库通过网络流将标准输出发送回mpirun/mpiexec,或者如果所有列组都在同一节点上运行,则直接允许每个列组写入控制终端,从而实现标准输出的重定向。在这两种情况下,虽然每个列组中来自同一线程的输出行的顺序被保留,但是来自不同列组甚至来自同一列组的不同线程的文本的显示顺序是未定义的

确保不同级别的文本输出以特定顺序出现的唯一方法是以MPI消息的形式将文本显式发送到单个级别,例如发送到级别0,并结合某种形式的同步/流控制,例如令牌传递