简单的 hello world 非阻塞 MPI

问题描述

我正在使用 this website 练习一个简单的非阻塞“Hello world”程序。

#include <iostream>
#include <mpi.h>
#include <unistd.h>

int main(int argc,char* argv[])
{
    MPI_Init(&argc,&argv);
    MPI_Request request;
    MPI_Status  status;

    int size,rank,data;

    MPI_Comm_rank(MPI_COMM_WORLD,&rank);

    MPI_Comm_size(MPI_COMM_WORLD,&size);

    if (rank>0) {
    MPI_Irecv(&data,1,MPI_INT,rank - 1,MPI_COMM_WORLD,&request);

      std::cout << "Rank " << rank << " has received message with data " << data<< " from rank " << rank - 1
              << std::endl;
    }

    std::cout << "Hello from rank " <<rank << " out of " << size<< std::endl;

    data=rank;

    MPI_Isend(&data,(rank + 1) % size,&request);

    MPI_Finalize();
    return 0;
}

我有几个问题:第一个是 (rank + 1) % size 对我来说没有意义。我希望这只是 rank+1 而不是 (rank + 1) % size。但是,当我删除 %size 时,代码不会运行。我的第二个歧义是这个特定代码的结果:

#PTP job_id=12493
Rank 3 has received message with data 21848 from rank 2
Hello from rank 3 out of 4
Hello from rank 0 out of 4
Rank 2 has received message with data 22065 from rank 1
Hello from rank 2 out of 4
Rank 1 has received message with data 22043 from rank 0
Hello from rank 1 out of 4

我已将数据定义为等于排名,但它似乎抛出了一些随机的东西。这是为什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)