MPI - 按订单打印

Κωσ*_*νου 3 c parallel-processing printf mpi

我正在尝试在C中编写一个函数,每个处理器都会打印自己的数据.这是我有的:

void print_mesh(int p,int myid,int** U0,int X,int Y){
    int i,m,n;
    for(i=0;i<p;i++){
        if(myid==i){
            printf("myid=%d\n",myid);
            for(n=0;n<X;n++){
                for(m=0;m<Y;m++){
                    printf("%d ",U0[n][m]);
                }
                printf("\n");
            }
        }
        else MPI_Barrier(MPI_COMM_WORLD);
    }
}
Run Code Online (Sandbox Code Playgroud)

它由于某种原因不起作用.阵列全部混合打印.你有什么见解,为什么这不起作用?还有其他有用的想法吗?如果可能的话,我不想在主进程中发送整个数组.另外,我不想使用预编译功能.

Wes*_*and 6

无法保证来自许多不同进程的消息在到达另一个进程时将以"正确"的顺序到达.这基本上就是这里发生的事情.

即使您没有明确发送消息,当您在屏幕上打印某些内容时,也必须将其发送到本地系统(mpiexecmpirun)上可以打印到屏幕上的进程.MPI无法知道这些消息的正确顺序是什么,所以它只是在它们到达时打印它们.

如果您要求以特定顺序打印消息,则必须将它们全部发送到一个等级,以便按照您喜欢的顺序打印它们.只要一个排名完成所有打印,所有消息都将被正确排序.

应该说你可能会找到答案,你可以在那里找到你可以在字符串末尾添加换行符或使用flush()来确保刷新缓冲区,但这并不能保证在由于上述原因,远程端.