文件名称:与数据类型有关的一些定义-grid layout in css
文件大小:1018KB
文件格式:PDF
更新时间:2024-07-05 18:55:29
MPI
第四章 数据类型 MPI 的消息收发函数只能处理连续存储的同一类型的数据. 当需要在一个消息中发送或接收具 有复杂结构的数据时, 可以通过定义数据类型 (datatype) 来实现. 数据类型是 MPI 的一个重要特征, 它的使用可有效地减少消息传递的次数, 增大通信粒度, 并且在收/发消息时避免或减少数据在内存 中的拷贝、复制. §4.1 与数据类型有关的一些定义 §4.1.1 数据类型定义 一个 MPI 数据类型由两个 n 元序列构成, n 为正整数. 第一个序列包含一组数据类型, 称为类型 序列 (type signature): Typesig = {type0, type1, . . . , typen−1}. 第二个序列包含一组整数位移, 称为位移序列 (type displacements): Typedisp = {disp0, disp1, . . . , dispn−1}. 注意, 位移序列中位移总是以字节为单位计算的. 构成类型序列的数据类型称为基本数据类型, 它们可以是原始数据类型, 也可以是任何已定义的 数据类型, 因此 MPI 的数据类型是嵌套定义的. 为了以后叙述方便, 我们称非原始数据类型为复合数 据类型. 类型序列刻划了数据的类型特征. 位移序列则刻划了数据的位置特征. 类型序列和位移序列的元 素一一配对构成的序列 Typemap = {(type0, disp0), (type1, disp1), . . . , (typen−1, dispn−1)}. 称为类型图 (type map). 假设数据缓冲区的起始地址为 buff, 则由上述类型图所定义的数据类型包 含 n 块数据, 第 i 块数据的地址为 buff + dispi, 类型为 typei, i = 0, 1, . . . , n − 1. MPI的原始数据类型的类型图可以写成 {(类型, 0)}. 如 MPI_INTEGER的类型图为 {(INTEGER, 0)}. 位移序列中的位移不必是单调上升的, 表明数据类型中的数据块不要求按顺序排放. 位移也可以 是负的, 即数据类型中的数据可以位于缓冲区起始地址之前. 例 4.1 假设数据类型 TYPE 类型图为 {(REAL, 4), (REAL, 12), (REAL, 0)} 则语句: REAL A(100) ... ... CALL MPI_SEND(A, 1, TYPE, ...) 将发送 A(2), A(4), A(1). 28