天天看點

《并行計算的程式設計模型》一1.4 資料類型

MPI的特性之一是所有的通信函數都帶一個資料類型參數。資料類型用于描述發送和接收資料的類型,取代老式系統中僅用位元組進行描述。例如,如果傳輸一組整數資料,MPI函數的資料類型在C語言中應該設定為MPI_INT或者在Fortran語言中設定為MPI_INTEGER。使用資料類型參數的目的是在異構環境中,例如在具有不同位元組存儲順序或者不同基本資料類型長度的異構計算機系統上,保證通信順利進行。當資料類型被指定後,MPI能夠在内部轉換成相應的位元組數。MPI支援C99和Fortran 2008中的所有資料類型。

使用資料類型參數的另一個目的是使使用者能夠描述記憶體中非連續存放的資料并通過一個單獨的MPI函數調用實作資料傳輸。MPI提供多種資料類型構造函數,可用來描述記憶體中非連續存放的資料。通過資料類型構造函數描述記憶體中非連續存放的資料并進行傳輸,若采用高品質的MPI實作方法,性能将優于先對資料進行打包和解包再傳輸的通信方式或者先将非連續資料轉成連續資料再傳輸的通信方式。

MPI的資料類型能夠描述記憶體中的各種資料。MPI中預定義的資料類型類似于程式設計語言中基本的資料類型,例如MPI_FLOAT(等同C語言中float)或者MPI_COMPLEX(等同Fortran語言中COMPLEX)。新的資料類型可由舊的資料類型通過不同的布局進行構造,如下例所示。

新的資料類型有count個資料塊,每個資料塊中有blocklength個連續的oldtype類型的資料,每個資料塊的長度為stride。通過新的資料類型,能夠友善和高效地描述間隔規則的非連續資料(一種高效的MPI實作方法可參考文獻[139])。

MPI還提供其他更通用的資料構造函數。MPI_Type_indexed比MPI_Type_vector的使用範圍更廣,可用來定義每個資料塊中有不同數量的oldtype類型和偏移量的資料。MPI_Type_create_struct的使用範圍最廣,還可定義每個資料塊中不同資料類型的資料。MPI提供定義資料子數組和分布式數組的函數,這些函數在并行檔案I/O中應用廣泛。MPI提供的資料構造函數能夠遞歸調用并可描述任何資料類型。

圖1-3是采用C語言實作發送二維數組中一列資料的程式示例。因為C語言預設按行優先存儲數組,是以發送的該列資料并非連續資料。通過使用向量資料類型定義記憶體結構,使用一個MPI發送函數便可發送整列資料。在使用派生資料類型前,必須使用MPI_Type_commit函數進行聲明。MPI_Type_commit函數會對新構造的資料類型進行分析并在使用新資料類型進行消息通信前對非連續的資料進行通信優化。

《并行計算的程式設計模型》一1.4 資料類型

繼續閱讀