我有这个结构
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,因为结构可能有填充。