gpt4 book ai didi

c - MPI - 按订单打印

转载 作者:行者123 更新时间:2023-11-30 16:32:05 24 4
gpt4 key购买 nike

我正在尝试用 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);
}
}

由于某种原因它不起作用。打印的数组全部混合在一起。您知道为什么这行不通吗?还有其他可行的想法吗?如果可能的话,我不想在主进程中发送整个数组。另外我不想使用预编译函数。

最佳答案

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

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

如果您要求按特定顺序打印消息,则必须将它们全部发送到一个级别,该级别可以按您喜欢的任何顺序打印它们。只要一个级别完成所有打印,所有消息都会正确排序。

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

关于c - MPI - 按订单打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50285919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com