MPI发送和接收结构的结构

时间:2011-02-26 13:00:57

标签: c++ c mpi

如何通过MPI发送和接收此类结构?

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

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

vector<flight> flights;

示例代码将非常有用

1 个答案:

答案 0 :(得分:6)

你需要调用user-defined datatypes的魔力。首先,为controlPoint定义MPI_Contiguous数据类型:让我们称之为cp_type。接下来,您需要MPI_Struct代表flight,我们称之为flight_type。这有点棘手,因为你不能通过MPI传递vector(没有来自例如Bost的外界帮助)。幸运的是,您并不需要:vector保证连续存储,就像数组一样。所以你的MPI_Struct将包含2个块:第一个块有两个整数,偏移量为0(flightNumcontrolNum),第二个块有point.size()个{{1} } s,偏移量为cp_type。这样,您只发送point[0]中的数据,而不发送任何实现细节。在此之后,您可以将结构作为vector的单个元素发送。

接收几乎是微不足道的:只需定义与上面相同的MPI数据类型,并将您的数据作为此类型的单个副本接收。但请注意,您收到的flight_type结构需要在其flight向量中有足够的空间来接收所有内容。在定义MPI数据类型之前,您可以point:这样,将分配足够的空间,并且在接收期间将覆盖这些值。