MPI 发送和接收结构体

问题描述 投票:0回答:1

我如何通过 MPI 发送和接收这种类型的结构?

struct controlPoint{
    int hour,minute,second,x,y,z;
};

struct flight{
    int flightNum, controlNum;
    vector<controlPoint> point;
};

vector<flight> flights;

示例代码将会非常有帮助

c++ c mpi
1个回答
8
投票

您需要调用“用户定义数据类型”的魔力。首先,为 controlPoint 定义一个 MPI_Contigously 数据类型:我们称之为

cp_type
。接下来,您需要一个
MPI_Struct
来表示 flight,我们将其称为
flight_type
。这有点棘手,因为您无法通过 MPI 传递
vector
(没有来自 Bost 等外部帮助)。幸运的是,您实际上并不需要:
vector
保证连续存储,就像数组一样。因此,您的 MPI_Struct 将由 2 个块组成:第一个块有两个偏移量为 0 的整数(
flightNum
controlNum
),第二个块有
point.size()
cp_type
,偏移量为
 point[0]
。这样,您只发送来自
vector
的数据,而不发送其实现细节。之后,您可以将结构作为
flight_type
的单个元素发送。
接收几乎是微不足道的:只需定义与上面相同的 MPI 数据类型,并以该类型的单个副本接收数据。但请注意,您接收到的 

flight

结构体的

point
向量中需要有足够的空间来接收所有内容。您可以在定义 MPI 数据类型之前
resize()
它:这样,将分配足够的空间,并且在接收过程中这些值将被覆盖。
    

© www.soinside.com 2019 - 2024. All rights reserved.