首页 > 解决方案 > 如何使用 MPI 进行接力棒传递同步?

问题描述

做一个接力棒传递同步 - 接力棒是一个布尔值或整数值,初始化为 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;
}

知道如何开始为接力棒传递同步进行编码时,我遇到了很多麻烦。现在,当我从上面执行代码时,它并没有按顺序执行,这就是我试图通过接力棒传递同步来实现的目标。

标签: cmpi

解决方案


您已经回答了自己的问题:每个进程都会进行接收调用,然后进行发送调用。就是这样。循环消失了,因为每次迭代都是由不同的过程完成的。


推荐阅读