在上一篇中我们介绍了 mpi4py 中的栅障同步操作方法,至此我们介绍了 mpi4py 中的各种集合通信,下面我们将进入到对数据类型的介绍。
在前面的介绍和例程中,我们使用的都是 mpi4py 中预定义的数据类型,如 MPI.CHAR,MPI.INT,MPI.FLOAT,MPI.DOUBLE 等,这些预定义数据类型给我们编写基于 MPI 的并行计算程序提供了很大的方便,但是却不能满足一些特殊的消息传递任务。对此类情况,MPI 允许用户自定义数据类型进行通信。自定义的数据类型用类型图描述。
类型图
类型图用来描述用户自定义数据类型,其定义为:
typemap={ <basetype0, displs0>, <basetype1, displs1>, … , <basetypen-1, displsn-1> }
假定某类型的类型图定义为:
typemap={ <type0, disp0>, <type1, disp1>, … , <typen-1, dispn-1> }
则有如下定义:
- 类型图的下界:
lb(typemap) = min{dispi}, 0 ≤ i ≤ n - 1 - 类型图的上界:
ub(typemap) = max{dispi + sizeof(typei)}, 0 ≤ i ≤ n - 1 - 类型图的跨度(Extent):
extent(typemap) = ub(typemap) - lb(typemap) + ε, 0 ≤ i ≤ n - 1
其中 ε 是使得类型图跨度满足该类型图中所有类型都能达到下一个对齐位置所需要的最小非负整数值。
知道了数据类型图后,就可以创建自定义数据类型了,为此我们需要了解一些与数据类型相关的方法,在下一篇中我们将介绍 mpi4py 中的数据类型创建方法。
网友评论