MPI 数据结合体

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

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

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

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

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

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

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


正在上传…
取消


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

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

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

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

@new_type                             新数据类型

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


正在上传…
取消


他返回的是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/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值