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



我有这个结构

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); 

我有分段错误。

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

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

第三,boost::序列化为字符串流可以很方便。类似的限制,但不需要库。

无论如何,现在的答案是:根据需要发送结构时,请使用数据类型MPI_CHAR并计数N * sizeof(Struct(

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

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

最新更新