问题描述
我正在使用 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 (将#修改为@)