我如何通过 MPI 发送和接收这种类型的结构?
struct controlPoint{
int hour,minute,second,x,y,z;
};
struct flight{
int flightNum, controlNum;
vector<controlPoint> point;
};
vector<flight> flights;
示例代码将会非常有帮助
您需要调用“用户定义数据类型”的魔力。首先,为 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()
它:这样,将分配足够的空间,并且在接收过程中这些值将被覆盖。