当前位置: 首页 > 并行计算基础 > 正文

MPI 数据结合体

即使是使用MPI接口实现并行编程,我们必须明确MPI最大的性能消耗在哪里,几乎所有的分布式内存系统,通信比本地计算的成本都会高出许多。

因此,如果减少发送的消息数量,就能肯定相对的提高程序的性能。MPI提供了三个基本的手段来整合可能需要多条消息的数据,不同通信函数中的COUNT参数派生数据类型,以及MPI_PACK、UPACK函数。

在MPI中,通过同时存储数据项的类型以及他们在内存的相对位置,派生数据类型可以用来表示内存中数据项的任意组合。其主要的思想是:如果发送数据的函数知道数据项的类型以及在内存中数据项集合的相对位置,就可以在数据项被发送出去之前在内存中将数据项聚集起来。

正式地,一个派生数据类型是由一系列的MPI基本数据类型和每个数据类型的偏移组成的。

类似:{(MPI_DOUBLE,0),(MPI_DOUBLE,0),(MPI_INT,0)}

每一对数据项的第一个元素表明数据类型,第二个元素是该数据项相对于起始位置的偏移。

我们可以使用MPI_TYPE_create_struct 函数创建由不同的基本数据类型的元素所组成的派生数据类型。

NBTOR9(C7ZO(XVQ1BZFEDPM

@count  指的是数据类型中元素的个数。

@ array_of_blocklengths 允许单独的数据项可能是数组或者子数组。

@array_of_displacements 指定了距离消息起始位置的偏移量。

@array_of_types                  依次指定了数据的类型

@new_type                             新数据类型

为了能获取这些数值,我们有专门的函数MPI_Get_address函数。

asb

他返回的是location 所指的内存单元的地址。

 

性能统计:

Time is an important factor which over a progaming runing.  程序的运行的时间是一个非常重要的指标在程序运行的过程中。MPI也有自己的计算时间相关的函数。

MPI_Wtime();   /*获取上某一个时刻导到现在的时间* /

start  = MPI_Wtime();

end   = MPI_Wtime();

time_length = end – start;

这里我们其实需要关心一个问题,程序最理想的情况下,所有进程都需要等到最后一个进程完成计算时才得到最终的结果,换句话说,并行时间取决于“最慢”进程花费的时间。

加速比:

加速比经常用来衡量串行运算与并行运算时间之间的关系,表示串行时间和并行时间的比值:

s(n,p)  = T(串行)/ T (并行)

效率:

效率也是评价并行性能的重要指标之一,其实是每一个进程的加速比。

E(n,p)  = S(n,p)/p

 

本文固定链接: http://zmrlinux.com/2017/01/26/mpi-%e6%95%b0%e6%8d%ae%e7%bb%93%e5%90%88%e4%bd%93/ | Kernel & Me

该日志由 root 于2017年01月26日发表在 并行计算基础 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: MPI 数据结合体 | Kernel & Me