【发布时间】:2017-10-01 12:08:01
【问题描述】:
一对MPI_IRecv/MPI_ISend应该得到相同的count吗?
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
int tag, MPI_Comm comm, MPI_Request *request)
...
count
number of elements in receive buffer (integer)
documentation 似乎暗示它不应该,但我对措辞感到困惑,它的表述与MPI_Recv 有点不同。我附上了一个例子,如果我通过不同的count,它会按预期工作。
isend.c
#include <stdio.h>
#include <mpi.h>
#define send_cnt 1
#define recv_cnt 10
#define SEND 0 /* who sends and who receives? */
#define RECV 1
#define TAG 0
#define COMM MPI_COMM_WORLD
MPI_Status status;
MPI_Request request;
void send() {
int dest = RECV;
int buf[] = {42};
MPI_Isend(buf, send_cnt, MPI_INT, dest, TAG, COMM, &request);
MPI_Wait(&request, &status);
}
void recv() {
int dest = SEND;
int buf[123];
MPI_Irecv(buf, recv_cnt, MPI_INT, dest, TAG, COMM, &request);
MPI_Wait(&request, &status);
printf("recv: %d\n", buf[0]);
}
int main(int argc, char *argv[]) {
int rank;
MPI_Init(&argc, &argv);
MPI_Comm_rank(COMM, &rank);
if (rank == SEND) send();
else recv();
MPI_Finalize();
return 0;
}
【问题讨论】: