学习资料 《并行算法实践》(陈国良等)4.3.1 消息数据类型
学习笔记
NOTE:文章只是对预定义数据类型 和派生数据类型 进行了概括的描述,具体内容没有展开描述,还需要查看相关书籍。
每个MPI消息都有相应的数据类型,MPI通过引入消息数据类型来解决消息传递过程中的异构性问题以及数据不连续问题。MPI的消息数据类型可以分为两种: 预定义数据类型 和 派生数据类型 (Derived Data Type)
1、预定义数据类型
预定义数据类型数据作用。MPI支持异构计算(Heterogeneous Computing), 它指的是在由不同计算机组成的系统(如工作站网络)上运行应用程序。系统中的每台计算机可能由不同的厂商生产、使用不同的处理器和操作系统。一个重要的问题是,当这些计算机使用不同的数据表示时,如何保证通信双方的互操作性。MPI通过提供预定义的数据类型来解决异构计算中的互操作性问题。
2、派生数据类型
MPI引入派生数据类型的概念,允许定义由数据类型不同且地址空间不连续的数据项组成的消息。
派生数据类型可以用类型图来描述, 这是一种通用的类型描述方法,它是一系列二元组 <基类型,偏移>的集合, 可以表示成如下格式:
{ <基类型0,偏移0> ,<基类型1,偏移1>,...,<基类型n-1,偏移n-1> }
在派生数据类型中,基类型可以是任何MPI预定义数据类型,也可以是其他的派生数据类型,即派生数据类型支持数据类型的嵌套定义。下图给出了类型图的示意结构,其中阴影部分是基类型所占用的空间,其他部分空间可以是定义派生数据类型时特意留下的,也可以是MPI为了数据类型对齐而分配的。
![[MPI-Learning] MPI消息数据类型 - applesun - 计算机技术学习笔记 [MPI-Learning] MPI消息数据类型 - applesun - 计算机技术学习笔记](http://img9.ph.126.net/SD2bNtbr25KuFZKUrrvdng==/6597835026749327389.jpg)
MPI提供了全面而强大的构造函数(Constuctor Function)来定义派生数据类型。部分构造函数名称与简要说明如下。
函数名 含义
MPI_Type_contiguous 定义由相同数据类型的元素组成的类型
MPI_Type_vector 定义由成块的元素组成的类型,块之间具有相同的间隔
MPI_Type_indexed 定义由块的元素组成的类型,块长度和偏移由参数指定
MPI_Type_struct 定义由不同数据类型的元素组成的类型
MPI_Type_commit 提交一个派生的数据类型
MPI_Type_free 释放一个派生数据类型
浙公网安备 33010602011771号