如何通过MPI发送和接收此类结构?
struct controlPoint{
int hour,minute,second,x,y,z;
};
struct flight{
int flightNum, controlNum;
vector<controlPoint> point;
};
vector<flight> flights;
示例代码将非常有用
答案 0 :(得分:6)
你需要调用user-defined datatypes的魔力。首先,为controlPoint
定义MPI_Contiguous数据类型:让我们称之为cp_type
。接下来,您需要MPI_Struct代表flight
,我们称之为flight_type
。这有点棘手,因为你不能通过MPI传递vector
(没有来自例如Bost的外界帮助)。幸运的是,您并不需要:vector
保证连续存储,就像数组一样。所以你的MPI_Struct将包含2个块:第一个块有两个整数,偏移量为0(flightNum
和controlNum
),第二个块有point.size()
个{{1} } s,偏移量为cp_type
。这样,您只发送point[0]
中的数据,而不发送任何实现细节。在此之后,您可以将结构作为vector
的单个元素发送。
接收几乎是微不足道的:只需定义与上面相同的MPI数据类型,并将您的数据作为此类型的单个副本接收。但请注意,您收到的flight_type
结构需要在其flight
向量中有足够的空间来接收所有内容。在定义MPI数据类型之前,您可以point
:这样,将分配足够的空间,并且在接收期间将覆盖这些值。