【发布时间】:2021-02-25 16:37:17
【问题描述】:
我的代码运行良好。我的问题是,没有MPI_Wait 是否可以有非阻塞代码?我在想,是否通过这种方式,我的代码会无意中表现为阻塞模式。另外,为了确认这是一个非阻塞代码,我应该测量执行时间吗?如果它更快,我可以得出结论,这是非阻塞的。但是,在这里,由于MPI_Wait 和计算数据之间不涉及任何工作;我认为这行不通。那么,我怎样才能确保这表现为非阻塞模式?
#include <iostream>
#include <mpi.h>
using namespace std;
int main() {
MPI_Init(NULL, NULL);
MPI_Request request;
MPI_Status status;
int rank, size, 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, 0, MPI_COMM_WORLD, &request);
MPI_Wait(&request, &status);
cout << "Rank " << rank << " has received message with data " << data << " from rank " << rank - 1 << endl;
}
cout << "Hello from rank " << rank << " out of " << size << " " << endl;
data = rank;
MPI_Isend(&data, 1, MPI_INT, (rank + 1) % size, 0, MPI_COMM_WORLD, &request);
if (rank == 0) {
MPI_Irecv(&data, 1, MPI_INT, size - 1, 0, MPI_COMM_WORLD, &request);
MPI_Wait(&request, &status);
cout << "Rank " << rank << " has received message with data " << data << " from rank " << size - 1 << endl;
}
MPI_Finalize();
return 0;
}
【问题讨论】:
标签: c++ mpi wait blocking nonblocking