将数据(以字节给出)发送到openMPI中的进程的最佳方法?

时间:2013-06-28 20:55:14

标签: c++ c ipc mpi openmpi

我这样做, 假设我需要向root进程发送临时数量的字节:

var char*;
var=new char[temp];
MPI_Isend(&temp,1,MPI_INT,0,tag,MPI_COMM_WORLD,&request[0]);
MPI_Isend(var,temp,MPI_BYTE,0,tag,MPI_COMM_WORLD,&request[1]);

并且在根进程上,我正在编写此代码,

MPI_Recv(&temp,1,MPI_INT,i,tag,MPI_COMM_WORLD,&status[0]);
var=new char[temp];
MPI_Recv(var,temp,MPI_BYTE,0,tag,MPI_COMM_WORLD,&status[1]);

我能够在根进程接收temp(要传输的数据字节数)并查看下一部分的截断消息错误吗?

2 个答案:

答案 0 :(得分:3)

您无需将元素数量作为单独的消息发送。 MPI提供了一种机制,允许程序查看消息队列并在接收消息之前获取消息大小。

发信人:

char *var = new char[temp];
MPI_Send(var, temp, MPI_BYTE, 0, tag, MPI_COMM_WORLD);

接收器:

MPI_Status status;
int temp;
// Probe for matching message without receiving it
MPI_Probe(i, tag, MPI_COMM_WORLD, &status);
// Get the number of data elements in the message
MPI_Get_count(&status, MPI_BYTE, &temp);
char *var = new char[temp];
MPI_Recv(var, temp, MPI_BYTE, i, tag, MPI_COMM_WORLD, &status);

这是传播不同大小的数组的更佳方式。

答案 1 :(得分:1)

您从错误的位置收到:

MPI_Recv(var,temp,MPI_BYTE,0,tag,MPI_COMM_WORLD,&status[1]);
                           ^

您应该接受(大概)i进程。

相关问题