【发布时间】:2021-11-18 17:46:33
【问题描述】:
做一个接力棒传递同步 - 接力棒是一个布尔值或整数值,初始化为 1 ant rank 0 并在每个其他进程中初始化为 0 然后修改循环,以便: 每个进程(0除外)等待接收接力棒,然后打印并将接力棒发送到rank+1(进程size-1除外)。 代码现在看起来像:receive(baton from rank-1) : if (baton) print;发送指挥棒到rank+1;指挥棒=0; 我们还需要循环来执行此操作吗?
#include <stdio.h>
#include "mpi.h"
int main( int argc, char *argv[] )
{
int rank;
int size;
int i=0;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
for(i=0; i<size; i++)
{
if(i==rank)
{
printf( "Hello world from process %d of %d\n", rank, size );
}
}
MPI_Finalize();
return 0;
}
我在知道如何开始为接力棒传递同步编码时遇到了很多麻烦。现在,当我从上面执行代码时,它并没有按顺序执行,这就是我试图通过指挥棒传递同步来实现的目标。
【问题讨论】:
-
您的代码中没有发送/接收,因此显然没有同步。话虽如此,输出通常是交错的,因此
printf()不是评估(缺乏)同步的正确方法。 -
请注意,即使您的接力棒传递正确,打印语句也可能出现乱序。它们在很大程度上取决于操作系统,而不仅仅是您的程序。