gpt4 book ai didi

c - MPI_Barrier 无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:58 37 4
gpt4 key购买 nike

在 mpi.h 中,我尝试使用 MPI_Barrier,但它运行不正常。这是一个例子:

int main(int argc, char **argv)
{
MPI_Init(&argc,&argv);
int i,j,rank,np;
MPI_Comm_size(MPI_COMM_WORLD,&np);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
for(i=0;i<np;i++)
{
if(rank==i)
{
printf("\n(%d)\n",rank);
for(j=0;j<5;j++)
{
printf("%d\t",j);
if((j%10)==0)
printf("\n");
}
}
MPI_Barrier(MPI_COMM_WORLD);
}
MPI_Finalize();
return 0;
}

输出是:

(0)
0

(1)
0

(2)
0

(3)
0
1 2 3 4 1 2 3 4 1 2 3 4
1 2 3 4

(使用 4 个处理器执行)因此所有处理器同时开始打印值,即使存在障碍。为什么?

最佳答案

printfstdout 被缓冲,默认情况下在每个 \n 刷新缓冲区。因此,每个处理器依次打印其等级并使用 \n 刷新缓冲区,然后打印 0 并刷新缓冲区。然后每个处理器使用 printf 将“1 2 3 4”加载到输出缓冲区,但不刷新。刷新发生在程序的末尾,所以所有的最后几行都会同时出现。

要按顺序查看您的 IO,请在屏障之前添加 fflush(stdout)。要完全控制 I/O 排序,请将一个处理器专用于执行 I/O,因为 MPI 不提供任何 I/O 排序保证。

关于c - MPI_Barrier 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921848/

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