我有这个结构
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);
我有分段错误。
答案 0 :(得分:-1)
首先,请注意该方法适用于具有相同体系结构的同类群集。
对于一般情况和高稳定性,请选择安全传输协议,例如JSON或协议缓冲区。
第三,boost :: serialization into stringstreams非常方便。类似的限制,但不需要库。
无论如何,现在回答:当你想要发送结构时,使用数据类型MPI_CHAR并计算N * sizeof(Struct)
对于接收,要么您已经知道N,要么使用MPI_Probe并从消息中提取计数。这将是一些字节。将这个大小的缓冲区MPI_RECV分配到其中,然后通过强制转换将其重新解释为Buffer数组。
理由是通过MPI_CHAR,因为结构可能有填充。