[英]MPI send and receive struct of structs
我如何通過MPI發送和接收這種類型的結構?
struct controlPoint{
int hour,minute,second,x,y,z;
};
struct flight{
int flightNum, controlNum;
vector<controlPoint> point;
};
vector<flight> flights;
示例代碼將非常有幫助
您需要調用用戶定義的數據類型的魔力。 首先,定義一個MPI_Contiguous數據類型controlPoint
:讓我們把它cp_type
。 接下來,您將需要一個MPI_Struct來表示flight
,我們將其稱為flight_type
。 這有點棘手,因為您不能通過MPI傳遞vector
(沒有Bost的外部幫助)。 幸運的是,您實際上並不需要: vector
保證連續存儲,就像數組一樣。 因此,您的MPI_Struct將由2個塊組成:第一個塊具有偏移為0的兩個整數( flightNum
和controlNum
),第二個塊具有cp_type
s的point.size()
個數,偏移為point[0]
。 這樣,您只發送來自vector
的數據,而沒有發送其實現詳細信息。 此后,您可以將struct作為flight_type
的單個元素flight_type
。
接收幾乎是微不足道的:只需定義與上述相同的MPI數據類型,然后以這種類型的單個副本接收數據即可。 但是請注意,您接收到的flight
結構將需要在其point
向量中具有足夠的空間以接收所有內容。 您可以在定義MPI數據類型之前重新resize()
它的resize()
:這樣,將分配足夠的空間,並且在接收期間將覆蓋這些值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.