如何通过MPI将结构作为数组发送?

时间:2018-05-30 16:32:40

标签: c mpi openmpi

我有这个结构

typedef struct {float x,y,z,vx,vy,vz;身体;

float *buf, *bufSlave;
Body *p;
bytes = nBodies*sizeof(Body);
buf = (float*)malloc(bytes);
p = (Body*)buf;

如何使用MPI_SEND发送15个元素以及如何使用MPI_RECEIVE接收?

MPI_Send(&p[(i - 1) * lung], 6, MPI_FLOAT, i, 99, MPI_COMM_WORLD); 

我有分段错误。

1 个答案:

答案 0 :(得分:-1)

首先,请注意该方法适用于具有相同体系结构的同类群集。

对于一般情况和高稳定性,请选择安全传输协议,例如JSON或协议缓冲区。

第三,boost :: serialization into stringstreams非常方便。类似的限制,但不需要库。

无论如何,现在回答:当你想要发送结构时,使用数据类型MPI_CHAR并计算N * sizeof(Struct)

对于接收,要么您已经知道N,要么使用MPI_Probe并从消息中提取计数。这将是一些字节。将这个大小的缓冲区MPI_RECV分配到其中,然后通过强制转换将其重新解释为Buffer数组。

理由是通过MPI_CHAR,因为结构可能有填充。