【问题标题】:How to make baton passing synchronization using MPI?如何使用 MPI 进行接力棒传递同步?
【发布时间】: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() 不是评估(缺乏)同步的正确方法。
  • 请注意,即使您的接力棒传递正确,打印语句也可能出现乱序。它们在很大程度上取决于操作系统,而不仅仅是您的程序。

标签: c mpi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 2021-08-16
    • 2011-06-29
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2022-10-10
    • 1970-01-01
    相关资源
    最近更新 更多